aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc A. Valle <marc.a.valle@intel.com>2017-07-25 16:05:56 -0700
committerMarc A. Valle <marc.a.valle@intel.com>2017-07-25 16:05:56 -0700
commitc93541e53de8104f6d28629bd5d213a08ac7606b (patch)
tree119aceabcbc87919c52871e2df7f9937fbcf3ccb
parentaad54d5c70b1b624da543d8b9da8c72a5267a2c0 (diff)
downloadepid-sdk-c93541e53de8104f6d28629bd5d213a08ac7606b.tar.gz
Release SDK 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.
-rw-r--r--CHANGELOG.md87
-rw-r--r--Makefile.in125
-rw-r--r--README.md4
-rw-r--r--RELEASE_NOTES.md41
-rw-r--r--SConstruct85
-rw-r--r--configure3799
-rw-r--r--configure.ac20
-rw-r--r--doc/html/1_81_2file__parser_8h.html104
-rw-r--r--doc/html/1_81_2types_8h.html151
-rw-r--r--doc/html/Basenames.html93
-rw-r--r--doc/html/BuildToolsInstallation.html128
-rw-r--r--doc/html/BuildingSdk.html49
-rw-r--r--doc/html/ChangeLog.html44
-rw-r--r--doc/html/ChoosingiKGF.html231
-rw-r--r--doc/html/EpidOverview.html7
-rw-r--r--doc/html/Glossary.html14
-rw-r--r--doc/html/ImplementationNotes.html8
-rw-r--r--doc/html/IssuerMaterial.html251
-rw-r--r--doc/html/LegalInformation.html2
-rw-r--r--doc/html/Revocation.html142
-rw-r--r--doc/html/SdkOverview.html50
-rw-r--r--doc/html/SignVerifyTutorial.html135
-rw-r--r--doc/html/SignmsgWalkthru.html170
-rw-r--r--doc/html/VerifysigWalkthru.html190
-rw-r--r--doc/html/annotated.html102
-rw-r--r--doc/html/basenames_8dox.html (renamed from doc/html/epid2params__ate_8inc.html)14
-rw-r--r--doc/html/bignum_8c.html120
-rw-r--r--doc/html/bignum_8h.html21
-rw-r--r--doc/html/bitsupplier_8h.html2
-rw-r--r--doc/html/build__tools__installation_8dox.html82
-rw-r--r--doc/html/building__sdk_8dox.html2
-rw-r--r--doc/html/check__privrl__entry_8c.html93
-rw-r--r--doc/html/choosing__ikgf_8dox.html (renamed from doc/html/functions_q.html)24
-rw-r--r--doc/html/classes.html60
-rw-r--r--doc/html/commitment_8c.html98
-rw-r--r--doc/html/commitment_8h.html108
-rw-r--r--doc/html/decompress__privkey_8c.html124
-rw-r--r--doc/html/dir_02c945662023679b89476bd7126bc985.html26
-rw-r--r--doc/html/dir_12b90d9c027aaf878a834df729679a56.html2
-rw-r--r--doc/html/dir_512d3e62841a8535b716ec4cf8b9e950.html35
-rw-r--r--doc/html/dir_a32be19bc88f3d7aac6b7249da379f26.html (renamed from doc/html/endian__convert_8h.html)35
-rw-r--r--doc/html/dir_ef364879bae02db2684040178ed9b186.html (renamed from doc/html/functions_k.html)41
-rw-r--r--doc/html/dir_f169ebf8da29290a918fa4b3f7151050.html27
-rw-r--r--doc/html/dir_f6bef457d5f671b6e774bfccc16651f6.html50
-rw-r--r--doc/html/ecdsa_8h.html2
-rw-r--r--doc/html/ecdsa__sign_8c.html105
-rw-r--r--doc/html/ecdsa__verify_8c.html133
-rw-r--r--doc/html/ecgroup_8c.html222
-rw-r--r--doc/html/ecgroup_8h.html8
-rw-r--r--doc/html/epid2params_8c.html98
-rw-r--r--doc/html/epid2params_8h.html105
-rw-r--r--doc/html/epid__overview_8dox.html2
-rw-r--r--doc/html/errors_8c.html101
-rw-r--r--doc/html/errors_8h.html14
-rw-r--r--doc/html/examples.html25
-rw-r--r--doc/html/examples.js6
-rw-r--r--doc/html/examples_8dox.html2
-rw-r--r--doc/html/file__parser_8c.html118
-rw-r--r--doc/html/file__parser_8h.html15
-rw-r--r--doc/html/files.html80
-rw-r--r--doc/html/finitefield_8c.html162
-rw-r--r--doc/html/finitefield_8h.html17
-rw-r--r--doc/html/functions.html422
-rw-r--r--doc/html/functions_b.html107
-rw-r--r--doc/html/functions_c.html85
-rw-r--r--doc/html/functions_d.html90
-rw-r--r--doc/html/functions_e.html112
-rw-r--r--doc/html/functions_f.html100
-rw-r--r--doc/html/functions_g.html122
-rw-r--r--doc/html/functions_h.html98
-rw-r--r--doc/html/functions_n.html102
-rw-r--r--doc/html/functions_p.html105
-rw-r--r--doc/html/functions_r.html121
-rw-r--r--doc/html/functions_s.html113
-rw-r--r--doc/html/functions_t.html99
-rw-r--r--doc/html/functions_v.html88
-rw-r--r--doc/html/functions_vars.html422
-rw-r--r--doc/html/functions_vars_b.html107
-rw-r--r--doc/html/functions_vars_c.html85
-rw-r--r--doc/html/functions_vars_d.html90
-rw-r--r--doc/html/functions_vars_e.html112
-rw-r--r--doc/html/functions_vars_f.html100
-rw-r--r--doc/html/functions_vars_g.html122
-rw-r--r--doc/html/functions_vars_h.html98
-rw-r--r--doc/html/functions_vars_k.html95
-rw-r--r--doc/html/functions_vars_l.html79
-rw-r--r--doc/html/functions_vars_m.html82
-rw-r--r--doc/html/functions_vars_n.html102
-rw-r--r--doc/html/functions_vars_p.html105
-rw-r--r--doc/html/functions_vars_q.html80
-rw-r--r--doc/html/functions_vars_r.html121
-rw-r--r--doc/html/functions_vars_s.html113
-rw-r--r--doc/html/functions_vars_t.html99
-rw-r--r--doc/html/functions_vars_v.html88
-rw-r--r--doc/html/functions_vars_w.html83
-rw-r--r--doc/html/functions_vars_x.html95
-rw-r--r--doc/html/functions_vars_y.html83
-rw-r--r--doc/html/functions_w.html83
-rw-r--r--doc/html/functions_x.html95
-rw-r--r--doc/html/functions_y.html83
-rw-r--r--doc/html/get__sigsize_8c.html93
-rw-r--r--doc/html/globals.html9
-rw-r--r--doc/html/globals_b.html44
-rw-r--r--doc/html/globals_c.html104
-rw-r--r--doc/html/globals_d.html37
-rw-r--r--doc/html/globals_defs.html122
-rw-r--r--doc/html/globals_e.html209
-rw-r--r--doc/html/globals_enum.html5
-rw-r--r--doc/html/globals_eval.html39
-rw-r--r--doc/html/globals_f.html36
-rw-r--r--doc/html/globals_func.html432
-rw-r--r--doc/html/globals_func_b.html92
-rw-r--r--doc/html/globals_func_c.html99
-rw-r--r--doc/html/globals_func_d.html120
-rw-r--r--doc/html/globals_func_e.html287
-rw-r--r--doc/html/globals_func_f.html120
-rw-r--r--doc/html/globals_func_i.html83
-rw-r--r--doc/html/globals_func_m.html80
-rw-r--r--doc/html/globals_func_n.html107
-rw-r--r--doc/html/globals_func_o.html79
-rw-r--r--doc/html/globals_func_p.html128
-rw-r--r--doc/html/globals_func_r.html88
-rw-r--r--doc/html/globals_func_s.html99
-rw-r--r--doc/html/globals_func_w.html88
-rw-r--r--doc/html/globals_g.html2
-rw-r--r--doc/html/globals_h.html2
-rw-r--r--doc/html/globals_i.html13
-rw-r--r--doc/html/globals_k.html45
-rw-r--r--doc/html/globals_m.html13
-rw-r--r--doc/html/globals_n.html29
-rw-r--r--doc/html/globals_p.html34
-rw-r--r--doc/html/globals_r.html18
-rw-r--r--doc/html/globals_s.html34
-rw-r--r--doc/html/globals_t.html2
-rw-r--r--doc/html/globals_type.html23
-rw-r--r--doc/html/globals_v.html (renamed from doc/html/globals_o.html)10
-rw-r--r--doc/html/globals_vars.html8
-rw-r--r--doc/html/globals_w.html12
-rw-r--r--doc/html/glossary_8dox.html2
-rw-r--r--doc/html/group___big_num_primitives.html195
-rw-r--r--doc/html/group___big_num_primitives.js6
-rw-r--r--doc/html/group___ec_group_primitives.html130
-rw-r--r--doc/html/group___ec_group_primitives.js2
-rw-r--r--doc/html/group___ecdsa_primitives.html6
-rw-r--r--doc/html/group___epid11_file_parser_module.html362
-rw-r--r--doc/html/group___epid11_file_parser_module.js7
-rw-r--r--doc/html/group___epid11_pairing_primitives.html245
-rw-r--r--doc/html/group___epid11_pairing_primitives.js7
-rw-r--r--doc/html/group___epid11_types.html150
-rw-r--r--doc/html/group___epid11_types.js97
-rw-r--r--doc/html/group___epid11_verifier_module.html780
-rw-r--r--doc/html/group___epid11_verifier_module.js22
-rw-r--r--doc/html/group___epid_common.html935
-rw-r--r--doc/html/group___epid_common.js69
-rw-r--r--doc/html/group___epid_math.html2
-rw-r--r--doc/html/group___epid_member_module.html92
-rw-r--r--doc/html/group___epid_member_module.js1
-rw-r--r--doc/html/group___epid_module.html2
-rw-r--r--doc/html/group___epid_print.html8
-rw-r--r--doc/html/group___epid_print.js3
-rw-r--r--doc/html/group___epid_types.html23
-rw-r--r--doc/html/group___epid_types.js2
-rw-r--r--doc/html/group___epid_verifier_module.html393
-rw-r--r--doc/html/group___epid_verifier_module.js13
-rw-r--r--doc/html/group___error_codes.html31
-rw-r--r--doc/html/group___error_codes.js12
-rw-r--r--doc/html/group___file_parser.html97
-rw-r--r--doc/html/group___file_parser.js10
-rw-r--r--doc/html/group___finite_field_primitives.html302
-rw-r--r--doc/html/group___finite_field_primitives.js5
-rw-r--r--doc/html/group___hash_primitives.html2
-rw-r--r--doc/html/group___pairing_primitives.html23
-rw-r--r--doc/html/group___pairing_primitives.js1
-rw-r--r--doc/html/grouppubkey_8c.html96
-rw-r--r--doc/html/grouppubkey_8h.html104
-rw-r--r--doc/html/hash_8h.html2
-rw-r--r--doc/html/implementation__notes_8dox.html2
-rw-r--r--doc/html/index.html2
-rw-r--r--doc/html/issuer__material_8dox.html2
-rw-r--r--doc/html/legal__information_8dox.html2
-rw-r--r--doc/html/mainpage_8dox.html2
-rw-r--r--doc/html/member_2api_8h.html36
-rw-r--r--doc/html/member_2context_8c.html129
-rw-r--r--doc/html/member_2context_8h.html159
-rw-r--r--doc/html/memory_8c.html118
-rw-r--r--doc/html/memory_8h.html124
-rw-r--r--doc/html/modules.html20
-rw-r--r--doc/html/navtreedata.js64
-rw-r--r--doc/html/navtreeindex0.js432
-rw-r--r--doc/html/navtreeindex1.js446
-rw-r--r--doc/html/navtreeindex2.js61
-rw-r--r--doc/html/nr__prove_8c.html132
-rw-r--r--doc/html/nrverify_8c.html128
-rw-r--r--doc/html/organization_8dox.html2
-rw-r--r--doc/html/pageorder_8dox.html2
-rw-r--r--doc/html/pages.html17
-rw-r--r--doc/html/pairing_8c.html205
-rw-r--r--doc/html/pairing_8h.html4
-rw-r--r--doc/html/presig_8c.html161
-rw-r--r--doc/html/printutils_8c.html178
-rw-r--r--doc/html/printutils_8h.html5
-rw-r--r--doc/html/privkey_8c.html96
-rw-r--r--doc/html/privkey_8h.html104
-rw-r--r--doc/html/request__join_8c.html133
-rw-r--r--doc/html/revocation_8dox.html (renamed from doc/html/functions_m.html)26
-rw-r--r--doc/html/sdk__overview_8dox.html2
-rw-r--r--doc/html/sdk_block_diagram.pngbin9193 -> 12425 bytes
-rw-r--r--doc/html/sha256_8c.html93
-rw-r--r--doc/html/sign_8c.html97
-rw-r--r--doc/html/sign__verify__tutorial_8dox.html2
-rw-r--r--doc/html/signbasic_8c.html122
-rw-r--r--doc/html/signmsg_8c-example.html77
-rw-r--r--doc/html/signmsg__walkthrough_8dox.html (renamed from doc/html/functions_l.html)23
-rw-r--r--doc/html/sigrlvalid_8c.html94
-rw-r--r--doc/html/sigrlvalid_8h.html94
-rw-r--r--doc/html/sigs__linked_8c.html93
-rw-r--r--doc/html/stack_8c.html113
-rw-r--r--doc/html/stack_8h.html105
-rw-r--r--doc/html/stdtypes_8h.html6
-rw-r--r--doc/html/struct_basic_signature.html2
-rw-r--r--doc/html/struct_big_num_str.html2
-rw-r--r--doc/html/struct_commit_values.html137
-rw-r--r--doc/html/struct_compressed_priv_key.html5
-rw-r--r--doc/html/struct_ecdsa_private_key.html2
-rw-r--r--doc/html/struct_ecdsa_public_key.html2
-rw-r--r--doc/html/struct_ecdsa_signature.html2
-rw-r--r--doc/html/struct_epid11_basic_signature.html146
-rw-r--r--doc/html/struct_epid11_g2_elem_str.html (renamed from doc/html/struct_error_text_entry.html)36
-rw-r--r--doc/html/struct_epid11_group_pub_key.html (renamed from doc/html/struct_group_pub_key__.html)53
-rw-r--r--doc/html/struct_epid11_group_rl.html (renamed from doc/html/struct_stack.html)50
-rw-r--r--doc/html/struct_epid11_gt_elem_str.html97
-rw-r--r--doc/html/struct_epid11_nr_proof.html (renamed from doc/html/struct_priv_key__.html)53
-rw-r--r--doc/html/struct_epid11_params.html170
-rw-r--r--doc/html/struct_epid11_priv_rl.html110
-rw-r--r--doc/html/struct_epid11_sig_rl.html110
-rw-r--r--doc/html/struct_epid11_sig_rl_entry.html (renamed from doc/html/struct_allowed_basename.html)40
-rw-r--r--doc/html/struct_epid11_signature.html110
-rw-r--r--doc/html/struct_epid11_verifier_precomp.html113
-rw-r--r--doc/html/struct_epid2_params.html2
-rw-r--r--doc/html/struct_epid2_params__.html153
-rw-r--r--doc/html/struct_epid_ca_certificate.html5
-rw-r--r--doc/html/struct_epid_file_header.html2
-rw-r--r--doc/html/struct_epid_group_pub_key_certificate.html115
-rw-r--r--doc/html/struct_epid_signature.html5
-rw-r--r--doc/html/struct_fp_elem_str.html2
-rw-r--r--doc/html/struct_fq12_elem_str.html2
-rw-r--r--doc/html/struct_fq2_elem_str.html2
-rw-r--r--doc/html/struct_fq3_elem_str.html (renamed from doc/html/struct_fq2_elem_dat.html)28
-rw-r--r--doc/html/struct_fq6_elem_str.html2
-rw-r--r--doc/html/struct_fq_elem_str.html2
-rw-r--r--doc/html/struct_g1_elem_str.html2
-rw-r--r--doc/html/struct_g2_elem_str.html2
-rw-r--r--doc/html/struct_group_pub_key.html5
-rw-r--r--doc/html/struct_group_rl.html5
-rw-r--r--doc/html/struct_gt_elem_str.html2
-rw-r--r--doc/html/struct_i_priv_key.html2
-rw-r--r--doc/html/struct_join_p_commit_values.html127
-rw-r--r--doc/html/struct_join_request.html2
-rw-r--r--doc/html/struct_member_ctx.html147
-rw-r--r--doc/html/struct_member_precomp.html5
-rw-r--r--doc/html/struct_membership_credential.html2
-rw-r--r--doc/html/struct_nr_proof.html2
-rw-r--r--doc/html/struct_nr_verify_commit_values.html133
-rw-r--r--doc/html/struct_oct_str128.html2
-rw-r--r--doc/html/struct_oct_str16.html2
-rw-r--r--doc/html/struct_oct_str256.html2
-rw-r--r--doc/html/struct_oct_str32.html2
-rw-r--r--doc/html/struct_oct_str512.html2
-rw-r--r--doc/html/struct_oct_str600.html (renamed from doc/html/struct_fq_elem_dat.html)28
-rw-r--r--doc/html/struct_oct_str64.html2
-rw-r--r--doc/html/struct_oct_str768.html (renamed from doc/html/struct_fq12_elem_dat.html)28
-rw-r--r--doc/html/struct_oct_str8.html2
-rw-r--r--doc/html/struct_oct_str80.html (renamed from doc/html/struct_fq6_elem_dat.html)28
-rw-r--r--doc/html/struct_pre_computed_signature.html2
-rw-r--r--doc/html/struct_priv_key.html5
-rw-r--r--doc/html/struct_priv_rl.html5
-rw-r--r--doc/html/struct_sha256_digest.html2
-rw-r--r--doc/html/struct_sig_rl.html5
-rw-r--r--doc/html/struct_sig_rl_entry.html2
-rw-r--r--doc/html/struct_verifier_ctx.html143
-rw-r--r--doc/html/struct_verifier_precomp.html15
-rw-r--r--doc/html/struct_verifier_rl.html5
-rw-r--r--doc/html/tatepairing_8h.html109
-rw-r--r--doc/html/types_8h.html9
-rw-r--r--doc/html/verifier_21_81_2api_8h.html144
-rw-r--r--doc/html/verifier_2api_8h.html56
-rw-r--r--doc/html/verifier_2context_8c.html120
-rw-r--r--doc/html/verifier_2context_8h.html96
-rw-r--r--doc/html/verify_8c.html122
-rw-r--r--doc/html/verifybasic_8c.html125
-rw-r--r--doc/html/verifysig_8c-example.html77
-rw-r--r--doc/html/verifysig__walkthrough_8dox.html82
-rw-r--r--epid/common-testhelper/1.1/epid_params-testhelper.cc216
-rw-r--r--epid/common-testhelper/1.1/epid_params-testhelper.h78
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/epid_grpcrt.inc52
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0.inc79
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0_single_entry.inc97
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0_three_entry.inc127
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg1.inc79
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn1_msg0.inc79
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_rndbase_msg0.inc79
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_rndbase_msg1.inc79
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/member1/sig_sha256_bsn0_msg0.inc79
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey000.inc79
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey001.inc79
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey002.inc79
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/privrl.inc43
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/privrl_single_entry.inc35
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/sig_sha256_bsnrnd_msg0.inc78
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_first_entry.inc68
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_last_entry.inc68
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_middle_entry.inc68
-rw-r--r--epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_single_entry.inc44
-rw-r--r--epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_first_entry.inc38
-rw-r--r--epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_last_entry.inc38
-rw-r--r--epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_middle_entry.inc38
-rw-r--r--epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_single_entry.inc32
-rw-r--r--epid/common-testhelper/1.1/verifier_wrapper-testhelper.cc54
-rw-r--r--epid/common-testhelper/1.1/verifier_wrapper-testhelper.h56
-rw-r--r--epid/common-testhelper/Makefile63
-rw-r--r--epid/common-testhelper/common-testhelper.parts45
-rw-r--r--epid/common-testhelper/ecpoint_wrapper-testhelper.cc5
-rw-r--r--epid/common-testhelper/ecpoint_wrapper-testhelper.h3
-rw-r--r--epid/common-testhelper/epid_params-testhelper.cc6
-rw-r--r--epid/common-testhelper/epid_params-testhelper.h2
-rw-r--r--epid/common-testhelper/errors-testhelper.h2
-rw-r--r--epid/common-testhelper/ffelement_wrapper-testhelper.cc5
-rw-r--r--epid/common-testhelper/ffelement_wrapper-testhelper.h3
-rw-r--r--epid/common-testhelper/finite_field_wrapper-testhelper.cc19
-rw-r--r--epid/common-testhelper/finite_field_wrapper-testhelper.h3
-rw-r--r--epid/common-testhelper/octstr-testhelper.cc2
-rw-r--r--epid/common-testhelper/prng-testhelper.h23
-rw-r--r--epid/common-testhelper/testdata/grp01/gpubkey.inc (renamed from epid/common/testdata/grp01/gpubkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp01/member0/sig_test0_sha256_sigrl.inc (renamed from epid/common/testdata/grp01/member0/sig_test0_sha256_sigrl.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp01/member0/sig_test0_sha384_sigrl.inc (renamed from epid/common/testdata/grp01/member0/sig_test0_sha384_sigrl.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp01/member0/sig_test0_sha512_sigrl.inc (renamed from epid/common/testdata/grp01/member0/sig_test0_sha512_sigrl.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp01/member0/sig_test1.inc (renamed from epid/common/testdata/grp01/member0/sig_test1.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp01/member0/sig_test1_basename1_sha256.inc (renamed from epid/common/testdata/grp01/member0/sig_test1_basename1_sha256.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp01/member0/sig_test1_sha256.inc (renamed from epid/common/testdata/grp01/member0/sig_test1_sha256.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp01/member0/sig_test1_sha384.inc (renamed from epid/common/testdata/grp01/member0/sig_test1_sha384.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp01/member0/sig_test1_sha512.inc (renamed from epid/common/testdata/grp01/member0/sig_test1_sha512.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp01/privrl.inc (renamed from epid/common/testdata/grp01/privrl.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp01/sigrl.inc (renamed from epid/common/testdata/grp01/sigrl.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp01/verrl.inc (renamed from epid/common/testdata/grp01/verrl.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/cmember9/cmpprivkey.inc (renamed from epid/common/testdata/grp_x/cmember9/cmpprivkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/cmember9/mprivkey.inc (renamed from epid/common/testdata/grp_x/cmember9/mprivkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/iprivkey.inc (renamed from epid/common/testdata/grp_x/iprivkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/member0/mprivkey.inc (renamed from epid/common/testdata/grp_x/member0/mprivkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn0_msg0.inc (renamed from epid/common/testdata/grp_x/member0/sig_sha256_bsn0_msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn0_msg0_rl_singleentry.inc (renamed from epid/common/testdata/grp_x/member0/sig_sha256_bsn0_msg0_rl_singleentry.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn0_msg1.inc (renamed from epid/common/testdata/grp_x/member0/sig_sha256_bsn0_msg1.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn1_msg0.inc (renamed from epid/common/testdata/grp_x/member0/sig_sha256_bsn1_msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/member0/sig_sha256_rndbase_msg0.inc (renamed from epid/common/testdata/grp_x/member0/sig_sha256_rndbase_msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/member0/sig_sha256_rndbase_msg1.inc (renamed from epid/common/testdata/grp_x/member0/sig_sha256_rndbase_msg1.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/member0/sig_sha384_bsn0_msg0.inc (renamed from epid/common/testdata/grp_x/member0/sig_sha384_bsn0_msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/member0/sig_sha384_rndbase_msg0.inc (renamed from epid/common/testdata/grp_x/member0/sig_sha384_rndbase_msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/member0/sig_sha512_bsn0_msg0.inc (renamed from epid/common/testdata/grp_x/member0/sig_sha512_bsn0_msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/member0/sig_sha512_rndbase_msg0.inc (renamed from epid/common/testdata/grp_x/member0/sig_sha512_rndbase_msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/member1/mprivkey.inc (renamed from epid/common/testdata/grp_x/member1/mprivkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/member1/sig_sha256_bsn0_msg0.inc (renamed from epid/common/testdata/grp_x/member1/sig_sha256_bsn0_msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/privrevoked/mprivatekey000.inc (renamed from epid/common/testdata/grp_x/privrevoked/mprivatekey000.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/privrevoked/mprivatekey001.inc (renamed from epid/common/testdata/grp_x/privrevoked/mprivatekey001.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/privrevoked/mprivatekey002.inc (renamed from epid/common/testdata/grp_x/privrevoked/mprivatekey002.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey000.inc (renamed from epid/common/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey000.inc)2
-rw-r--r--epid/common-testhelper/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey001.inc (renamed from epid/common/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey001.inc)2
-rw-r--r--epid/common-testhelper/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey002.inc (renamed from epid/common/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey002.inc)2
-rw-r--r--epid/common-testhelper/testdata/grp_x/privrl.inc (renamed from epid/common/testdata/grp_x/privrl.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/privrl_single_entry_revoked_key000.inc (renamed from epid/common/testdata/grp_x/privrl_single_entry_revoked_key000.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/pubkey.inc (renamed from epid/common/testdata/grp_x/pubkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/sigrevoked/mprivatekey000.inc (renamed from epid/common/testdata/grp_x/sigrevoked/mprivatekey000.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/sigrevoked/mprivatekey001.inc (renamed from epid/common/testdata/grp_x/sigrevoked/mprivatekey001.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/sigrevoked/mprivatekey002.inc (renamed from epid/common/testdata/grp_x/sigrevoked/mprivatekey002.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/sigrl.inc (renamed from epid/common/testdata/grp_x/sigrl.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_first_entry.inc (renamed from epid/common/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_first_entry.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_last_entry.inc (renamed from epid/common/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_last_entry.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_middle_entry.inc (renamed from epid/common/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_middle_entry.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/sigrl_single_entry.inc (renamed from epid/common/testdata/grp_x/sigrl_single_entry.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/sigrl_ver_2.inc (renamed from epid/common/testdata/grp_x/sigrl_ver_2.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/mprivkey000.inc (renamed from epid/common/testdata/grp_x/verrevoked/bsn0/mprivkey000.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/mprivkey001.inc (renamed from epid/common/testdata/grp_x/verrevoked/bsn0/mprivkey001.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/mprivkey002.inc (renamed from epid/common/testdata/grp_x/verrevoked/bsn0/mprivkey002.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha256bsn0msg0.inc (renamed from epid/common/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha256bsn0msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha384bsn0msg0.inc60
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha512bsn0msg0.inc60
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha256bsn0msg0.inc (renamed from epid/common/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha256bsn0msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha384bsn0msg0.inc60
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha512bsn0msg0.inc60
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha256bsn0msg0.inc (renamed from epid/common/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha256bsn0msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha384bsn0msg0.inc60
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha512bsn0msg0.inc60
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl.inc (renamed from epid/common/testdata/grp_x/verrevoked/bsn0/verrl.inc)1
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl_1entry.inc (renamed from epid/common/testdata/grp_x/verrevoked/bsn0/verrl_1entry.inc)1
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl_sha384.inc69
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl_sha512.inc69
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/mprivkey003.inc (renamed from epid/common/testdata/grp_x/verrevoked/bsn1/mprivkey003.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/mprivkey004.inc (renamed from epid/common/testdata/grp_x/verrevoked/bsn1/mprivkey004.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/mprivkey005.inc (renamed from epid/common/testdata/grp_x/verrevoked/bsn1/mprivkey005.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/sig_revoked3sha256bsn1msg0.inc (renamed from epid/common/testdata/grp_x/verrevoked/bsn1/sig_revoked3sha256bsn1msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/verrl.inc (renamed from epid/common/testdata/grp_x/verrevoked/bsn1/verrl.inc)1
-rw-r--r--epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/verrl_012revoked.inc (renamed from epid/common/testdata/grp_x/verrevoked/bsn1/verrl_012revoked.inc)1
-rw-r--r--epid/common-testhelper/testdata/grp_y/cmember9/cmpprivkey.dat (renamed from epid/common/testdata/grp_y/cmember9/cmpprivkey.dat)bin80 -> 80 bytes
-rw-r--r--epid/common-testhelper/testdata/grp_y/cmember9/cmpprivkey.inc (renamed from epid/common/testdata/grp_y/cmember9/cmpprivkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_y/iprivkey.inc (renamed from epid/common/testdata/grp_y/iprivkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/grp_y/pubkey.inc (renamed from epid/common/testdata/grp_y/pubkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/grprl.inc (renamed from epid/common/testdata/grprl.inc)0
-rw-r--r--epid/common-testhelper/testdata/grprl_revoked_grp_x_first_entry.inc (renamed from epid/common/testdata/grprl_revoked_grp_x_first_entry.inc)0
-rw-r--r--epid/common-testhelper/testdata/grprl_revoked_grp_x_last_entry.inc (renamed from epid/common/testdata/grprl_revoked_grp_x_last_entry.inc)0
-rw-r--r--epid/common-testhelper/testdata/grprl_revoked_grp_x_middle_entry.inc (renamed from epid/common/testdata/grprl_revoked_grp_x_middle_entry.inc)0
-rw-r--r--epid/common-testhelper/testdata/grprl_single_entry_revoked_grp_x.inc (renamed from epid/common/testdata/grprl_single_entry_revoked_grp_x.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/member0/mprecomp.inc (renamed from epid/common/testdata/ikgf/groupa/member0/mprecomp.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/member0/mprivkey.inc (renamed from epid/common/testdata/ikgf/groupa/member0/mprivkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/privrl.inc (renamed from epid/common/testdata/ikgf/groupa/privrl.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/privrl_empty.inc27
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/pubkey.inc (renamed from epid/common/testdata/ikgf/groupa/pubkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/sig_msg0_sha256_sigrl.inc (renamed from epid/common/testdata/ikgf/groupa/sig_msg0_sha256_sigrl.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0.inc (renamed from epid/common/testdata/ikgf/groupa/sig_sha256_bsn0_msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_empty_sigrl.inc58
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_nosigrl.inc58
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_revkey.inc (renamed from epid/common/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_revkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_rndbase_msg0.inc (renamed from epid/common/testdata/ikgf/groupa/sig_sha256_rndbase_msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/sig_sigrevoked_sha256_bsn0_msg0.inc (renamed from epid/common/testdata/ikgf/groupa/sig_sigrevoked_sha256_bsn0_msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/sig_test1_basename1_sha256.inc (renamed from epid/common/testdata/ikgf/groupa/sig_test1_basename1_sha256.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/sigrevokedmember0/mprivkey.inc (renamed from epid/common/testdata/ikgf/groupa/sigrevokedmember0/mprivkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/sigrl.inc (renamed from epid/common/testdata/ikgf/groupa/sigrl.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupa/sigrl_empty.inc30
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupb/member0/mprivkey.inc (renamed from epid/common/testdata/ikgf/groupb/member0/mprivkey.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/groupb/sig_grouprevoked_sha256_bsn0_msg0.inc (renamed from epid/common/testdata/ikgf/groupb/sig_grouprevoked_sha256_bsn0_msg0.inc)0
-rw-r--r--epid/common-testhelper/testdata/ikgf/grprl.inc (renamed from epid/common/testdata/ikgf/grprl.inc)0
-rw-r--r--epid/common-testhelper/unittests/bignum_wrapper-test.cc2
-rw-r--r--epid/common-testhelper/unittests/ecgroup_wrapper-test.cc1
-rw-r--r--epid/common-testhelper/unittests/ecpoint_wrapper-test.cc1
-rw-r--r--epid/common-testhelper/unittests/ffelement_wrapper-test.cc1
-rw-r--r--epid/common-testhelper/unittests/finite_field_wrapper-test.cc1
-rw-r--r--epid/common-testhelper/verifier_wrapper-testhelper.cc2
-rw-r--r--epid/common/1.1/file_parser.h219
-rw-r--r--epid/common/1.1/src/commitment.c135
-rw-r--r--epid/common/1.1/src/commitment.h137
-rw-r--r--epid/common/1.1/src/epid11params.c469
-rw-r--r--epid/common/1.1/src/epid11params.h75
-rw-r--r--epid/common/1.1/src/epid11params_tate.inc160
-rw-r--r--epid/common/1.1/src/file_parser.c187
-rw-r--r--epid/common/1.1/src/grouppubkey.c82
-rw-r--r--epid/common/1.1/src/grouppubkey.h69
-rw-r--r--epid/common/1.1/types.h207
-rw-r--r--epid/common/1.1/unittests/file_parser-test.cc1426
-rw-r--r--epid/common/Makefile80
-rw-r--r--epid/common/common.parts141
-rw-r--r--epid/common/errors.h10
-rw-r--r--epid/common/file_parser.h33
-rw-r--r--epid/common/math/bignum.h65
-rw-r--r--epid/common/math/ecdsa.h4
-rw-r--r--epid/common/math/ecgroup.h55
-rw-r--r--epid/common/math/finitefield.h127
-rw-r--r--epid/common/math/pairing.h10
-rw-r--r--epid/common/math/printutils.h13
-rw-r--r--epid/common/math/src/bignum-internal.h (renamed from epid/common/math/bignum-internal.h)41
-rw-r--r--epid/common/math/src/bignum.c (renamed from epid/common/math/bignum.c)175
-rw-r--r--epid/common/math/src/ecdsa_sign.c (renamed from epid/common/math/ecdsa_sign.c)4
-rw-r--r--epid/common/math/src/ecdsa_verify.c (renamed from epid/common/math/ecdsa_verify.c)4
-rw-r--r--epid/common/math/src/ecgroup-internal.h (renamed from epid/common/math/ecgroup-internal.h)6
-rw-r--r--epid/common/math/src/ecgroup.c (renamed from epid/common/math/ecgroup.c)371
-rw-r--r--epid/common/math/src/finitefield-internal.h (renamed from epid/common/math/finitefield-internal.h)8
-rw-r--r--epid/common/math/src/finitefield.c (renamed from epid/common/math/finitefield.c)830
-rw-r--r--epid/common/math/src/pairing-internal.h (renamed from epid/common/math/pairing-internal.h)6
-rw-r--r--epid/common/math/src/pairing.c (renamed from epid/common/math/pairing.c)22
-rw-r--r--epid/common/math/src/printutils.c (renamed from epid/common/math/printutils.c)8
-rw-r--r--epid/common/math/src/sha256.c (renamed from epid/common/math/sha256.c)0
-rw-r--r--epid/common/math/src/tatepairing-internal.h41
-rw-r--r--epid/common/math/src/tatepairing.c936
-rw-r--r--epid/common/math/tatepairing.h120
-rw-r--r--epid/common/math/unittests/bignum-test.cc141
-rw-r--r--epid/common/math/unittests/ecdsa_sign-test.cc1
-rw-r--r--epid/common/math/unittests/ecgroup-test.cc442
-rw-r--r--epid/common/math/unittests/ffelement-test.cc3712
-rw-r--r--epid/common/math/unittests/finitefield-test.cc78
-rw-r--r--epid/common/math/unittests/octstrconvert-test.cc5
-rw-r--r--epid/common/math/unittests/pairing-test.cc6
-rw-r--r--epid/common/math/unittests/tatepairing-test.cc231
-rw-r--r--epid/common/src/commitment.c (renamed from epid/common/commitment.c)7
-rw-r--r--epid/common/src/commitment.h (renamed from epid/common/commitment.h)6
-rw-r--r--epid/common/src/endian_convert.h (renamed from epid/common/endian_convert.h)17
-rw-r--r--epid/common/src/epid2params.c (renamed from epid/common/epid2params.c)6
-rw-r--r--epid/common/src/epid2params.h (renamed from epid/common/epid2params.h)6
-rw-r--r--epid/common/src/epid2params_ate.inc (renamed from epid/common/epid2params_ate.inc)0
-rw-r--r--epid/common/src/errors.c (renamed from epid/common/errors.c)11
-rw-r--r--epid/common/src/file_parser-internal.h47
-rw-r--r--epid/common/src/file_parser.c (renamed from epid/common/file_parser.c)86
-rw-r--r--epid/common/src/grouppubkey.c (renamed from epid/common/grouppubkey.c)4
-rw-r--r--epid/common/src/grouppubkey.h (renamed from epid/common/grouppubkey.h)6
-rw-r--r--epid/common/src/memory.c (renamed from epid/common/memory.c)3
-rw-r--r--epid/common/src/memory.h (renamed from epid/common/memory.h)6
-rw-r--r--epid/common/src/sigrlvalid.c (renamed from epid/common/sigrlvalid.c)9
-rw-r--r--epid/common/src/sigrlvalid.h (renamed from epid/common/sigrlvalid.h)6
-rw-r--r--epid/common/src/stack.c (renamed from epid/common/stack.c)6
-rw-r--r--epid/common/src/stack.h (renamed from epid/common/stack.h)6
-rw-r--r--epid/common/stdtypes.h2
-rw-r--r--epid/common/types.h6
-rw-r--r--epid/common/unittests/file_parser-test.cc (renamed from epid/common/math/unittests/file_parser-test.cc)159
-rw-r--r--epid/member/Makefile76
-rw-r--r--epid/member/api.h4
-rw-r--r--epid/member/member.parts55
-rw-r--r--epid/member/src/context.c (renamed from epid/member/context.c)7
-rw-r--r--epid/member/src/context.h (renamed from epid/member/context.h)16
-rw-r--r--epid/member/src/decompress_privkey.c (renamed from epid/member/decompress_privkey.c)43
-rw-r--r--epid/member/src/get_sigsize.c (renamed from epid/member/get_sigsize.c)2
-rw-r--r--epid/member/src/nr_prove.c (renamed from epid/member/nr_prove.c)25
-rw-r--r--epid/member/src/presig.c (renamed from epid/member/presig.c)2
-rw-r--r--epid/member/src/privkey.c (renamed from epid/member/privkey.c)10
-rw-r--r--epid/member/src/privkey.h (renamed from epid/member/privkey.h)6
-rw-r--r--epid/member/src/request_join.c (renamed from epid/member/request_join.c)2
-rw-r--r--epid/member/src/sign.c (renamed from epid/member/sign.c)16
-rw-r--r--epid/member/src/signbasic.c (renamed from epid/member/signbasic.c)4
-rw-r--r--epid/member/unittests/compute_presig-test.cc10
-rw-r--r--epid/member/unittests/context-test.cc98
-rw-r--r--epid/member/unittests/get_sigsize-test.cc2
-rw-r--r--epid/member/unittests/member-testhelper.cc46
-rw-r--r--epid/member/unittests/member-testhelper.h24
-rw-r--r--epid/member/unittests/nr_prove-test.cc107
-rw-r--r--epid/member/unittests/presig-test.cc74
-rw-r--r--epid/member/unittests/request_join-test.cc16
-rw-r--r--epid/member/unittests/sign-test.cc384
-rw-r--r--epid/member/unittests/signbasic-test.cc174
-rw-r--r--epid/verifier/1.1/api.h493
-rw-r--r--epid/verifier/1.1/src/check_privrl_entry.c90
-rw-r--r--epid/verifier/1.1/src/context.c450
-rw-r--r--epid/verifier/1.1/src/context.h47
-rw-r--r--epid/verifier/1.1/src/nrverify.c253
-rw-r--r--epid/verifier/1.1/src/sigs_linked.c29
-rw-r--r--epid/verifier/1.1/src/verify.c240
-rw-r--r--epid/verifier/1.1/src/verifybasic.c412
-rw-r--r--epid/verifier/1.1/unittests/check_privrl_entry-test.cc83
-rw-r--r--epid/verifier/1.1/unittests/context-test.cc477
-rw-r--r--epid/verifier/1.1/unittests/nrverify-test.cc219
-rw-r--r--epid/verifier/1.1/unittests/sigs_linked-test.cc71
-rw-r--r--epid/verifier/1.1/unittests/testdata/verifier_precmp.inc73
-rw-r--r--epid/verifier/1.1/unittests/verifier-testhelper.cc214
-rw-r--r--epid/verifier/1.1/unittests/verifier-testhelper.h117
-rw-r--r--epid/verifier/1.1/unittests/verify-test.cc720
-rw-r--r--epid/verifier/1.1/unittests/verifybasic-test.cc99
-rw-r--r--epid/verifier/Makefile85
-rw-r--r--epid/verifier/api.h146
-rw-r--r--epid/verifier/src/check_privrl_entry.c (renamed from epid/verifier/check_privrl_entry.c)4
-rw-r--r--epid/verifier/src/context.c (renamed from epid/verifier/context.c)310
-rw-r--r--epid/verifier/src/context.h (renamed from epid/verifier/context.h)20
-rw-r--r--epid/verifier/src/nrverify.c (renamed from epid/verifier/nrverify.c)5
-rw-r--r--epid/verifier/src/sigs_linked.c (renamed from epid/verifier/sigs_linked.c)0
-rw-r--r--epid/verifier/src/verify.c (renamed from epid/verifier/verify.c)22
-rw-r--r--epid/verifier/src/verifybasic.c (renamed from epid/verifier/verifybasic.c)17
-rw-r--r--epid/verifier/unittests/check_privrl_entry-test.cc8
-rw-r--r--epid/verifier/unittests/context-test.cc751
-rw-r--r--epid/verifier/unittests/nrverify-test.cc34
-rw-r--r--epid/verifier/unittests/verifier-testhelper.cc395
-rw-r--r--epid/verifier/unittests/verifier-testhelper.h69
-rw-r--r--epid/verifier/unittests/verify-test.cc355
-rw-r--r--epid/verifier/unittests/verifybasic-test.cc57
-rw-r--r--epid/verifier/verifier.parts84
-rw-r--r--example/Makefile84
-rw-r--r--example/compressed_data/README.md179
-rw-r--r--example/compressed_data/cacert.binbin0 -> 324 bytes
-rw-r--r--example/compressed_data/compressed_data.parts72
-rw-r--r--example/compressed_data/groupa/member0/mprivkey.datbin0 -> 80 bytes
-rw-r--r--example/compressed_data/groupa/member1/mprivkey.datbin0 -> 80 bytes
-rw-r--r--example/compressed_data/groupa/privrevokedmember0/mprivkey.datbin0 -> 80 bytes
-rw-r--r--example/compressed_data/groupa/privrevokedmember1/mprivkey.datbin0 -> 80 bytes
-rw-r--r--example/compressed_data/groupa/privrevokedmember2/mprivkey.datbin0 -> 80 bytes
-rw-r--r--example/compressed_data/groupa/privrl.binbin0 -> 188 bytes
-rw-r--r--example/compressed_data/groupa/privrl_empty.binbin0 -> 92 bytes
-rw-r--r--example/compressed_data/groupa/pubkey.binbin0 -> 340 bytes
-rw-r--r--example/compressed_data/groupa/sigrevokedmember0/mprivkey.datbin0 -> 80 bytes
-rw-r--r--example/compressed_data/groupa/sigrevokedmember1/mprivkey.datbin0 -> 80 bytes
-rw-r--r--example/compressed_data/groupa/sigrevokedmember2/mprivkey.datbin0 -> 80 bytes
-rw-r--r--example/compressed_data/groupa/sigrl.binbin0 -> 476 bytes
-rw-r--r--example/compressed_data/groupa/sigrl_empty.binbin0 -> 92 bytes
-rw-r--r--example/compressed_data/groupb/member0/mprivkey.datbin0 -> 80 bytes
-rw-r--r--example/compressed_data/groupb/privrevokedmember0/mprivkey.datbin0 -> 80 bytes
-rw-r--r--example/compressed_data/groupb/privrl.binbin0 -> 124 bytes
-rw-r--r--example/compressed_data/groupb/privrl_empty.binbin0 -> 92 bytes
-rw-r--r--example/compressed_data/groupb/pubkey.binbin0 -> 340 bytes
-rw-r--r--example/compressed_data/groupb/sigrevokedmember0/mprivkey.datbin0 -> 80 bytes
-rw-r--r--example/compressed_data/groupb/sigrl.binbin0 -> 476 bytes
-rw-r--r--example/compressed_data/groupb/sigrl_empty.binbin0 -> 92 bytes
-rw-r--r--example/compressed_data/grprl.binbin0 -> 1660 bytes
-rw-r--r--example/compressed_data/grprl_empty.binbin0 -> 76 bytes
-rw-r--r--example/compressed_data/mprivkey.datbin0 -> 80 bytes
-rw-r--r--example/compressed_data/privrl.binbin0 -> 188 bytes
-rw-r--r--example/compressed_data/pubkey.binbin0 -> 340 bytes
-rw-r--r--example/compressed_data/sigrl.binbin0 -> 476 bytes
-rw-r--r--example/data/README.md38
-rw-r--r--example/data/data.parts26
-rw-r--r--example/data/groupa/privrl_empty.binbin0 -> 92 bytes
-rw-r--r--example/data/groupa/sigrl_empty.binbin0 -> 92 bytes
-rw-r--r--example/data/groupb/privrl_empty.binbin0 -> 92 bytes
-rw-r--r--example/data/groupb/sigrl_empty.binbin0 -> 92 bytes
-rw-r--r--example/data/privrl.binbin0 -> 92 bytes
-rw-r--r--example/data/sigrl.binbin0 -> 92 bytes
-rw-r--r--example/signmsg/signmsg.parts23
-rw-r--r--example/signmsg/src/main.c307
-rw-r--r--example/signmsg/src/signmsg.c31
-rw-r--r--example/util/Makefile32
-rw-r--r--example/util/argutil.h52
-rw-r--r--example/util/buffutil.h13
-rw-r--r--example/util/convutil.h16
-rw-r--r--example/util/src/argutil.c70
-rw-r--r--example/util/src/bufutil.c11
-rw-r--r--example/util/src/convutil.c22
-rw-r--r--example/util/src/strutil.c53
-rw-r--r--example/util/stdtypes.h2
-rw-r--r--example/util/strutil.h33
-rw-r--r--example/util/util.parts2
-rw-r--r--example/verifysig/src/main.c373
-rw-r--r--example/verifysig/src/verifysig.c202
-rw-r--r--example/verifysig/src/verifysig.h5
-rw-r--r--example/verifysig/src/verifysig11.c187
-rw-r--r--example/verifysig/src/verifysig11.h38
-rw-r--r--example/verifysig/verifysig.parts5
-rw-r--r--ext/dropt/LICENSE22
-rw-r--r--ext/dropt/Makefile23
-rw-r--r--ext/dropt/dropt.parts53
-rw-r--r--ext/dropt/include/dropt.h249
-rw-r--r--ext/dropt/include/dropt_string.h94
-rw-r--r--ext/dropt/src/dropt.c1562
-rw-r--r--ext/dropt/src/dropt_handlers.c438
-rw-r--r--ext/dropt/src/dropt_string.c686
-rw-r--r--ext/gtest/Makefile25
-rw-r--r--ext/gtest/gtest-all.cc3
-rw-r--r--ext/gtest/gtest.parts2
-rw-r--r--ext/ipp/ippcp.parts39
-rw-r--r--ext/ipp/ippcpepid.parts20
-rw-r--r--ext/ipp/sources/ippcp/Makefile31
-rw-r--r--ext/ipp/sources/ippcpepid/Makefile32
-rw-r--r--parts-site/configurations/__init__.py42
-rw-r--r--parts-site/configurations/debug/__init__.py2
-rw-r--r--parts-site/configurations/debug/g++.py1
-rw-r--r--parts-site/configurations/debug/gcc.py1
-rw-r--r--parts-site/configurations/debug/intelc_posix-any.py29
-rw-r--r--parts-site/configurations/debug/intelc_win32-any_win32-x86.py1
-rw-r--r--parts-site/configurations/debug/intelc_win32-any_win32-x86_64.py1
-rw-r--r--parts-site/configurations/debug/msvc_win32-any_win32-x86.py1
-rw-r--r--parts-site/configurations/debug/msvc_win32-any_win32-x86_64.py1
-rw-r--r--parts-site/configurations/release/__init__.py1
-rw-r--r--parts-site/configurations/release/g++.py1
-rw-r--r--parts-site/configurations/release/gcc.py1
-rw-r--r--parts-site/configurations/release/intelc_posix-any.py29
-rw-r--r--parts-site/configurations/release/intelc_win32-any_win32-x86.py1
-rw-r--r--parts-site/configurations/release/intelc_win32-any_win32-x86_64.py1
-rw-r--r--parts-site/configurations/release/msvc_win32-any_win32-x86.py1
-rw-r--r--parts-site/configurations/release/msvc_win32-any_win32-x86_64.py1
-rw-r--r--tools/Makefile107
-rw-r--r--tools/extractgrps/extractgrps.parts47
-rw-r--r--tools/extractgrps/src/main.c227
-rw-r--r--tools/extractkeys/extractkeys.parts47
-rw-r--r--tools/extractkeys/src/main.c252
-rw-r--r--tools/revokegrp/revokegrp.parts46
-rw-r--r--tools/revokegrp/src/main.c382
-rw-r--r--tools/revokekey/revokekey.parts47
-rw-r--r--tools/revokekey/src/main.c356
-rw-r--r--tools/revokesig/revokesig.parts46
-rw-r--r--tools/revokesig/src/main.c455
658 files changed, 37803 insertions, 17845 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..36657a3
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,87 @@
+# Intel(R) EPID SDK ChangeLog {#ChangeLog}
+
+## [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/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..b4a7a81
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,125 @@
+#!/usr/bin/make -f
+
+#variables are set by configure
+prefix = @prefix@
+installdir = $(prefix)/
+epidinstalldir = $(installdir)/epid-sdk
+CC = @CC@
+CXX = @CXX@
+CFLAGS = @CFLAGS@
+
+#g++ flags
+CXX_FLAGS := $(CFLAGS) -O2 -Werror -Wall -Wextra -Wno-missing-braces \
+ -Wno-missing-field-initializers -Wno-unknown-pragmas -Wno-unused-function \
+ -fno-strict-aliasing -Wno-unused-but-set-variable -Wno-comment -DNDEBUG
+#gcc flags
+CC_FLAGS := $(CXX_FLAGS) -D_IPP_v50_ -D_IPP_DEBUG
+
+#intel c++ compiler flags
+ICPC_FLAGS := $(CFLAGS) -O2 -Werror -Wall -Wextra -DNDEBUG
+#intel c compiler flags
+ICC_FLAGS := $(ICPC_FLAGS) -D_IPP_v50_ -D_IPP_DEBUG
+
+#check if architecture was specified
+#or take it by shell command
+ifeq ($(findstring -m32,$(CFLAGS)),-m32)
+ ARCH = x86
+ CXXFLAGS += -m32
+else ifeq ($(findstring -m64,$(CFLAGS)),-m64)
+ ARCH = x86_64
+ CXXFLAGS += -m64
+else
+ ARCH := $(shell uname -m)
+endif
+
+#set tools and flags depending on specified compiler
+ifeq ($(CC),icc)
+ CFLAGS := $(ICC_FLAGS)
+ CXXFLAGS := $(ICPC_FLAGS)
+ AR = xiar
+else
+ CFLAGS := $(CC_FLAGS)
+ CXXFLAGS := $(CXX_FLAGS)
+endif
+
+#set c++11 for all c++ compilers
+CXXFLAGS += -std=c++0x
+
+#set flags for unit tests executables
+GTEST_FLAGS = --gtest_color=yes \
+ --gtest_print_time=1 \
+ --gtest_output=xml
+
+export CC AR LDFLAGS ARCH CFLAGS
+export CXX CXXFLAGS
+export epidinstalldir
+export GTEST_FLAGS
+
+#just output
+$(info $$ccompiler is [${CC}])
+$(info $$cxxcompiler is [${CXX}])
+$(info $$architecture is [${ARCH}])
+
+#targets part
+all: ipp common member verifier dropt examples_util examples epid_tools
+
+clean:
+ $(MAKE) -C ./ext/ipp/sources/ippcp clean
+ $(MAKE) -C ./ext/ipp/sources/ippcpepid clean
+ $(MAKE) -C ./epid/common/ clean
+ $(MAKE) -C ./epid/member/ clean
+ $(MAKE) -C ./epid/verifier/ clean
+ $(MAKE) -C ./example/util/ clean
+ $(MAKE) -C ./example/ clean
+ $(MAKE) -C ./tools/ clean
+ $(MAKE) -C ./ext/gtest/ clean
+ $(MAKE) -C ./epid/common-testhelper/ clean
+ $(MAKE) -C ./ext/dropt/ clean
+
+install:
+ $(MAKE) -C ./ext/ipp/sources/ippcp install
+ $(MAKE) -C ./ext/ipp/sources/ippcpepid install
+ $(MAKE) -C ./epid/common/ install
+ $(MAKE) -C ./epid/member/ install
+ $(MAKE) -C ./epid/verifier/ install
+ $(MAKE) -C ./example/ install
+ $(MAKE) -C ./tools/ install
+ $(MAKE) -C ./epid/common-testhelper/ install
+
+uninstall:
+ rm -rf $(epidinstalldir)
+
+ipp:
+ $(MAKE) -C ./ext/ipp/sources/ippcp all
+ $(MAKE) -C ./ext/ipp/sources/ippcpepid all
+
+common:
+ $(MAKE) -C ./epid/common/ all
+
+member:
+ $(MAKE) -C ./epid/member/ all
+
+verifier:
+ $(MAKE) -C ./epid/verifier/ all
+
+dropt:
+ $(MAKE) -C ./ext/dropt/ all
+
+examples_util:
+ $(MAKE) -C ./example/util/ all
+
+check:
+ $(MAKE) -C ./ext/gtest/ all
+ $(MAKE) -C ./epid/common-testhelper/ all
+ $(MAKE) -C ./epid/common-testhelper/ check
+ $(MAKE) -C ./epid/common/ check
+ $(MAKE) -C ./epid/member/ check
+ $(MAKE) -C ./epid/verifier/ check
+
+examples:
+ $(MAKE) -C ./example/ all
+
+epid_tools:
+ $(MAKE) -C ./tools/ all
+
+build: all check install
diff --git a/README.md b/README.md
index 332f722..5cb5c5f 100644
--- a/README.md
+++ b/README.md
@@ -32,9 +32,9 @@ multitude of security solutions.
* A C/C++ compiler supported by Parts
-## Release Notes
+## What's New in This Release
-See [RELEASE_NOTES.md](RELEASE_NOTES.md).
+See [CHANGELOG.md](CHANGELOG.md).
## Documentation
diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
deleted file mode 100644
index 3eb9ab3..0000000
--- a/RELEASE_NOTES.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# Intel(R) EPID SDK Release Notes {#ChangeLog}
-
-# 2.0.0
-
-## 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.
-
-
-## Known Issues
-
-* SHA-512/256 hash algorithm is not supported.
-
-* Compressed key sample material is not included in the package.
diff --git a/SConstruct b/SConstruct
index 296adce..195222d 100644
--- a/SConstruct
+++ b/SConstruct
@@ -29,21 +29,21 @@ print '* Parts Version:', PartsExtensionVersion()
print "***************************************"
def PrintCompilerVersion(env):
- """
- Function to print version of compilers used for build
- Args:
- env: Environment to get compilers version
- """
- res = ''
- if 'INTELC_VERSION' in env:
- res += 'ICC ' + env['INTELC_VERSION'] + ';'
- if 'MSVC_VERSION' in env:
- res += 'MS ' + env['MSVC_VERSION'] + ';'
- if 'GXX_VERSION' in env:
- res += 'GXX ' + env['GXX_VERSION'] + ';'
- if 'GCC_VERSION' in env:
- res += 'GCC ' + env['GCC_VERSION'] + ';'
- print 'Compiler Version: ', res
+ """
+ Function to print version of compilers used for build
+ Args:
+ env: Environment to get compilers version
+ """
+ res = ''
+ if 'INTELC_VERSION' in env:
+ res += 'ICC ' + env['INTELC_VERSION'] + ';'
+ if 'MSVC_VERSION' in env:
+ res += 'MS ' + env['MSVC_VERSION'] + ';'
+ if 'GXX_VERSION' in env:
+ res += 'GXX ' + env['GXX_VERSION'] + ';'
+ if 'GCC_VERSION' in env:
+ res += 'GCC ' + env['GCC_VERSION'] + ';'
+ print 'Compiler Version: ', res
def include_parts(part_list, **kwargs):
for parts_file in part_list:
@@ -60,24 +60,33 @@ common_parts = ['epid/common/common.parts']
member_parts = ['epid/member/member.parts']
verifier_parts = ['epid/verifier/verifier.parts']
util_parts = ['example/util/util.parts']
-example_parts = ['example/verifysig/verifysig.parts',
+example_parts = ['ext/dropt/dropt.parts',
+ 'example/verifysig/verifysig.parts',
'example/signmsg/signmsg.parts',
- 'example/data/data.parts']
-example_test_parts = ['test/testbot/testbot.parts',
+ 'example/data/data.parts',
+ 'example/compressed_data/compressed_data.parts']
+tools_parts = ['tools/revokegrp/revokegrp.parts',
+ 'tools/revokekey/revokekey.parts',
+ 'tools/revokesig/revokesig.parts',
+ 'tools/extractkeys/extractkeys.parts',
+ 'tools/extractgrps/extractgrps.parts']
+testbot_test_parts = ['test/testbot/testbot.parts',
'test/testbot/signmsg/signmsg_testbot.parts',
'test/testbot/verifysig/verifysig_testbot.parts',
- 'test/testbot/integration/integration_testbot.parts']
+ 'test/testbot/integration/integration_testbot.parts',
+ 'test/testbot/ssh_remote/ssh_remote_testbot.parts',
+ 'test/testbot/revokegrp/revokegrp_testbot.parts',
+ 'test/testbot/revokekey/revokekey_testbot.parts',
+ 'test/testbot/revokesig/revokesig_testbot.parts',
+ 'test/testbot/extractkeys/extractkeys_testbot.parts',
+ 'test/testbot/extractgrps/extractgrps_testbot.parts']
package_parts = ['ext/gtest/gtest.parts',
'ext/ipp/ippcommon.parts',
'ext/ipp/ippcp.parts',
'ext/ipp/ippcpepid.parts',
'package.parts']
-internal_tools_parts = ['tools/ikgfwrapper/ikgfwrapper.parts',
- 'tools/revokegrp/revokegrp.parts',
- 'tools/revokekey/revokekey.parts',
- 'tools/revokesig/revokesig.parts',
- 'tools/extractkeys/extractkeys.parts',
- 'tools/extractgrps/extractgrps.parts']
+internal_tools_parts = ['ext/dropt/dropt.parts',
+ 'tools/ikgfwrapper/ikgfwrapper.parts']
######## End Part groups ###############################################
######## Commandline option setup #######################################
product_variants = [
@@ -101,6 +110,9 @@ def is_internal_tools():
def is_package():
return GetOption("product-variant") == 'package-epid-sdk'
+def use_commercial_ipp():
+ return GetOption("use-commercial-ipp")
+
def variant_dirname():
s = GetOption("product-variant")
if s == 'production':
@@ -118,6 +130,12 @@ AddOption("--product-variant", "--prod-var", nargs=1,
action='store', dest='product-variant', type='choice',
choices=product_variants, default=default_variant)
+AddOption("--use-commercial-ipp",
+ help=("Link with commercial IPP. The IPPROOT environment variable "
+ "must be set."),
+ action='store_true', dest='use-commercial-ipp',
+ default=False)
+
SetOptionDefault("PRODUCT_VARIANT", variant_dirname())
######## End Commandline option setup ###################################
@@ -156,6 +174,9 @@ def set_default_production_options():
SetOptionDefault('INSTALL_SAMPLE_DATA',
'$INSTALL_ROOT/example')
+ SetOptionDefault('INSTALL_TOOLS_DATA',
+ '$INSTALL_ROOT/tools')
+
SetOptionDefault('PACKAGE_DIR',
'#_package')
@@ -170,7 +191,10 @@ def set_default_production_options():
if is_production():
set_default_production_options()
- include_parts(ipp_parts, mode=['install_lib'],
+ ipp_mode = ['install_lib']
+ if use_commercial_ipp():
+ ipp_mode.append('use_commercial_ipp')
+ include_parts(ipp_parts, mode=ipp_mode,
INSTALL_INCLUDE='${INSTALL_IPP_INCLUDE}')
include_parts(utest_parts + common_parts +
member_parts + verifier_parts,
@@ -180,6 +204,9 @@ if is_production():
INSTALL_INCLUDE='${INSTALL_EPID_INCLUDE}',
INSTALL_BIN='${INSTALL_SAMPLE_BIN}',
INSTALL_DATA='${INSTALL_SAMPLE_DATA}')
+ include_parts(tools_parts,
+ INSTALL_BIN='${INSTALL_TOOLS_BIN}',
+ INSTALL_DATA='${INSTALL_TOOLS_DATA}')
PrintCompilerVersion(DefaultEnvironment())
Default('all')
Default('run_utest::')
@@ -192,15 +219,15 @@ if is_internal_test():
include_parts(util_parts + example_parts,
INSTALL_BIN='${INSTALL_SAMPLE_BIN}',
INSTALL_DATA='${INSTALL_SAMPLE_DATA}')
- include_parts(example_test_parts)
+ include_parts(tools_parts, INSTALL_BIN='${INSTALL_TOOLS_BIN}')
+ include_parts(testbot_test_parts)
Default('all')
if is_internal_tools():
set_default_production_options()
include_parts(ipp_parts + utest_parts + common_parts + util_parts)
include_parts(internal_tools_parts, INSTALL_BIN='${INSTALL_TOOLS_BIN}')
- Default('ikgfwrapper', 'revokegrp', 'revokekey', 'revokesig',
- 'extractkeys', 'extractgrps')
+ Default('ikgfwrapper')
if is_package():
set_default_production_options()
diff --git a/configure b/configure
new file mode 100644
index 0000000..02a6d41
--- /dev/null
+++ b/configure
@@ -0,0 +1,3799 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for Intel(R) EPID SDK .
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='Intel(R) EPID SDK'
+PACKAGE_TARNAME='intel-r--epid-sdk'
+PACKAGE_VERSION=' '
+PACKAGE_STRING='Intel(R) EPID SDK '
+PACKAGE_BUGREPORT=''
+PACKAGE_URL=''
+
+ac_default_prefix=`pwd`/_install
+ac_subst_vars='LTLIBOBJS
+LIBOBJS
+ac_ct_CXX
+CXXFLAGS
+CXX
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CXX
+CXXFLAGS
+CCC'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures Intel(R) EPID SDK to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root
+ [DATAROOTDIR/doc/intel-r--epid-sdk]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of Intel(R) EPID SDK :";;
+ esac
+ cat <<\_ACEOF
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to the package provider.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+Intel(R) EPID SDK configure
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by Intel(R) EPID SDK $as_me , which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+# save flags
+CFLAGS_OLD="$CFLAGS"
+CPPFLAGS_OLD="$CPPFLAGS"
+
+#c compiler priority
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in gcc icc cc
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in gcc icc cc
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+#c++ compiler priority
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in g++ icpc c++
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in g++ icpc c++
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CXX" && break
+done
+
+ if test "x$ac_ct_CXX" = x; then
+ CXX="g++"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CXX=$ac_ct_CXX
+ fi
+fi
+
+ fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+else
+ CXXFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# restore flags
+CFLAGS="$CFLAGS_OLD"
+CPPFLAGS="$CPPFLAGS_OLD"
+
+# default install path is current directory
+
+ac_config_files="$ac_config_files Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then branch to the quote section. Otherwise,
+# look for a macro that doesn't take arguments.
+ac_script='
+:mline
+/\\$/{
+ N
+ s,\\\n,,
+ b mline
+}
+t clear
+:clear
+s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
+t quote
+b any
+:quote
+s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
+s/\[/\\&/g
+s/\]/\\&/g
+s/\$/$$/g
+H
+:any
+${
+ g
+ s/^\n//
+ s/\n/ /g
+ p
+}
+'
+DEFS=`sed -n "$ac_script" confdefs.h`
+
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by Intel(R) EPID SDK $as_me , which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Report bugs to the package provider."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+Intel(R) EPID SDK config.status
+configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h | --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+
+eval set X " :F $CONFIG_FILES "
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+
+
+
+ esac
+
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..c5d3082
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,20 @@
+AC_INIT([Intel(R) EPID SDK],[ ])
+
+# save flags
+CFLAGS_OLD="$CFLAGS"
+CPPFLAGS_OLD="$CPPFLAGS"
+
+#c compiler priority
+AC_PROG_CC([gcc icc cc])
+#c++ compiler priority
+AC_PROG_CXX([g++ icpc c++])
+
+# restore flags
+CFLAGS="$CFLAGS_OLD"
+CPPFLAGS="$CPPFLAGS_OLD"
+
+# default install path is current directory
+AC_PREFIX_DEFAULT([`pwd`/_install])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+
diff --git a/doc/html/1_81_2file__parser_8h.html b/doc/html/1_81_2file__parser_8h.html
new file mode 100644
index 0000000..5019855
--- /dev/null
+++ b/doc/html/1_81_2file__parser_8h.html
@@ -0,0 +1,104 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/1.1/file_parser.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('1_81_2file__parser_8h.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">file_parser.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Epid 1.1 issuer material parsing utilities.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &lt;stddef.h&gt;</code><br />
+<code>#include &quot;<a class="el" href="1_81_2types_8h.html">epid/common/1.1/types.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="errors_8h.html">epid/common/errors.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="file__parser_8h.html">epid/common/file_parser.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga1f92d1cb6bd7d9815711fde515b40a4c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_file_parser_module.html#ga1f92d1cb6bd7d9815711fde515b40a4c">Epid11ParseGroupPubKeyFile</a> (void const *buf, size_t len, <a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *cert, <a class="el" href="struct_epid11_group_pub_key.html">Epid11GroupPubKey</a> *pubkey)</td></tr>
+<tr class="memdesc:ga1f92d1cb6bd7d9815711fde515b40a4c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts group public key from buffer in issuer binary format. <a href="group___epid11_file_parser_module.html#ga1f92d1cb6bd7d9815711fde515b40a4c">More...</a><br /></td></tr>
+<tr class="separator:ga1f92d1cb6bd7d9815711fde515b40a4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae682077d315c39ed298ef198fd738546"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_file_parser_module.html#gae682077d315c39ed298ef198fd738546">Epid11ParsePrivRlFile</a> (void const *buf, size_t len, <a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *cert, <a class="el" href="struct_epid11_priv_rl.html">Epid11PrivRl</a> *rl, size_t *rl_len)</td></tr>
+<tr class="memdesc:gae682077d315c39ed298ef198fd738546"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts private key revocation list from buffer in issuer binary format. <a href="group___epid11_file_parser_module.html#gae682077d315c39ed298ef198fd738546">More...</a><br /></td></tr>
+<tr class="separator:gae682077d315c39ed298ef198fd738546"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac3f6daaa5333627d4efe5438c1fe8868"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_file_parser_module.html#gac3f6daaa5333627d4efe5438c1fe8868">Epid11ParseSigRlFile</a> (void const *buf, size_t len, <a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *cert, <a class="el" href="struct_epid11_sig_rl.html">Epid11SigRl</a> *rl, size_t *rl_len)</td></tr>
+<tr class="memdesc:gac3f6daaa5333627d4efe5438c1fe8868"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts signature revocation list from buffer in issuer binary format. <a href="group___epid11_file_parser_module.html#gac3f6daaa5333627d4efe5438c1fe8868">More...</a><br /></td></tr>
+<tr class="separator:gac3f6daaa5333627d4efe5438c1fe8868"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae28a844eb68828480b2a76fcb7d252a3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_file_parser_module.html#gae28a844eb68828480b2a76fcb7d252a3">Epid11ParseGroupRlFile</a> (void const *buf, size_t len, <a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *cert, <a class="el" href="struct_epid11_group_rl.html">Epid11GroupRl</a> *rl, size_t *rl_len)</td></tr>
+<tr class="memdesc:gae28a844eb68828480b2a76fcb7d252a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts group revocation list from buffer in issuer binary format. <a href="group___epid11_file_parser_module.html#gae28a844eb68828480b2a76fcb7d252a3">More...</a><br /></td></tr>
+<tr class="separator:gae28a844eb68828480b2a76fcb7d252a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Epid 1.1 issuer material parsing utilities. </p>
+</div></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="dir_a32be19bc88f3d7aac6b7249da379f26.html">1.1</a></li><li class="navelem"><a class="el" href="1_81_2file__parser_8h.html">file_parser.h</a></li>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/1_81_2types_8h.html b/doc/html/1_81_2types_8h.html
new file mode 100644
index 0000000..c5d3fb2
--- /dev/null
+++ b/doc/html/1_81_2types_8h.html
@@ -0,0 +1,151 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/1.1/types.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('1_81_2types_8h.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">types.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>SDK data types for Intel(R) EPID 1.1.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &lt;limits.h&gt;</code><br />
+<code>#include &quot;<a class="el" href="types_8h.html">epid/common/types.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_oct_str80.html">OctStr80</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">80 bit octet string <a href="struct_oct_str80.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_oct_str600.html">OctStr600</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">600 bit octet string <a href="struct_oct_str600.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_oct_str768.html">OctStr768</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">768 bit octet string <a href="struct_oct_str768.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_fq3_elem_str.html">Fq3ElemStr</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialized Fq3 element. <a href="struct_fq3_elem_str.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_g2_elem_str.html">Epid11G2ElemStr</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialized Intel(R) EPID 1.1 G2 element. <a href="struct_epid11_g2_elem_str.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_gt_elem_str.html">Epid11GtElemStr</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialized Intel(R) EPID 1.1 GT element. <a href="struct_epid11_gt_elem_str.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html">Epid11Params</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 Parameters. <a href="struct_epid11_params.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_group_pub_key.html">Epid11GroupPubKey</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 group public key. <a href="struct_epid11_group_pub_key.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 basic signature. <a href="struct_epid11_basic_signature.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_nr_proof.html">Epid11NrProof</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 non-revoked Proof. <a href="struct_epid11_nr_proof.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_signature.html">Epid11Signature</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 Signature. <a href="struct_epid11_signature.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_priv_rl.html">Epid11PrivRl</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 private-key based revocation list. <a href="struct_epid11_priv_rl.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_sig_rl_entry.html">Epid11SigRlEntry</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 entry in SigRL (B,K) <a href="struct_epid11_sig_rl_entry.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_sig_rl.html">Epid11SigRl</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 signature based revocation list. <a href="struct_epid11_sig_rl.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_group_rl.html">Epid11GroupRl</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 group revocation list. <a href="struct_epid11_group_rl.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gadff9c05d5b7751024152b40dda545545"><td class="memItemLeft" align="right" valign="top">
+typedef <a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_types.html#gadff9c05d5b7751024152b40dda545545">Epid11G1ElemStr</a></td></tr>
+<tr class="memdesc:gadff9c05d5b7751024152b40dda545545"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialized Intel(R) EPID 1.1 G1 element. <br /></td></tr>
+<tr class="separator:gadff9c05d5b7751024152b40dda545545"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf1f4f1d6f001895abe548cfb33611c23"><td class="memItemLeft" align="right" valign="top">
+typedef <a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_types.html#gaf1f4f1d6f001895abe548cfb33611c23">Epid11G3ElemStr</a></td></tr>
+<tr class="memdesc:gaf1f4f1d6f001895abe548cfb33611c23"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialized Intel(R) EPID 1.1 G3 element. <br /></td></tr>
+<tr class="separator:gaf1f4f1d6f001895abe548cfb33611c23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7293cec8f937d6f5da42084403f978f1"><td class="memItemLeft" align="right" valign="top">
+typedef <a class="el" href="struct_oct_str32.html">OctStr32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_types.html#ga7293cec8f937d6f5da42084403f978f1">Epid11GroupId</a></td></tr>
+<tr class="memdesc:ga7293cec8f937d6f5da42084403f978f1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 group ID. <br /></td></tr>
+<tr class="separator:ga7293cec8f937d6f5da42084403f978f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>SDK data types for Intel(R) EPID 1.1. </p>
+</div></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="dir_a32be19bc88f3d7aac6b7249da379f26.html">1.1</a></li><li class="navelem"><a class="el" href="1_81_2types_8h.html">types.h</a></li>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/Basenames.html b/doc/html/Basenames.html
new file mode 100644
index 0000000..91d749d
--- /dev/null
+++ b/doc/html/Basenames.html
@@ -0,0 +1,93 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: In-Depth Explanation of Basenames</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('Basenames.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<div class="title">In-Depth Explanation of Basenames </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>This in-depth explanation covers the use of basenames in the Intel&reg; EPID scheme. It provides detail on name based signatures, random base signatures and how and when they are used.</p>
+<p><br />
+</p>
+<h1><a class="anchor" id="random_base"></a>
+Random Base Signatures</h1>
+<p>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.</p>
+<p>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.</p>
+<h1><a class="anchor" id="name_based"></a>
+Name Based Signatures</h1>
+<p>A name based signature is a type of signature that gives the verifier the ability to link Intel&reg; 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.</p>
+<p>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.</p>
+<p>Reasons why a verifier might require members to use a basename when signing include the following:</p>
+<ul>
+<li><b>Profiling for Advertising</b> 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&reg; 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.</li>
+<li><b>Voting</b> 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.</li>
+</ul>
+<dl class="section warning"><dt>Warning</dt><dd>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. </dd></dl>
+</div></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/BuildToolsInstallation.html b/doc/html/BuildToolsInstallation.html
new file mode 100644
index 0000000..aa4a477
--- /dev/null
+++ b/doc/html/BuildToolsInstallation.html
@@ -0,0 +1,128 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: Guide to Installing Build Tools</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('BuildToolsInstallation.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<div class="title">Guide to Installing Build Tools </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><h3>Table of Contents</h3>
+<ul><li class="level1"><a href="#build_tools_windows_python">Installing Python</a></li>
+<li class="level1"><a href="#build_tools_windows_scons">Installing SCons</a></li>
+<li class="level1"><a href="#build_tools_windows_parts">Installing Parts</a></li>
+</ul>
+</div>
+<div class="textblock"><p>Building SDK code out of the box requires a number of tools. This section explains how to install the following tools:</p>
+<table class="doxtable">
+<tr>
+<th>Prerequisite </th><th>Download Link </th></tr>
+<tr>
+<td><a href="https://www.python.org/downloads">Python</a> </td><td><a href="https://www.python.org/downloads/release/python-2712/">python 2.7.12 installers</a> </td></tr>
+<tr>
+<td><a href="http://www.scons.org">SCons</a> </td><td><a href="http://prdownloads.sourceforge.net/scons/scons-2.4.1.zip">scons-2.4.1.zip</a> </td></tr>
+<tr>
+<td><a href="https://bitbucket.org/sconsparts/parts/downloads">Parts</a> </td><td><a href="https://bitbucket.org/sconsparts/parts/downloads/parts-0.11.0.zip">parts-0.11.0.zip</a> </td></tr>
+</table>
+<p><br />
+ </p>
+<h1><a class="anchor" id="build_tools_windows_python"></a>
+Installing Python</h1>
+<ol type="1">
+<li>Download and install Python according to the installation procedure for your platform.</li>
+<li>Make sure that the Python directory and the Python scripts directory are in the path.</li>
+</ol>
+<p>To verify that Python installed correctly, run: </p><pre class="fragment"> &gt; python --version
+</pre><p><br />
+ </p>
+<h1><a class="anchor" id="build_tools_windows_scons"></a>
+Installing SCons</h1>
+<p>After Python is installed, install SCons.</p>
+<ol type="1">
+<li>Download and extract the files from the SCons archive.</li>
+<li>To install SCons, go to the directory with the extracted files and run: <pre class="fragment"> &gt; python setup.py install
+</pre></li>
+</ol>
+<dl class="section note"><dt>Note</dt><dd>You may need administrative privileges to execute this command.</dd></dl>
+<p><br />
+ To verify that SCons installed correctly, run: </p><pre class="fragment"> &gt; scons --version
+</pre><p><br />
+ </p>
+<h1><a class="anchor" id="build_tools_windows_parts"></a>
+Installing Parts</h1>
+<p>After SCons is installed, install Parts.</p>
+<ol type="1">
+<li>Download and extract the files from the Parts archive.</li>
+<li>To install Parts, go to the directory with the extracted files and run: <pre class="fragment"> &gt; python setup.py install
+</pre></li>
+</ol>
+<dl class="section note"><dt>Note</dt><dd>You may need administrative privileges to execute this command.</dd></dl>
+<p><br />
+</p>
+</div></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/BuildingSdk.html b/doc/html/BuildingSdk.html
index 715303c..fcb2c1e 100644
--- a/doc/html/BuildingSdk.html
+++ b/doc/html/BuildingSdk.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Building From Source</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: Building from Source</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -58,12 +58,14 @@ $(document).ready(function(){initNavTree('BuildingSdk.html','');});
<div id="doc-content">
<div class="header">
<div class="headertitle">
-<div class="title">Building From Source </div> </div>
+<div class="title">Building from Source </div> </div>
</div><!--header-->
<div class="contents">
<div class="toc"><h3>Table of Contents</h3>
<ul><li class="level1"><a href="#BuildingSdk_Prerequisites">Prerequisites</a></li>
-<li class="level1"><a href="#BuildingSdk_Building">Building</a></li>
+<li class="level1"><a href="#BuildingSdk_Building_SCons">Building SDK with SCons</a></li>
+<li class="level1"><a href="#BuildingSdk_Building_Makefile">Alternate Makefile/Autoconf Based Build Approach</a></li>
+<li class="level1"><a href="#BuildingSdk_CommercialIpp">Improving Performance with Commercial IPP</a></li>
<li class="level1"><a href="#BuildingSdk_Examples">Example Programs</a></li>
<li class="level1"><a href="#BuildingSdk_PortingBuildSystem">Building with Other Build Systems</a></li>
</ul>
@@ -72,6 +74,7 @@ $(document).ready(function(){initNavTree('BuildingSdk.html','');});
<h1><a class="anchor" id="BuildingSdk_Prerequisites"></a>
Prerequisites</h1>
<p>Building SDK code out of the box requires a number of tools. This section lists the tools used to build the SDK.</p>
+<p>For more information on how to install these tools, refer to <a class="el" href="BuildToolsInstallation.html">Guide to Installing Build Tools</a>.</p>
<table class="doxtable">
<tr>
<th>Prerequisite </th><th>Notes </th></tr>
@@ -84,8 +87,8 @@ Prerequisites</h1>
<tr>
<td><a href="https://bitbucket.org/sconsparts/parts">Parts</a> </td><td>0.10.9.2 or later </td></tr>
</table>
-<h1><a class="anchor" id="BuildingSdk_Building"></a>
-Building</h1>
+<h1><a class="anchor" id="BuildingSdk_Building_SCons"></a>
+Building SDK with SCons</h1>
<p>To use the SDK, you need to build it to generate libraries compatible with your build environment.</p>
<p>To build based on the default SConstruct file in the root directory of the SDK, invoke scons with no arguments. </p><pre class="fragment">cd &lt;path/to/sdk-root&gt;
scons
@@ -103,11 +106,11 @@ scons
<tr>
<td><code>--target=x86_64</code> </td><td>Target x86_64 </td></tr>
<tr>
-<td><code>--tc=cl</code> </td><td>Use msvc to compile </td></tr>
+<td><code>--tc=cl</code> </td><td>Use MSVC to compile (Microsoft&reg;* C/C++ Optimizing Compiler) </td></tr>
<tr>
-<td><code>--tc=gcc</code> </td><td>Use gcc to compile </td></tr>
+<td><code>--tc=gcc</code> </td><td>Use GCC to compile (GNU* Compiler Collection) </td></tr>
<tr>
-<td><code>--tc=icl,mstools</code> </td><td>Use intelc to compile </td></tr>
+<td><code>--tc=icl,mstools</code> </td><td>Use Intel&reg; C++ compiler </td></tr>
<tr>
<td><code>build::</code> </td><td>Build the SDK (does not build unit tests) </td></tr>
<tr>
@@ -118,6 +121,29 @@ scons
<td><code>-c</code> </td><td>Clean the build </td></tr>
</table>
<p>Built components appear in the <code>_install</code> directory of the SDK root.</p>
+<h1><a class="anchor" id="BuildingSdk_Building_Makefile"></a>
+Alternate Makefile/Autoconf Based Build Approach</h1>
+<p>You can build with the <code>make</code> command on platforms that support Make/Autoconf.</p>
+<p>In the root directory of the SDK, run: </p><pre class="fragment">./configure
+make all
+make check
+make install
+</pre><p><code>./configure</code> sets up the default settings:</p>
+<ul>
+<li>The default compilers are GCC/G++. You can specify compilers via the CC and CXX variables. For example, <code>./configure CC=/opt/intel/bin/icc CXX=/opt/intel/bin/icpc</code></li>
+<li>The default installation directory is <code>./_install</code>. You can specify the installation directory by using <code>./configure --prefix=/usr/local/epid_install</code></li>
+<li>To change OS bit version, use CFLAGS parameter <code>-m32</code> and <code>-m64</code>. For example, <code>./configure CFLAGS=-m32</code></li>
+</ul>
+<p><code>make check</code> is optional. It builds and runs the unit tests.</p>
+<p>Alternatively, you can use <code>make build</code> as a shortcut to replace <code>make all</code>, <code>make check</code>, and <code>make install</code>.</p>
+<p>To clean the build, run <code>make clean</code>.</p>
+<p>To remove the install directory, run <code>make uninstall</code>.</p>
+<h1><a class="anchor" id="BuildingSdk_CommercialIpp"></a>
+Improving Performance with Commercial IPP</h1>
+<p>For higher performance, you can use the commercial version of Cryptography for Intel&reg; Integrated Performance Primitives, available at <a href="https://software.intel.com/articles/download-ipp-cryptography-libraries">https://software.intel.com/articles/download-ipp-cryptography-libraries</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>The SDK has been validated with v9.0.3 of the cryptography library.</dd></dl>
+<p>To build the SDK using a commercial Intel&reg; IPP installation, the <code>IPPROOT</code> environment variable must be properly configured to point to the IPP installation directory, as described in Setting Environment Variables* in the <a href="https://software.intel.com/sites/default/files/managed/a7/15/ipp_userguide_0.pdf">Intel&reg; IPP User's Guide</a> (PDF link).</p>
+<p>Once the environment is configured, you can build using commercial IPP by specifying <code>--use-commercial-ipp</code> as a command line option.</p>
<h1><a class="anchor" id="BuildingSdk_Examples"></a>
Example Programs</h1>
<p>The SDK includes several examples that show you different aspects of how the Intel&reg; EPID scheme works. In the SDK build, these examples are located in <code>_install/epid-sdk/example</code>.</p>
@@ -135,7 +161,10 @@ Building with Other Build Systems</h1>
<div class="image">
<img src="basicdoc.png" alt="basicdoc.png"/>
</div>
- </div></div><!-- contents -->
+<p><br />
+</p>
+<p>Other names and brands may be claimed as the property of others. </p>
+</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
<!-- start footer part -->
diff --git a/doc/html/ChangeLog.html b/doc/html/ChangeLog.html
index ed8fc9f..0e48d4f 100644
--- a/doc/html/ChangeLog.html
+++ b/doc/html/ChangeLog.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -61,8 +61,34 @@ $(document).ready(function(){initNavTree('ChangeLog.html','');});
<div class="title">What's New </div> </div>
</div><!--header-->
<div class="contents">
-<div class="textblock"><h1>2.0.0</h1>
-<h2>New in This Release</h2>
+<div class="textblock"><h2>[3.0.0]</h2>
+<h3>New in This Release</h3>
+<ul>
+<li>Support for verification of EPID 1.1 members.</li>
+<li>Make-based build system support.</li>
+<li>Sample material includes compressed keys.</li>
+<li>Enhanced documentation, including step-by-step walkthroughs of example applications.</li>
+<li>Validated on additional IoT platforms.<ul>
+<li>Ostro Linux</li>
+<li>Snappy Ubuntu Core</li>
+</ul>
+</li>
+</ul>
+<h3>Changes</h3>
+<ul>
+<li>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.</li>
+<li>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.</li>
+</ul>
+<h3>Fixes</h3>
+<ul>
+<li>The kEpidxxxRevoked enums have been renamed to be consistent with other result return values.</li>
+</ul>
+<h3>Known Issues</h3>
+<ul>
+<li>SHA-512/256 hash algorithm is not supported.</li>
+</ul>
+<h2>[2.0.0] - 2016-07-20</h2>
+<h3>New in This Release</h3>
<ul>
<li>Signed binary issuer material support.<ul>
<li>Binary issuer material validation APIs.</li>
@@ -77,19 +103,21 @@ $(document).ready(function(){initNavTree('ChangeLog.html','');});
</ul>
</li>
</ul>
-<h2>Changes</h2>
+<h3>Changes</h3>
<ul>
<li>The default hash algorithm has changed. It is now SHA-512.</li>
<li>Functions that returned <code>EpidNullPtrErr</code> now return <code>EpidBadArgErr</code> instead.</li>
</ul>
-<h2>Fixes</h2>
+<h3>Fixes</h3>
<ul>
<li>Updated build flags to work around GCC 4.8.5 defect.</li>
</ul>
-<h2>Known Issues</h2>
+<h2>[1.0.0] - 2016-03-03</h2>
+<h3>New in This Release</h3>
<ul>
-<li>SHA-512/256 hash algorithm is not supported.</li>
-<li>Compressed key sample material is not included in the package. </li>
+<li>Basic sign and verify functionality</li>
+<li>Dynamic join support for member</li>
+<li>Apache 2.0 License </li>
</ul>
</div></div><!-- contents -->
</div><!-- doc-content -->
diff --git a/doc/html/ChoosingiKGF.html b/doc/html/ChoosingiKGF.html
new file mode 100644
index 0000000..42c9de9
--- /dev/null
+++ b/doc/html/ChoosingiKGF.html
@@ -0,0 +1,231 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: If You Choose iKGF as Your Issuer</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('ChoosingiKGF.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<div class="title">If You Choose iKGF as Your Issuer </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="toc"><h3>Table of Contents</h3>
+<ul><li class="level1"><a href="#RevocationTools">Tools for Creating Revocation Requests</a><ul><li class="level2"><a href="#RevocationTools_revokegrp">Requesting Group Revocation</a></li>
+<li class="level2"><a href="#RevocationTools_revokekey">Requesting Private Key Revocation</a></li>
+<li class="level2"><a href="#RevocationTools_revokesig">Requesting Signature Revocation</a></li>
+</ul>
+</li>
+<li class="level1"><a href="#ExtractionTools">Tools for Extracting Keys from iKGF Files</a><ul><li class="level2"><a href="#ExtractionTools_extractgrps">Extracting Group Public Keys</a></li>
+<li class="level2"><a href="#ExtractionTools_extractkeys">Extracting Member Private Keys</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="textblock"><p>To use the Intel&reg; EPID APIs, you need to use the following items that are created by the issuer:</p>
+<ul>
+<li>Group public key, which corresponds to the issuing private key kept by the issuer</li>
+<li>Member private keys</li>
+<li>Signature based revocation list (SigRL)</li>
+<li>Private key based revocation list (PrivRL)</li>
+<li>Group based revocation list (GroupRL)</li>
+</ul>
+<p>If you want to use the Intel Key Generation Facility (iKGF) as the issuer, contact <a href="#" onclick="location.href='mai'+'lto:'+'inf'+'o@'+'dig'+'it'+'al-'+'cp'+'.co'+'m'; return false;">info@<span style="display: none;">.nosp@m.</span>digi<span style="display: none;">.nosp@m.</span>tal-c<span style="display: none;">.nosp@m.</span>p.co<span style="display: none;">.nosp@m.</span>m</a> to get started.</p>
+<p>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.</p>
+<h1><a class="anchor" id="RevocationTools"></a>
+Tools for Creating Revocation Requests</h1>
+<p>The Intel&reg; EPID SDK includes tools to help you request additions to revocation lists managed by iKGF if you are using iKGF as the issuer.</p>
+<p>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.</p>
+<p>To access the tools, go to <code>_install/epid-sdk/tools</code> in the SDK directory.</p>
+<p>You need to build the SDK before you can use these tools. For more information, refer to <a class="el" href="BuildingSdk.html">Building from Source</a>.</p>
+<p>The following tools are available:</p>
+<table class="doxtable">
+<tr>
+<th>Tool </th><th>Purpose </th></tr>
+<tr>
+<td><code>revokegrp</code> </td><td>Create group revocation request </td></tr>
+<tr>
+<td><code>revokekey</code> </td><td>Create member private key revocation request </td></tr>
+<tr>
+<td><code>revokesig</code> </td><td>Create signature revocation request </td></tr>
+</table>
+<h2><a class="anchor" id="RevocationTools_revokegrp"></a>
+Requesting Group Revocation</h2>
+<p>The <code>revokegrp</code> tool adds a group to the revocation request file. </p><pre class="fragment">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
+</pre><h2><a class="anchor" id="RevocationTools_revokekey"></a>
+Requesting Private Key Revocation</h2>
+<p>The <code>revokekey</code> tool adds a member private key to the revocation request file. </p><pre class="fragment">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
+</pre><h2><a class="anchor" id="RevocationTools_revokesig"></a>
+Requesting Signature Revocation</h2>
+<p>The <code>revokesig</code> tool creates a request to add a signature to the revocation request file.</p>
+<p><code>revokesig</code> only accepts valid signatures for addition to the revocation request. </p><pre class="fragment">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
+</pre><h1><a class="anchor" id="ExtractionTools"></a>
+Tools for Extracting Keys from iKGF Files</h1>
+<p>The Intel&reg; 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.</p>
+<p>To access the tools, go to <code>_install/epid-sdk/tools</code> in the SDK directory.</p>
+<p>You need to build the SDK before you can use these tools. For more information, refer to <a class="el" href="BuildingSdk.html">Building from Source</a>.</p>
+<p>The following tools are available:</p>
+<table class="doxtable">
+<tr>
+<th>Tool </th><th>Purpose </th></tr>
+<tr>
+<td><code>extractgrps</code> </td><td>Extracts group public keys </td></tr>
+<tr>
+<td><code>extractkeys</code> </td><td>Extracts member private keys </td></tr>
+</table>
+<h2><a class="anchor" id="ExtractionTools_extractgrps"></a>
+Extracting Group Public Keys</h2>
+<p>The <code>extractgrps</code> tool extracts group public keys from the input file to the current directory. </p><pre class="fragment">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
+</pre><h2><a class="anchor" id="ExtractionTools_extractkeys"></a>
+Extracting Member Private Keys</h2>
+<p>The <code>extractkeys</code> tool extracts member private keys from the input file to the current directory. </p><pre class="fragment">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</pre> </div></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/EpidOverview.html b/doc/html/EpidOverview.html
index ae20c68..f720905 100644
--- a/doc/html/EpidOverview.html
+++ b/doc/html/EpidOverview.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -86,7 +86,7 @@ Roles</h1>
</div>
<h2><a class="anchor" id="EpidOverview_Issuers"></a>
Issuers</h2>
-<p>The issuer is responsible for managing group membership.</p>
+<p>The issuer is responsible for managing group membership. Issuer functionality is not included in the SDK.</p>
<p>The issuer manages groups by doing the following:</p>
<ul>
<li>Creates groups by generating one issuing private key and one group certificate for each group. The group certificate contains the group public key.</li>
@@ -119,6 +119,7 @@ Verifiers</h2>
<li>Confirm a member is in fact a member of a given group in good standing.</li>
<li>Obtain group certificates and revocation lists from issuers.</li>
<li>Negotiate details of signature protocol with members.</li>
+<li>Manage a private list of revoked members, also called the verifier blacklist.</li>
</ul>
<div class="image">
<img src="epid_diagram_verifier_high_level.png" alt="epid_diagram_verifier_high_level.png"/>
@@ -137,7 +138,7 @@ Groups</h1>
<h1><a class="anchor" id="EpidOverview_Keys"></a>
Keys</h1>
<p>The Intel&reg; 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.</p>
-<p>Additionally, in the Intel&reg; 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 <a class="el" href="SignVerifyTutorial.html#SignVerifyTutorial_Revocation_Group">Revocation</a>.</p>
+<p>Additionally, in the Intel&reg; 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 <a class="el" href="Revocation.html">In-Depth Explanation of Revocation</a>.</p>
<h2><a class="anchor" id="EpidOverview_Group_public_key"></a>
Group Public Key</h2>
<p>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.</p>
diff --git a/doc/html/Glossary.html b/doc/html/Glossary.html
index 09a29e6..f4c563b 100644
--- a/doc/html/Glossary.html
+++ b/doc/html/Glossary.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -62,7 +62,8 @@ $(document).ready(function(){initNavTree('Glossary.html','');});
</div><!--header-->
<div class="contents">
<div class="toc"><h3>Table of Contents</h3>
-<ul><li class="level1"><a href="#Glossary_Daa">DAA</a></li>
+<ul><li class="level1"><a href="#Issuing_CA">CA public key</a></li>
+<li class="level1"><a href="#Glossary_Daa">DAA</a></li>
<li class="level1"><a href="#Glossary_EllipticCurve">Elliptic curve</a></li>
<li class="level1"><a href="#Glossary_EllipticCurvePoint">Elliptic curve point</a></li>
<li class="level1"><a href="#Glossary_Group">Group</a></li>
@@ -81,7 +82,10 @@ $(document).ready(function(){initNavTree('Glossary.html','');});
<li class="level1"><a href="#Glossary_Verifier">Verifier</a></li>
</ul>
</div>
-<div class="textblock"><h1><a class="anchor" id="Glossary_Daa"></a>
+<div class="textblock"><h1><a class="anchor" id="Issuing_CA"></a>
+CA public key</h1>
+<p>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.</p>
+<h1><a class="anchor" id="Glossary_Daa"></a>
DAA</h1>
<p>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&reg; 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.</p>
<h1><a class="anchor" id="Glossary_EllipticCurve"></a>
@@ -117,7 +121,7 @@ Intel® EPID signature</h1>
<p>An Intel&reg; 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.</p>
<h1><a class="anchor" id="Glossary_Issuer"></a>
Issuer</h1>
-<p>The issuer is the entity in the Intel&reg; EPID scheme that is responsible for managing group membership. An example of an issuer is the Intel Key Generation Facility.</p>
+<p>The issuer is the entity in the Intel&reg; 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 <a class="el" href="IssuerMaterial.html">Sample Issuer Material</a>. For tools that can help you if you choose to use iKGF as your issuer, refer to <a class="el" href="ChoosingiKGF.html">If You Choose iKGF as Your Issuer</a>.</p>
<p>The issuer manages groups by doing the following:</p>
<ul>
<li>Creates groups by generating one issuing private key and one group certificate for each group. The group certificate contains the group public key.</li>
@@ -150,7 +154,7 @@ Pairing</h1>
<h1><a class="anchor" id="Glossary_Revocation"></a>
Revocation, revocation lists</h1>
<p>Revocation lists are data structures used by the verifier to identify members that are no longer approved members of the group.</p>
-<p>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).</p>
+<p>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.</p>
<h1><a class="anchor" id="Glossary_Verifier"></a>
Verifier</h1>
<p>The verifier is the entity that checks an Intel&reg; EPID signature to establish whether it was signed by an entity or device that is a member in good standing.</p>
diff --git a/doc/html/ImplementationNotes.html b/doc/html/ImplementationNotes.html
index c8a9555..6aa26d7 100644
--- a/doc/html/ImplementationNotes.html
+++ b/doc/html/ImplementationNotes.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -77,11 +77,11 @@ Random Number Generation</h1>
Protecting Secrets</h1>
<p>Member code works with private keys, so member code must be run in a trusted environment.</p>
<dl class="section warning"><dt>Warning</dt><dd>If member memory is available to an untrusted source, the member private key could be exposed.</dd></dl>
-<p>The <a class="el" href="group___epid_common.html#gad471f600f6032f432b99432fda97a070" title="Clear information stored in block of memory pointer to by ptr. ">EpidZeroMemory</a> function is used by the memory allocation routines <a class="el" href="group___epid_common.html#gada170fd890504b013139f4a33033ae4b" title="Allocates memory of size bytes. ">EpidAlloc</a>, <a class="el" href="group___epid_common.html#ga6911838728d546e4a51d7bcb8404525c" title="Reallocates memory allocated by EpidAlloc. ">EpidRealloc</a> and <a class="el" href="group___epid_common.html#gaeae76709e6bfc80c9d79ec4943ccc1ac" title="Frees memory allocated by EpidAlloc. ">EpidFree</a> to wipe the memory as memory is freed.</p>
-<dl class="section warning"><dt>Warning</dt><dd>The <a class="el" href="group___epid_common.html#gad471f600f6032f432b99432fda97a070" title="Clear information stored in block of memory pointer to by ptr. ">EpidZeroMemory</a> 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).</dd></dl>
+<p>The <code>EpidZeroMemory</code> function is used by the memory allocation routines <code>EpidAlloc</code>, <code>EpidRealloc</code> and <code>EpidFree</code> to wipe the memory as memory is freed.</p>
+<dl class="section warning"><dt>Warning</dt><dd>The <code>EpidZeroMemory</code> 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. <code>memcpy_s</code> or <code>SecureZeroMemory</code>).</dd></dl>
<h1><a class="anchor" id="ImplementationNotes_MathPrimitives"></a>
Replacing Math Primitives</h1>
-<p>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 the <code>epid/common/math</code> directory. Math functionality has detailed tests to ease validation.</p>
+<p>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 <code>epid/common/math</code> directory. Math functionality has detailed tests to ease validation.</p>
<h1><a class="anchor" id="ImplementationNotes_SerializedTypes"></a>
Octstring/Buffer Types</h1>
<p>Serialized information in the SDK is passed in fixed size buffer types whenever possible. Collectively these fixed size buffer types are called Octstrings.</p>
diff --git a/doc/html/IssuerMaterial.html b/doc/html/IssuerMaterial.html
index 67d8ab0..8a9012a 100644
--- a/doc/html/IssuerMaterial.html
+++ b/doc/html/IssuerMaterial.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -62,65 +62,222 @@ $(document).ready(function(){initNavTree('IssuerMaterial.html','');});
</div><!--header-->
<div class="contents">
<div class="toc"><h3>Table of Contents</h3>
-<ul><li class="level1"><a href="#IssuerMaterial_Groups">Sample Groups</a><ul><li class="level2"><a href="#IssuerMaterial_Groups_groupa">groupa</a></li>
-<li class="level2"><a href="#IssuerMaterial_Groups_groupb">groupb</a></li>
+<ul><li class="level1"><a href="#IssuerMaterial_Groups">Sample Groups</a><ul><li class="level2"><a href="#IssuerMaterial_Groups_groupa">Sample Group A</a></li>
+<li class="level2"><a href="#IssuerMaterial_Groups_groupb">Sample Group B</a></li>
</ul>
</li>
<li class="level1"><a href="#IssuerMaterial_GroupRls">Group Based Revocation Lists</a></li>
+<li class="level1"><a href="#IssuerMaterial_CmpGroups">Compressed Member Private Key</a><ul><li class="level2"><a href="#IssuerMaterial_CmpGroups_groupa">Compressed Sample Group A</a></li>
+<li class="level2"><a href="#IssuerMaterial_CmpGroups_groupb">Compressed Sample Group B</a></li>
+</ul>
+</li>
+<li class="level1"><a href="#IssuerMaterial_CmpGroupRls">Compressed Group Based Revocation Lists</a></li>
</ul>
</div>
-<div class="textblock"><p>Because the SDK does not include issuer APIs, pre-generated sample data is included for validation purposes.</p>
-<dl class="section note"><dt>Note</dt><dd>Sample compressed key material is not included in the package.</dd></dl>
-<h1><a class="anchor" id="IssuerMaterial_Groups"></a>
-Sample Groups</h1>
-<p>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.</p>
-<p>All groups have the following:</p>
+<div class="textblock"><p>The Intel&reg; EPID SDK does not include issuer APIs. That means you cannot generate the following items for validation:</p>
<ul>
<li>Group public key, which corresponds to the issuing private key kept by the issuer</li>
-<li>Signature based revocation list</li>
-<li>Private key based revocation list</li>
-<li>Member private keys, generated from the issuing private key</li>
+<li>Member private keys</li>
+<li>Signature based revocation list (SigRL)</li>
+<li>Private key based revocation list (PrivRL)</li>
+<li>Group based revocation list (GroupRL)</li>
</ul>
-<p>If a signature based revocation list or private key based revocation list does not exist, it is assumed to be empty.</p>
+<p>For validation purposes, you can use pre-generated sample data. This sample issuer material includes sample groups and revocation lists.</p>
+<p>Sample compressed key material is not included in the package.</p>
+<h1><a class="anchor" id="IssuerMaterial_Groups"></a>
+Sample Groups</h1>
<h2><a class="anchor" id="IssuerMaterial_Groups_groupa"></a>
-groupa</h2>
-<p>There are eight members in <b>groupa</b>:</p>
-<ul>
-<li><b>groupa/member0</b> - A non-revoked member.</li>
-<li><b>groupa/member1</b> - Another non-revoked member.</li>
-<li><b>groupa/privrevokedmember0</b> - A revoked member. Revoked by Private-Key based revocation list (<code>groupa/privrl.bin</code>)</li>
-<li><b>groupa/privrevokedmember1</b> - A revoked member. Revoked by Private-Key based revocation list (<code>groupa/privrl.bin</code>)</li>
-<li><b>groupa/privrevokedmember2</b> - A revoked member. Revoked by Private-Key based revocation list (<code>groupa/privrl.bin</code>)</li>
-<li><b>groupa/sigrevokedmember0</b> - A revoked member. Revoked by Signature based revocation list (<code>groupa/sigrl.bin</code>)</li>
-<li><b>groupa/sigrevokedmember1</b> - A revoked member. Revoked by Signature based revocation list (<code>groupa/sigrl.bin</code>)</li>
-<li><b>groupa/sigrevokedmember2</b> - A revoked member. Revoked by Signature based revocation list (<code>groupa/sigrl.bin</code>)</li>
-</ul>
-<p>The following are <b>groupa</b> revocation lists:</p>
-<ul>
-<li><code>groupa/privrl.bin</code> - Private-Key based revocation list. <b>privrevokedmember0</b>, <b>privrevokedmember1</b> and privrevokedmember2** revoked.</li>
-<li><code>groupa/sigrl.bin</code> - Signature based revocation list. <b>sigrevokedmember0</b>, <b>sigrevokedmember0</b> and sigrevokedmember0** revoked.</li>
-</ul>
+Sample Group A</h2>
+<p>Group A (<code>groupa</code>) contains eight group members and sample revocation lists:</p>
+<p><br />
+</p>
+<h3>Members in Group A</h3>
+<table class="doxtable">
+<tr>
+<th>Group Member </th><th>Revocation Status </th></tr>
+<tr>
+<td>groupa/member0 </td><td>Non-revoked </td></tr>
+<tr>
+<td>groupa/member1 </td><td>Non-revoked </td></tr>
+<tr>
+<td>groupa/privrevokedmember0 </td><td>Revoked in PrivRL </td></tr>
+<tr>
+<td>groupa/privrevokedmember1 </td><td>Revoked in PrivRL </td></tr>
+<tr>
+<td>groupa/privrevokedmember2 </td><td>Revoked in PrivRL </td></tr>
+<tr>
+<td>groupa/sigrevokedmember0 </td><td>Revoked in SigRL </td></tr>
+<tr>
+<td>groupa/sigrevokedmember1 </td><td>Revoked in SigRL </td></tr>
+<tr>
+<td>groupa/sigrevokedmember2 </td><td>Revoked in SigRL </td></tr>
+</table>
+<p><br />
+</p>
+<h3>Revocation Lists for Group A</h3>
+<table class="doxtable">
+<tr>
+<th>Description </th><th>Directory Location </th><th>Revoked Members </th></tr>
+<tr>
+<td>Private key based revocation list </td><td><code>groupa/privrl.bin</code> </td><td>privrevokedmember0, <br />
+ privrevokedmember1, <br />
+ privrevokedmember2 </td></tr>
+<tr>
+<td>Signature based revocation list </td><td><code>groupa/sigrl.bin</code> </td><td>sigrevokedmember0, <br />
+ sigrevokedmember1, <br />
+ sigrevokedmember2 </td></tr>
+<tr>
+<td>Empty private key based revocation list </td><td><code>groupa/privrl_empty.bin</code> </td><td>None </td></tr>
+<tr>
+<td>Empty signature based revocation list </td><td><code>groupa/sigrl_empty.bin</code> </td><td>None </td></tr>
+</table>
+<p><br />
+</p>
<h2><a class="anchor" id="IssuerMaterial_Groups_groupb"></a>
-groupb</h2>
-<p>There are four members in <b>groupb</b>:</p>
-<ul>
-<li><b>groupb/member0</b> - A non-revoked member.</li>
-<li><b>groupb/member1</b> - Another non-revoked member.</li>
-<li><b>groupb/privrevokedmember0</b> - A revoked member. Revoked by Private-Key based revocation list (<code>groupb/privrl.bin</code>)</li>
-<li><b>groupb/sigrevokedmember0</b> - A revoked member. Revoked by Signature based revocation list (<code>groupb/sigrl.bin</code>)</li>
-</ul>
-<p>The following are <b>groupb</b> revocation lists:</p>
-<ul>
-<li><code>groupb/privrl.bin</code> - Private-Key based revocation list. <b>privrevokedmember0</b> revoked.</li>
-<li><code>groupb/sigrl.bin</code> - Signature based revocation list. <b>sigrevokedmember0</b> revoked.</li>
-</ul>
+Sample Group B</h2>
+<p>Group B (<code>groupb</code>) contains four group members and sample revocation lists:</p>
+<p><br />
+</p>
+<h3>Members in Group B</h3>
+<table class="doxtable">
+<tr>
+<th>Group Member </th><th>Revocation Status </th></tr>
+<tr>
+<td>groupb/member0 </td><td>Non-revoked </td></tr>
+<tr>
+<td>groupb/member1 </td><td>Non-revoked </td></tr>
+<tr>
+<td>groupb/privrevokedmember0 </td><td>Revoked in PrivRL </td></tr>
+<tr>
+<td>groupb/sigrevokedmember0 </td><td>Revoked in SigRL </td></tr>
+</table>
+<p><br />
+</p>
+<h3>Revocation Lists for Group B</h3>
+<table class="doxtable">
+<tr>
+<th>Description </th><th>Directory Location </th><th>Revoked Members </th></tr>
+<tr>
+<td>Private key based revocation list </td><td><code>groupb/privrl.bin</code> </td><td>privrevokedmember0 </td></tr>
+<tr>
+<td>Signature based revocation list </td><td><code>groupb/sigrl.bin</code> </td><td>sigrevokedmember0 </td></tr>
+<tr>
+<td>Empty private key based revocation list </td><td><code>groupb/privrl_empty.bin</code> </td><td>None </td></tr>
+<tr>
+<td>Empty signature based revocation list </td><td><code>groupb/sigrl_empty.bin</code> </td><td>None </td></tr>
+</table>
<h1><a class="anchor" id="IssuerMaterial_GroupRls"></a>
Group Based Revocation Lists</h1>
<p>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.</p>
-<ul>
-<li><code>grprl_empty.bin</code> - No entries</li>
-<li><code>grprl.bin</code> - One entry in which <b>groupb</b> is revoked. </li>
-</ul>
+<p><br />
+</p>
+<h3>Sample GrpRLs</h3>
+<table class="doxtable">
+<tr>
+<th>Group Based Revocation List </th><th>Description </th></tr>
+<tr>
+<td><code>grprl_empty.bin</code> </td><td>No entries </td></tr>
+<tr>
+<td><code>grprl.bin</code> </td><td>One entry in which <code>groupb</code> is revoked </td></tr>
+</table>
+<h1><a class="anchor" id="IssuerMaterial_CmpGroups"></a>
+Compressed Member Private Key</h1>
+<p>Sample Groups</p>
+<p>Intel&reg; 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.</p>
+<h2><a class="anchor" id="IssuerMaterial_CmpGroups_groupa"></a>
+Compressed Sample Group A</h2>
+<p>Group A (<code>groupa</code>) contains eight group members and sample revocation lists:</p>
+<p><br />
+</p>
+<h3>Members in Group A</h3>
+<table class="doxtable">
+<tr>
+<th>Group Member </th><th>Revocation Status </th></tr>
+<tr>
+<td>groupa/member0 </td><td>Non-revoked </td></tr>
+<tr>
+<td>groupa/member1 </td><td>Non-revoked </td></tr>
+<tr>
+<td>groupa/privrevokedmember0 </td><td>Revoked in PrivRL </td></tr>
+<tr>
+<td>groupa/privrevokedmember1 </td><td>Revoked in PrivRL </td></tr>
+<tr>
+<td>groupa/privrevokedmember2 </td><td>Revoked in PrivRL </td></tr>
+<tr>
+<td>groupa/sigrevokedmember0 </td><td>Revoked in SigRL </td></tr>
+<tr>
+<td>groupa/sigrevokedmember1 </td><td>Revoked in SigRL </td></tr>
+<tr>
+<td>groupa/sigrevokedmember2 </td><td>Revoked in SigRL </td></tr>
+</table>
+<p><br />
+</p>
+<h3>Revocation Lists for Group A</h3>
+<table class="doxtable">
+<tr>
+<th>Description </th><th>Directory Location </th><th>Revoked Members </th></tr>
+<tr>
+<td>Private key based revocation list </td><td><code>groupa/privrl.bin</code> </td><td>privrevokedmember0, <br />
+ privrevokedmember1, <br />
+ privrevokedmember2 </td></tr>
+<tr>
+<td>Signature based revocation list </td><td><code>groupa/sigrl.bin</code> </td><td>sigrevokedmember0, <br />
+ sigrevokedmember1, <br />
+ sigrevokedmember2 </td></tr>
+<tr>
+<td>Empty private key based revocation list </td><td><code>groupa/privrl_empty.bin</code> </td><td>None </td></tr>
+<tr>
+<td>Empty signature based revocation list </td><td><code>groupa/sigrl_empty.bin</code> </td><td>None </td></tr>
+</table>
+<p><br />
+</p>
+<h2><a class="anchor" id="IssuerMaterial_CmpGroups_groupb"></a>
+Compressed Sample Group B</h2>
+<p>Group B (<code>groupb</code>) contains four group members and sample revocation lists:</p>
+<p><br />
+</p>
+<h3>Members in Group B</h3>
+<table class="doxtable">
+<tr>
+<th>Group Member </th><th>Revocation Status </th></tr>
+<tr>
+<td>groupb/member0 </td><td>Non-revoked </td></tr>
+<tr>
+<td>groupb/member1 </td><td>Non-revoked </td></tr>
+<tr>
+<td>groupb/privrevokedmember0 </td><td>Revoked in PrivRL </td></tr>
+<tr>
+<td>groupb/sigrevokedmember0 </td><td>Revoked in SigRL </td></tr>
+</table>
+<p><br />
+</p>
+<h3>Revocation Lists for Group B</h3>
+<table class="doxtable">
+<tr>
+<th>Description </th><th>Directory Location </th><th>Revoked Members </th></tr>
+<tr>
+<td>Private key based revocation list </td><td><code>groupb/privrl.bin</code> </td><td>privrevokedmember0 </td></tr>
+<tr>
+<td>Signature based revocation list </td><td><code>groupb/sigrl.bin</code> </td><td>sigrevokedmember0 </td></tr>
+<tr>
+<td>Empty private key based revocation list </td><td><code>groupb/privrl_empty.bin</code> </td><td>None </td></tr>
+<tr>
+<td>Empty signature based revocation list </td><td><code>groupb/sigrl_empty.bin</code> </td><td>None </td></tr>
+</table>
+<h1><a class="anchor" id="IssuerMaterial_CmpGroupRls"></a>
+Compressed Group Based Revocation Lists</h1>
+<p>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.</p>
+<p><br />
+</p>
+<h3>Sample GrpRLs</h3>
+<table class="doxtable">
+<tr>
+<th>Group Based Revocation List </th><th>Description </th></tr>
+<tr>
+<td><code>grprl_empty.bin</code> </td><td>No entries </td></tr>
+<tr>
+<td><code>grprl.bin</code> </td><td>One entry in which <code>groupb</code> is revoked </td></tr>
+</table>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
diff --git a/doc/html/LegalInformation.html b/doc/html/LegalInformation.html
index 959bf33..e86d60f 100644
--- a/doc/html/LegalInformation.html
+++ b/doc/html/LegalInformation.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/Revocation.html b/doc/html/Revocation.html
new file mode 100644
index 0000000..7191f2d
--- /dev/null
+++ b/doc/html/Revocation.html
@@ -0,0 +1,142 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: In-Depth Explanation of Revocation</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('Revocation.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<div class="title">In-Depth Explanation of Revocation </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>This in-depth explanation covers the available options to revoke members in the Intel&reg; EPID scheme. It also provides details on how and why each type of revocation is used.</p>
+<p><br />
+</p>
+<h1><a class="anchor" id="revocation_hierarchy"></a>
+Revocation Hierarchy</h1>
+<p>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.</p>
+<p>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.</p>
+<p>If the group is revoked, the verifier stops and reports it.</p>
+<p>If the member private key is revoked, the verifier does not check the signature based revocation list.</p>
+<h1><a class="anchor" id="revocation_versions"></a>
+Revocation List Versions</h1>
+<p>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.</p>
+<h1><a class="anchor" id="group_revocation"></a>
+Group Based Revocation</h1>
+<p>The group based revocation list, also called the GroupRL, has a list of revoked groups.</p>
+<p>The issuer revokes the entire Intel&reg; EPID group by revoking the group public key. This results in the revocation of all members of a group.</p>
+<h2><a class="anchor" id="group_revocation_reasons"></a>
+Reasons the Issuer Might Revoke a Group</h2>
+<p>Group revocation is expected to be a rare event and would only happen under limited criteria.</p>
+<p>Reasons to revoke a group might include:</p>
+<ul>
+<li>A manufacturing defect causes the devices in the group to malfunction.</li>
+<li>A subscriber terminates or violates the service agreement.</li>
+<li>The Intel&reg; EPID issuing private key is exposed.</li>
+<li>A critical vulnerability in a member implementation is identified.</li>
+<li>Performance problems arise due to the expensive calculation of non-revoked proofs in signature based revocation, and a replacement group needs to be provisioned.</li>
+</ul>
+<h1><a class="anchor" id="private_key_revocation"></a>
+Private Key Based Revocation</h1>
+<p>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.</p>
+<p>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.</p>
+<h2><a class="anchor" id="private_key_revocation_reasons"></a>
+Reasons the Issuer Might Revoke a Member Private Key</h2>
+<p>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.</p>
+<h1><a class="anchor" id="signature_revocation"></a>
+Signature Based Revocation</h1>
+<p>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.</p>
+<p>The issuer manages and publishes the signature based revocation list, also called SigRL.</p>
+<p>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.</p>
+<p>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.</p>
+<h2><a class="anchor" id="revoked_proofs"></a>
+Signing with Non-Revoked Proofs</h2>
+<p>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&reg; EPID signature that includes a number of non-revoked proofs that correspond to each revoked member in the SigRL.</p>
+<p>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.</p>
+<p>For privacy, Intel&reg; EPID signatures that are generated by the same member are unlinkable by default. This means that the verifier cannot recognize if two Intel&reg; EPID signatures are from the same device. Therefore, multiple Intel&reg; EPID signatures on the SigRL could be from the same member.</p>
+<h2><a class="anchor" id="signature_revocation_reasons"></a>
+Reasons the Issuer Might Revoke an Intel® EPID Signature</h2>
+<p>Reasons for revoking a signature might include the following:</p>
+<ul>
+<li>A member's signature is connected to an aspect of its behavior that indicates that the member is compromised.</li>
+<li>A member repeatedly generates a constant signature for the same message. Per the Intel&reg; EPID algorithm, multiple signatures generated for the same challenge must be different.</li>
+</ul>
+<h1><a class="anchor" id="verifier_blacklist"></a>
+Verifier Blacklist Revocation</h1>
+<p>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.</p>
+<p>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.</p>
+<p>For more information on basenames, refer to <a class="el" href="Basenames.html#name_based">Name Based Signatures</a>.</p>
+<p>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.</p>
+<p>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.</p>
+<h2><a class="anchor" id="verifier_blacklist_reasons"></a>
+Reasons the Verifier Might Revoke an Intel® EPID Signature</h2>
+<p>Reasons a verifier might revoke a member based on its tracked signatures include the following:</p>
+<ul>
+<li>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.</li>
+<li>A service provider detects suspicious behavior that might indicate illegal activity or another violation of the service provider's policy. </li>
+</ul>
+</div></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/SdkOverview.html b/doc/html/SdkOverview.html
index b9432df..0cc6124 100644
--- a/doc/html/SdkOverview.html
+++ b/doc/html/SdkOverview.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -77,6 +77,7 @@ SDK Components</h1>
</div>
<p><br />
The Intel&reg; EPID SDK is divided into the following components:</p>
+<p>Components in the SDK Core implement the features of Intel&reg; EPID.</p>
<table class="doxtable">
<tr>
<th>Component </th><th>Description </th></tr>
@@ -90,6 +91,11 @@ SDK Components</h1>
<td>math </td><td>Math primitives used by member and verifier </td></tr>
<tr>
<td>IPP </td><td>A C-only non-optimized subset of Intel&reg; IPP </td></tr>
+</table>
+<p><a class="el" href="Examples.html">Examples</a> show how to use the SDK APIs in working code.</p>
+<table class="doxtable">
+<tr>
+<th>Component </th><th>Description </th></tr>
<tr>
<td>signmsg </td><td>A sample program showing how to sign messages </td></tr>
<tr>
@@ -97,13 +103,37 @@ SDK Components</h1>
<tr>
<td>util </td><td>Common utilities used by samples </td></tr>
<tr>
+<td>Sample Issuer Material </td><td>Sample keys and revocation lists </td></tr>
+</table>
+<p>Tools implement utility code to interact with Intel&reg; EPID related services such as <a class="el" href="ChoosingiKGF.html">the Intel&reg; Key Generation</a>Facility (iKGF)".</p>
+<table class="doxtable">
+<tr>
+<th>Component </th><th>Description </th></tr>
+<tr>
+<td>extractgrps </td><td>A tool to extract groups from a bulk group file </td></tr>
+<tr>
+<td>extractkeys </td><td>A tool to extract member keys from a bulk key file </td></tr>
+<tr>
+<td>revokegrp </td><td>A tool to create a revocation request for a group </td></tr>
+<tr>
+<td>revokekey </td><td>A tool to create a revocation request for a member key </td></tr>
+<tr>
+<td>revokesig </td><td>A tool to create a revocation request from a signature </td></tr>
+</table>
+<p>The SDK comes with a number of other components that support building and validating the code.</p>
+<table class="doxtable">
+<tr>
+<th>Component </th><th>Description </th></tr>
+<tr>
<td>gtest </td><td>gtest unit test framework </td></tr>
<tr>
<td>Build Scripts </td><td>Scripts to configure and build the SDK </td></tr>
-<tr>
-<td>Sample Issuer Material </td><td>Sample keys and revocation lists </td></tr>
</table>
<p>Math primitives are implemented in the <em>math</em> sub-component of <em>common</em>. The reference math primitive implementation is based on a non-optimized Vanilla C subset of the Intel&reg; Performance Primitives. <em>Math</em> is designed so that you can replace its implementation to call custom hardware IP blocks or optimized libraries.</p>
+<h2>Intel&reg; EPID 1.1 Compatibility</h2>
+<p>In addition to the default Intel&reg; EPID 2.0 APIs, the <em>verifier</em> component also includes APIs that allow verification of Intel&reg; EPID 1.1 signatures.</p>
+<p>Billions of existing devices, including most Intel platforms manufactured since 2008, create signatures that need Intel&reg; EPID 1.1 verification.</p>
+<p>For details on verifying Intel&reg; EPID 1.1 signatures see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> in the API Reference.</p>
<h1><a class="anchor" id="SdkOverview_Files"></a>
Filesystem Layout</h1>
<p>The Intel&reg; EPID SDK has two filesystem layouts: the Source Layout and the Install Layout.</p>
@@ -115,7 +145,7 @@ Source Layout</h2>
|__ LICENSE.txt Distribution license
|__ NOTICE.txt Legal notices
|__ README.md Readme
-|__ RELEASE_NOTES.md Release notes
+|__ CHANGELOG.md Change log
|__ SConstruct Main build configuration
|
|__ doc/
@@ -130,6 +160,7 @@ Source Layout</h2>
|
|__ 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
@@ -139,6 +170,14 @@ Source Layout</h2>
| |__ 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
</pre><h2><a class="anchor" id="SdkOverview_Files_InstallLayout"></a>
Install Layout</h2>
<p>The Install Layout contains the data developers need to develop and build their applications using the Intel&reg; 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. </p><pre class="fragment">_install/
@@ -148,7 +187,8 @@ Install Layout</h2>
| |__ &lt;platform&gt; Target specific static libraries for the SDK
|
|__example/ Sample applications and data
- |__test/ Unit test executables (if unit tests built)</pre> </div></div><!-- contents -->
+ |__test/ Unit test executables (if unit tests built)
+ |__tools/ Tools</pre> </div></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
<!-- start footer part -->
diff --git a/doc/html/SignVerifyTutorial.html b/doc/html/SignVerifyTutorial.html
index 3aca35d..5fc86a4 100644
--- a/doc/html/SignVerifyTutorial.html
+++ b/doc/html/SignVerifyTutorial.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -74,73 +74,120 @@ $(document).ready(function(){initNavTree('SignVerifyTutorial.html','');});
</ul>
</div>
<div class="textblock"><p>The Intel&reg; EPID SDK provides example tools to show you how to use the Intel&reg; EPID SDK APIs. These examples are called <em>signmsg</em> and <em>verifysig</em>.</p>
-<p>You can build these examples using the instructions in <a class="el" href="BuildingSdk.html">Building From Source</a>. The tutorial assumes <code>_install/epid-sdk/example</code> is the current directory.</p>
+<p>You can build these examples using the instructions in <a class="el" href="BuildingSdk.html">Building from Source</a>. The tutorial assumes <code>_install/epid-sdk/example</code> is the current directory.</p>
<p>All command lines in this tutorial use posix command line conventions; for other systems, adjust accordingly.</p>
-<p>For the code used in this tutorial, refer to <a href="examples.html"><b>Examples</b></a>.</p>
+<p>For the code used in this tutorial, refer to <a class="el" href="Examples.html">Walkthroughs of Examples Showing API Usage</a>.</p>
<dl class="section note"><dt>Note</dt><dd>The data for running this tutorial is pre-generated. Once the samples are built, the data is in the <code>_install/epid-sdk/example/data</code> directory. See <a class="el" href="IssuerMaterial.html">Sample Issuer Material</a>.</dd></dl>
<h1><a class="anchor" id="SignVerifyTutorial_Signmmsg"></a>
Creating an Intel® EPID Signature of a Given Message</h1>
-<p>The example application <em>signmsg</em> shows you how to create an Intel&reg; EPID Signature of a given message. </p><pre class="fragment">$ ./signmsg -h
+<p>The example application <em>signmsg</em> shows you how to create an Intel&reg; EPID signature of a given message. </p><pre class="fragment">$ ./signmsg -h
Usage: signmsg [OPTION]...
Create Intel(R) EPID signature of message
Options:
+ --sig=FILE
+ write signature to FILE (default: sig.dat)
---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
---hashalg=NAME SHA-256 | SHA-384 | SHA-512 (default: SHA-512)
---capubkey=FILE load IoT Issuing CA public key from FILE
- (default: cacert.bin)
--h,--help display this help and exit
--v,--verbose print status messages to stdout
+ --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
</pre><p>To sign a message, a group member in good standing uses the following command: </p><pre class="fragment">$ ./signmsg --msg="test0"
-</pre><p>The above command signs a message "test0". <em>signmsg</em> uses default options for the group public key, member private key, and hash algorithm (SHA-512). All other parameters that are not given are ignored. The command produces a signature file: <code>sig.dat</code></p>
+</pre><p>The above command signs a message "test0". <em>signmsg</em> 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: <code>sig.dat</code></p>
<h1><a class="anchor" id="SignVerifyTutorial_Verifysig"></a>
Verifying an Intel® EPID Signature</h1>
-<p>The example application <em>verifysig</em> shows you how to verify that a given Intel&reg; EPID Signature is produced by a member in good standing. </p><pre class="fragment">$ ./verifysig -h
+<p>The example application <em>verifysig</em> shows you how to verify that a given Intel&reg; EPID signature is produced by a member in good standing. </p><pre class="fragment">$ ./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
---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 based 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
---hashalg=NAME SHA-256 | SHA-384 | SHA-512 (default: SHA-512)
---capubkey=FILE load IoT Issuing CA public key from FILE
- (default: cacert.bin)
--h,--help display this help and exit
--v,--verbose print status messages to stdout
+ -v, --verbose
+ print status messages to stdout
</pre><p>To verify that a signature is from a member in good standing, the verifier uses the following command: </p><pre class="fragment">$ ./verifysig --msg="test0"
signature verified successfully
-</pre><p>This verifies that the default signature file <code>sig.dat</code> is generated for the message "test0" by a member in good standing. <em>verifysig</em> uses default inputs for group public key and hash algorithm (SHA-512). All other parameters are ignored. The output <code>verifysig: signature verified successfully</code> denotes that the verification is successful.</p>
+</pre><p>This verifies that the default signature file <code>sig.dat</code> is generated for the message "test0" by a member in good standing. <em>verifysig</em> uses default inputs for group public key, hash algorithm and IoT Issuing CA public key. All other parameters are ignored. The output <code>verifysig: signature verified successfully</code> denotes that the verification is successful.</p>
<h1><a class="anchor" id="SignVerifyTutorial_Basename"></a>
Linking Intel® EPID Signatures from the Same Member</h1>
-<p>A name-based signature is a type of signature that gives the verifier the ability to link Intel&reg; EPID signatures from the same member, reducing the member's privacy.</p>
-<p>The verifier can ask the member to sign a message with a basename that the verifier chooses. If the member uses the name-based signature option (i.e., in cases where a basename is specified), then all the signatures created by the member using the same basename are linkable by the verifier.</p>
+<p>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.</p>
+<p>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.</p>
+<p>If a basename is not provided, then the member uses a random basename and the signature generated by the member is anonymous.</p>
+<p>For more general information on why you might want to use a basename, refer to <a class="el" href="Basenames.html#name_based">Name Based Signatures</a>.</p>
<dl class="section warning"><dt>Warning</dt><dd>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.</dd></dl>
-<p>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.</p>
-<p>If basename is not provided, then the member uses a random basename and the signature generated by the member is anonymous.</p>
-<p>To Sign message "test0" with a basename "base0": </p><pre class="fragment">$ ./signmsg --msg="test0" --bsn="base0"
+<p>To sign message "test0" with a basename "base0": </p><pre class="fragment">$ ./signmsg --msg="test0" --bsn="base0"
</pre><p>To verify the signature: </p><pre class="fragment">$ ./verifysig --msg="test0" --bsn="base0"
verifysig: signature verified successfully
-</pre><h1><a class="anchor" id="SignVerifyTutorial_VerificationFailures"></a>
+</pre><p>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.</p>
+<p>Member and verifier must also use the same hash algorithm and basename, if applicable.</p>
+<h1><a class="anchor" id="SignVerifyTutorial_VerificationFailures"></a>
Expected Failures</h1>
<p>The signature verification process fails if there is a parameter mismatch between sign and verify operations. Here are some examples.</p>
<p>Verification fails if there is a mismatch in the message: </p><pre class="fragment">$ ./signmsg --msg="test0"
diff --git a/doc/html/SignmsgWalkthru.html b/doc/html/SignmsgWalkthru.html
new file mode 100644
index 0000000..f41b6bd
--- /dev/null
+++ b/doc/html/SignmsgWalkthru.html
@@ -0,0 +1,170 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: Generating an Intel&reg; EPID Signature</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('SignmsgWalkthru.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<div class="title">Generating an Intel&reg; EPID Signature </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>This walkthrough of the signmsg example shows you how to use SDK APIs to generate an Intel&reg; EPID signature. Signmsg is built during the <a class="el" href="BuildingSdk.html">SDK build</a>.</p>
+<p><br />
+</p>
+<p>First, we include headers so we have access to needed declarations.</p>
+<p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;stdlib.h&gt;</span></div><div class="line"><span class="preprocessor">#include &lt;string.h&gt;</span></div><div class="line"><span class="preprocessor">#include &quot;src/signmsg.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;src/prng.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;util/envutil.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;util/stdtypes.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;util/buffutil.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="member_2api_8h.html">epid/member/api.h</a>&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="file__parser_8h.html">epid/common/file_parser.h</a>&quot;</span></div></div><!-- fragment --></p>
+<p>The <code>prng.h</code> header provides access to a pseudo-random number generator needed for signing, while the utility headers are used by <code>signmsg</code> for logging and buffer management. The <code><a class="el" href="member_2api_8h.html" title="Intel(R) EPID SDK member API. ">epid/member/api.h</a></code> header provides access to the core member APIs. The <code><a class="el" href="file__parser_8h.html" title="Epid issuer material parsing utilities. ">epid/common/file_parser.h</a></code> header provides an API for parsing buffers formatted according to the various IoT Intel&reg; EPID binary file formats.</p>
+<p><br />
+</p>
+<p>We define a stub function responsible for checking that the CA certificate is authorized by the root CA.</p>
+<p><div class="fragment"><div class="line"><span class="keywordtype">bool</span> IsCaCertAuthorizedByRootCa(<span class="keywordtype">void</span> <span class="keyword">const</span>* data, <span class="keywordtype">size_t</span> size) {</div><div class="line"> (void)data;</div><div class="line"> (void)size;</div><div class="line"> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line">}</div></div><!-- fragment --></p>
+<p><code>IsCaCertAuthorizedByRootCa</code> is called from <code>main.c</code> to validate the CA certificate before calling <code>SignMsg</code>. 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.</p>
+<p><br />
+</p>
+<p>The core signing functionality is contained in <code>SignMsg</code>.</p>
+<p><div class="fragment"><div class="line"><a class="code" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> SignMsg(<span class="keywordtype">void</span> <span class="keyword">const</span>* msg, <span class="keywordtype">size_t</span> msg_len, <span class="keywordtype">void</span> <span class="keyword">const</span>* basename,</div><div class="line"> <span class="keywordtype">size_t</span> basename_len, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <span class="keyword">const</span>* signed_sig_rl,</div><div class="line"> <span class="keywordtype">size_t</span> signed_sig_rl_size,</div><div class="line"> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <span class="keyword">const</span>* signed_pubkey,</div><div class="line"> <span class="keywordtype">size_t</span> signed_pubkey_size, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <span class="keyword">const</span>* priv_key_ptr,</div><div class="line"> <span class="keywordtype">size_t</span> privkey_size, <a class="code" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg,</div><div class="line"> <a class="code" href="struct_member_precomp.html">MemberPrecomp</a>* member_precomp, <span class="keywordtype">bool</span> member_precomp_is_input,</div><div class="line"> <a class="code" href="struct_epid_signature.html">EpidSignature</a>** sig, <span class="keywordtype">size_t</span>* sig_len,</div><div class="line"> <a class="code" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> <span class="keyword">const</span>* cacert) {</div></div><!-- fragment --></p>
+<p>The <code>SignMsg</code> parameters are either received by the member, or they are part of the member's configuration. The exceptions are the <code>sig</code> and <code>sig_len</code> parameters, which are used to output the signature.</p>
+<p>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&reg; EPID scheme.</p>
+<p>We use the parameters <code>member_precomp</code> and <code>member_precomp_is_input</code> 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.</p>
+<p>The member knows the group public key and the member private key.</p>
+<p>The member and the verifier agree on the message, basename, hash algorithm, and SigRL that the member uses for signing.</p>
+<p><br />
+</p>
+<p>Next we do basic variable setup and argument checking.</p>
+<p><div class="fragment"><div class="line"> <a class="code" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> sts = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e">kEpidErr</a>;</div><div class="line"> <span class="keywordtype">void</span>* prng = NULL;</div><div class="line"> <a class="code" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a>* member = NULL;</div><div class="line"> <a class="code" href="struct_sig_rl.html">SigRl</a>* sig_rl = NULL;</div><div class="line"></div><div class="line"> <span class="keywordflow">do</span> {</div><div class="line"> <a class="code" href="struct_group_pub_key.html">GroupPubKey</a> pub_key = {0};</div><div class="line"> <a class="code" href="struct_priv_key.html">PrivKey</a> priv_key = {0};</div><div class="line"> <span class="keywordtype">size_t</span> sig_rl_size = 0;</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (!sig) {</div><div class="line"> sts = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf">kEpidBadArgErr</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div></div><!-- fragment --></p>
+<p>We create pointers to resources to be allocated and use the <code>do {} while(0)</code> idiom so that we can reliably free resources on return from <code>SignMsg</code>.</p>
+<p>We create variables on the stack to hold the group public key and member private key.</p>
+<p>Finally we check to make sure that <code>sig</code> is a vaild pointer.</p>
+<p><br />
+</p>
+<p>Next, we authenticate and extract the group public key using <a class="el" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb" title="Extracts group public key from buffer in issuer binary format. ">EpidParseGroupPubKeyFile</a>.</p>
+<p><div class="fragment"><div class="line"> sts = <a class="code" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">EpidParseGroupPubKeyFile</a>(signed_pubkey, signed_pubkey_size, cacert,</div><div class="line"> &amp;pub_key);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div></div><!-- fragment --></p>
+<p><a class="el" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb" title="Extracts group public key from buffer in issuer binary format. ">EpidParseGroupPubKeyFile</a> 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.</p>
+<p><br />
+</p>
+<p>We authenticate and extract the signed SigRL using <a class="el" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f" title="Extracts signature revocation list from buffer in issuer binary format. ">EpidParseSigRlFile</a>.</p>
+<p><div class="fragment"><div class="line"> <span class="keywordflow">if</span> (signed_sig_rl) {</div><div class="line"> <span class="comment">// authenticate and determine space needed for SigRl</span></div><div class="line"> sts = <a class="code" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">EpidParseSigRlFile</a>(signed_sig_rl, signed_sig_rl_size, cacert, NULL,</div><div class="line"> &amp;sig_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8">kEpidSigInvalid</a> == sts) {</div><div class="line"> <span class="comment">// authentication failure</span></div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> sig_rl = AllocBuffer(sig_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (!sig_rl) {</div><div class="line"> sts = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a11a4d2f1c37064eb663de08dc57bcda8">kEpidMemAllocErr</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// fill the SigRl</span></div><div class="line"> sts = <a class="code" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">EpidParseSigRlFile</a>(signed_sig_rl, signed_sig_rl_size, cacert,</div><div class="line"> sig_rl, &amp;sig_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8">kEpidSigInvalid</a> == sts) {</div><div class="line"> <span class="comment">// authentication failure</span></div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> } <span class="comment">// if (signed_sig_rl)</span></div></div><!-- fragment --></p>
+<p>We use <a class="el" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f" title="Extracts signature revocation list from buffer in issuer binary format. ">EpidParseSigRlFile</a> to:</p>
+<ul>
+<li>extract the signature based revocation list</li>
+<li>validate that the revocation list was signed by the private key corresponding to the provided CA certificate</li>
+<li>validate that the size of the input buffer is correct</li>
+<li>determine the required size of the revocation list output buffer</li>
+</ul>
+<p>To determine the required <code>sig_rl</code> output buffer size, we provide a null pointer for the output buffer when calling <a class="el" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f" title="Extracts signature revocation list from buffer in issuer binary format. ">EpidParseSigRlFile</a>. This updates <code>sig_rl_size</code> with the required size of the output buffer.</p>
+<p>After we find out the required size of the <code>sig_rl</code>, we allocate a buffer for the <code>sig_rl</code>. Then we fill the buffer using <a class="el" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f" title="Extracts signature revocation list from buffer in issuer binary format. ">EpidParseSigRlFile</a>.</p>
+<p><br />
+</p>
+<p>Next, we fill the member private key.</p>
+<p><div class="fragment"><div class="line"> <span class="keywordflow">if</span> (privkey_size == <span class="keyword">sizeof</span>(<a class="code" href="struct_priv_key.html">PrivKey</a>)) {</div><div class="line"> priv_key = *(<a class="code" href="struct_priv_key.html">PrivKey</a>*)priv_key_ptr;</div><div class="line"> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (privkey_size == <span class="keyword">sizeof</span>(<a class="code" href="struct_compressed_priv_key.html">CompressedPrivKey</a>)) {</div><div class="line"> sts = <a class="code" href="group___epid_member_module.html#gaf8cd05388f017486f14da2ee48d067ef">EpidDecompressPrivKey</a>(&amp;pub_key, (<a class="code" href="struct_compressed_priv_key.html">CompressedPrivKey</a>*)priv_key_ptr,</div><div class="line"> &amp;priv_key);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> } <span class="keywordflow">else</span> {</div><div class="line"> sts = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e">kEpidErr</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> } <span class="comment">// if (privkey_size == sizeof(PrivKey))</span></div></div><!-- fragment --></p>
+<p>If the member private key is compressed, then we decompress it using <a class="el" href="group___epid_member_module.html#gaf8cd05388f017486f14da2ee48d067ef" title="Decompresses compressed member private key. ">EpidDecompressPrivKey</a> 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.</p>
+<p>If the key size is not the size of a known format, we return an error.</p>
+<p><br />
+</p>
+<p>Next, we create a pseudo-random number generator.</p>
+<p><div class="fragment"><div class="line"> sts = PrngCreate(&amp;prng);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div></div><!-- fragment --></p>
+<dl class="section warning"><dt>Warning</dt><dd>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, <code>prng</code> should be a cryptographically secure random number generator.</dd></dl>
+<p><br />
+</p>
+<p>Now that the inputs have been prepared, we create a member context using <a class="el" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb" title="Creates a new member context. ">EpidMemberCreate</a>.</p>
+<p><div class="fragment"><div class="line"> sts = <a class="code" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb">EpidMemberCreate</a>(&amp;pub_key, &amp;priv_key,</div><div class="line"> member_precomp_is_input ? member_precomp : NULL,</div><div class="line"> PrngGen, prng, &amp;member);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div></div><!-- fragment --></p>
+<p>If a pre-computation blob is provided to the top level application, we use it. Otherwise, we pass in <code>NULL</code>.</p>
+<p><br />
+</p>
+<p>We serialize pre-computed member data using <a class="el" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721" title="Serializes the pre-computed member settings. ">EpidMemberWritePrecomp</a>.</p>
+<p><div class="fragment"><div class="line"> sts = <a class="code" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">EpidMemberWritePrecomp</a>(member, member_precomp);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div></div><!-- fragment --></p>
+<p>The serialized member pre-computation blob can be used to greatly increase performance of <a class="el" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb" title="Creates a new member context. ">EpidMemberCreate</a> in future sessions if the same member private key is used.</p>
+<p><br />
+</p>
+<p>Next, if a basename is specified, we register it with <a class="el" href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d" title="Registers a basename with a member. ">EpidRegisterBaseName</a> so that the member can use it.</p>
+<p><div class="fragment"><div class="line"> <span class="keywordflow">if</span> (0 != basename_len) {</div><div class="line"> sts = <a class="code" href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d">EpidRegisterBaseName</a>(member, basename, basename_len);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> }</div></div><!-- fragment --></p>
+<p>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.</p>
+<dl class="section warning"><dt>Warning</dt><dd>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.</dd></dl>
+<p><br />
+</p>
+<p>Then we set the hash algorithm to be used by the member using <a class="el" href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf" title="Sets the hash algorithm to be used by a member. ">EpidMemberSetHashAlg</a>.</p>
+<p><div class="fragment"><div class="line"> sts = <a class="code" href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf">EpidMemberSetHashAlg</a>(member, hash_alg);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div></div><!-- fragment --></p>
+<p>After the hash algorithm is set, future calls to <code>EpidSign</code> will use the same algorithm.</p>
+<p><br />
+</p>
+<p>Next, we sign the message, generating an Intel&reg; EPID signature.</p>
+<p><div class="fragment"><div class="line"> *sig_len = <a class="code" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000">EpidGetSigSize</a>(sig_rl);</div><div class="line"></div><div class="line"> *sig = AllocBuffer(*sig_len);</div><div class="line"> <span class="keywordflow">if</span> (!*sig) {</div><div class="line"> sts = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a11a4d2f1c37064eb663de08dc57bcda8">kEpidMemAllocErr</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// sign message</span></div><div class="line"> sts = <a class="code" href="group___epid_member_module.html#ga759155a719254f734157722716dac640">EpidSign</a>(member, msg, msg_len, basename, basename_len, sig_rl,</div><div class="line"> sig_rl_size, *sig, *sig_len);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div></div><!-- fragment --></p>
+<p>To create a signature, first we find out the required size of the signature using <a class="el" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000" title="Computes the size in bytes required for an Intel(R) EPID signature. ">EpidGetSigSize</a>. Then we allocate a buffer for the signature and fill the buffer using <a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640" title="Writes an Intel(R) EPID signature. ">EpidSign</a>.</p>
+<p>It is important to compute signature size after loading <code>sig_rl</code> because the signature size varies with the size of the SigRL.</p>
+<p><br />
+</p>
+<p>Finally, we clean up and exit.</p>
+<p><div class="fragment"><div class="line"> sts = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a>;</div><div class="line"> } <span class="keywordflow">while</span> (0);</div><div class="line"></div><div class="line"> PrngDelete(&amp;prng);</div><div class="line"> <a class="code" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">EpidMemberDelete</a>(&amp;member);</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (sig_rl) free(sig_rl);</div><div class="line"></div><div class="line"> <span class="keywordflow">return</span> sts;</div><div class="line">}</div></div><!-- fragment --></p>
+<p>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.</p>
+<p>Next, we free the allocated resources. <a class="el" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6" title="Deletes an existing member context. ">EpidMemberDelete</a> deletes an existing member context.</p>
+<p>We return from SignMsg with the success or error status.</p>
+<p><br />
+</p>
+<p>This concludes the <code>signmsg</code> walkthrough. Now you should be able to generate an Intel&reg; EPID signature that proves a member's group membership to a verifier without revealing the member's identity.</p>
+<p>To learn more about the SDK APIs see the <a href="modules.html"><b>API Reference</b></a>. To learn more about the Intel&reg; EPID scheme see <a class="el" href="EpidOverview.html">Introduction to the Intel&reg; EPID Scheme</a> in the documentation. </p>
+</div></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/VerifysigWalkthru.html b/doc/html/VerifysigWalkthru.html
new file mode 100644
index 0000000..c66ada5
--- /dev/null
+++ b/doc/html/VerifysigWalkthru.html
@@ -0,0 +1,190 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: Verifying an Intel&reg; EPID Signature</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('VerifysigWalkthru.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<div class="title">Verifying an Intel&reg; EPID Signature </div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p>This walkthrough of the <code>verifysig</code> example shows you how to use SDK APIs to verify an Intel&reg; EPID 2.0 signature. Verifysig is built during the <a class="el" href="BuildingSdk.html">SDK build</a>.</p>
+<p>To verify an Intel&reg; EPID 1.1 signature see the example code in <code>verifysig11.c</code>. For information on Intel&reg; EPID 1.1 speciifc APIs see <a href="group___epid11_verifier_module.html"><b>EPID 1.1 support</b></a>.</p>
+<p><br />
+</p>
+<p>First, we include headers so we have access to needed declarations.</p>
+<p><div class="fragment"><div class="line"><span class="preprocessor">#include &quot;src/verifysig.h&quot;</span></div><div class="line"></div><div class="line"><span class="preprocessor">#include &lt;stdlib.h&gt;</span></div><div class="line"></div><div class="line"><span class="preprocessor">#include &quot;util/buffutil.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;util/envutil.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="verifier_2api_8h.html">epid/verifier/api.h</a>&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="file__parser_8h.html">epid/common/file_parser.h</a>&quot;</span></div></div><!-- fragment --></p>
+<p>The utility headers are used by <code>verifysig</code> for logging and buffer management. The <code><a class="el" href="verifier_2api_8h.html" title="Intel(R) EPID SDK verifier API. ">epid/verifier/api.h</a></code> header provides access to the core verifier APIs, and the <code><a class="el" href="file__parser_8h.html" title="Epid issuer material parsing utilities. ">epid/common/file_parser.h</a></code> header provides an API for parsing buffers formatted according to the various IoT Intel&reg; EPID binary file formats.</p>
+<p><br />
+</p>
+<p>We define a stub function responsible for checking that the CA certificate is authorized by the root CA.</p>
+<p><div class="fragment"><div class="line"><span class="keywordtype">bool</span> IsCaCertAuthorizedByRootCa(<span class="keywordtype">void</span> <span class="keyword">const</span>* data, <span class="keywordtype">size_t</span> size) {</div><div class="line"> (void)data;</div><div class="line"> (void)size;</div><div class="line"> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line">}</div></div><!-- fragment --></p>
+<p>IsCaCertAuthorizedByRootCa is called from <code>main.c</code> to validate the CA certificate before calling <code>Verify</code>. 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.</p>
+<p><br />
+</p>
+<p>We use <code>Verify</code> to verify an Intel&reg; EPID signature. <code>Verify</code> is a wrapper function that isolates SDK API functionality for the purpose of this walkthrough.</p>
+<p><div class="fragment"><div class="line"><a class="code" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Verify(<a class="code" href="struct_epid_signature.html">EpidSignature</a> <span class="keyword">const</span>* sig, <span class="keywordtype">size_t</span> sig_len, <span class="keywordtype">void</span> <span class="keyword">const</span>* msg,</div><div class="line"> <span class="keywordtype">size_t</span> msg_len, <span class="keywordtype">void</span> <span class="keyword">const</span>* basename, <span class="keywordtype">size_t</span> basename_len,</div><div class="line"> <span class="keywordtype">void</span> <span class="keyword">const</span>* signed_priv_rl, <span class="keywordtype">size_t</span> signed_priv_rl_size,</div><div class="line"> <span class="keywordtype">void</span> <span class="keyword">const</span>* signed_sig_rl, <span class="keywordtype">size_t</span> signed_sig_rl_size,</div><div class="line"> <span class="keywordtype">void</span> <span class="keyword">const</span>* signed_grp_rl, <span class="keywordtype">size_t</span> signed_grp_rl_size,</div><div class="line"> <a class="code" href="struct_verifier_rl.html">VerifierRl</a> <span class="keyword">const</span>* ver_rl, <span class="keywordtype">size_t</span> ver_rl_size,</div><div class="line"> <span class="keywordtype">void</span> <span class="keyword">const</span>* signed_pub_key, <span class="keywordtype">size_t</span> signed_pub_key_size,</div><div class="line"> <a class="code" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> <span class="keyword">const</span>* cacert, <a class="code" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg,</div><div class="line"> <a class="code" href="struct_verifier_precomp.html">VerifierPrecomp</a>* verifier_precomp,</div><div class="line"> <span class="keywordtype">bool</span> verifier_precomp_is_input) {</div></div><!-- fragment --></p>
+<p>The <code>Verify</code> parameters were either sent by the verifier to the member, or they were part of the member's configuration. The exceptions are the <code>sig</code> and <code>sig_len</code> parameters, which we use to input the signature to be verified.</p>
+<p>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&reg; EPID scheme.</p>
+<p>We use the parameters <code>verifier_precomp</code> and <code>verifier_precomp_is_input</code> 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.</p>
+<p>The member and the verifier agree on the message, basename, hash algorithm, and SigRL that the verifier uses for verification.</p>
+<dl class="section warning"><dt>Warning</dt><dd>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.</dd></dl>
+<p><br />
+</p>
+<p>Next we do basic variable setup.</p>
+<p><div class="fragment"><div class="line"> <a class="code" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> result = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e">kEpidErr</a>;</div><div class="line"> <a class="code" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a>* ctx = NULL;</div><div class="line"> <a class="code" href="struct_priv_rl.html">PrivRl</a>* priv_rl = NULL;</div><div class="line"> <a class="code" href="struct_sig_rl.html">SigRl</a>* sig_rl = NULL;</div><div class="line"> <a class="code" href="struct_group_rl.html">GroupRl</a>* grp_rl = NULL;</div><div class="line"></div><div class="line"> <span class="keywordflow">do</span> {</div><div class="line"> <a class="code" href="struct_group_pub_key.html">GroupPubKey</a> pub_key = {0};</div></div><!-- fragment --></p>
+<p>We create pointers to resources to be allocated and we use the <code>do {} while(0)</code> idiom so that we can reliably free resources on return from <code>Verify</code>. We also allocate the group public key on the stack.</p>
+<p><br />
+</p>
+<p>Next, we authenticate and extract the group public key using <a class="el" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb" title="Extracts group public key from buffer in issuer binary format. ">EpidParseGroupPubKeyFile</a>.</p>
+<p><div class="fragment"><div class="line"> result = <a class="code" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">EpidParseGroupPubKeyFile</a>(signed_pub_key, signed_pub_key_size,</div><div class="line"> cacert, &amp;pub_key);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div></div><!-- fragment --></p>
+<p><a class="el" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb" title="Extracts group public key from buffer in issuer binary format. ">EpidParseGroupPubKeyFile</a> 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 <code>pub_key</code> in the process.</p>
+<p><br />
+</p>
+<p>Next, we create a verifier context using <a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a>.</p>
+<p><div class="fragment"><div class="line"> result = <a class="code" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">EpidVerifierCreate</a>(</div><div class="line"> &amp;pub_key, verifier_precomp_is_input ? verifier_precomp : NULL, &amp;ctx);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div></div><!-- fragment --></p>
+<p>If a pre-computation blob is provided to the top level application, we use it. Otherwise, we pass in <code>NULL</code>.</p>
+<p><br />
+</p>
+<p>Then we serialize pre-computed verifier data using <a class="el" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392" title="Serializes the pre-computed verifier settings. ">EpidVerifierWritePrecomp</a>.</p>
+<p><div class="fragment"><div class="line"> result = <a class="code" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">EpidVerifierWritePrecomp</a>(ctx, verifier_precomp);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div></div><!-- fragment --></p>
+<p>The serialized verifier pre-computation blob can be used to greatly increase performance of <a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a> in future sessions if the same group public key is used.</p>
+<p><br />
+</p>
+<p>We use <a class="el" href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92" title="Sets the hash algorithm to be used by a verifier. ">EpidVerifierSetHashAlg</a> to indicate the hash algorithm used for verification, which should be the same algorithm that the member used when signing.</p>
+<p><div class="fragment"><div class="line"> result = <a class="code" href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92">EpidVerifierSetHashAlg</a>(ctx, hash_alg);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div></div><!-- fragment --></p>
+<p>After the hash algorithm is set, future calls to <a class="el" href="group___epid_verifier_module.html#gae3f9c37628e18b880d8bbee3e7f55064" title="Verifies a signature and checks revocation status. ">EpidVerify</a> will use the same algorithm.</p>
+<p><br />
+</p>
+<p>We use <a class="el" href="group___epid_verifier_module.html#ga1c3810ef361da678a1f77823bd9c37a6" title="Sets the basename to be used by a verifier. ">EpidVerifierSetBasename</a> to indicate the basename used for verification, which should be the same one that the member used when signing.</p>
+<p><div class="fragment"><div class="line"> result = <a class="code" href="group___epid_verifier_module.html#ga1c3810ef361da678a1f77823bd9c37a6">EpidVerifierSetBasename</a>(ctx, basename, basename_len);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div></div><!-- fragment --></p>
+<p>After the basename is set, future calls to <a class="el" href="group___epid_verifier_module.html#gae3f9c37628e18b880d8bbee3e7f55064" title="Verifies a signature and checks revocation status. ">EpidVerify</a> will use the same basename.</p>
+<p><br />
+</p>
+<p>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.</p>
+<dl class="section note"><dt>Note</dt><dd>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.</dd></dl>
+<p><br />
+</p>
+<p>We set the private key based revocation list using <a class="el" href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e" title="Sets the private key based revocation list. ">EpidVerifierSetPrivRl</a>.</p>
+<p><div class="fragment"><div class="line"> <span class="keywordflow">if</span> (signed_priv_rl) {</div><div class="line"> <span class="comment">// authenticate and determine space needed for RL</span></div><div class="line"> <span class="keywordtype">size_t</span> priv_rl_size = 0;</div><div class="line"> result = <a class="code" href="group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e">EpidParsePrivRlFile</a>(signed_priv_rl, signed_priv_rl_size, cacert,</div><div class="line"> NULL, &amp;priv_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8">kEpidSigInvalid</a> == result) {</div><div class="line"> <span class="comment">// authentication failure</span></div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> priv_rl = AllocBuffer(priv_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (!priv_rl) {</div><div class="line"> result = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a11a4d2f1c37064eb663de08dc57bcda8">kEpidMemAllocErr</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// fill the rl</span></div><div class="line"> result = <a class="code" href="group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e">EpidParsePrivRlFile</a>(signed_priv_rl, signed_priv_rl_size, cacert,</div><div class="line"> priv_rl, &amp;priv_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// set private key based revocation list</span></div><div class="line"> result = <a class="code" href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e">EpidVerifierSetPrivRl</a>(ctx, priv_rl, priv_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> } <span class="comment">// if (signed_priv_rl)</span></div></div><!-- fragment --></p>
+<p>We use <a class="el" href="group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e" title="Extracts private key revocation list from buffer in issuer binary format. ">EpidParsePrivRlFile</a> to:</p>
+<ul>
+<li>extract the private key based revocation list</li>
+<li>validate that the revocation list was signed by the private key corresponding to the provided CA certificate</li>
+<li>validate that the size of the input buffer is correct</li>
+<li>determine the required size of the revocation list output buffer</li>
+</ul>
+<p>To determine the required <code>priv_rl</code> buffer size, we provide a null pointer for the output buffer when calling <a class="el" href="group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e" title="Extracts private key revocation list from buffer in issuer binary format. ">EpidParsePrivRlFile</a>.</p>
+<p>After we find out the required size of the <code>priv_rl</code> buffer, we allocate memory for it. Then we fill the buffer using <a class="el" href="group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e" title="Extracts private key revocation list from buffer in issuer binary format. ">EpidParsePrivRlFile</a>.</p>
+<p><br />
+</p>
+<p>Next, we set the signature based revocation list using <a class="el" href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf" title="Sets the signature based revocation list. ">EpidVerifierSetSigRl</a>.</p>
+<p><div class="fragment"><div class="line"> <span class="keywordflow">if</span> (signed_sig_rl) {</div><div class="line"> <span class="comment">// authenticate and determine space needed for RL</span></div><div class="line"> <span class="keywordtype">size_t</span> sig_rl_size = 0;</div><div class="line"> result = <a class="code" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">EpidParseSigRlFile</a>(signed_sig_rl, signed_sig_rl_size, cacert,</div><div class="line"> NULL, &amp;sig_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8">kEpidSigInvalid</a> == result) {</div><div class="line"> <span class="comment">// authentication failure</span></div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> sig_rl = AllocBuffer(sig_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (!sig_rl) {</div><div class="line"> result = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a11a4d2f1c37064eb663de08dc57bcda8">kEpidMemAllocErr</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// fill the rl</span></div><div class="line"> result = <a class="code" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">EpidParseSigRlFile</a>(signed_sig_rl, signed_sig_rl_size, cacert,</div><div class="line"> sig_rl, &amp;sig_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// set signature based revocation list</span></div><div class="line"> result = <a class="code" href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf">EpidVerifierSetSigRl</a>(ctx, sig_rl, sig_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> } <span class="comment">// if (signed_sig_rl)</span></div></div><!-- fragment --></p>
+<p>We use <a class="el" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f" title="Extracts signature revocation list from buffer in issuer binary format. ">EpidParseSigRlFile</a> to:</p>
+<ul>
+<li>extract the signature based revocation list</li>
+<li>validate that the revocation list was signed by the private key corresponding to the provided CA certificate</li>
+<li>validate that the size of the input buffer is correct</li>
+<li>determine the required size of the revocation list output buffer</li>
+</ul>
+<p>To determine the required <code>sig_rl</code> buffer size, we provide a null pointer for the output buffer when calling <a class="el" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f" title="Extracts signature revocation list from buffer in issuer binary format. ">EpidParseSigRlFile</a>.</p>
+<p>After we find out the required size of the <code>sig_rl</code> buffer, we allocate memory for it. Then we fill the buffer using <a class="el" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f" title="Extracts signature revocation list from buffer in issuer binary format. ">EpidParseSigRlFile</a>.</p>
+<p><br />
+</p>
+<p>Next, we set the group based revocation list using <a class="el" href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb" title="Sets the group based revocation list. ">EpidVerifierSetGroupRl</a>.</p>
+<p><div class="fragment"><div class="line"> <span class="keywordflow">if</span> (signed_grp_rl) {</div><div class="line"> <span class="comment">// authenticate and determine space needed for RL</span></div><div class="line"> <span class="keywordtype">size_t</span> grp_rl_size = 0;</div><div class="line"> result = <a class="code" href="group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f">EpidParseGroupRlFile</a>(signed_grp_rl, signed_grp_rl_size, cacert,</div><div class="line"> NULL, &amp;grp_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8">kEpidSigInvalid</a> == result) {</div><div class="line"> <span class="comment">// authentication failure</span></div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> grp_rl = AllocBuffer(grp_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (!grp_rl) {</div><div class="line"> result = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a11a4d2f1c37064eb663de08dc57bcda8">kEpidMemAllocErr</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// fill the rl</span></div><div class="line"> result = <a class="code" href="group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f">EpidParseGroupRlFile</a>(signed_grp_rl, signed_grp_rl_size, cacert,</div><div class="line"> grp_rl, &amp;grp_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> <span class="comment">// set group revocation list</span></div><div class="line"> result = <a class="code" href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">EpidVerifierSetGroupRl</a>(ctx, grp_rl, grp_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> } <span class="comment">// if (signed_grp_rl)</span></div></div><!-- fragment --></p>
+<p>We use <a class="el" href="group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f" title="Extracts group revocation list from buffer in issuer binary format. ">EpidParseGroupRlFile</a> to:</p>
+<ul>
+<li>extract the group based revocation list</li>
+<li>validate that the revocation list was signed by the private key corresponding to the provided CA certificate</li>
+<li>validate that the size of the input buffer is correct</li>
+<li>determine the required size of the revocation list output buffer</li>
+</ul>
+<p>To determine the required <code>grp_rl</code> buffer size, we provide a null pointer for the output buffer when calling <a class="el" href="group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f" title="Extracts group revocation list from buffer in issuer binary format. ">EpidParseGroupRlFile</a>.</p>
+<p>After we find out the required size of the <code>grp_rl</code> buffer, we allocate memory for it. Then we fill the buffer using <a class="el" href="group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f" title="Extracts group revocation list from buffer in issuer binary format. ">EpidParseGroupRlFile</a>.</p>
+<p><br />
+</p>
+<p>Next, we set the verifier blacklist using <a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a" title="Sets the verifier revocation list. ">EpidVerifierSetVerifierRl</a>.</p>
+<p><div class="fragment"><div class="line"> <span class="keywordflow">if</span> (ver_rl) {</div><div class="line"> <span class="comment">// set verifier based revocation list</span></div><div class="line"> result = <a class="code" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a">EpidVerifierSetVerifierRl</a>(ctx, ver_rl, ver_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> }</div></div><!-- fragment --></p>
+<p>The verifier is responsible for ensuring that the verifier revocation list is authorized. Validating it is outside the scope of this example.</p>
+<p><br />
+</p>
+<p>Next, we use <a class="el" href="group___epid_verifier_module.html#gae3f9c37628e18b880d8bbee3e7f55064" title="Verifies a signature and checks revocation status. ">EpidVerify</a> to verify that the Intel&reg; EPID signature was created by a valid member of a group in good standing.</p>
+<p><div class="fragment"><div class="line"> result = <a class="code" href="group___epid_verifier_module.html#gae3f9c37628e18b880d8bbee3e7f55064">EpidVerify</a>(ctx, sig, sig_len, msg, msg_len);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div></div><!-- fragment --> <br />
+</p>
+<p>Finally, we clean up and exit.</p>
+<p><div class="fragment"><div class="line"> } <span class="keywordflow">while</span> (0);</div><div class="line"></div><div class="line"> <span class="comment">// delete verifier</span></div><div class="line"> <a class="code" href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12">EpidVerifierDelete</a>(&amp;ctx);</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (priv_rl) free(priv_rl);</div><div class="line"> <span class="keywordflow">if</span> (sig_rl) free(sig_rl);</div><div class="line"> <span class="keywordflow">if</span> (grp_rl) free(grp_rl);</div><div class="line"></div><div class="line"> <span class="keywordflow">return</span> result;</div><div class="line">}</div></div><!-- fragment --></p>
+<p>If we made it past verification without an error, we set the return code appropriately and fall out of the <code>do-while</code> loop. If there was an error earlier, all breaks in the <code>do-while</code> loop bring us to this point with an error status.</p>
+<p>Then we free the allocated resources. <a class="el" href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12" title="Deletes an existing verifier context. ">EpidVerifierDelete</a> deletes the verifier context.</p>
+<p>After deleting the verifier context, we can also delete the revocation lists.</p>
+<p>We return from <code>Verify</code> with the success or error status.</p>
+<p><br />
+</p>
+<p>This concludes the <code>verifysig</code> walkthrough. Now you should be able to verify an Intel&reg; EPID signature using the SDK APIs.</p>
+<p>To learn more about the SDK APIs see the <a href="modules.html"><b>API Reference</b></a>. To learn more about the Intel&reg; EPID Scheme see <a class="el" href="EpidOverview.html">Introduction to the Intel&reg; EPID Scheme</a> in the documentation. </p>
+</div></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/annotated.html b/doc/html/annotated.html
index 3fbd079..e60838c 100644
--- a/doc/html/annotated.html
+++ b/doc/html/annotated.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -63,61 +63,61 @@ $(document).ready(function(){initNavTree('annotated.html','');});
<div class="contents">
<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
<table class="directory">
-<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_allowed_basename.html" target="_self">AllowedBasename</a></td><td class="desc">Internal implementation of base name </td></tr>
-<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_basic_signature.html" target="_self">BasicSignature</a></td><td class="desc">Intel(R) EPID 2.0 basic signature </td></tr>
-<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_big_num_str.html" target="_self">BigNumStr</a></td><td class="desc">Serialized BigNum </td></tr>
-<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_commit_values.html" target="_self">CommitValues</a></td><td class="desc">Storage for values to create commitment in Sign and Verify algorithms </td></tr>
-<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_compressed_priv_key.html" target="_self">CompressedPrivKey</a></td><td class="desc">Compressed private key </td></tr>
-<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_ecdsa_private_key.html" target="_self">EcdsaPrivateKey</a></td><td class="desc">ECDSA Private Key </td></tr>
-<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_ecdsa_public_key.html" target="_self">EcdsaPublicKey</a></td><td class="desc">ECDSA Public Key </td></tr>
-<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_ecdsa_signature.html" target="_self">EcdsaSignature</a></td><td class="desc">ECDSA Signature using NIST 256-bit curve secp256r1 </td></tr>
-<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid2_params.html" target="_self">Epid2Params</a></td><td class="desc">Intel(R) EPID 2.0 Parameters </td></tr>
-<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid2_params__.html" target="_self">Epid2Params_</a></td><td class="desc">Internal representation of <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a> </td></tr>
-<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid_ca_certificate.html" target="_self">EpidCaCertificate</a></td><td class="desc">IoT CA Certificate binary format </td></tr>
-<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid_file_header.html" target="_self">EpidFileHeader</a></td><td class="desc">Intel(R) EPID binary file header </td></tr>
-<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid_group_pub_key_certificate.html" target="_self">EpidGroupPubKeyCertificate</a></td><td class="desc">Intel(R) EPID 2.0 Group Public Key binary format </td></tr>
-<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid_signature.html" target="_self">EpidSignature</a></td><td class="desc">Intel(R) EPID 2.0 Signature </td></tr>
-<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_error_text_entry.html" target="_self">ErrorTextEntry</a></td><td class="desc">Record mapping status code to string </td></tr>
-<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fp_elem_str.html" target="_self">FpElemStr</a></td><td class="desc">Number in [0, p-1] </td></tr>
-<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fq12_elem_dat.html" target="_self">Fq12ElemDat</a></td><td class="desc">Data for element in Fq2^3^2 </td></tr>
-<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fq12_elem_str.html" target="_self">Fq12ElemStr</a></td><td class="desc">Serialized Fq2^3^2 element </td></tr>
-<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fq2_elem_dat.html" target="_self">Fq2ElemDat</a></td><td class="desc">Data for element in Fq2 </td></tr>
-<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fq2_elem_str.html" target="_self">Fq2ElemStr</a></td><td class="desc">Serialized Fq2 element </td></tr>
-<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fq6_elem_dat.html" target="_self">Fq6ElemDat</a></td><td class="desc">Data for element in Fq2^3 </td></tr>
-<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fq6_elem_str.html" target="_self">Fq6ElemStr</a></td><td class="desc">Serialized Fq2^3 element </td></tr>
-<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fq_elem_dat.html" target="_self">FqElemDat</a></td><td class="desc">Data for element in Fq </td></tr>
-<tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fq_elem_str.html" target="_self">FqElemStr</a></td><td class="desc">Number in [0, q-1] </td></tr>
-<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_g1_elem_str.html" target="_self">G1ElemStr</a></td><td class="desc">Serialized G1 element </td></tr>
-<tr id="row_25_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_g2_elem_str.html" target="_self">G2ElemStr</a></td><td class="desc">Serialized G2 element </td></tr>
-<tr id="row_26_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_group_pub_key.html" target="_self">GroupPubKey</a></td><td class="desc">Intel(R) EPID 2.0 group public key </td></tr>
-<tr id="row_27_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_group_pub_key__.html" target="_self">GroupPubKey_</a></td><td class="desc">Internal representation of <a class="el" href="struct_group_pub_key.html" title="Intel(R) EPID 2.0 group public key. ">GroupPubKey</a> </td></tr>
-<tr id="row_28_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_group_rl.html" target="_self">GroupRl</a></td><td class="desc">Group revocation list </td></tr>
-<tr id="row_29_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_gt_elem_str.html" target="_self">GtElemStr</a></td><td class="desc">Serialized GT element </td></tr>
-<tr id="row_30_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_i_priv_key.html" target="_self">IPrivKey</a></td><td class="desc">Intel(R) EPID 2.0 issuing private key </td></tr>
-<tr id="row_31_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_join_p_commit_values.html" target="_self">JoinPCommitValues</a></td><td class="desc">Storage for values to create commitment in Sign and Verify algorithms </td></tr>
-<tr id="row_32_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_join_request.html" target="_self">JoinRequest</a></td><td class="desc">Join request </td></tr>
-<tr id="row_33_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_member_ctx.html" target="_self">MemberCtx</a></td><td class="desc">Member context definition </td></tr>
-<tr id="row_34_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_member_precomp.html" target="_self">MemberPrecomp</a></td><td class="desc">Pre-computed member settings </td></tr>
-<tr id="row_35_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_membership_credential.html" target="_self">MembershipCredential</a></td><td class="desc">Membership credential </td></tr>
-<tr id="row_36_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_nr_proof.html" target="_self">NrProof</a></td><td class="desc">Non-revoked Proof </td></tr>
-<tr id="row_37_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_nr_verify_commit_values.html" target="_self">NrVerifyCommitValues</a></td><td class="desc">Storage for values to create commitment in NrProve algorithm </td></tr>
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_basic_signature.html" target="_self">BasicSignature</a></td><td class="desc">Intel(R) EPID 2.0 basic signature </td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_big_num_str.html" target="_self">BigNumStr</a></td><td class="desc">Serialized BigNum </td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_compressed_priv_key.html" target="_self">CompressedPrivKey</a></td><td class="desc">Compressed private key </td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_ecdsa_private_key.html" target="_self">EcdsaPrivateKey</a></td><td class="desc">ECDSA Private Key </td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_ecdsa_public_key.html" target="_self">EcdsaPublicKey</a></td><td class="desc">ECDSA Public Key </td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_ecdsa_signature.html" target="_self">EcdsaSignature</a></td><td class="desc">ECDSA Signature using NIST 256-bit curve secp256r1 </td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid11_basic_signature.html" target="_self">Epid11BasicSignature</a></td><td class="desc">Intel(R) EPID 1.1 basic signature </td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid11_g2_elem_str.html" target="_self">Epid11G2ElemStr</a></td><td class="desc">Serialized Intel(R) EPID 1.1 G2 element </td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid11_group_pub_key.html" target="_self">Epid11GroupPubKey</a></td><td class="desc">Intel(R) EPID 1.1 group public key </td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid11_group_rl.html" target="_self">Epid11GroupRl</a></td><td class="desc">Intel(R) EPID 1.1 group revocation list </td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid11_gt_elem_str.html" target="_self">Epid11GtElemStr</a></td><td class="desc">Serialized Intel(R) EPID 1.1 GT element </td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid11_nr_proof.html" target="_self">Epid11NrProof</a></td><td class="desc">Intel(R) EPID 1.1 non-revoked Proof </td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid11_params.html" target="_self">Epid11Params</a></td><td class="desc">Intel(R) EPID 1.1 Parameters </td></tr>
+<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid11_priv_rl.html" target="_self">Epid11PrivRl</a></td><td class="desc">Intel(R) EPID 1.1 private-key based revocation list </td></tr>
+<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid11_signature.html" target="_self">Epid11Signature</a></td><td class="desc">Intel(R) EPID 1.1 Signature </td></tr>
+<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid11_sig_rl.html" target="_self">Epid11SigRl</a></td><td class="desc">Intel(R) EPID 1.1 signature based revocation list </td></tr>
+<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid11_sig_rl_entry.html" target="_self">Epid11SigRlEntry</a></td><td class="desc">Intel(R) EPID 1.1 entry in SigRL (B,K) </td></tr>
+<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid11_verifier_precomp.html" target="_self">Epid11VerifierPrecomp</a></td><td class="desc">Intel(R) EPID 1.1 Pre-computed verifier settings </td></tr>
+<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid2_params.html" target="_self">Epid2Params</a></td><td class="desc">Intel(R) EPID 2.0 Parameters </td></tr>
+<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid_ca_certificate.html" target="_self">EpidCaCertificate</a></td><td class="desc">IoT CA Certificate binary format </td></tr>
+<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid_file_header.html" target="_self">EpidFileHeader</a></td><td class="desc">Intel(R) EPID binary file header </td></tr>
+<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_epid_signature.html" target="_self">EpidSignature</a></td><td class="desc">Intel(R) EPID 2.0 Signature </td></tr>
+<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fp_elem_str.html" target="_self">FpElemStr</a></td><td class="desc">Number in [0, p-1] </td></tr>
+<tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fq12_elem_str.html" target="_self">Fq12ElemStr</a></td><td class="desc">Serialized Fq2^3^2 element </td></tr>
+<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fq2_elem_str.html" target="_self">Fq2ElemStr</a></td><td class="desc">Serialized Fq2 element </td></tr>
+<tr id="row_25_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fq3_elem_str.html" target="_self">Fq3ElemStr</a></td><td class="desc">Serialized Fq3 element </td></tr>
+<tr id="row_26_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fq6_elem_str.html" target="_self">Fq6ElemStr</a></td><td class="desc">Serialized Fq2^3 element </td></tr>
+<tr id="row_27_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_fq_elem_str.html" target="_self">FqElemStr</a></td><td class="desc">Number in [0, q-1] </td></tr>
+<tr id="row_28_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_g1_elem_str.html" target="_self">G1ElemStr</a></td><td class="desc">Serialized G1 element </td></tr>
+<tr id="row_29_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_g2_elem_str.html" target="_self">G2ElemStr</a></td><td class="desc">Serialized G2 element </td></tr>
+<tr id="row_30_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_group_pub_key.html" target="_self">GroupPubKey</a></td><td class="desc">Intel(R) EPID 2.0 group public key </td></tr>
+<tr id="row_31_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_group_rl.html" target="_self">GroupRl</a></td><td class="desc">Group revocation list </td></tr>
+<tr id="row_32_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_gt_elem_str.html" target="_self">GtElemStr</a></td><td class="desc">Serialized GT element </td></tr>
+<tr id="row_33_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_i_priv_key.html" target="_self">IPrivKey</a></td><td class="desc">Intel(R) EPID 2.0 issuing private key </td></tr>
+<tr id="row_34_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_join_request.html" target="_self">JoinRequest</a></td><td class="desc">Join request </td></tr>
+<tr id="row_35_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_member_precomp.html" target="_self">MemberPrecomp</a></td><td class="desc">Pre-computed member settings </td></tr>
+<tr id="row_36_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_membership_credential.html" target="_self">MembershipCredential</a></td><td class="desc">Membership credential </td></tr>
+<tr id="row_37_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_nr_proof.html" target="_self">NrProof</a></td><td class="desc">Non-revoked Proof </td></tr>
<tr id="row_38_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_oct_str128.html" target="_self">OctStr128</a></td><td class="desc">128 bit octet string </td></tr>
<tr id="row_39_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_oct_str16.html" target="_self">OctStr16</a></td><td class="desc">16 bit octet string </td></tr>
<tr id="row_40_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_oct_str256.html" target="_self">OctStr256</a></td><td class="desc">256 bit octet string </td></tr>
<tr id="row_41_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_oct_str32.html" target="_self">OctStr32</a></td><td class="desc">32 bit octet string </td></tr>
<tr id="row_42_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_oct_str512.html" target="_self">OctStr512</a></td><td class="desc">512 bit octet string </td></tr>
-<tr id="row_43_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_oct_str64.html" target="_self">OctStr64</a></td><td class="desc">64 bit octet string </td></tr>
-<tr id="row_44_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_oct_str8.html" target="_self">OctStr8</a></td><td class="desc">8 bit octet string </td></tr>
-<tr id="row_45_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_pre_computed_signature.html" target="_self">PreComputedSignature</a></td><td class="desc">Pre-computed signature </td></tr>
-<tr id="row_46_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_priv_key.html" target="_self">PrivKey</a></td><td class="desc">Intel(R) EPID 2.0 private key </td></tr>
-<tr id="row_47_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_priv_key__.html" target="_self">PrivKey_</a></td><td class="desc">Internal implementation of <a class="el" href="struct_priv_key.html" title="Intel(R) EPID 2.0 private key. ">PrivKey</a> </td></tr>
-<tr id="row_48_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_priv_rl.html" target="_self">PrivRl</a></td><td class="desc">Private-key based revocation list </td></tr>
-<tr id="row_49_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_sha256_digest.html" target="_self">Sha256Digest</a></td><td class="desc">SHA256 digest </td></tr>
-<tr id="row_50_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_sig_rl.html" target="_self">SigRl</a></td><td class="desc">Signature based revocation list </td></tr>
-<tr id="row_51_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_sig_rl_entry.html" target="_self">SigRlEntry</a></td><td class="desc">Entry in SigRL (B,K) </td></tr>
-<tr id="row_52_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_stack.html" target="_self">Stack</a></td><td class="desc">Internal representation of a <a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> </td></tr>
-<tr id="row_53_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_verifier_ctx.html" target="_self">VerifierCtx</a></td><td class="desc">Verifier context definition </td></tr>
-<tr id="row_54_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_verifier_precomp.html" target="_self">VerifierPrecomp</a></td><td class="desc">Pre-computed member settings </td></tr>
+<tr id="row_43_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_oct_str600.html" target="_self">OctStr600</a></td><td class="desc">600 bit octet string </td></tr>
+<tr id="row_44_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_oct_str64.html" target="_self">OctStr64</a></td><td class="desc">64 bit octet string </td></tr>
+<tr id="row_45_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_oct_str768.html" target="_self">OctStr768</a></td><td class="desc">768 bit octet string </td></tr>
+<tr id="row_46_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_oct_str8.html" target="_self">OctStr8</a></td><td class="desc">8 bit octet string </td></tr>
+<tr id="row_47_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_oct_str80.html" target="_self">OctStr80</a></td><td class="desc">80 bit octet string </td></tr>
+<tr id="row_48_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_pre_computed_signature.html" target="_self">PreComputedSignature</a></td><td class="desc">Pre-computed signature </td></tr>
+<tr id="row_49_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_priv_key.html" target="_self">PrivKey</a></td><td class="desc">Intel(R) EPID 2.0 private key </td></tr>
+<tr id="row_50_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_priv_rl.html" target="_self">PrivRl</a></td><td class="desc">Private-key based revocation list </td></tr>
+<tr id="row_51_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_sha256_digest.html" target="_self">Sha256Digest</a></td><td class="desc">SHA256 digest </td></tr>
+<tr id="row_52_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_sig_rl.html" target="_self">SigRl</a></td><td class="desc">Signature based revocation list </td></tr>
+<tr id="row_53_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_sig_rl_entry.html" target="_self">SigRlEntry</a></td><td class="desc">Entry in SigRL (B,K) </td></tr>
+<tr id="row_54_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_verifier_precomp.html" target="_self">VerifierPrecomp</a></td><td class="desc">Pre-computed verifier settings </td></tr>
<tr id="row_55_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_verifier_rl.html" target="_self">VerifierRl</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
diff --git a/doc/html/epid2params__ate_8inc.html b/doc/html/basenames_8dox.html
index b7168ea..459857a 100644
--- a/doc/html/epid2params__ate_8inc.html
+++ b/doc/html/basenames_8dox.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/epid2params_ate.inc File Reference</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: doc/docsrc/basenames.dox File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,26 +53,26 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('epid2params__ate_8inc.html','');});
+$(document).ready(function(){initNavTree('basenames_8dox.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
-<div class="title">epid2params_ate.inc File Reference</div> </div>
+<div class="title">doc/docsrc/basenames.dox File Reference</div> </div>
</div><!--header-->
<div class="contents">
-<p>Intel(R) EPID 2.0 constant parameters data.
+<p>This file is used by Doxygen to generate documentation.
<a href="#details">More...</a></p>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Intel(R) EPID 2.0 constant parameters data. </p>
+<div class="textblock"><p>This file is used by Doxygen to generate documentation. </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="epid2params__ate_8inc.html">epid2params_ate.inc</a></li>
+ <li class="navelem"><a class="el" href="basenames_8dox.html">basenames.dox</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/bignum_8c.html b/doc/html/bignum_8c.html
deleted file mode 100644
index 4ad4279..0000000
--- a/doc/html/bignum_8c.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/math/bignum.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('bignum_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">bignum.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Big number implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="bignum_8h.html">epid/common/math/bignum.h</a>&quot;</code><br />
-<code>#include &quot;epid/common/math/bignum-internal.h&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &quot;ext/ipp/include/ippcp.h&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:gad5f6f262bfd780fed3678bcee16f0aed"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#gad5f6f262bfd780fed3678bcee16f0aed">NewBigNum</a> (size_t data_size_bytes, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> **bignum)</td></tr>
-<tr class="memdesc:gad5f6f262bfd780fed3678bcee16f0aed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a new BigNum. <a href="group___big_num_primitives.html#gad5f6f262bfd780fed3678bcee16f0aed">More...</a><br /></td></tr>
-<tr class="separator:gad5f6f262bfd780fed3678bcee16f0aed"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga2d17600068b1d94000635c6644258a03"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga2d17600068b1d94000635c6644258a03">DeleteBigNum</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> **bignum)</td></tr>
-<tr class="memdesc:ga2d17600068b1d94000635c6644258a03"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deletes a previously allocated BigNum. <a href="group___big_num_primitives.html#ga2d17600068b1d94000635c6644258a03">More...</a><br /></td></tr>
-<tr class="separator:ga2d17600068b1d94000635c6644258a03"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga808cf477b70ed06358b11756bfe36024"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga808cf477b70ed06358b11756bfe36024">ReadBigNum</a> (void const *bn_str, size_t strlen, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *bn)</td></tr>
-<tr class="memdesc:ga808cf477b70ed06358b11756bfe36024"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deserializes a BigNum from a string. <a href="group___big_num_primitives.html#ga808cf477b70ed06358b11756bfe36024">More...</a><br /></td></tr>
-<tr class="separator:ga808cf477b70ed06358b11756bfe36024"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga47f356d816bcb5742ba6d78000861328"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga47f356d816bcb5742ba6d78000861328">WriteBigNum</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *bn, size_t strlen, void const *bn_str)</td></tr>
-<tr class="memdesc:ga47f356d816bcb5742ba6d78000861328"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes a BigNum to a string. <a href="group___big_num_primitives.html#ga47f356d816bcb5742ba6d78000861328">More...</a><br /></td></tr>
-<tr class="separator:ga47f356d816bcb5742ba6d78000861328"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a28eedfb401b5f88317f22417a64ef34c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a28eedfb401b5f88317f22417a64ef34c"></a>
-int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8c.html#a28eedfb401b5f88317f22417a64ef34c">OctStr2Bnu</a> (uint32_t *bnu_ptr, void const *octstr_ptr, int octstr_len)</td></tr>
-<tr class="memdesc:a28eedfb401b5f88317f22417a64ef34c"><td class="mdescLeft">&#160;</td><td class="mdescRight">convert octet string into "big number unsigned" representation <br /></td></tr>
-<tr class="separator:a28eedfb401b5f88317f22417a64ef34c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gae70fd9b3026f0ab3c7e9601d0a3186b8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#gae70fd9b3026f0ab3c7e9601d0a3186b8">BigNumAdd</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *b, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *r)</td></tr>
-<tr class="memdesc:gae70fd9b3026f0ab3c7e9601d0a3186b8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds two BigNum values. <a href="group___big_num_primitives.html#gae70fd9b3026f0ab3c7e9601d0a3186b8">More...</a><br /></td></tr>
-<tr class="separator:gae70fd9b3026f0ab3c7e9601d0a3186b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gacbec9669ab0fe768e2be74dcaca397ea"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#gacbec9669ab0fe768e2be74dcaca397ea">BigNumSub</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *b, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *r)</td></tr>
-<tr class="memdesc:gacbec9669ab0fe768e2be74dcaca397ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subtracts two BigNum values. <a href="group___big_num_primitives.html#gacbec9669ab0fe768e2be74dcaca397ea">More...</a><br /></td></tr>
-<tr class="separator:gacbec9669ab0fe768e2be74dcaca397ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga03c89b8b8dd87de2c0f4b5822145d317"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga03c89b8b8dd87de2c0f4b5822145d317">BigNumMul</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *b, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *r)</td></tr>
-<tr class="memdesc:ga03c89b8b8dd87de2c0f4b5822145d317"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multiplies two BigNum values. <a href="group___big_num_primitives.html#ga03c89b8b8dd87de2c0f4b5822145d317">More...</a><br /></td></tr>
-<tr class="separator:ga03c89b8b8dd87de2c0f4b5822145d317"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga7dd6038987210d10bf843602fef0c929"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga7dd6038987210d10bf843602fef0c929">BigNumMod</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *b, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *r)</td></tr>
-<tr class="memdesc:ga7dd6038987210d10bf843602fef0c929"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes modular reduction for BigNum value by specified modulus. <a href="group___big_num_primitives.html#ga7dd6038987210d10bf843602fef0c929">More...</a><br /></td></tr>
-<tr class="separator:ga7dd6038987210d10bf843602fef0c929"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Big number implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="dir_f169ebf8da29290a918fa4b3f7151050.html">math</a></li><li class="navelem"><a class="el" href="bignum_8c.html">bignum.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/bignum_8h.html b/doc/html/bignum_8h.html
index ac66718..da25593 100644
--- a/doc/html/bignum_8h.html
+++ b/doc/html/bignum_8h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -69,6 +69,7 @@ $(document).ready(function(){initNavTree('bignum_8h.html','');});
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;stddef.h&gt;</code><br />
<code>#include &lt;stdint.h&gt;</code><br />
+<code>#include &quot;<a class="el" href="stdtypes_8h.html">epid/common/stdtypes.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="errors_8h.html">epid/common/errors.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="types_8h.html">epid/common/types.h</a>&quot;</code><br />
</div><table class="memberdecls">
@@ -90,9 +91,9 @@ Functions</h2></td></tr>
<tr class="memitem:ga808cf477b70ed06358b11756bfe36024"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga808cf477b70ed06358b11756bfe36024">ReadBigNum</a> (void const *bn_str, size_t strlen, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *bn)</td></tr>
<tr class="memdesc:ga808cf477b70ed06358b11756bfe36024"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deserializes a BigNum from a string. <a href="group___big_num_primitives.html#ga808cf477b70ed06358b11756bfe36024">More...</a><br /></td></tr>
<tr class="separator:ga808cf477b70ed06358b11756bfe36024"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga47f356d816bcb5742ba6d78000861328"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga47f356d816bcb5742ba6d78000861328">WriteBigNum</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *bn, size_t strlen, void const *bn_str)</td></tr>
-<tr class="memdesc:ga47f356d816bcb5742ba6d78000861328"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes a BigNum to a string. <a href="group___big_num_primitives.html#ga47f356d816bcb5742ba6d78000861328">More...</a><br /></td></tr>
-<tr class="separator:ga47f356d816bcb5742ba6d78000861328"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga79d86c872fe8da0f217e3ba069f98d38"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga79d86c872fe8da0f217e3ba069f98d38">WriteBigNum</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *bn, size_t strlen, void *bn_str)</td></tr>
+<tr class="memdesc:ga79d86c872fe8da0f217e3ba069f98d38"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes a BigNum to a string. <a href="group___big_num_primitives.html#ga79d86c872fe8da0f217e3ba069f98d38">More...</a><br /></td></tr>
+<tr class="separator:ga79d86c872fe8da0f217e3ba069f98d38"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae70fd9b3026f0ab3c7e9601d0a3186b8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#gae70fd9b3026f0ab3c7e9601d0a3186b8">BigNumAdd</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *b, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *r)</td></tr>
<tr class="memdesc:gae70fd9b3026f0ab3c7e9601d0a3186b8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds two BigNum values. <a href="group___big_num_primitives.html#gae70fd9b3026f0ab3c7e9601d0a3186b8">More...</a><br /></td></tr>
<tr class="separator:gae70fd9b3026f0ab3c7e9601d0a3186b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -102,9 +103,21 @@ Functions</h2></td></tr>
<tr class="memitem:ga03c89b8b8dd87de2c0f4b5822145d317"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga03c89b8b8dd87de2c0f4b5822145d317">BigNumMul</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *b, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *r)</td></tr>
<tr class="memdesc:ga03c89b8b8dd87de2c0f4b5822145d317"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multiplies two BigNum values. <a href="group___big_num_primitives.html#ga03c89b8b8dd87de2c0f4b5822145d317">More...</a><br /></td></tr>
<tr class="separator:ga03c89b8b8dd87de2c0f4b5822145d317"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga166134085464b0df2c8efcfccf8ec573"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga166134085464b0df2c8efcfccf8ec573">BigNumDiv</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *b, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *q, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *r)</td></tr>
+<tr class="memdesc:ga166134085464b0df2c8efcfccf8ec573"><td class="mdescLeft">&#160;</td><td class="mdescRight">Divides two BigNum values. <a href="group___big_num_primitives.html#ga166134085464b0df2c8efcfccf8ec573">More...</a><br /></td></tr>
+<tr class="separator:ga166134085464b0df2c8efcfccf8ec573"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7dd6038987210d10bf843602fef0c929"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga7dd6038987210d10bf843602fef0c929">BigNumMod</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *b, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *r)</td></tr>
<tr class="memdesc:ga7dd6038987210d10bf843602fef0c929"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes modular reduction for BigNum value by specified modulus. <a href="group___big_num_primitives.html#ga7dd6038987210d10bf843602fef0c929">More...</a><br /></td></tr>
<tr class="separator:ga7dd6038987210d10bf843602fef0c929"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf0366e47226563b17fcbc8e3ed766084"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#gaf0366e47226563b17fcbc8e3ed766084">BigNumIsEven</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *is_even)</td></tr>
+<tr class="memdesc:gaf0366e47226563b17fcbc8e3ed766084"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a BigNum is even. <a href="group___big_num_primitives.html#gaf0366e47226563b17fcbc8e3ed766084">More...</a><br /></td></tr>
+<tr class="separator:gaf0366e47226563b17fcbc8e3ed766084"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacde6564a814617a96985b379be0dfabb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#gacde6564a814617a96985b379be0dfabb">BigNumIsZero</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *is_zero)</td></tr>
+<tr class="memdesc:gacde6564a814617a96985b379be0dfabb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a BigNum is zero. <a href="group___big_num_primitives.html#gacde6564a814617a96985b379be0dfabb">More...</a><br /></td></tr>
+<tr class="separator:gacde6564a814617a96985b379be0dfabb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafd64b66fc85dab0005f4a1bb67bdf7b4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#gafd64b66fc85dab0005f4a1bb67bdf7b4">BigNumPow2N</a> (unsigned int n, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *r)</td></tr>
+<tr class="memdesc:gafd64b66fc85dab0005f4a1bb67bdf7b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Raises 2 to the given power. <a href="group___big_num_primitives.html#gafd64b66fc85dab0005f4a1bb67bdf7b4">More...</a><br /></td></tr>
+<tr class="separator:gafd64b66fc85dab0005f4a1bb67bdf7b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Big number interface. </p>
diff --git a/doc/html/bitsupplier_8h.html b/doc/html/bitsupplier_8h.html
index c89b3b2..24d6444 100644
--- a/doc/html/bitsupplier_8h.html
+++ b/doc/html/bitsupplier_8h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/build__tools__installation_8dox.html b/doc/html/build__tools__installation_8dox.html
new file mode 100644
index 0000000..52c1f0b
--- /dev/null
+++ b/doc/html/build__tools__installation_8dox.html
@@ -0,0 +1,82 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: doc/docsrc/build_tools_installation.dox File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('build__tools__installation_8dox.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<div class="title">doc/docsrc/build_tools_installation.dox File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This file is used by Doxygen to generate documentation.
+<a href="#details">More...</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>This file is used by Doxygen to generate documentation. </p>
+</div></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="build__tools__installation_8dox.html">build_tools_installation.dox</a></li>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/building__sdk_8dox.html b/doc/html/building__sdk_8dox.html
index 6e2f6fe..0b63f2c 100644
--- a/doc/html/building__sdk_8dox.html
+++ b/doc/html/building__sdk_8dox.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/check__privrl__entry_8c.html b/doc/html/check__privrl__entry_8c.html
deleted file mode 100644
index 7750685..0000000
--- a/doc/html/check__privrl__entry_8c.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/verifier/check_privrl_entry.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('check__privrl__entry_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">check_privrl_entry.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>EpidCheckPrivRlEntry implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="verifier_2api_8h.html">epid/verifier/api.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="verifier_2context_8h.html">epid/verifier/context.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:gaeb05e6faea6f09c0665b13adc6e7ddea"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea">EpidCheckPrivRlEntry</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, <a class="el" href="struct_fp_elem_str.html">FpElemStr</a> const *f)</td></tr>
-<tr class="memdesc:gaeb05e6faea6f09c0665b13adc6e7ddea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies a signature has not been revoked in the private key based revocation list. <a href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea">More...</a><br /></td></tr>
-<tr class="separator:gaeb05e6faea6f09c0665b13adc6e7ddea"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>EpidCheckPrivRlEntry implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_02c945662023679b89476bd7126bc985.html">verifier</a></li><li class="navelem"><a class="el" href="check__privrl__entry_8c.html">check_privrl_entry.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_q.html b/doc/html/choosing__ikgf_8dox.html
index ea64bc3..d63d34a 100644
--- a/doc/html/functions_q.html
+++ b/doc/html/choosing__ikgf_8dox.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: doc/docsrc/choosing_ikgf.dox File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,24 +53,26 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_q.html','');});
+$(document).ready(function(){initNavTree('choosing__ikgf_8dox.html','');});
</script>
<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<div class="title">doc/docsrc/choosing_ikgf.dox File Reference</div> </div>
+</div><!--header-->
<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-<h3><a class="anchor" id="index_q"></a>- q -</h3><ul>
-<li>q
-: <a class="el" href="struct_epid2_params.html#a023603228fed2854ddae2e228938940f">Epid2Params</a>
-, <a class="el" href="struct_epid2_params__.html#a6d56c3f4dff7e92a0738e7866208bf4d">Epid2Params_</a>
-</li>
-</ul>
-</div><!-- contents -->
+<p>This file is used by Doxygen to generate documentation.
+<a href="#details">More...</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>This file is used by Doxygen to generate documentation. </p>
+</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
+ <li class="navelem"><a class="el" href="choosing__ikgf_8dox.html">choosing_ikgf.dox</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/classes.html b/doc/html/classes.html
index 1a92e1c..6329f92 100644
--- a/doc/html/classes.html
+++ b/doc/html/classes.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -61,43 +61,43 @@ $(document).ready(function(){initNavTree('classes.html','');});
<div class="title">Data Structure Index</div> </div>
</div><!--header-->
<div class="contents">
-<div class="qindex"><a class="qindex" href="#letter_A">A</a>&#160;|&#160;<a class="qindex" href="#letter_B">B</a>&#160;|&#160;<a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_E">E</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_G">G</a>&#160;|&#160;<a class="qindex" href="#letter_I">I</a>&#160;|&#160;<a class="qindex" href="#letter_J">J</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_N">N</a>&#160;|&#160;<a class="qindex" href="#letter_O">O</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_V">V</a></div>
+<div class="qindex"><a class="qindex" href="#letter_B">B</a>&#160;|&#160;<a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_E">E</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_G">G</a>&#160;|&#160;<a class="qindex" href="#letter_I">I</a>&#160;|&#160;<a class="qindex" href="#letter_J">J</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_N">N</a>&#160;|&#160;<a class="qindex" href="#letter_O">O</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_V">V</a></div>
<table class="classindex">
-<tr><td rowspan="2" valign="bottom"><a name="letter_A"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;A&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="struct_epid2_params__.html">Epid2Params_</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_G"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;G&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="struct_member_precomp.html">MemberPrecomp</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_priv_key.html">PrivKey</a>&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_membership_credential.html">MembershipCredential</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_priv_key__.html">PrivKey_</a>&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="struct_allowed_basename.html">AllowedBasename</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_epid_file_header.html">EpidFileHeader</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_N"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;N&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="struct_priv_rl.html">PrivRl</a>&#160;&#160;&#160;</td></tr>
<tr><td rowspan="2" valign="bottom"><a name="letter_B"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;B&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="struct_epid_group_pub_key_certificate.html">EpidGroupPubKeyCertificate</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_g2_elem_str.html">G2ElemStr</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;S&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="struct_epid11_nr_proof.html">Epid11NrProof</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_fq6_elem_str.html">Fq6ElemStr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_membership_credential.html">MembershipCredential</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_priv_key.html">PrivKey</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="struct_epid11_params.html">Epid11Params</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_fq_elem_str.html">FqElemStr</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_N"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;N&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="struct_priv_rl.html">PrivRl</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="struct_basic_signature.html">BasicSignature</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_epid11_priv_rl.html">Epid11PrivRl</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_G"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;G&#160;&#160;</div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;S&#160;&#160;</div></td></tr></table>
</td></tr>
-<tr><td valign="top"><a class="el" href="struct_epid_signature.html">EpidSignature</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_group_pub_key.html">GroupPubKey</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_nr_proof.html">NrProof</a>&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="struct_basic_signature.html">BasicSignature</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_error_text_entry.html">ErrorTextEntry</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_group_pub_key__.html">GroupPubKey_</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_nr_verify_commit_values.html">NrVerifyCommitValues</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_sha256_digest.html">Sha256Digest</a>&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="struct_big_num_str.html">BigNumStr</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;F&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="struct_group_rl.html">GroupRl</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_O"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;O&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="struct_sig_rl.html">SigRl</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="struct_big_num_str.html">BigNumStr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_epid11_signature.html">Epid11Signature</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_nr_proof.html">NrProof</a>&#160;&#160;&#160;</td></tr>
<tr><td rowspan="2" valign="bottom"><a name="letter_C"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;C&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="struct_gt_elem_str.html">GtElemStr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_sig_rl_entry.html">SigRlEntry</a>&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="struct_fp_elem_str.html">FpElemStr</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;I&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="struct_oct_str128.html">OctStr128</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_stack.html">Stack</a>&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="struct_commit_values.html">CommitValues</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_fq12_elem_dat.html">Fq12ElemDat</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_oct_str16.html">OctStr16</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_V"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;V&#160;&#160;</div></td></tr></table>
-</td></tr>
-<tr><td valign="top"><a class="el" href="struct_compressed_priv_key.html">CompressedPrivKey</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_fq12_elem_str.html">Fq12ElemStr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_i_priv_key.html">IPrivKey</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_oct_str256.html">OctStr256</a>&#160;&#160;&#160;</td></tr>
+</td><td valign="top"><a class="el" href="struct_epid11_sig_rl.html">Epid11SigRl</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_O"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;O&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="struct_sha256_digest.html">Sha256Digest</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="struct_epid11_sig_rl_entry.html">Epid11SigRlEntry</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_g2_elem_str.html">G2ElemStr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_sig_rl.html">SigRl</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="struct_compressed_priv_key.html">CompressedPrivKey</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_epid11_verifier_precomp.html">Epid11VerifierPrecomp</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_group_pub_key.html">GroupPubKey</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_oct_str128.html">OctStr128</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_sig_rl_entry.html">SigRlEntry</a>&#160;&#160;&#160;</td></tr>
<tr><td rowspan="2" valign="bottom"><a name="letter_E"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;E&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="struct_fq2_elem_dat.html">Fq2ElemDat</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_J"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;J&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="struct_oct_str32.html">OctStr32</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a>&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="struct_fq2_elem_str.html">Fq2ElemStr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_oct_str512.html">OctStr512</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_verifier_precomp.html">VerifierPrecomp</a>&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="struct_ecdsa_private_key.html">EcdsaPrivateKey</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_fq6_elem_dat.html">Fq6ElemDat</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_join_p_commit_values.html">JoinPCommitValues</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_oct_str64.html">OctStr64</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_verifier_rl.html">VerifierRl</a>&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="struct_ecdsa_public_key.html">EcdsaPublicKey</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_fq6_elem_str.html">Fq6ElemStr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_join_request.html">JoinRequest</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_oct_str8.html">OctStr8</a>&#160;&#160;&#160;</td><td></td></tr>
-<tr><td valign="top"><a class="el" href="struct_ecdsa_signature.html">EcdsaSignature</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_fq_elem_dat.html">FqElemDat</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;M&#160;&#160;</div></td></tr></table>
-</td><td rowspan="2" valign="bottom"><a name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;P&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="struct_epid2_params.html">Epid2Params</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_group_rl.html">GroupRl</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_oct_str16.html">OctStr16</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_V"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;V&#160;&#160;</div></td></tr></table>
+</td></tr>
+<tr><td valign="top"><a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_gt_elem_str.html">GtElemStr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_oct_str256.html">OctStr256</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="struct_ecdsa_private_key.html">EcdsaPrivateKey</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_epid_file_header.html">EpidFileHeader</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;I&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="struct_oct_str32.html">OctStr32</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_verifier_precomp.html">VerifierPrecomp</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="struct_ecdsa_public_key.html">EcdsaPublicKey</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_epid_signature.html">EpidSignature</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_oct_str512.html">OctStr512</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_verifier_rl.html">VerifierRl</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="struct_ecdsa_signature.html">EcdsaSignature</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;F&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="struct_i_priv_key.html">IPrivKey</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_oct_str600.html">OctStr600</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td valign="top"><a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_J"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;J&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="struct_oct_str64.html">OctStr64</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td valign="top"><a class="el" href="struct_epid11_g2_elem_str.html">Epid11G2ElemStr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_fp_elem_str.html">FpElemStr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_oct_str768.html">OctStr768</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td valign="top"><a class="el" href="struct_epid11_group_pub_key.html">Epid11GroupPubKey</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_fq12_elem_str.html">Fq12ElemStr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_join_request.html">JoinRequest</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_oct_str8.html">OctStr8</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td valign="top"><a class="el" href="struct_epid11_group_rl.html">Epid11GroupRl</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_fq2_elem_str.html">Fq2ElemStr</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;M&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="struct_oct_str80.html">OctStr80</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td valign="top"><a class="el" href="struct_epid11_gt_elem_str.html">Epid11GtElemStr</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_fq3_elem_str.html">Fq3ElemStr</a>&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_P"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;P&#160;&#160;</div></td></tr></table>
</td><td></td></tr>
-<tr><td valign="top"><a class="el" href="struct_epid2_params.html">Epid2Params</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_fq_elem_str.html">FqElemStr</a>&#160;&#160;&#160;</td><td></td></tr>
-<tr><td></td><td></td><td valign="top"><a class="el" href="struct_member_ctx.html">MemberCtx</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td></td><td></td><td valign="top"><a class="el" href="struct_member_precomp.html">MemberPrecomp</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td></td><td></td><td></td><td valign="top"><a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a>&#160;&#160;&#160;</td><td></td></tr>
<tr><td></td><td></td><td></td><td></td><td></td></tr>
</table>
-<div class="qindex"><a class="qindex" href="#letter_A">A</a>&#160;|&#160;<a class="qindex" href="#letter_B">B</a>&#160;|&#160;<a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_E">E</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_G">G</a>&#160;|&#160;<a class="qindex" href="#letter_I">I</a>&#160;|&#160;<a class="qindex" href="#letter_J">J</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_N">N</a>&#160;|&#160;<a class="qindex" href="#letter_O">O</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_V">V</a></div>
+<div class="qindex"><a class="qindex" href="#letter_B">B</a>&#160;|&#160;<a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_E">E</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_G">G</a>&#160;|&#160;<a class="qindex" href="#letter_I">I</a>&#160;|&#160;<a class="qindex" href="#letter_J">J</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_N">N</a>&#160;|&#160;<a class="qindex" href="#letter_O">O</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_V">V</a></div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
diff --git a/doc/html/commitment_8c.html b/doc/html/commitment_8c.html
deleted file mode 100644
index 13a543a..0000000
--- a/doc/html/commitment_8c.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/commitment.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('commitment_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">commitment.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Commitment hash implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;limits.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="commitment_8h.html">epid/common/commitment.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="epid2params__ate_8inc.html">epid/common/epid2params_ate.inc</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga3f3c3b965dd714179cbc2f8d96678ee0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga3f3c3b965dd714179cbc2f8d96678ee0">SetCalculatedCommitValues</a> (<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a> const *B, <a class="el" href="struct_g1_elem_str.html">G1ElemStr</a> const *K, <a class="el" href="struct_g1_elem_str.html">G1ElemStr</a> const *T, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *R1, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *G1, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *R2, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *GT, <a class="el" href="struct_commit_values.html">CommitValues</a> *values)</td></tr>
-<tr class="memdesc:ga3f3c3b965dd714179cbc2f8d96678ee0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set <a class="el" href="struct_commit_values.html" title="Storage for values to create commitment in Sign and Verify algorithms. ">CommitValues</a> structure fields calculated in algorithm. <a href="group___epid_common.html#ga3f3c3b965dd714179cbc2f8d96678ee0">More...</a><br /></td></tr>
-<tr class="separator:ga3f3c3b965dd714179cbc2f8d96678ee0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga23f8ea0f7529e8e7a81bd88e607dda01"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga23f8ea0f7529e8e7a81bd88e607dda01">CalculateCommitmentHash</a> (<a class="el" href="struct_commit_values.html">CommitValues</a> const *values, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *Fp, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg, void const *msg, size_t msg_len, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *c)</td></tr>
-<tr class="memdesc:ga23f8ea0f7529e8e7a81bd88e607dda01"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate Fp.hash(t3 || m) for Sign and Verfiy algorithms. <a href="group___epid_common.html#ga23f8ea0f7529e8e7a81bd88e607dda01">More...</a><br /></td></tr>
-<tr class="separator:ga23f8ea0f7529e8e7a81bd88e607dda01"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Commitment hash implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="commitment_8c.html">commitment.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/commitment_8h.html b/doc/html/commitment_8h.html
deleted file mode 100644
index fc9e54f..0000000
--- a/doc/html/commitment_8h.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/commitment.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('commitment_8h.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">commitment.h File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Commitment hash interface.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="errors_8h.html">epid/common/errors.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="types_8h.html">epid/common/types.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="ecgroup_8h.html">epid/common/math/ecgroup.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="finitefield_8h.html">epid/common/math/finitefield.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_commit_values.html">CommitValues</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Storage for values to create commitment in Sign and Verify algorithms. <a href="struct_commit_values.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga2d54f4f222e965222024113c0420602d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga2d54f4f222e965222024113c0420602d">SetKeySpecificCommitValues</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_commit_values.html">CommitValues</a> *values)</td></tr>
-<tr class="memdesc:ga2d54f4f222e965222024113c0420602d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set group public key related fields from <a class="el" href="struct_commit_values.html" title="Storage for values to create commitment in Sign and Verify algorithms. ">CommitValues</a> structure. <a href="group___epid_common.html#ga2d54f4f222e965222024113c0420602d">More...</a><br /></td></tr>
-<tr class="separator:ga2d54f4f222e965222024113c0420602d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga3f3c3b965dd714179cbc2f8d96678ee0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga3f3c3b965dd714179cbc2f8d96678ee0">SetCalculatedCommitValues</a> (<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a> const *B, <a class="el" href="struct_g1_elem_str.html">G1ElemStr</a> const *K, <a class="el" href="struct_g1_elem_str.html">G1ElemStr</a> const *T, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *R1, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *G1, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *R2, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *GT, <a class="el" href="struct_commit_values.html">CommitValues</a> *values)</td></tr>
-<tr class="memdesc:ga3f3c3b965dd714179cbc2f8d96678ee0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set <a class="el" href="struct_commit_values.html" title="Storage for values to create commitment in Sign and Verify algorithms. ">CommitValues</a> structure fields calculated in algorithm. <a href="group___epid_common.html#ga3f3c3b965dd714179cbc2f8d96678ee0">More...</a><br /></td></tr>
-<tr class="separator:ga3f3c3b965dd714179cbc2f8d96678ee0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga23f8ea0f7529e8e7a81bd88e607dda01"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga23f8ea0f7529e8e7a81bd88e607dda01">CalculateCommitmentHash</a> (<a class="el" href="struct_commit_values.html">CommitValues</a> const *values, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *Fp, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg, void const *msg, size_t msg_len, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *c)</td></tr>
-<tr class="memdesc:ga23f8ea0f7529e8e7a81bd88e607dda01"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate Fp.hash(t3 || m) for Sign and Verfiy algorithms. <a href="group___epid_common.html#ga23f8ea0f7529e8e7a81bd88e607dda01">More...</a><br /></td></tr>
-<tr class="separator:ga23f8ea0f7529e8e7a81bd88e607dda01"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Commitment hash interface. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="commitment_8h.html">commitment.h</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/decompress__privkey_8c.html b/doc/html/decompress__privkey_8c.html
deleted file mode 100644
index b34aa82..0000000
--- a/doc/html/decompress__privkey_8c.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/member/decompress_privkey.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('decompress__privkey_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">decompress_privkey.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>EpidDecompressPrivKey implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="member_2api_8h.html">epid/member/api.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="epid2params_8h.html">epid/common/epid2params.h</a>&quot;</code><br />
-<code>#include &quot;epid/common/math/bignum-internal.h&quot;</code><br />
-<code>#include &quot;<a class="el" href="hash_8h.html">epid/common/math/hash.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="privkey_8h.html">epid/member/privkey.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decompress__privkey_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">BREAK_ON_EPID_ERROR</a>(ret)</td></tr>
-<tr class="memdesc:a5638f861b82f1746ea1af0b384ef8ff1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handle Intel(R) EPID Error with Break. <a href="#a5638f861b82f1746ea1af0b384ef8ff1">More...</a><br /></td></tr>
-<tr class="separator:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:gaf8cd05388f017486f14da2ee48d067ef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gaf8cd05388f017486f14da2ee48d067ef">EpidDecompressPrivKey</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_compressed_priv_key.html">CompressedPrivKey</a> const *compressed_privkey, <a class="el" href="struct_priv_key.html">PrivKey</a> *priv_key)</td></tr>
-<tr class="memdesc:gaf8cd05388f017486f14da2ee48d067ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Decompresses compressed member private key. <a href="group___epid_member_module.html#gaf8cd05388f017486f14da2ee48d067ef">More...</a><br /></td></tr>
-<tr class="separator:gaf8cd05388f017486f14da2ee48d067ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>EpidDecompressPrivKey implementation. </p>
-</div><h2 class="groupheader">Macro Definition Documentation</h2>
-<a class="anchor" id="a5638f861b82f1746ea1af0b384ef8ff1"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define BREAK_ON_EPID_ERROR</td>
- <td>(</td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">ret</td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != (ret)) { \</div><div class="line"> break; \</div><div class="line"> }</div><div class="ttc" id="group___error_codes_html_ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9"><div class="ttname"><a href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a></div><div class="ttdoc">no error </div><div class="ttdef"><b>Definition:</b> errors.h:41</div></div>
-</div><!-- fragment -->
-<p>Handle Intel(R) EPID Error with Break. </p>
-
-</div>
-</div>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_512d3e62841a8535b716ec4cf8b9e950.html">member</a></li><li class="navelem"><a class="el" href="decompress__privkey_8c.html">decompress_privkey.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/dir_02c945662023679b89476bd7126bc985.html b/doc/html/dir_02c945662023679b89476bd7126bc985.html
index 34c3526..2da5253 100644
--- a/doc/html/dir_02c945662023679b89476bd7126bc985.html
+++ b/doc/html/dir_02c945662023679b89476bd7126bc985.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -66,32 +66,14 @@ $(document).ready(function(){initNavTree('dir_02c945662023679b89476bd7126bc985.h
<a href="#details">More...</a></p>
<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
Files</h2></td></tr>
<tr class="memitem:verifier_2api_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="verifier_2api_8h.html">api.h</a></td></tr>
<tr class="memdesc:verifier_2api_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID SDK verifier API. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:check__privrl__entry_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="check__privrl__entry_8c.html">check_privrl_entry.c</a></td></tr>
-<tr class="memdesc:check__privrl__entry_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">EpidCheckPrivRlEntry implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:verifier_2context_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="verifier_2context_8c.html">context.c</a></td></tr>
-<tr class="memdesc:verifier_2context_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifier context implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:verifier_2context_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="verifier_2context_8h.html">context.h</a></td></tr>
-<tr class="memdesc:verifier_2context_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifier context interface. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:nrverify_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="nrverify_8c.html">nrverify.c</a></td></tr>
-<tr class="memdesc:nrverify_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">NrVerfy implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:sigs__linked_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sigs__linked_8c.html">sigs_linked.c</a></td></tr>
-<tr class="memdesc:sigs__linked_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">AreSigsLinked implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:verify_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="verify_8c.html">verify.c</a></td></tr>
-<tr class="memdesc:verify_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verify implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:verifybasic_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="verifybasic_8c.html">verifybasic.c</a></td></tr>
-<tr class="memdesc:verifybasic_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">VerifyBasicSig implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Verifier functionality. </p>
diff --git a/doc/html/dir_12b90d9c027aaf878a834df729679a56.html b/doc/html/dir_12b90d9c027aaf878a834df729679a56.html
index 9031b5c..3b6b938 100644
--- a/doc/html/dir_12b90d9c027aaf878a834df729679a56.html
+++ b/doc/html/dir_12b90d9c027aaf878a834df729679a56.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/dir_512d3e62841a8535b716ec4cf8b9e950.html b/doc/html/dir_512d3e62841a8535b716ec4cf8b9e950.html
index dd82485..c2d5b41 100644
--- a/doc/html/dir_512d3e62841a8535b716ec4cf8b9e950.html
+++ b/doc/html/dir_512d3e62841a8535b716ec4cf8b9e950.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -71,39 +71,6 @@ Files</h2></td></tr>
<tr class="memitem:member_2api_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="member_2api_8h.html">api.h</a></td></tr>
<tr class="memdesc:member_2api_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID SDK member API. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:member_2context_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="member_2context_8c.html">context.c</a></td></tr>
-<tr class="memdesc:member_2context_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Member context implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:member_2context_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="member_2context_8h.html">context.h</a></td></tr>
-<tr class="memdesc:member_2context_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Member context interface. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:decompress__privkey_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="decompress__privkey_8c.html">decompress_privkey.c</a></td></tr>
-<tr class="memdesc:decompress__privkey_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">EpidDecompressPrivKey implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:get__sigsize_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="get__sigsize_8c.html">get_sigsize.c</a></td></tr>
-<tr class="memdesc:get__sigsize_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">EpidGetSigSize implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:nr__prove_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="nr__prove_8c.html">nr_prove.c</a></td></tr>
-<tr class="memdesc:nr__prove_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">EpidNrProve implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:presig_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="presig_8c.html">presig.c</a></td></tr>
-<tr class="memdesc:presig_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">EpidComputePreSig implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:privkey_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="privkey_8c.html">privkey.c</a></td></tr>
-<tr class="memdesc:privkey_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Private key implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:privkey_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="privkey_8h.html">privkey.h</a></td></tr>
-<tr class="memdesc:privkey_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Private key private interface. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:request__join_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="request__join_8c.html">request_join.c</a></td></tr>
-<tr class="memdesc:request__join_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">EpidRequestJoin implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:sign_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sign_8c.html">sign.c</a></td></tr>
-<tr class="memdesc:sign_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">EpidSign implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:signbasic_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="signbasic_8c.html">signbasic.c</a></td></tr>
-<tr class="memdesc:signbasic_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">EpidSignBasic implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Member functionality. </p>
diff --git a/doc/html/endian__convert_8h.html b/doc/html/dir_a32be19bc88f3d7aac6b7249da379f26.html
index 5f089eb..446b40e 100644
--- a/doc/html/endian__convert_8h.html
+++ b/doc/html/dir_a32be19bc88f3d7aac6b7249da379f26.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/endian_convert.h File Reference</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/1.1 Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,36 +53,31 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('endian__convert_8h.html','');});
+$(document).ready(function(){initNavTree('dir_a32be19bc88f3d7aac6b7249da379f26.html','');});
</script>
<div id="doc-content">
<div class="header">
- <div class="summary">
-<a href="#define-members">Macros</a> </div>
<div class="headertitle">
-<div class="title">endian_convert.h File Reference</div> </div>
+<div class="title">1.1 Directory Reference</div> </div>
</div><!--header-->
<div class="contents">
-
-<p>Endianness conversion interface.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;stdint.h&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:ga29a7e07cd5181e738f98fc026979efca"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga29a7e07cd5181e738f98fc026979efca">ntohl</a>(u32) </td></tr>
-<tr class="memdesc:ga29a7e07cd5181e738f98fc026979efca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Macros to transform oct str 32 into uint_32. <a href="group___epid_common.html#ga29a7e07cd5181e738f98fc026979efca">More...</a><br /></td></tr>
-<tr class="separator:ga29a7e07cd5181e738f98fc026979efca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:1_81_2file__parser_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="1_81_2file__parser_8h.html">file_parser.h</a></td></tr>
+<tr class="memdesc:1_81_2file__parser_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Epid 1.1 issuer material parsing utilities. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:1_81_2types_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="1_81_2types_8h.html">types.h</a></td></tr>
+<tr class="memdesc:1_81_2types_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">SDK data types for Intel(R) EPID 1.1. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Endianness conversion interface. </p>
-</div></div><!-- contents -->
+</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="endian__convert_8h.html">endian_convert.h</a></li>
+ <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="dir_a32be19bc88f3d7aac6b7249da379f26.html">1.1</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/functions_k.html b/doc/html/dir_ef364879bae02db2684040178ed9b186.html
index fdf2abc..5a8f5eb 100644
--- a/doc/html/functions_k.html
+++ b/doc/html/dir_ef364879bae02db2684040178ed9b186.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: epid/verifier/1.1 Directory Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,39 +53,28 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_k.html','');});
+$(document).ready(function(){initNavTree('dir_ef364879bae02db2684040178ed9b186.html','');});
</script>
<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<div class="title">1.1 Directory Reference</div> </div>
+</div><!--header-->
<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
-<li>K
-: <a class="el" href="struct_basic_signature.html#a0078cc83ecf6c7e31f96b7d44aa60e21">BasicSignature</a>
-, <a class="el" href="struct_commit_values.html#a49f073d0132a51020c0bfc819ec0d619">CommitValues</a>
-</li>
-<li>k
-: <a class="el" href="struct_nr_verify_commit_values.html#a316d13c42592a5cccacafb5543c74696">NrVerifyCommitValues</a>
-</li>
-<li>K
-: <a class="el" href="struct_pre_computed_signature.html#a2a4eaffe2717bd9c8c360599612adbe6">PreComputedSignature</a>
-</li>
-<li>k
-: <a class="el" href="struct_sig_rl_entry.html#a0dfeb058614e81878bfbf86ae3edac3c">SigRlEntry</a>
-</li>
-<li>K
-: <a class="el" href="struct_verifier_rl.html#ac7d3dceab4772096bbbeb3fa735d18a9">VerifierRl</a>
-</li>
-<li>kp
-: <a class="el" href="struct_nr_verify_commit_values.html#a189855b5445f5ae8a374ff78ab4b536a">NrVerifyCommitValues</a>
-</li>
-</ul>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:verifier_21_81_2api_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="verifier_21_81_2api_8h.html">api.h</a></td></tr>
+<tr class="memdesc:verifier_21_81_2api_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID SDK verifier Intel(R) EPID 1.1 API. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
+ <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_02c945662023679b89476bd7126bc985.html">verifier</a></li><li class="navelem"><a class="el" href="dir_ef364879bae02db2684040178ed9b186.html">1.1</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/dir_f169ebf8da29290a918fa4b3f7151050.html b/doc/html/dir_f169ebf8da29290a918fa4b3f7151050.html
index 7a85522..3a07fce 100644
--- a/doc/html/dir_f169ebf8da29290a918fa4b3f7151050.html
+++ b/doc/html/dir_f169ebf8da29290a918fa4b3f7151050.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -68,50 +68,29 @@ $(document).ready(function(){initNavTree('dir_f169ebf8da29290a918fa4b3f7151050.h
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
Files</h2></td></tr>
-<tr class="memitem:bignum_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8c.html">bignum.c</a></td></tr>
-<tr class="memdesc:bignum_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Big number implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:bignum_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bignum_8h.html">bignum.h</a></td></tr>
<tr class="memdesc:bignum_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Big number interface. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ecdsa_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecdsa_8h.html">ecdsa.h</a></td></tr>
<tr class="memdesc:ecdsa_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Ecdsa interface. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ecdsa__sign_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecdsa__sign_8c.html">ecdsa_sign.c</a></td></tr>
-<tr class="memdesc:ecdsa__sign_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">EcdsaSignBuffer implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ecdsa__verify_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecdsa__verify_8c.html">ecdsa_verify.c</a></td></tr>
-<tr class="memdesc:ecdsa__verify_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">EcdsaVerifyBuffer implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ecgroup_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecgroup_8c.html">ecgroup.c</a></td></tr>
-<tr class="memdesc:ecgroup_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Elliptic curve group implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ecgroup_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecgroup_8h.html">ecgroup.h</a></td></tr>
<tr class="memdesc:ecgroup_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Elliptic curve group interface. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:finitefield_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="finitefield_8c.html">finitefield.c</a></td></tr>
-<tr class="memdesc:finitefield_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finite field implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:finitefield_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="finitefield_8h.html">finitefield.h</a></td></tr>
<tr class="memdesc:finitefield_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finite field interface. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:hash_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="hash_8h.html">hash.h</a></td></tr>
<tr class="memdesc:hash_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hash primitives. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:pairing_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pairing_8c.html">pairing.c</a></td></tr>
-<tr class="memdesc:pairing_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pairing implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:pairing_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pairing_8h.html">pairing.h</a></td></tr>
<tr class="memdesc:pairing_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pairing interface. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:printutils_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="printutils_8c.html">printutils.c</a></td></tr>
-<tr class="memdesc:printutils_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Print helper implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:printutils_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="printutils_8h.html">printutils.h</a></td></tr>
<tr class="memdesc:printutils_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Print helper interface. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:sha256_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sha256_8c.html">sha256.c</a></td></tr>
-<tr class="memdesc:sha256_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">SHA256 implementation. <br /></td></tr>
+<tr class="memitem:tatepairing_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tatepairing_8h.html">tatepairing.h</a></td></tr>
+<tr class="memdesc:tatepairing_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 Pairing interface. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
diff --git a/doc/html/dir_f6bef457d5f671b6e774bfccc16651f6.html b/doc/html/dir_f6bef457d5f671b6e774bfccc16651f6.html
index 9ce1d0c..b454780 100644
--- a/doc/html/dir_f6bef457d5f671b6e774bfccc16651f6.html
+++ b/doc/html/dir_f6bef457d5f671b6e774bfccc16651f6.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -77,60 +77,12 @@ Files</h2></td></tr>
<tr class="memitem:bitsupplier_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="bitsupplier_8h.html">bitsupplier.h</a></td></tr>
<tr class="memdesc:bitsupplier_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Random data supplier interface. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:commitment_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="commitment_8c.html">commitment.c</a></td></tr>
-<tr class="memdesc:commitment_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Commitment hash implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:commitment_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="commitment_8h.html">commitment.h</a></td></tr>
-<tr class="memdesc:commitment_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Commitment hash interface. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:endian__convert_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="endian__convert_8h.html">endian_convert.h</a></td></tr>
-<tr class="memdesc:endian__convert_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Endianness conversion interface. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:epid2params_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="epid2params_8c.html">epid2params.c</a></td></tr>
-<tr class="memdesc:epid2params_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 2.0 constant parameters implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:epid2params_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="epid2params_8h.html">epid2params.h</a></td></tr>
-<tr class="memdesc:epid2params_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 2.0 constant parameters interface. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:epid2params__ate_8inc"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="epid2params__ate_8inc.html">epid2params_ate.inc</a></td></tr>
-<tr class="memdesc:epid2params__ate_8inc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 2.0 constant parameters data. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:errors_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="errors_8c.html">errors.c</a></td></tr>
-<tr class="memdesc:errors_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Error reporting implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:errors_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="errors_8h.html">errors.h</a></td></tr>
<tr class="memdesc:errors_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Error reporting. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:file__parser_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="file__parser_8c.html">file_parser.c</a></td></tr>
-<tr class="memdesc:file__parser_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implementation of issuer material file parsing utilities. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:file__parser_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="file__parser_8h.html">file_parser.h</a></td></tr>
<tr class="memdesc:file__parser_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Epid issuer material parsing utilities. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:grouppubkey_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="grouppubkey_8c.html">grouppubkey.c</a></td></tr>
-<tr class="memdesc:grouppubkey_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Group public key implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:grouppubkey_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="grouppubkey_8h.html">grouppubkey.h</a></td></tr>
-<tr class="memdesc:grouppubkey_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Group public key interface. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:memory_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html">memory.c</a></td></tr>
-<tr class="memdesc:memory_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Memory access implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:memory_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8h.html">memory.h</a></td></tr>
-<tr class="memdesc:memory_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Memory access interface. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:sigrlvalid_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sigrlvalid_8c.html">sigrlvalid.c</a></td></tr>
-<tr class="memdesc:sigrlvalid_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="struct_sig_rl.html" title="signature based revocation list ">SigRl</a> validity checking implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:sigrlvalid_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="sigrlvalid_8h.html">sigrlvalid.h</a></td></tr>
-<tr class="memdesc:sigrlvalid_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="struct_sig_rl.html" title="signature based revocation list ">SigRl</a> validity checking interface. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:stack_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8c.html">stack.c</a></td></tr>
-<tr class="memdesc:stack_8c"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> container implementation. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:stack_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html">stack.h</a></td></tr>
-<tr class="memdesc:stack_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> container interface. <br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:stdtypes_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stdtypes_8h.html">stdtypes.h</a></td></tr>
<tr class="memdesc:stdtypes_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">C99 standard data types. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/doc/html/ecdsa_8h.html b/doc/html/ecdsa_8h.html
index 9ece7eb..1612334 100644
--- a/doc/html/ecdsa_8h.html
+++ b/doc/html/ecdsa_8h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/ecdsa__sign_8c.html b/doc/html/ecdsa__sign_8c.html
deleted file mode 100644
index a94a4c2..0000000
--- a/doc/html/ecdsa__sign_8c.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/math/ecdsa_sign.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('ecdsa__sign_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">ecdsa_sign.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>EcdsaSignBuffer implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="ecdsa_8h.html">epid/common/math/ecdsa.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="bignum_8h.html">epid/common/math/bignum.h</a>&quot;</code><br />
-<code>#include &quot;epid/common/math/bignum-internal.h&quot;</code><br />
-<code>#include &quot;<a class="el" href="ecgroup_8h.html">epid/common/math/ecgroup.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &quot;ext/ipp/include/ippcp.h&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a09a23295da4c2aec9954cba93db848fb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a09a23295da4c2aec9954cba93db848fb"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecdsa__sign_8c.html#a09a23295da4c2aec9954cba93db848fb">EPHKEYGEN_WATCHDOG</a>&#160;&#160;&#160;(10)</td></tr>
-<tr class="memdesc:a09a23295da4c2aec9954cba93db848fb"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of attempts to generate ephemeral key pair. <br /></td></tr>
-<tr class="separator:a09a23295da4c2aec9954cba93db848fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga67091ecae643c1b8a0b0a4946eda7afe"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ecdsa_primitives.html#ga67091ecae643c1b8a0b0a4946eda7afe">EcdsaSignBuffer</a> (void const *buf, size_t buf_len, <a class="el" href="struct_ecdsa_private_key.html">EcdsaPrivateKey</a> const *privkey, <a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a> rnd_func, void *rnd_param, <a class="el" href="struct_ecdsa_signature.html">EcdsaSignature</a> *sig)</td></tr>
-<tr class="memdesc:ga67091ecae643c1b8a0b0a4946eda7afe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates ECDSA signature of buffer. <a href="group___ecdsa_primitives.html#ga67091ecae643c1b8a0b0a4946eda7afe">More...</a><br /></td></tr>
-<tr class="separator:ga67091ecae643c1b8a0b0a4946eda7afe"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>EcdsaSignBuffer implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="dir_f169ebf8da29290a918fa4b3f7151050.html">math</a></li><li class="navelem"><a class="el" href="ecdsa__sign_8c.html">ecdsa_sign.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/ecdsa__verify_8c.html b/doc/html/ecdsa__verify_8c.html
deleted file mode 100644
index bb97f4f..0000000
--- a/doc/html/ecdsa__verify_8c.html
+++ /dev/null
@@ -1,133 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/math/ecdsa_verify.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('ecdsa__verify_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">ecdsa_verify.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>EcdsaVerifyBuffer implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="ecdsa_8h.html">epid/common/math/ecdsa.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="bignum_8h.html">epid/common/math/bignum.h</a>&quot;</code><br />
-<code>#include &quot;epid/common/math/bignum-internal.h&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &quot;ext/ipp/include/ippcp.h&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a2a33926ecd5e3365607fe56acb4e997a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecdsa__verify_8c.html#a2a33926ecd5e3365607fe56acb4e997a">BREAK_ON_IPP_ERROR</a>(sts, ret)</td></tr>
-<tr class="memdesc:a2a33926ecd5e3365607fe56acb4e997a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handle Ipp Errors with Break. <a href="#a2a33926ecd5e3365607fe56acb4e997a">More...</a><br /></td></tr>
-<tr class="separator:a2a33926ecd5e3365607fe56acb4e997a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:gaab68de7291db6e42a01e99c2fa40057f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ecdsa_primitives.html#gaab68de7291db6e42a01e99c2fa40057f">EcdsaVerifyBuffer</a> (void const *buf, size_t buf_len, <a class="el" href="struct_ecdsa_public_key.html">EcdsaPublicKey</a> const *pubkey, <a class="el" href="struct_ecdsa_signature.html">EcdsaSignature</a> const *sig)</td></tr>
-<tr class="memdesc:gaab68de7291db6e42a01e99c2fa40057f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies authenticity of a digital signature over a buffer. <a href="group___ecdsa_primitives.html#gaab68de7291db6e42a01e99c2fa40057f">More...</a><br /></td></tr>
-<tr class="separator:gaab68de7291db6e42a01e99c2fa40057f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>EcdsaVerifyBuffer implementation. </p>
-</div><h2 class="groupheader">Macro Definition Documentation</h2>
-<a class="anchor" id="a2a33926ecd5e3365607fe56acb4e997a"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define BREAK_ON_IPP_ERROR</td>
- <td>(</td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">sts, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">ret&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line">{ \</div><div class="line"> IppStatus temp_sts = (sts); \</div><div class="line"> if (ippStsNoErr != temp_sts) { \</div><div class="line"> (ret) = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6">kEpidMathErr</a>; \</div><div class="line"> break; \</div><div class="line"> } \</div><div class="line"> }</div><div class="ttc" id="group___error_codes_html_ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6"><div class="ttname"><a href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6">kEpidMathErr</a></div><div class="ttdoc">internal math error </div><div class="ttdef"><b>Definition:</b> errors.h:53</div></div>
-</div><!-- fragment -->
-<p>Handle Ipp Errors with Break. </p>
-
-</div>
-</div>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="dir_f169ebf8da29290a918fa4b3f7151050.html">math</a></li><li class="navelem"><a class="el" href="ecdsa__verify_8c.html">ecdsa_verify.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/ecgroup_8c.html b/doc/html/ecgroup_8c.html
deleted file mode 100644
index a59852b..0000000
--- a/doc/html/ecgroup_8c.html
+++ /dev/null
@@ -1,222 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/math/ecgroup.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('ecgroup_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">ecgroup.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Elliptic curve group implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;string.h&gt;</code><br />
-<code>#include &quot;epid/common/math/bignum-internal.h&quot;</code><br />
-<code>#include &quot;epid/common/math/ecgroup-internal.h&quot;</code><br />
-<code>#include &quot;<a class="el" href="ecgroup_8h.html">epid/common/math/ecgroup.h</a>&quot;</code><br />
-<code>#include &quot;epid/common/math/finitefield-internal.h&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &quot;ext/ipp/include/ippcp.h&quot;</code><br />
-<code>#include &quot;ext/ipp/include/ippcpepid.h&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a26d8b2ac362504939125b9196abc8aaa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a26d8b2ac362504939125b9196abc8aaa"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecgroup_8c.html#a26d8b2ac362504939125b9196abc8aaa">EPID_ECHASH_WATCHDOG</a>&#160;&#160;&#160;(50)</td></tr>
-<tr class="memdesc:a26d8b2ac362504939125b9196abc8aaa"><td class="mdescLeft">&#160;</td><td class="mdescRight">The number of attempts to hash a message to an element. <br /></td></tr>
-<tr class="separator:a26d8b2ac362504939125b9196abc8aaa"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:gaf4e23677dd378ef2e0cf55df79cbdb62"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#gaf4e23677dd378ef2e0cf55df79cbdb62">NewEcGroup</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> const *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *b, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *x, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *y, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *order, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *cofactor, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> **g)</td></tr>
-<tr class="memdesc:gaf4e23677dd378ef2e0cf55df79cbdb62"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a new EcGroup. <a href="group___ec_group_primitives.html#gaf4e23677dd378ef2e0cf55df79cbdb62">More...</a><br /></td></tr>
-<tr class="separator:gaf4e23677dd378ef2e0cf55df79cbdb62"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gab7af276256c27610eda85ff432b846ea"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#gab7af276256c27610eda85ff432b846ea">DeleteEcGroup</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> **g)</td></tr>
-<tr class="memdesc:gab7af276256c27610eda85ff432b846ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deletes a previously allocated EcGroup. <a href="group___ec_group_primitives.html#gab7af276256c27610eda85ff432b846ea">More...</a><br /></td></tr>
-<tr class="separator:gab7af276256c27610eda85ff432b846ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga6417b0ce72ba96de00c329e322fec7fb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb">NewEcPoint</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> const *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> **p)</td></tr>
-<tr class="memdesc:ga6417b0ce72ba96de00c329e322fec7fb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new EcPoint. <a href="group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb">More...</a><br /></td></tr>
-<tr class="separator:ga6417b0ce72ba96de00c329e322fec7fb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga8cb086d792bffb79b3ca07e6ca4ce0e7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga8cb086d792bffb79b3ca07e6ca4ce0e7">DeleteEcPoint</a> (<a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> **p)</td></tr>
-<tr class="memdesc:ga8cb086d792bffb79b3ca07e6ca4ce0e7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deletes a previously allocated EcPoint. <a href="group___ec_group_primitives.html#ga8cb086d792bffb79b3ca07e6ca4ce0e7">More...</a><br /></td></tr>
-<tr class="separator:ga8cb086d792bffb79b3ca07e6ca4ce0e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac0a2b4aa2484318938498e29c8ee4a9b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="ecgroup_8c.html#ac0a2b4aa2484318938498e29c8ee4a9b">eccontains</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, void const *p_str, size_t strlen, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *p, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *in_group)</td></tr>
-<tr class="memdesc:ac0a2b4aa2484318938498e29c8ee4a9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check and initialize element if it is in elliptic curve group. <a href="#ac0a2b4aa2484318938498e29c8ee4a9b">More...</a><br /></td></tr>
-<tr class="separator:ac0a2b4aa2484318938498e29c8ee4a9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga2d433f567fa2419465a49604f4da21ad"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga2d433f567fa2419465a49604f4da21ad">ReadEcPoint</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, void const *p_str, size_t strlen, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *p)</td></tr>
-<tr class="memdesc:ga2d433f567fa2419465a49604f4da21ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deserializes an EcPoint from a string. <a href="group___ec_group_primitives.html#ga2d433f567fa2419465a49604f4da21ad">More...</a><br /></td></tr>
-<tr class="separator:ga2d433f567fa2419465a49604f4da21ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga4bb7d6691ffbb6e947c1068453e27fbd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga4bb7d6691ffbb6e947c1068453e27fbd">WriteEcPoint</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *p, void *p_str, size_t strlen)</td></tr>
-<tr class="memdesc:ga4bb7d6691ffbb6e947c1068453e27fbd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes an EcPoint to a string. <a href="group___ec_group_primitives.html#ga4bb7d6691ffbb6e947c1068453e27fbd">More...</a><br /></td></tr>
-<tr class="separator:ga4bb7d6691ffbb6e947c1068453e27fbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga25c9013cc76907d73765eb7a96aa8c96"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga25c9013cc76907d73765eb7a96aa8c96">EcMul</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *a, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *b, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
-<tr class="memdesc:ga25c9013cc76907d73765eb7a96aa8c96"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multiplies two elements in an elliptic curve group. <a href="group___ec_group_primitives.html#ga25c9013cc76907d73765eb7a96aa8c96">More...</a><br /></td></tr>
-<tr class="separator:ga25c9013cc76907d73765eb7a96aa8c96"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga01bf8d6fa60a2e445490966b3a06c270"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga01bf8d6fa60a2e445490966b3a06c270">EcExp</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *a, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const *b, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
-<tr class="memdesc:ga01bf8d6fa60a2e445490966b3a06c270"><td class="mdescLeft">&#160;</td><td class="mdescRight">Raises a point in an elliptic curve group to a power. <a href="group___ec_group_primitives.html#ga01bf8d6fa60a2e445490966b3a06c270">More...</a><br /></td></tr>
-<tr class="separator:ga01bf8d6fa60a2e445490966b3a06c270"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gaf3b6a548aa6f0d4f028a14feca251f57"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#gaf3b6a548aa6f0d4f028a14feca251f57">EcSscmExp</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *a, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const *b, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
-<tr class="memdesc:gaf3b6a548aa6f0d4f028a14feca251f57"><td class="mdescLeft">&#160;</td><td class="mdescRight">Software side-channel mitigated implementation of EcExp. <a href="group___ec_group_primitives.html#gaf3b6a548aa6f0d4f028a14feca251f57">More...</a><br /></td></tr>
-<tr class="separator:gaf3b6a548aa6f0d4f028a14feca251f57"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gae96c38e004ccd2211290ad6e66415ec4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4">EcMultiExp</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const **a, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const **b, size_t m, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
-<tr class="memdesc:gae96c38e004ccd2211290ad6e66415ec4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multi-exponentiates elements in elliptic curve group. <a href="group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4">More...</a><br /></td></tr>
-<tr class="separator:gae96c38e004ccd2211290ad6e66415ec4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga40e3431d3dbe8cf7a65ada7b7811cba4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4">EcSscmMultiExp</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const **a, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const **b, size_t m, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
-<tr class="memdesc:ga40e3431d3dbe8cf7a65ada7b7811cba4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Software side-channel mitigated implementation of EcMultiExp. <a href="group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4">More...</a><br /></td></tr>
-<tr class="separator:ga40e3431d3dbe8cf7a65ada7b7811cba4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga3f96c43d14d24de0f7a5e214aef64196"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga3f96c43d14d24de0f7a5e214aef64196">EcGetRandom</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a> rnd_func, void *rnd_func_param, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
-<tr class="memdesc:ga3f96c43d14d24de0f7a5e214aef64196"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generates a random element from an elliptic curve group. <a href="group___ec_group_primitives.html#ga3f96c43d14d24de0f7a5e214aef64196">More...</a><br /></td></tr>
-<tr class="separator:ga3f96c43d14d24de0f7a5e214aef64196"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga4d0f32aede3066eae500241b387bd970"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga4d0f32aede3066eae500241b387bd970">EcInGroup</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, void const *p_str, size_t strlen, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *in_group)</td></tr>
-<tr class="memdesc:ga4d0f32aede3066eae500241b387bd970"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a point is in an elliptic curve group. <a href="group___ec_group_primitives.html#ga4d0f32aede3066eae500241b387bd970">More...</a><br /></td></tr>
-<tr class="separator:ga4d0f32aede3066eae500241b387bd970"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gadc22ee07864a7ee681a881029b69d76a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#gadc22ee07864a7ee681a881029b69d76a">EcHash</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, void const *msg, size_t msg_len, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
-<tr class="memdesc:gadc22ee07864a7ee681a881029b69d76a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hashes an arbitrary message to an element in an elliptic curve group. <a href="group___ec_group_primitives.html#gadc22ee07864a7ee681a881029b69d76a">More...</a><br /></td></tr>
-<tr class="separator:gadc22ee07864a7ee681a881029b69d76a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga8a6114a48214a327d4ec04fd25e5940e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga8a6114a48214a327d4ec04fd25e5940e">EcMakePoint</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *x, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
-<tr class="memdesc:ga8a6114a48214a327d4ec04fd25e5940e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets an EcPoint variable to a point on a curve. <a href="group___ec_group_primitives.html#ga8a6114a48214a327d4ec04fd25e5940e">More...</a><br /></td></tr>
-<tr class="separator:ga8a6114a48214a327d4ec04fd25e5940e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga0b6d7a3398251e9352fb29ef4abef466"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga0b6d7a3398251e9352fb29ef4abef466">EcInverse</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *p, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
-<tr class="memdesc:ga0b6d7a3398251e9352fb29ef4abef466"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the additive inverse of an EcPoint. <a href="group___ec_group_primitives.html#ga0b6d7a3398251e9352fb29ef4abef466">More...</a><br /></td></tr>
-<tr class="separator:ga0b6d7a3398251e9352fb29ef4abef466"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gad3b3c63c48fa24e8dea07837b05bc061"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#gad3b3c63c48fa24e8dea07837b05bc061">EcIsEqual</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *a, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *b, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *is_equal)</td></tr>
-<tr class="memdesc:gad3b3c63c48fa24e8dea07837b05bc061"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if two EcPoints are equal. <a href="group___ec_group_primitives.html#gad3b3c63c48fa24e8dea07837b05bc061">More...</a><br /></td></tr>
-<tr class="separator:gad3b3c63c48fa24e8dea07837b05bc061"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga9cf15b34bc4ff12e58b169dd989d8210"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga9cf15b34bc4ff12e58b169dd989d8210">EcIsIdentity</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *p, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *is_identity)</td></tr>
-<tr class="memdesc:ga9cf15b34bc4ff12e58b169dd989d8210"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if an EcPoint is the identity element. <a href="group___ec_group_primitives.html#ga9cf15b34bc4ff12e58b169dd989d8210">More...</a><br /></td></tr>
-<tr class="separator:ga9cf15b34bc4ff12e58b169dd989d8210"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Elliptic curve group implementation. </p>
-</div><h2 class="groupheader">Function Documentation</h2>
-<a class="anchor" id="ac0a2b4aa2484318938498e29c8ee4a9b"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> eccontains </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *&#160;</td>
- <td class="paramname"><em>g</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void const *&#160;</td>
- <td class="paramname"><em>p_str</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>strlen</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *&#160;</td>
- <td class="paramname"><em>p</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *&#160;</td>
- <td class="paramname"><em>in_group</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Check and initialize element if it is in elliptic curve group. </p>
-<p>This is internal function. Takes a value p as input. If p is indeed an element of g, it outputs true, otherwise, it outputs false.</p>
-<p>This is only used to check if input buffer are actually valid elements in group. If p is in g, this fills p and initializes it to internal FfElement format.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">g</td><td>The eliptic curve group in which to perform the check </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">p_str</td><td>Serialized eliptic curve group element to check </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">strlen</td><td>The size of p_str in bytes. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">p</td><td>Deserialized value of p_str </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">in_group</td><td>Result of the check</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb" title="Creates a new EcPoint. ">NewEcPoint</a> </dd></dl>
-
-</div>
-</div>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="dir_f169ebf8da29290a918fa4b3f7151050.html">math</a></li><li class="navelem"><a class="el" href="ecgroup_8c.html">ecgroup.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/ecgroup_8h.html b/doc/html/ecgroup_8h.html
index ebb7d5d..adf8f29 100644
--- a/doc/html/ecgroup_8h.html
+++ b/doc/html/ecgroup_8h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -116,6 +116,9 @@ Functions</h2></td></tr>
<tr class="memitem:gae96c38e004ccd2211290ad6e66415ec4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4">EcMultiExp</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const **a, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const **b, size_t m, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
<tr class="memdesc:gae96c38e004ccd2211290ad6e66415ec4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multi-exponentiates elements in elliptic curve group. <a href="group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4">More...</a><br /></td></tr>
<tr class="separator:gae96c38e004ccd2211290ad6e66415ec4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga76d24378455eb96a3257fe8045c0993a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga76d24378455eb96a3257fe8045c0993a">EcMultiExpBn</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const **a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const **b, size_t m, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
+<tr class="memdesc:ga76d24378455eb96a3257fe8045c0993a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multi-exponentiates elements in elliptic curve group. <a href="group___ec_group_primitives.html#ga76d24378455eb96a3257fe8045c0993a">More...</a><br /></td></tr>
+<tr class="separator:ga76d24378455eb96a3257fe8045c0993a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga40e3431d3dbe8cf7a65ada7b7811cba4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4">EcSscmMultiExp</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const **a, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const **b, size_t m, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
<tr class="memdesc:ga40e3431d3dbe8cf7a65ada7b7811cba4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Software side-channel mitigated implementation of EcMultiExp. <a href="group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4">More...</a><br /></td></tr>
<tr class="separator:ga40e3431d3dbe8cf7a65ada7b7811cba4"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -125,6 +128,9 @@ Functions</h2></td></tr>
<tr class="memitem:ga4d0f32aede3066eae500241b387bd970"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga4d0f32aede3066eae500241b387bd970">EcInGroup</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, void const *p_str, size_t strlen, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *in_group)</td></tr>
<tr class="memdesc:ga4d0f32aede3066eae500241b387bd970"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a point is in an elliptic curve group. <a href="group___ec_group_primitives.html#ga4d0f32aede3066eae500241b387bd970">More...</a><br /></td></tr>
<tr class="separator:ga4d0f32aede3066eae500241b387bd970"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadf83fa559585375faad9a8b1559249bc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#gadf83fa559585375faad9a8b1559249bc">Epid11EcHash</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, void const *msg, size_t msg_len, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
+<tr class="memdesc:gadf83fa559585375faad9a8b1559249bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hashes an arbitrary message to an Intel(R) EPID 1.1 element in an elliptic curve group. <a href="group___ec_group_primitives.html#gadf83fa559585375faad9a8b1559249bc">More...</a><br /></td></tr>
+<tr class="separator:gadf83fa559585375faad9a8b1559249bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gadc22ee07864a7ee681a881029b69d76a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#gadc22ee07864a7ee681a881029b69d76a">EcHash</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, void const *msg, size_t msg_len, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
<tr class="memdesc:gadc22ee07864a7ee681a881029b69d76a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hashes an arbitrary message to an element in an elliptic curve group. <a href="group___ec_group_primitives.html#gadc22ee07864a7ee681a881029b69d76a">More...</a><br /></td></tr>
<tr class="separator:gadc22ee07864a7ee681a881029b69d76a"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/doc/html/epid2params_8c.html b/doc/html/epid2params_8c.html
deleted file mode 100644
index 8d24884..0000000
--- a/doc/html/epid2params_8c.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/epid2params.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('epid2params_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">epid2params.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Intel(R) EPID 2.0 constant parameters implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="epid2params_8h.html">epid/common/epid2params.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="epid2params__ate_8inc.html">epid/common/epid2params_ate.inc</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a4df651310b76dd27a30a3bca19d9534f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4df651310b76dd27a30a3bca19d9534f"></a>
-<a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="epid2params_8c.html#a4df651310b76dd27a30a3bca19d9534f">NewFq6</a> (<a class="el" href="struct_epid2_params.html">Epid2Params</a> const *param, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *Fq2, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *xi, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> **Fq6)</td></tr>
-<tr class="memdesc:a4df651310b76dd27a30a3bca19d9534f"><td class="mdescLeft">&#160;</td><td class="mdescRight">create a new Finite Field Fq6 <br /></td></tr>
-<tr class="separator:a4df651310b76dd27a30a3bca19d9534f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gac22664b5f7df5cd4da1bd7b1b1e7912f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gac22664b5f7df5cd4da1bd7b1b1e7912f">DeleteEpid2Params</a> (<a class="el" href="struct_epid2_params__.html">Epid2Params_</a> **epid_params)</td></tr>
-<tr class="memdesc:gac22664b5f7df5cd4da1bd7b1b1e7912f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deallocates storage for internal representation of <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a>. <a href="group___epid_common.html#gac22664b5f7df5cd4da1bd7b1b1e7912f">More...</a><br /></td></tr>
-<tr class="separator:gac22664b5f7df5cd4da1bd7b1b1e7912f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Intel(R) EPID 2.0 constant parameters implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="epid2params_8c.html">epid2params.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/epid2params_8h.html b/doc/html/epid2params_8h.html
deleted file mode 100644
index 58c8eb3..0000000
--- a/doc/html/epid2params_8h.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/epid2params.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('epid2params_8h.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">epid2params.h File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Intel(R) EPID 2.0 constant parameters interface.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="bignum_8h.html">epid/common/math/bignum.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="ecgroup_8h.html">epid/common/math/ecgroup.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="finitefield_8h.html">epid/common/math/finitefield.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="pairing_8h.html">epid/common/math/pairing.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html">Epid2Params_</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal representation of <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a>. <a href="struct_epid2_params__.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga5c396a5ac8a0e5ec1e02330c53420dce"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga5c396a5ac8a0e5ec1e02330c53420dce">CreateEpid2Params</a> (<a class="el" href="struct_epid2_params__.html">Epid2Params_</a> **params)</td></tr>
-<tr class="memdesc:ga5c396a5ac8a0e5ec1e02330c53420dce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs the internal representation of <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a>. <a href="group___epid_common.html#ga5c396a5ac8a0e5ec1e02330c53420dce">More...</a><br /></td></tr>
-<tr class="separator:ga5c396a5ac8a0e5ec1e02330c53420dce"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gac22664b5f7df5cd4da1bd7b1b1e7912f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gac22664b5f7df5cd4da1bd7b1b1e7912f">DeleteEpid2Params</a> (<a class="el" href="struct_epid2_params__.html">Epid2Params_</a> **epid_params)</td></tr>
-<tr class="memdesc:gac22664b5f7df5cd4da1bd7b1b1e7912f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deallocates storage for internal representation of <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a>. <a href="group___epid_common.html#gac22664b5f7df5cd4da1bd7b1b1e7912f">More...</a><br /></td></tr>
-<tr class="separator:gac22664b5f7df5cd4da1bd7b1b1e7912f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Intel(R) EPID 2.0 constant parameters interface. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="epid2params_8h.html">epid2params.h</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/epid__overview_8dox.html b/doc/html/epid__overview_8dox.html
index eefba22..1aae71e 100644
--- a/doc/html/epid__overview_8dox.html
+++ b/doc/html/epid__overview_8dox.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/errors_8c.html b/doc/html/errors_8c.html
deleted file mode 100644
index ce82948..0000000
--- a/doc/html/errors_8c.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/errors.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('errors_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">errors.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Error reporting implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;stddef.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="stdtypes_8h.html">epid/common/stdtypes.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="errors_8h.html">epid/common/errors.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_error_text_entry.html">ErrorTextEntry</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Record mapping status code to string. <a href="struct_error_text_entry.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga59e8680ce52509302fd58a987e45004d"><td class="memItemLeft" align="right" valign="top">char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___error_codes.html#ga59e8680ce52509302fd58a987e45004d">EpidStatusToString</a> (<a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> e)</td></tr>
-<tr class="memdesc:ga59e8680ce52509302fd58a987e45004d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns string representation of error code. <a href="group___error_codes.html#ga59e8680ce52509302fd58a987e45004d">More...</a><br /></td></tr>
-<tr class="separator:ga59e8680ce52509302fd58a987e45004d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Error reporting implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="errors_8c.html">errors.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/errors_8h.html b/doc/html/errors_8h.html
index 7b8a7f8..ecda4e4 100644
--- a/doc/html/errors_8h.html
+++ b/doc/html/errors_8h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -74,11 +74,11 @@ Enumerations</h2></td></tr>
&#160;&#160;<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> = 0,
<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab45ad60085d03c03ea30b40a0519897e">kEpidSigValid</a> = 0,
<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8">kEpidSigInvalid</a> = 1,
-<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a2b38f44424cecd7b432194a2012dc9c7">kEpidSigRevokedinGroupRl</a> = 2,
+<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aedd43fb4043bef3b515fc23f1d9a5fe5">kEpidSigRevokedInGroupRl</a> = 2,
<br />
-&#160;&#160;<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a780a20821863553b88ca617a6fc0f718">kEpidSigRevokedinPrivRl</a> = 3,
-<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aff83186b61d48f9fee5f691c5b219bc1">kEpidSigRevokedinSigRl</a> = 4,
-<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360addbba767bb884b4459a567056b4d3f86">kEpidSigRevokedinVerifierRl</a> = 5,
+&#160;&#160;<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1dc7b7e6ff97c7ed9ff4191d76ebd6e1">kEpidSigRevokedInPrivRl</a> = 3,
+<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a43c658cbf0d156850d71ce3f8efd461c">kEpidSigRevokedInSigRl</a> = 4,
+<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a486e052baa99c6c25ae5d5cc710de298">kEpidSigRevokedInVerifierRl</a> = 5,
<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e">kEpidErr</a> = -999,
<br />
&#160;&#160;<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a5252da1ff519a098446723e9edd30cc7">kEpidNotImpl</a>,
@@ -92,7 +92,9 @@ Enumerations</h2></td></tr>
<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad4d4ff24a7ef2cd7a50b8082265e9ff4">kEpidHashAlgorithmNotSupported</a>,
<br />
&#160;&#160;<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a61234ad9610406da6bf7977afd72a357">kEpidRandMaxIterErr</a>,
-<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a3706f895a660260033b5b91890516c0f">kEpidDuplicateErr</a>
+<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a3706f895a660260033b5b91890516c0f">kEpidDuplicateErr</a>,
+<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a94ae9c9b9337afd2fefd3b4f9c3160df">kEpidInconsistentBasenameSetErr</a>,
+<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab2768a1a5c4374cb1ac6175c09c73129">kEpidMathQuadraticNonResidueError</a>
<br />
}<tr class="memdesc:gafdb27c77c2c4b32c807e326a8a0da360"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return status for SDK functions. <a href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">More...</a><br /></td></tr>
</td></tr>
diff --git a/doc/html/examples.html b/doc/html/examples.html
index f2de4e6..a69755f 100644
--- a/doc/html/examples.html
+++ b/doc/html/examples.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Examples</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: Walkthroughs of Examples Showing API Usage</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,21 +53,24 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('examples.html','');});
+$(document).ready(function(){initNavTree('Examples.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="headertitle">
-<div class="title">Examples</div> </div>
+<div class="title">Walkthroughs of Examples Showing API Usage </div> </div>
</div><!--header-->
<div class="contents">
-<div class="textblock">Here is a list of all examples:</div><ul>
-<li><a class="el" href="signmsg_8c-example.html">signmsg.c</a></li>
-
-<li><a class="el" href="verifysig_8c-example.html">verifysig.c</a></li>
-
-</ul>
-</div><!-- contents -->
+<div class="textblock"><p>Several example applications are included that demonstrate how to use the SDK APIs.</p>
+<table class="doxtable">
+<tr>
+<th>Example Application </th><th>Concept Demonstrated </th></tr>
+<tr>
+<td><code>signmsg</code> </td><td><a class="el" href="SignmsgWalkthru.html">Generating an Intel&reg; EPID Signature</a> </td></tr>
+<tr>
+<td><code>verifysig</code> </td><td><a class="el" href="VerifysigWalkthru.html">Verifying an Intel&reg; EPID Signature</a> </td></tr>
+</table>
+</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
<!-- start footer part -->
diff --git a/doc/html/examples.js b/doc/html/examples.js
index cdfa353..35ebbda 100644
--- a/doc/html/examples.js
+++ b/doc/html/examples.js
@@ -1,5 +1,5 @@
-var examples =
+var Examples =
[
- [ "signmsg.c", "signmsg_8c-example.html", null ],
- [ "verifysig.c", "verifysig_8c-example.html", null ]
+ [ "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/doc/html/examples_8dox.html b/doc/html/examples_8dox.html
index 7f8829a..0114afb 100644
--- a/doc/html/examples_8dox.html
+++ b/doc/html/examples_8dox.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/file__parser_8c.html b/doc/html/file__parser_8c.html
deleted file mode 100644
index befa225..0000000
--- a/doc/html/file__parser_8c.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/file_parser.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('file__parser_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#func-members">Functions</a> &#124;
-<a href="#var-members">Variables</a> </div>
- <div class="headertitle">
-<div class="title">file_parser.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Implementation of issuer material file parsing utilities.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="file__parser_8h.html">epid/common/file_parser.h</a>&quot;</code><br />
-<code>#include &lt;string.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="ecdsa_8h.html">epid/common/math/ecdsa.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid_group_pub_key_certificate.html">EpidGroupPubKeyCertificate</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 2.0 Group Public Key binary format. <a href="struct_epid_group_pub_key_certificate.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga43fdbc1bf2edd3695d21cb457365afbb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">EpidParseGroupPubKeyFile</a> (void const *buf, size_t len, <a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *cert, <a class="el" href="struct_group_pub_key.html">GroupPubKey</a> *pubkey)</td></tr>
-<tr class="memdesc:ga43fdbc1bf2edd3695d21cb457365afbb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts group public key from buffer in issuer binary format. <a href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">More...</a><br /></td></tr>
-<tr class="separator:ga43fdbc1bf2edd3695d21cb457365afbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gadc033fb23e3cbda56aa7e3d412060b7e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e">EpidParsePrivRlFile</a> (void const *buf, size_t len, <a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *cert, <a class="el" href="struct_priv_rl.html">PrivRl</a> *rl, size_t *rl_len)</td></tr>
-<tr class="memdesc:gadc033fb23e3cbda56aa7e3d412060b7e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts private key revocation list from buffer in issuer binary format. <a href="group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e">More...</a><br /></td></tr>
-<tr class="separator:gadc033fb23e3cbda56aa7e3d412060b7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga237ef5a43076aa6fc6eb18829a93da3f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">EpidParseSigRlFile</a> (void const *buf, size_t len, <a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *cert, <a class="el" href="struct_sig_rl.html">SigRl</a> *rl, size_t *rl_len)</td></tr>
-<tr class="memdesc:ga237ef5a43076aa6fc6eb18829a93da3f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts signature revocation list from buffer in issuer binary format. <a href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">More...</a><br /></td></tr>
-<tr class="separator:ga237ef5a43076aa6fc6eb18829a93da3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gad767f72dc55307b872a8b5600da3fd6f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f">EpidParseGroupRlFile</a> (void const *buf, size_t len, <a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *cert, <a class="el" href="struct_group_rl.html">GroupRl</a> *rl, size_t *rl_len)</td></tr>
-<tr class="memdesc:gad767f72dc55307b872a8b5600da3fd6f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts group revocation list from buffer in issuer binary format. <a href="group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f">More...</a><br /></td></tr>
-<tr class="separator:gad767f72dc55307b872a8b5600da3fd6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
-Variables</h2></td></tr>
-<tr class="memitem:ga3770c39a0546c79447c9d4159d794c33"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="struct_oct_str16.html">OctStr16</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33">kEpidFileTypeCode</a> [<a class="el" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac6d742ea3dd3b17f6d763970ac84b811">kNumFileTypes</a>]</td></tr>
-<tr class="memdesc:ga3770c39a0546c79447c9d4159d794c33"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of issuer material file types. <a href="group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33">More...</a><br /></td></tr>
-<tr class="separator:ga3770c39a0546c79447c9d4159d794c33"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Implementation of issuer material file parsing utilities. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="file__parser_8c.html">file_parser.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/file__parser_8h.html b/doc/html/file__parser_8h.html
index b87ad4c..5b29071 100644
--- a/doc/html/file__parser_8h.html
+++ b/doc/html/file__parser_8h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -84,6 +84,12 @@ Data Structures</h2></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
+<tr class="memitem:ga1562efc7c1891875d6b2b9180d65de9d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#ga1562efc7c1891875d6b2b9180d65de9d">EpidVersion</a> { <a class="el" href="group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da5f270e2e8c2412bc07de293023f425cc">kEpid1x</a>,
+<a class="el" href="group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da6af0ee9d9689f1d4325bdd0beb8a89e2">kEpid2x</a>,
+<a class="el" href="group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da8bbd27765997dd10f1c0378dbecef01d">kNumEpidVersions</a>
+ }<tr class="memdesc:ga1562efc7c1891875d6b2b9180d65de9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Recognized Intel(R) EPID versions. <a href="group___file_parser.html#ga1562efc7c1891875d6b2b9180d65de9d">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:ga1562efc7c1891875d6b2b9180d65de9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9a33be7edc6b4c7a867fb07bd2bddecb"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#ga9a33be7edc6b4c7a867fb07bd2bddecb">EpidFileType</a> { <br />
&#160;&#160;<a class="el" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac24554caafe2db01e2daed413188cd92">kIssuingCaPubKeyFile</a>,
<a class="el" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba1f8d8c4b253403a35c51e05d34a7ca1e">kGroupPubKeyFile</a>,
@@ -103,6 +109,9 @@ Enumerations</h2></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
+<tr class="memitem:ga8e38d1102eb1dd9b5af2e2f79236da55"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#ga8e38d1102eb1dd9b5af2e2f79236da55">EpidParseFileHeader</a> (void const *buf, size_t len, <a class="el" href="group___file_parser.html#ga1562efc7c1891875d6b2b9180d65de9d">EpidVersion</a> *epid_version, <a class="el" href="group___file_parser.html#ga9a33be7edc6b4c7a867fb07bd2bddecb">EpidFileType</a> *file_type)</td></tr>
+<tr class="memdesc:ga8e38d1102eb1dd9b5af2e2f79236da55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts Intel(R) EPID Binary Output File header information. <a href="group___file_parser.html#ga8e38d1102eb1dd9b5af2e2f79236da55">More...</a><br /></td></tr>
+<tr class="separator:ga8e38d1102eb1dd9b5af2e2f79236da55"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga43fdbc1bf2edd3695d21cb457365afbb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">EpidParseGroupPubKeyFile</a> (void const *buf, size_t len, <a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *cert, <a class="el" href="struct_group_pub_key.html">GroupPubKey</a> *pubkey)</td></tr>
<tr class="memdesc:ga43fdbc1bf2edd3695d21cb457365afbb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts group public key from buffer in issuer binary format. <a href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">More...</a><br /></td></tr>
<tr class="separator:ga43fdbc1bf2edd3695d21cb457365afbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -118,6 +127,10 @@ Functions</h2></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
Variables</h2></td></tr>
+<tr class="memitem:gaae808987ce82188dff42baa4e43cab82"><td class="memItemLeft" align="right" valign="top">
+const <a class="el" href="struct_oct_str16.html">OctStr16</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#gaae808987ce82188dff42baa4e43cab82">kEpidVersionCode</a> [<a class="el" href="group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da8bbd27765997dd10f1c0378dbecef01d">kNumEpidVersions</a>]</td></tr>
+<tr class="memdesc:gaae808987ce82188dff42baa4e43cab82"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of issuer material Intel(R) EPID versions. <br /></td></tr>
+<tr class="separator:gaae808987ce82188dff42baa4e43cab82"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3770c39a0546c79447c9d4159d794c33"><td class="memItemLeft" align="right" valign="top">
const <a class="el" href="struct_oct_str16.html">OctStr16</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33">kEpidFileTypeCode</a> [<a class="el" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac6d742ea3dd3b17f6d763970ac84b811">kNumFileTypes</a>]</td></tr>
<tr class="memdesc:ga3770c39a0546c79447c9d4159d794c33"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of issuer material file types. <br /></td></tr>
diff --git a/doc/html/files.html b/doc/html/files.html
index 9da5d54..ab34f5b 100644
--- a/doc/html/files.html
+++ b/doc/html/files.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -65,65 +65,29 @@ $(document).ready(function(){initNavTree('files.html','');});
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html" target="_self">epid</a></td><td class="desc">Core Intel&reg; EPID functionality </td></tr>
<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><span id="img_0_0_" class="iconfopen" onclick="toggleFolder('0_0_')">&#160;</span><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html" target="_self">common</a></td><td class="desc">Common code shared between core sub-components </td></tr>
-<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_')">&#9660;</span><span id="img_0_0_0_" class="iconfopen" onclick="toggleFolder('0_0_0_')">&#160;</span><a class="el" href="dir_f169ebf8da29290a918fa4b3f7151050.html" target="_self">math</a></td><td class="desc">Math primitives </td></tr>
-<tr id="row_0_0_0_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="bignum_8c.html" target="_self">bignum.c</a></td><td class="desc">Big number implementation </td></tr>
-<tr id="row_0_0_0_1_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="bignum_8h.html" target="_self">bignum.h</a></td><td class="desc">Big number interface </td></tr>
-<tr id="row_0_0_0_2_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="ecdsa_8h.html" target="_self">ecdsa.h</a></td><td class="desc">Ecdsa interface </td></tr>
-<tr id="row_0_0_0_3_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="ecdsa__sign_8c.html" target="_self">ecdsa_sign.c</a></td><td class="desc">EcdsaSignBuffer implementation </td></tr>
-<tr id="row_0_0_0_4_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="ecdsa__verify_8c.html" target="_self">ecdsa_verify.c</a></td><td class="desc">EcdsaVerifyBuffer implementation </td></tr>
-<tr id="row_0_0_0_5_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="ecgroup_8c.html" target="_self">ecgroup.c</a></td><td class="desc">Elliptic curve group implementation </td></tr>
-<tr id="row_0_0_0_6_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="ecgroup_8h.html" target="_self">ecgroup.h</a></td><td class="desc">Elliptic curve group interface </td></tr>
-<tr id="row_0_0_0_7_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="finitefield_8c.html" target="_self">finitefield.c</a></td><td class="desc">Finite field implementation </td></tr>
-<tr id="row_0_0_0_8_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="finitefield_8h.html" target="_self">finitefield.h</a></td><td class="desc">Finite field interface </td></tr>
-<tr id="row_0_0_0_9_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="hash_8h.html" target="_self">hash.h</a></td><td class="desc">Hash primitives </td></tr>
-<tr id="row_0_0_0_10_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="pairing_8c.html" target="_self">pairing.c</a></td><td class="desc">Pairing implementation </td></tr>
-<tr id="row_0_0_0_11_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="pairing_8h.html" target="_self">pairing.h</a></td><td class="desc">Pairing interface </td></tr>
-<tr id="row_0_0_0_12_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="printutils_8c.html" target="_self">printutils.c</a></td><td class="desc">Print helper implementation </td></tr>
-<tr id="row_0_0_0_13_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="printutils_8h.html" target="_self">printutils.h</a></td><td class="desc">Print helper interface </td></tr>
-<tr id="row_0_0_0_14_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="sha256_8c.html" target="_self">sha256.c</a></td><td class="desc">SHA256 implementation </td></tr>
-<tr id="row_0_0_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="bitsupplier_8h.html" target="_self">bitsupplier.h</a></td><td class="desc">Random data supplier interface </td></tr>
-<tr id="row_0_0_2_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="commitment_8c.html" target="_self">commitment.c</a></td><td class="desc">Commitment hash implementation </td></tr>
-<tr id="row_0_0_3_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="commitment_8h.html" target="_self">commitment.h</a></td><td class="desc">Commitment hash interface </td></tr>
-<tr id="row_0_0_4_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="endian__convert_8h.html" target="_self">endian_convert.h</a></td><td class="desc">Endianness conversion interface </td></tr>
-<tr id="row_0_0_5_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="epid2params_8c.html" target="_self">epid2params.c</a></td><td class="desc">Intel(R) EPID 2.0 constant parameters implementation </td></tr>
-<tr id="row_0_0_6_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="epid2params_8h.html" target="_self">epid2params.h</a></td><td class="desc">Intel(R) EPID 2.0 constant parameters interface </td></tr>
-<tr id="row_0_0_7_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="epid2params__ate_8inc.html" target="_self">epid2params_ate.inc</a></td><td class="desc">Intel(R) EPID 2.0 constant parameters data </td></tr>
-<tr id="row_0_0_8_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="errors_8c.html" target="_self">errors.c</a></td><td class="desc">Error reporting implementation </td></tr>
-<tr id="row_0_0_9_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="errors_8h.html" target="_self">errors.h</a></td><td class="desc">Error reporting </td></tr>
-<tr id="row_0_0_10_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="file__parser_8c.html" target="_self">file_parser.c</a></td><td class="desc">Implementation of issuer material file parsing utilities </td></tr>
-<tr id="row_0_0_11_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="file__parser_8h.html" target="_self">file_parser.h</a></td><td class="desc">Epid issuer material parsing utilities </td></tr>
-<tr id="row_0_0_12_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="grouppubkey_8c.html" target="_self">grouppubkey.c</a></td><td class="desc">Group public key implementation </td></tr>
-<tr id="row_0_0_13_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="grouppubkey_8h.html" target="_self">grouppubkey.h</a></td><td class="desc">Group public key interface </td></tr>
-<tr id="row_0_0_14_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="memory_8c.html" target="_self">memory.c</a></td><td class="desc">Memory access implementation </td></tr>
-<tr id="row_0_0_15_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="memory_8h.html" target="_self">memory.h</a></td><td class="desc">Memory access interface </td></tr>
-<tr id="row_0_0_16_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="sigrlvalid_8c.html" target="_self">sigrlvalid.c</a></td><td class="desc"><a class="el" href="struct_sig_rl.html" title="signature based revocation list ">SigRl</a> validity checking implementation </td></tr>
-<tr id="row_0_0_17_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="sigrlvalid_8h.html" target="_self">sigrlvalid.h</a></td><td class="desc"><a class="el" href="struct_sig_rl.html" title="signature based revocation list ">SigRl</a> validity checking interface </td></tr>
-<tr id="row_0_0_18_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="stack_8c.html" target="_self">stack.c</a></td><td class="desc"><a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> container implementation </td></tr>
-<tr id="row_0_0_19_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="stack_8h.html" target="_self">stack.h</a></td><td class="desc"><a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> container interface </td></tr>
-<tr id="row_0_0_20_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="stdtypes_8h.html" target="_self">stdtypes.h</a></td><td class="desc">C99 standard data types </td></tr>
-<tr id="row_0_0_21_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="types_8h.html" target="_self">types.h</a></td><td class="desc">SDK data types </td></tr>
+<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_')">&#9660;</span><span id="img_0_0_0_" class="iconfopen" onclick="toggleFolder('0_0_0_')">&#160;</span><a class="el" href="dir_a32be19bc88f3d7aac6b7249da379f26.html" target="_self">1.1</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="1_81_2file__parser_8h.html" target="_self">file_parser.h</a></td><td class="desc">Epid 1.1 issuer material parsing utilities </td></tr>
+<tr id="row_0_0_0_1_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="1_81_2types_8h.html" target="_self">types.h</a></td><td class="desc">SDK data types for Intel(R) EPID 1.1 </td></tr>
+<tr id="row_0_0_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_1_" class="arrow" onclick="toggleFolder('0_0_1_')">&#9660;</span><span id="img_0_0_1_" class="iconfopen" onclick="toggleFolder('0_0_1_')">&#160;</span><a class="el" href="dir_f169ebf8da29290a918fa4b3f7151050.html" target="_self">math</a></td><td class="desc">Math primitives </td></tr>
+<tr id="row_0_0_1_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="bignum_8h.html" target="_self">bignum.h</a></td><td class="desc">Big number interface </td></tr>
+<tr id="row_0_0_1_1_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="ecdsa_8h.html" target="_self">ecdsa.h</a></td><td class="desc">Ecdsa interface </td></tr>
+<tr id="row_0_0_1_2_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="ecgroup_8h.html" target="_self">ecgroup.h</a></td><td class="desc">Elliptic curve group interface </td></tr>
+<tr id="row_0_0_1_3_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="finitefield_8h.html" target="_self">finitefield.h</a></td><td class="desc">Finite field interface </td></tr>
+<tr id="row_0_0_1_4_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="hash_8h.html" target="_self">hash.h</a></td><td class="desc">Hash primitives </td></tr>
+<tr id="row_0_0_1_5_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="pairing_8h.html" target="_self">pairing.h</a></td><td class="desc">Pairing interface </td></tr>
+<tr id="row_0_0_1_6_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="printutils_8h.html" target="_self">printutils.h</a></td><td class="desc">Print helper interface </td></tr>
+<tr id="row_0_0_1_7_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="tatepairing_8h.html" target="_self">tatepairing.h</a></td><td class="desc">Intel(R) EPID 1.1 Pairing interface </td></tr>
+<tr id="row_0_0_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="bitsupplier_8h.html" target="_self">bitsupplier.h</a></td><td class="desc">Random data supplier interface </td></tr>
+<tr id="row_0_0_3_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="errors_8h.html" target="_self">errors.h</a></td><td class="desc">Error reporting </td></tr>
+<tr id="row_0_0_4_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="file__parser_8h.html" target="_self">file_parser.h</a></td><td class="desc">Epid issuer material parsing utilities </td></tr>
+<tr id="row_0_0_5_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="stdtypes_8h.html" target="_self">stdtypes.h</a></td><td class="desc">C99 standard data types </td></tr>
+<tr id="row_0_0_6_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="types_8h.html" target="_self">types.h</a></td><td class="desc">SDK data types </td></tr>
<tr id="row_0_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_1_" class="arrow" onclick="toggleFolder('0_1_')">&#9660;</span><span id="img_0_1_" class="iconfopen" onclick="toggleFolder('0_1_')">&#160;</span><a class="el" href="dir_512d3e62841a8535b716ec4cf8b9e950.html" target="_self">member</a></td><td class="desc">Member functionality </td></tr>
<tr id="row_0_1_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="member_2api_8h.html" target="_self">api.h</a></td><td class="desc">Intel(R) EPID SDK member API </td></tr>
-<tr id="row_0_1_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="member_2context_8c.html" target="_self">context.c</a></td><td class="desc">Member context implementation </td></tr>
-<tr id="row_0_1_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="member_2context_8h.html" target="_self">context.h</a></td><td class="desc">Member context interface </td></tr>
-<tr id="row_0_1_3_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="decompress__privkey_8c.html" target="_self">decompress_privkey.c</a></td><td class="desc">EpidDecompressPrivKey implementation </td></tr>
-<tr id="row_0_1_4_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="get__sigsize_8c.html" target="_self">get_sigsize.c</a></td><td class="desc">EpidGetSigSize implementation </td></tr>
-<tr id="row_0_1_5_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="nr__prove_8c.html" target="_self">nr_prove.c</a></td><td class="desc">EpidNrProve implementation </td></tr>
-<tr id="row_0_1_6_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="presig_8c.html" target="_self">presig.c</a></td><td class="desc">EpidComputePreSig implementation </td></tr>
-<tr id="row_0_1_7_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="privkey_8c.html" target="_self">privkey.c</a></td><td class="desc">Private key implementation </td></tr>
-<tr id="row_0_1_8_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="privkey_8h.html" target="_self">privkey.h</a></td><td class="desc">Private key private interface </td></tr>
-<tr id="row_0_1_9_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="request__join_8c.html" target="_self">request_join.c</a></td><td class="desc">EpidRequestJoin implementation </td></tr>
-<tr id="row_0_1_10_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="sign_8c.html" target="_self">sign.c</a></td><td class="desc">EpidSign implementation </td></tr>
-<tr id="row_0_1_11_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="signbasic_8c.html" target="_self">signbasic.c</a></td><td class="desc">EpidSignBasic implementation </td></tr>
-<tr id="row_0_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_2_" class="arrow" onclick="toggleFolder('0_2_')">&#9660;</span><span id="img_0_2_" class="iconfopen" onclick="toggleFolder('0_2_')">&#160;</span><a class="el" href="dir_02c945662023679b89476bd7126bc985.html" target="_self">verifier</a></td><td class="desc">Verifier functionality </td></tr>
-<tr id="row_0_2_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="verifier_2api_8h.html" target="_self">api.h</a></td><td class="desc">Intel(R) EPID SDK verifier API </td></tr>
-<tr id="row_0_2_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="check__privrl__entry_8c.html" target="_self">check_privrl_entry.c</a></td><td class="desc">EpidCheckPrivRlEntry implementation </td></tr>
-<tr id="row_0_2_2_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="verifier_2context_8c.html" target="_self">context.c</a></td><td class="desc">Verifier context implementation </td></tr>
-<tr id="row_0_2_3_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="verifier_2context_8h.html" target="_self">context.h</a></td><td class="desc">Verifier context interface </td></tr>
-<tr id="row_0_2_4_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="nrverify_8c.html" target="_self">nrverify.c</a></td><td class="desc">NrVerfy implementation </td></tr>
-<tr id="row_0_2_5_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="sigs__linked_8c.html" target="_self">sigs_linked.c</a></td><td class="desc">AreSigsLinked implementation </td></tr>
-<tr id="row_0_2_6_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="verify_8c.html" target="_self">verify.c</a></td><td class="desc">Verify implementation </td></tr>
-<tr id="row_0_2_7_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="verifybasic_8c.html" target="_self">verifybasic.c</a></td><td class="desc">VerifyBasicSig implementation </td></tr>
+<tr id="row_0_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_2_" class="arrow" onclick="toggleFolder('0_2_')">&#9660;</span><span id="img_0_2_" class="iconfopen" onclick="toggleFolder('0_2_')">&#160;</span><a class="el" href="dir_02c945662023679b89476bd7126bc985.html" target="_self">verifier</a></td><td class="desc">Verifier functionality </td></tr>
+<tr id="row_0_2_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_2_0_" class="arrow" onclick="toggleFolder('0_2_0_')">&#9660;</span><span id="img_0_2_0_" class="iconfopen" onclick="toggleFolder('0_2_0_')">&#160;</span><a class="el" href="dir_ef364879bae02db2684040178ed9b186.html" target="_self">1.1</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_0_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="verifier_21_81_2api_8h.html" target="_self">api.h</a></td><td class="desc">Intel(R) EPID SDK verifier Intel(R) EPID 1.1 API </td></tr>
+<tr id="row_0_2_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="verifier_2api_8h.html" target="_self">api.h</a></td><td class="desc">Intel(R) EPID SDK verifier API </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
diff --git a/doc/html/finitefield_8c.html b/doc/html/finitefield_8c.html
deleted file mode 100644
index da69752..0000000
--- a/doc/html/finitefield_8c.html
+++ /dev/null
@@ -1,162 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/math/finitefield.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('finitefield_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">finitefield.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Finite field implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;limits.h&gt;</code><br />
-<code>#include &lt;string.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="finitefield_8h.html">epid/common/math/finitefield.h</a>&quot;</code><br />
-<code>#include &quot;epid/common/math/bignum-internal.h&quot;</code><br />
-<code>#include &quot;epid/common/math/finitefield-internal.h&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &quot;ext/ipp/include/ippcp.h&quot;</code><br />
-<code>#include &quot;ext/ipp/include/ippcpepid.h&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a84d66c4493b912014a9acf0e123b2d4c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a84d66c4493b912014a9acf0e123b2d4c"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="finitefield_8c.html#a84d66c4493b912014a9acf0e123b2d4c">RNG_WATCHDOG</a>&#160;&#160;&#160;(10)</td></tr>
-<tr class="memdesc:a84d66c4493b912014a9acf0e123b2d4c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of tries for RNG. <br /></td></tr>
-<tr class="separator:a84d66c4493b912014a9acf0e123b2d4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a4c64c2cce3c0384dd0346049c52b6a62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c64c2cce3c0384dd0346049c52b6a62"></a>
-<a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="finitefield_8c.html#a4c64c2cce3c0384dd0346049c52b6a62">InitFiniteFieldFromIpp</a> (IppsGFpState *ipp_ff, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff)</td></tr>
-<tr class="memdesc:a4c64c2cce3c0384dd0346049c52b6a62"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes a FiniteField structure. <br /></td></tr>
-<tr class="separator:a4c64c2cce3c0384dd0346049c52b6a62"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga7d99fdc5e4573668a5744e49df7ab67c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga7d99fdc5e4573668a5744e49df7ab67c">NewFiniteField</a> (<a class="el" href="struct_big_num_str.html">BigNumStr</a> const *prime, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> **ff)</td></tr>
-<tr class="memdesc:ga7d99fdc5e4573668a5744e49df7ab67c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates new finite field. <a href="group___finite_field_primitives.html#ga7d99fdc5e4573668a5744e49df7ab67c">More...</a><br /></td></tr>
-<tr class="separator:ga7d99fdc5e4573668a5744e49df7ab67c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga83041e3be9984a4bd8f1021934bfa3a2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2">NewFiniteFieldViaBinomalExtension</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> const *ground_field, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *ground_element, int degree, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> **ff)</td></tr>
-<tr class="memdesc:ga83041e3be9984a4bd8f1021934bfa3a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new finite field using binomial extension. <a href="group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2">More...</a><br /></td></tr>
-<tr class="separator:ga83041e3be9984a4bd8f1021934bfa3a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gacbdd2871ecf93dadaac9d2c5b16e1e5f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f">DeleteFiniteField</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> **ff)</td></tr>
-<tr class="memdesc:gacbdd2871ecf93dadaac9d2c5b16e1e5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees a previously allocated FiniteField. <a href="group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f">More...</a><br /></td></tr>
-<tr class="separator:gacbdd2871ecf93dadaac9d2c5b16e1e5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gacc54f315ede2dbeb8c5990c024a0de6c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#gacc54f315ede2dbeb8c5990c024a0de6c">NewFfElement</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> const *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> **new_ff_elem)</td></tr>
-<tr class="memdesc:gacc54f315ede2dbeb8c5990c024a0de6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new finite field element. <a href="group___finite_field_primitives.html#gacc54f315ede2dbeb8c5990c024a0de6c">More...</a><br /></td></tr>
-<tr class="separator:gacc54f315ede2dbeb8c5990c024a0de6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga1bad3c6945d1d709fceb07a1dd03000e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga1bad3c6945d1d709fceb07a1dd03000e">DeleteFfElement</a> (<a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> **ff_elem)</td></tr>
-<tr class="memdesc:ga1bad3c6945d1d709fceb07a1dd03000e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees a previously allocated FfElement. <a href="group___finite_field_primitives.html#ga1bad3c6945d1d709fceb07a1dd03000e">More...</a><br /></td></tr>
-<tr class="separator:ga1bad3c6945d1d709fceb07a1dd03000e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga884d9e1baadf29a410244a735853e3c7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga884d9e1baadf29a410244a735853e3c7">ReadFfElement</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, void const *ff_elem_str, size_t strlen, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *ff_elem)</td></tr>
-<tr class="memdesc:ga884d9e1baadf29a410244a735853e3c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deserializes a FfElement from a string. <a href="group___finite_field_primitives.html#ga884d9e1baadf29a410244a735853e3c7">More...</a><br /></td></tr>
-<tr class="separator:ga884d9e1baadf29a410244a735853e3c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga678694636708463b078d842d5c58a900"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900">WriteFfElement</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *ff_elem, void *ff_elem_str, size_t strlen)</td></tr>
-<tr class="memdesc:ga678694636708463b078d842d5c58a900"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes a finite field element to a string. <a href="group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900">More...</a><br /></td></tr>
-<tr class="separator:ga678694636708463b078d842d5c58a900"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gae7a8c7503b6fc7a41bcaab4d45ca37b2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#gae7a8c7503b6fc7a41bcaab4d45ca37b2">FfNeg</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
-<tr class="memdesc:gae7a8c7503b6fc7a41bcaab4d45ca37b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates the additive inverse of a finite field element. <a href="group___finite_field_primitives.html#gae7a8c7503b6fc7a41bcaab4d45ca37b2">More...</a><br /></td></tr>
-<tr class="separator:gae7a8c7503b6fc7a41bcaab4d45ca37b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga26069d035d0f6ade33af2b5d5c14949a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga26069d035d0f6ade33af2b5d5c14949a">FfInv</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
-<tr class="memdesc:ga26069d035d0f6ade33af2b5d5c14949a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates the multiplicative inverse of a finite field element. <a href="group___finite_field_primitives.html#ga26069d035d0f6ade33af2b5d5c14949a">More...</a><br /></td></tr>
-<tr class="separator:ga26069d035d0f6ade33af2b5d5c14949a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga1a6e6d3c2319bb24eae8670b021e223b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b">FfAdd</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *b, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
-<tr class="memdesc:ga1a6e6d3c2319bb24eae8670b021e223b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds two finite field elements. <a href="group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b">More...</a><br /></td></tr>
-<tr class="separator:ga1a6e6d3c2319bb24eae8670b021e223b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga4613a75bd001a974b3e3e494c3a112a5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5">FfMul</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *b, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
-<tr class="memdesc:ga4613a75bd001a974b3e3e494c3a112a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multiplies two finite field elements. <a href="group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5">More...</a><br /></td></tr>
-<tr class="separator:ga4613a75bd001a974b3e3e494c3a112a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga20d9140e5670d679ef8183d9b5115f53"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga20d9140e5670d679ef8183d9b5115f53">FfIsZero</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *is_zero)</td></tr>
-<tr class="memdesc:ga20d9140e5670d679ef8183d9b5115f53"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if given finite field element is the additive identity (zero). <a href="group___finite_field_primitives.html#ga20d9140e5670d679ef8183d9b5115f53">More...</a><br /></td></tr>
-<tr class="separator:ga20d9140e5670d679ef8183d9b5115f53"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gaf0ddbc1bad048d67771cba119eb44a6c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#gaf0ddbc1bad048d67771cba119eb44a6c">FfExp</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *b, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
-<tr class="memdesc:gaf0ddbc1bad048d67771cba119eb44a6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Raises an element of a finite field to a power. <a href="group___finite_field_primitives.html#gaf0ddbc1bad048d67771cba119eb44a6c">More...</a><br /></td></tr>
-<tr class="separator:gaf0ddbc1bad048d67771cba119eb44a6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga84d21decc1c957bcf6e98e1492eb2ac3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga84d21decc1c957bcf6e98e1492eb2ac3">FfMultiExp</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const **p, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const **b, size_t m, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
-<tr class="memdesc:ga84d21decc1c957bcf6e98e1492eb2ac3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multi-exponentiates finite field elements. <a href="group___finite_field_primitives.html#ga84d21decc1c957bcf6e98e1492eb2ac3">More...</a><br /></td></tr>
-<tr class="separator:ga84d21decc1c957bcf6e98e1492eb2ac3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga0d0c31a22bbfb665a16b2d25b0cd2634"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634">FfSscmMultiExp</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const **p, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const **b, size_t m, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
-<tr class="memdesc:ga0d0c31a22bbfb665a16b2d25b0cd2634"><td class="mdescLeft">&#160;</td><td class="mdescRight">Software side-channel mitigated implementation of FfMultiExp. <a href="group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634">More...</a><br /></td></tr>
-<tr class="separator:ga0d0c31a22bbfb665a16b2d25b0cd2634"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gaed2acb8583e9c9f6b49fdb660c672625"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#gaed2acb8583e9c9f6b49fdb660c672625">FfIsEqual</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *b, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *is_equal)</td></tr>
-<tr class="memdesc:gaed2acb8583e9c9f6b49fdb660c672625"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if two finite field elements are equal. <a href="group___finite_field_primitives.html#gaed2acb8583e9c9f6b49fdb660c672625">More...</a><br /></td></tr>
-<tr class="separator:gaed2acb8583e9c9f6b49fdb660c672625"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga18a952cebb4a1274c73e6cb0c19e8aea"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga18a952cebb4a1274c73e6cb0c19e8aea">FfHash</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, void const *msg, size_t msg_len, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
-<tr class="memdesc:ga18a952cebb4a1274c73e6cb0c19e8aea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hashes an arbitrary message to an element in a finite field. <a href="group___finite_field_primitives.html#ga18a952cebb4a1274c73e6cb0c19e8aea">More...</a><br /></td></tr>
-<tr class="separator:ga18a952cebb4a1274c73e6cb0c19e8aea"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga6622db072782fd9e53b4d59dd3dbd8e8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga6622db072782fd9e53b4d59dd3dbd8e8">FfGetRandom</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const *low_bound, <a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a> rnd_func, void *rnd_param, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
-<tr class="memdesc:ga6622db072782fd9e53b4d59dd3dbd8e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate random finite field element. <a href="group___finite_field_primitives.html#ga6622db072782fd9e53b4d59dd3dbd8e8">More...</a><br /></td></tr>
-<tr class="separator:ga6622db072782fd9e53b4d59dd3dbd8e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Finite field implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="dir_f169ebf8da29290a918fa4b3f7151050.html">math</a></li><li class="navelem"><a class="el" href="finitefield_8c.html">finitefield.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/finitefield_8h.html b/doc/html/finitefield_8h.html
index b966a52..ca7b07f 100644
--- a/doc/html/finitefield_8h.html
+++ b/doc/html/finitefield_8h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -92,6 +92,9 @@ Functions</h2></td></tr>
<tr class="memitem:ga83041e3be9984a4bd8f1021934bfa3a2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2">NewFiniteFieldViaBinomalExtension</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> const *ground_field, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *ground_element, int degree, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> **ff)</td></tr>
<tr class="memdesc:ga83041e3be9984a4bd8f1021934bfa3a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new finite field using binomial extension. <a href="group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2">More...</a><br /></td></tr>
<tr class="separator:ga83041e3be9984a4bd8f1021934bfa3a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae69af62a03179718cac81b004549c598"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#gae69af62a03179718cac81b004549c598">NewFiniteFieldViaPolynomialExtension</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> const *ground_field, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const *irr_polynomial, int degree, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> **ff)</td></tr>
+<tr class="memdesc:gae69af62a03179718cac81b004549c598"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new finite field using polynomial extension. <a href="group___finite_field_primitives.html#gae69af62a03179718cac81b004549c598">More...</a><br /></td></tr>
+<tr class="separator:gae69af62a03179718cac81b004549c598"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacbdd2871ecf93dadaac9d2c5b16e1e5f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f">DeleteFiniteField</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> **ff)</td></tr>
<tr class="memdesc:gacbdd2871ecf93dadaac9d2c5b16e1e5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees a previously allocated FiniteField. <a href="group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f">More...</a><br /></td></tr>
<tr class="separator:gacbdd2871ecf93dadaac9d2c5b16e1e5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -104,6 +107,9 @@ Functions</h2></td></tr>
<tr class="memitem:ga884d9e1baadf29a410244a735853e3c7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga884d9e1baadf29a410244a735853e3c7">ReadFfElement</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, void const *ff_elem_str, size_t strlen, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *ff_elem)</td></tr>
<tr class="memdesc:ga884d9e1baadf29a410244a735853e3c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deserializes a FfElement from a string. <a href="group___finite_field_primitives.html#ga884d9e1baadf29a410244a735853e3c7">More...</a><br /></td></tr>
<tr class="separator:ga884d9e1baadf29a410244a735853e3c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga90b2c192708973b54b7a3e82b34536ed"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga90b2c192708973b54b7a3e82b34536ed">InitFfElementFromBn</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *bn, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *ff_elem)</td></tr>
+<tr class="memdesc:ga90b2c192708973b54b7a3e82b34536ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes an existing FfElement from a BigNum. <a href="group___finite_field_primitives.html#ga90b2c192708973b54b7a3e82b34536ed">More...</a><br /></td></tr>
+<tr class="separator:ga90b2c192708973b54b7a3e82b34536ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga678694636708463b078d842d5c58a900"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900">WriteFfElement</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *ff_elem, void *ff_elem_str, size_t strlen)</td></tr>
<tr class="memdesc:ga678694636708463b078d842d5c58a900"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes a finite field element to a string. <a href="group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900">More...</a><br /></td></tr>
<tr class="separator:ga678694636708463b078d842d5c58a900"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -116,6 +122,9 @@ Functions</h2></td></tr>
<tr class="memitem:ga1a6e6d3c2319bb24eae8670b021e223b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b">FfAdd</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *b, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
<tr class="memdesc:ga1a6e6d3c2319bb24eae8670b021e223b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds two finite field elements. <a href="group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b">More...</a><br /></td></tr>
<tr class="separator:ga1a6e6d3c2319bb24eae8670b021e223b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga59d20610f245ff4bc3a17b7bfe289991"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga59d20610f245ff4bc3a17b7bfe289991">FfSub</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *b, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
+<tr class="memdesc:ga59d20610f245ff4bc3a17b7bfe289991"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subtracts two finite field elements. <a href="group___finite_field_primitives.html#ga59d20610f245ff4bc3a17b7bfe289991">More...</a><br /></td></tr>
+<tr class="separator:ga59d20610f245ff4bc3a17b7bfe289991"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4613a75bd001a974b3e3e494c3a112a5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5">FfMul</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *b, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
<tr class="memdesc:ga4613a75bd001a974b3e3e494c3a112a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multiplies two finite field elements. <a href="group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5">More...</a><br /></td></tr>
<tr class="separator:ga4613a75bd001a974b3e3e494c3a112a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -128,6 +137,9 @@ Functions</h2></td></tr>
<tr class="memitem:ga84d21decc1c957bcf6e98e1492eb2ac3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga84d21decc1c957bcf6e98e1492eb2ac3">FfMultiExp</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const **a, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const **b, size_t m, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
<tr class="memdesc:ga84d21decc1c957bcf6e98e1492eb2ac3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multi-exponentiates finite field elements. <a href="group___finite_field_primitives.html#ga84d21decc1c957bcf6e98e1492eb2ac3">More...</a><br /></td></tr>
<tr class="separator:ga84d21decc1c957bcf6e98e1492eb2ac3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1ef46fc83f9c11263a2aa1ec906c9144"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga1ef46fc83f9c11263a2aa1ec906c9144">FfMultiExpBn</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const **a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const **b, size_t m, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
+<tr class="memdesc:ga1ef46fc83f9c11263a2aa1ec906c9144"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multi-exponentiates finite field elements. <a href="group___finite_field_primitives.html#ga1ef46fc83f9c11263a2aa1ec906c9144">More...</a><br /></td></tr>
+<tr class="separator:ga1ef46fc83f9c11263a2aa1ec906c9144"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0d0c31a22bbfb665a16b2d25b0cd2634"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634">FfSscmMultiExp</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const **a, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const **b, size_t m, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
<tr class="memdesc:ga0d0c31a22bbfb665a16b2d25b0cd2634"><td class="mdescLeft">&#160;</td><td class="mdescRight">Software side-channel mitigated implementation of FfMultiExp. <a href="group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634">More...</a><br /></td></tr>
<tr class="separator:ga0d0c31a22bbfb665a16b2d25b0cd2634"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -140,6 +152,9 @@ Functions</h2></td></tr>
<tr class="memitem:ga6622db072782fd9e53b4d59dd3dbd8e8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga6622db072782fd9e53b4d59dd3dbd8e8">FfGetRandom</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const *low_bound, <a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a> rnd_func, void *rnd_param, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
<tr class="memdesc:ga6622db072782fd9e53b4d59dd3dbd8e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate random finite field element. <a href="group___finite_field_primitives.html#ga6622db072782fd9e53b4d59dd3dbd8e8">More...</a><br /></td></tr>
<tr class="separator:ga6622db072782fd9e53b4d59dd3dbd8e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga39892fe2ab431e166dbbcf57756660f6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga39892fe2ab431e166dbbcf57756660f6">FfSqrt</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
+<tr class="memdesc:ga39892fe2ab431e166dbbcf57756660f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds a square root of a finite field element. <a href="group___finite_field_primitives.html#ga39892fe2ab431e166dbbcf57756660f6">More...</a><br /></td></tr>
+<tr class="separator:ga39892fe2ab431e166dbbcf57756660f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Finite field interface. </p>
diff --git a/doc/html/functions.html b/doc/html/functions.html
index e284cce..ee04435 100644
--- a/doc/html/functions.html
+++ b/doc/html/functions.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -61,9 +61,12 @@ $(document).ready(function(){initNavTree('functions.html','');});
<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
<li>a
-: <a class="el" href="struct_epid_ca_certificate.html#a2811c1914ffae913820f13da914c8f01">EpidCaCertificate</a>
+: <a class="el" href="struct_epid11_gt_elem_str.html#aed8dd86f1696c2f3537154fc904bf2b0">Epid11GtElemStr</a>
+, <a class="el" href="struct_epid11_params.html#a01381f84b2d747b6273e21c71c58a1b0">Epid11Params</a>
+, <a class="el" href="struct_epid_ca_certificate.html#a2811c1914ffae913820f13da914c8f01">EpidCaCertificate</a>
, <a class="el" href="struct_fq12_elem_str.html#a0520947335aaf52de90af1dec5bdd112">Fq12ElemStr</a>
, <a class="el" href="struct_fq2_elem_str.html#ab1d253eb24ba30eaf516ac429daab915">Fq2ElemStr</a>
+, <a class="el" href="struct_fq3_elem_str.html#af1be0a4d5c9c674d75bec34f95e3c731">Fq3ElemStr</a>
, <a class="el" href="struct_fq6_elem_str.html#a89d656e5c815b4a2382d11ef6932a7d2">Fq6ElemStr</a>
</li>
<li>A
@@ -74,15 +77,424 @@ $(document).ready(function(){initNavTree('functions.html','');});
</li>
<li>A
: <a class="el" href="struct_priv_key.html#a266c7e369b8b868ef5755e9cd3c0c849">PrivKey</a>
-, <a class="el" href="struct_priv_key__.html#aaf02af1379a0801f49a3f8845e7a1b1f">PrivKey_</a>
</li>
-<li>allowed_basenames
-: <a class="el" href="struct_member_ctx.html#acd3f0e198a1a462d5cee67341e006fe6">MemberCtx</a>
+<li>a_tick
+: <a class="el" href="struct_epid11_params.html#ae8770bb921aac9214ff8c45c41dbb228">Epid11Params</a>
</li>
<li>ax
: <a class="el" href="struct_compressed_priv_key.html#a0b0535f0567eb0e48f799d27991d0f66">CompressedPrivKey</a>
</li>
</ul>
+
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>B
+: <a class="el" href="struct_basic_signature.html#ae90cb6af66b010ae39913f033c1e65ac">BasicSignature</a>
+, <a class="el" href="struct_epid11_basic_signature.html#a27fd7ae99d1ada652e21e7508a467c0b">Epid11BasicSignature</a>
+</li>
+<li>b
+: <a class="el" href="struct_epid11_params.html#a27b45ed7771a3024d1d059b4b4ff6eae">Epid11Params</a>
+, <a class="el" href="struct_epid11_sig_rl_entry.html#abe47cfbd00684941f93a211417bedf0c">Epid11SigRlEntry</a>
+, <a class="el" href="struct_epid2_params.html#a2f868edb49be49f645101ef5ebbbc551">Epid2Params</a>
+, <a class="el" href="struct_epid_ca_certificate.html#a280e0b0238cf45834c21849ab8a7e124">EpidCaCertificate</a>
+, <a class="el" href="struct_pre_computed_signature.html#a666710432d9d54ca896647a976892c4f">PreComputedSignature</a>
+</li>
+<li>B
+: <a class="el" href="struct_pre_computed_signature.html#a9cc2eb61572a1aca9e6bc3d5e6f4c1fe">PreComputedSignature</a>
+</li>
+<li>b
+: <a class="el" href="struct_sig_rl_entry.html#ac6a47ff0d1b8ea1512e0ff14983ac5ce">SigRlEntry</a>
+</li>
+<li>B
+: <a class="el" href="struct_verifier_rl.html#a5d9a9265fffa96fd5f9260543eb08c68">VerifierRl</a>
+</li>
+<li>b_tick
+: <a class="el" href="struct_epid11_params.html#ade3f88ce73d7de656ec67d9fdb0719d7">Epid11Params</a>
+</li>
+<li>beta
+: <a class="el" href="struct_epid2_params.html#ac2d7507c6f58c3451beacacb91b52695">Epid2Params</a>
+</li>
+<li>bk
+: <a class="el" href="struct_epid11_sig_rl.html#a6473f8a98f76c9f82183041ea5ae17e3">Epid11SigRl</a>
+, <a class="el" href="struct_sig_rl.html#ac23a919993d99d24a5150302f1778102">SigRl</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>c
+: <a class="el" href="struct_basic_signature.html#a4daa94db5068db3f10960f3dd178d603">BasicSignature</a>
+, <a class="el" href="struct_epid11_basic_signature.html#a9cc6efcd3d7270022779bd16776168ed">Epid11BasicSignature</a>
+, <a class="el" href="struct_epid11_nr_proof.html#a2e5ee8dc25d296538dce935397a93d68">Epid11NrProof</a>
+, <a class="el" href="struct_join_request.html#a55e30a274e83b808db6fbab5ae6c6cb8">JoinRequest</a>
+, <a class="el" href="struct_nr_proof.html#a0de1aa69acf3d93da34cf4a613b359a1">NrProof</a>
+</li>
+<li>coeff
+: <a class="el" href="struct_epid11_params.html#aacc39ebe0cc625321039ffb6be0b0e87">Epid11Params</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>data
+: <a class="el" href="struct_big_num_str.html#a442dcf33889b4f85c5b1228d2c8e6838">BigNumStr</a>
+, <a class="el" href="struct_ecdsa_private_key.html#a97efee9b4079f95d94a104f9a6d8c96d">EcdsaPrivateKey</a>
+, <a class="el" href="struct_fp_elem_str.html#a5ddb96a5567750f2834335851c906c45">FpElemStr</a>
+, <a class="el" href="struct_fq_elem_str.html#aac1a876b51a8d2c6d1510e4df2fd3f14">FqElemStr</a>
+, <a class="el" href="struct_oct_str128.html#a7482aa9b0b580fdd50bd65419d52d4b9">OctStr128</a>
+, <a class="el" href="struct_oct_str16.html#a86ed6671693a3f60ec4ff7de2c1206c3">OctStr16</a>
+, <a class="el" href="struct_oct_str256.html#a359781bb84f5717a16094583a00ef14e">OctStr256</a>
+, <a class="el" href="struct_oct_str32.html#a5588a7e70f3d73f6ce58b567a9f5c5c8">OctStr32</a>
+, <a class="el" href="struct_oct_str512.html#abd4d1b97fe49321571da86de1aeac653">OctStr512</a>
+, <a class="el" href="struct_oct_str600.html#a06d53af92a06e1decc6062fd16c43a59">OctStr600</a>
+, <a class="el" href="struct_oct_str64.html#a0e107d78192a5ae0b48ed9e5c4eab0fc">OctStr64</a>
+, <a class="el" href="struct_oct_str768.html#ae45eea89259bd22e60a8d960063921cc">OctStr768</a>
+, <a class="el" href="struct_oct_str80.html#af80e2b81554109d9a41c5e771aceb8c9">OctStr80</a>
+, <a class="el" href="struct_oct_str8.html#a5e6c56fda48c88b419e621b464b03bef">OctStr8</a>
+, <a class="el" href="struct_sha256_digest.html#a4b6462ddd3f89e4c40220ceb6b1c7f28">Sha256Digest</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>e12
+: <a class="el" href="struct_epid11_verifier_precomp.html#a0a980adb039089263ec59a995600ee91">Epid11VerifierPrecomp</a>
+, <a class="el" href="struct_member_precomp.html#a55e5c4b25c8f0f426969a8d745260fe5">MemberPrecomp</a>
+, <a class="el" href="struct_verifier_precomp.html#ad1106376f12772942af0331eb74de6e5">VerifierPrecomp</a>
+</li>
+<li>e22
+: <a class="el" href="struct_epid11_verifier_precomp.html#ad0ff2a13c2c87460296900dde72a2f30">Epid11VerifierPrecomp</a>
+, <a class="el" href="struct_member_precomp.html#a4e7412969bed3964f813b093b948e7b4">MemberPrecomp</a>
+, <a class="el" href="struct_verifier_precomp.html#af8fd90f3a5a2be932a97dcd86099d5b2">VerifierPrecomp</a>
+</li>
+<li>e2w
+: <a class="el" href="struct_epid11_verifier_precomp.html#a14ebadf105aff085edb9a817a2d1db89">Epid11VerifierPrecomp</a>
+, <a class="el" href="struct_member_precomp.html#a879d5a7b0c30088b23f6e5c5fc62f834">MemberPrecomp</a>
+, <a class="el" href="struct_verifier_precomp.html#a8caf79578e3c0baf91921460391103ca">VerifierPrecomp</a>
+</li>
+<li>ea2
+: <a class="el" href="struct_member_precomp.html#a573551f6494e372f44fd3bdf5b02aeda">MemberPrecomp</a>
+</li>
+<li>eg12
+: <a class="el" href="struct_verifier_precomp.html#ab061d6cc07d1467eeb5bf25f3ea7e306">VerifierPrecomp</a>
+</li>
+<li>epid_version
+: <a class="el" href="struct_epid_file_header.html#a35d43c51c1739940381e4898ca87b824">EpidFileHeader</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>f
+: <a class="el" href="struct_epid11_priv_rl.html#abbb75fee81aecb2dde7e2daab895ad3b">Epid11PrivRl</a>
+</li>
+<li>F
+: <a class="el" href="struct_join_request.html#a005651506fd4511e8a3537f6c3634532">JoinRequest</a>
+</li>
+<li>f
+: <a class="el" href="struct_priv_key.html#ad7ee0392a583edd2e287cf8c1f9066ba">PrivKey</a>
+, <a class="el" href="struct_priv_rl.html#a60d73f9ef5fc81f117b3abadf8c18466">PrivRl</a>
+</li>
+<li>file_type
+: <a class="el" href="struct_epid_file_header.html#af5d48c739cc6c00c6e1ce35abf4f1473">EpidFileHeader</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>g1
+: <a class="el" href="struct_epid11_params.html#a835e70da717cd5b0c94e242a6418a287">Epid11Params</a>
+, <a class="el" href="struct_epid2_params.html#a4c5195b4fa9393a07a121336202531ad">Epid2Params</a>
+</li>
+<li>g2
+: <a class="el" href="struct_epid11_params.html#a1c6bbc4e066449d9c329f88cb653ef7c">Epid11Params</a>
+, <a class="el" href="struct_epid2_params.html#a609b0aac17fca34fe39bee29676a9618">Epid2Params</a>
+</li>
+<li>g3
+: <a class="el" href="struct_epid11_params.html#a7eb9a1371d7187ae81bccfa8d5595033">Epid11Params</a>
+</li>
+<li>gamma
+: <a class="el" href="struct_i_priv_key.html#a6d484175317aef09fb959c3ca55fc70a">IPrivKey</a>
+</li>
+<li>gid
+: <a class="el" href="struct_compressed_priv_key.html#ac6689899f1d9a6a8c5e4915563679840">CompressedPrivKey</a>
+, <a class="el" href="struct_epid11_group_pub_key.html#a964344b3c595bdd585bb9b5d9d0ea762">Epid11GroupPubKey</a>
+, <a class="el" href="struct_epid11_group_rl.html#a97f165c59bc447e3ca3c2148a096710f">Epid11GroupRl</a>
+, <a class="el" href="struct_epid11_priv_rl.html#aa8945d81e30674b52a6d0900b64feb3c">Epid11PrivRl</a>
+, <a class="el" href="struct_epid11_sig_rl.html#ad45b0e3e1be59649150dd34c104000ac">Epid11SigRl</a>
+, <a class="el" href="struct_epid11_verifier_precomp.html#a03138e937f4488bdbc52ed473dc313da">Epid11VerifierPrecomp</a>
+, <a class="el" href="struct_group_pub_key.html#ae8e77ab4d5eb3c8e566c24a64cce56ee">GroupPubKey</a>
+, <a class="el" href="struct_group_rl.html#a51022e172ab8b945efc69f1e63170107">GroupRl</a>
+, <a class="el" href="struct_i_priv_key.html#ad400a4237b6d50855538fd40580eb1bb">IPrivKey</a>
+, <a class="el" href="struct_membership_credential.html#afbff64ec55888c7e2a658eabb5e16671">MembershipCredential</a>
+, <a class="el" href="struct_priv_key.html#ab416dcb4366427c24b44c2a02e4ae7c8">PrivKey</a>
+, <a class="el" href="struct_priv_rl.html#af7317529b8e55476bd06b66ed8131d64">PrivRl</a>
+, <a class="el" href="struct_sig_rl.html#a12757d30fcccd310716433948e0b603e">SigRl</a>
+, <a class="el" href="struct_verifier_precomp.html#afc3e29a325c95c62bb192d5f8cdd5c1c">VerifierPrecomp</a>
+, <a class="el" href="struct_verifier_rl.html#ab85c4666d16145ff16443e84468d2d7d">VerifierRl</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>h
+: <a class="el" href="struct_epid11_params.html#ae2d1dc635d9d7cba496c3d64fb6f9d5b">Epid11Params</a>
+</li>
+<li>h1
+: <a class="el" href="struct_epid11_group_pub_key.html#a36f688472e2655052d485eac67d8c362">Epid11GroupPubKey</a>
+, <a class="el" href="struct_group_pub_key.html#a8c22c758ea186f95e3bf4b2ef8451da5">GroupPubKey</a>
+</li>
+<li>h2
+: <a class="el" href="struct_epid11_group_pub_key.html#aa724e9d2f0cb6019c05547d76a13b72a">Epid11GroupPubKey</a>
+, <a class="el" href="struct_group_pub_key.html#a2a4320ec99fd1a15df412fbf2a8d49f1">GroupPubKey</a>
+</li>
+<li>h_tick
+: <a class="el" href="struct_epid11_params.html#a0fe238db4ebc0225899dc2dac97d11c0">Epid11Params</a>
+</li>
+<li>header
+: <a class="el" href="struct_epid_ca_certificate.html#ac03cf7257c52ad14e3dd3201b930dd50">EpidCaCertificate</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>K
+: <a class="el" href="struct_basic_signature.html#a0078cc83ecf6c7e31f96b7d44aa60e21">BasicSignature</a>
+, <a class="el" href="struct_epid11_basic_signature.html#a5882fcbfd272774e12e50a2d77f0b139">Epid11BasicSignature</a>
+</li>
+<li>k
+: <a class="el" href="struct_epid11_sig_rl_entry.html#a5de66e1352eafe95774a0d76bac8f01a">Epid11SigRlEntry</a>
+</li>
+<li>K
+: <a class="el" href="struct_pre_computed_signature.html#a2a4eaffe2717bd9c8c360599612adbe6">PreComputedSignature</a>
+</li>
+<li>k
+: <a class="el" href="struct_sig_rl_entry.html#a0dfeb058614e81878bfbf86ae3edac3c">SigRlEntry</a>
+</li>
+<li>K
+: <a class="el" href="struct_verifier_rl.html#ac7d3dceab4772096bbbeb3fa735d18a9">VerifierRl</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>n1
+: <a class="el" href="struct_epid11_priv_rl.html#ad95f880f40e2f40c723f5bdbd22ecfa2">Epid11PrivRl</a>
+, <a class="el" href="struct_priv_rl.html#a6da9639ec4061689d1c30a58e0befd14">PrivRl</a>
+</li>
+<li>n2
+: <a class="el" href="struct_epid11_signature.html#ad25c277223a5210063163ea554d08ad4">Epid11Signature</a>
+, <a class="el" href="struct_epid11_sig_rl.html#a8c654d43df132db7874f4c84c177dc12">Epid11SigRl</a>
+, <a class="el" href="struct_epid_signature.html#a62a6b0ffcd5f68dd3d2786a58fe43017">EpidSignature</a>
+, <a class="el" href="struct_sig_rl.html#a9dfb6b508db9051f4dc480a51d702af2">SigRl</a>
+</li>
+<li>n3
+: <a class="el" href="struct_epid11_group_rl.html#a35cb954f598d4006b0f047cde77010a5">Epid11GroupRl</a>
+, <a class="el" href="struct_group_rl.html#a9067f01c63cdefbc8e23c3cf67a10172">GroupRl</a>
+</li>
+<li>n4
+: <a class="el" href="struct_verifier_rl.html#a1e3f84b873bccc0c882aa6432c42d2f7">VerifierRl</a>
+</li>
+<li>nd
+: <a class="el" href="struct_epid11_basic_signature.html#af18200712d2cf3ed3ccaee328e8a4e0f">Epid11BasicSignature</a>
+</li>
+<li>neg
+: <a class="el" href="struct_epid2_params.html#af23f07fb0e1745c0ad14aceeaa946928">Epid2Params</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>orderG2
+: <a class="el" href="struct_epid11_params.html#a02bd6fa2ab256e3a07533e947ab0101e">Epid11Params</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>p
+: <a class="el" href="struct_epid11_params.html#a2aa4d8a2ebe0dfeb6d930fd7b39f9d1a">Epid11Params</a>
+, <a class="el" href="struct_epid2_params.html#ac0e0dad45b10927860cd5fa4f8101f08">Epid2Params</a>
+</li>
+<li>p_tick
+: <a class="el" href="struct_epid11_params.html#a77a8350b97a7afb584a46eb5b32f03bf">Epid11Params</a>
+</li>
+<li>prime
+: <a class="el" href="struct_epid_ca_certificate.html#a3a44e8050ca2f5085652b2b4e15b779c">EpidCaCertificate</a>
+</li>
+<li>pubkey
+: <a class="el" href="struct_epid_ca_certificate.html#a9d2fc21f46cf9fc96e2ea557b70e5356">EpidCaCertificate</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_q"></a>- q -</h3><ul>
+<li>q
+: <a class="el" href="struct_epid11_params.html#aad03fd1cc3955bb8879535fa7298123f">Epid11Params</a>
+, <a class="el" href="struct_epid2_params.html#a023603228fed2854ddae2e228938940f">Epid2Params</a>
+</li>
+<li>q_tick
+: <a class="el" href="struct_epid11_params.html#a49462f35596d07a456a731d0690fdd83">Epid11Params</a>
+</li>
+<li>qnr
+: <a class="el" href="struct_epid11_params.html#af22cfcd6c7ec0e7e7369b79554b963bd">Epid11Params</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>r
+: <a class="el" href="struct_epid_ca_certificate.html#ab9d4c318b1fc8d38d3ce53b29f2dfee2">EpidCaCertificate</a>
+</li>
+<li>R1
+: <a class="el" href="struct_pre_computed_signature.html#a72be597624957e3d668c95ff6f445f94">PreComputedSignature</a>
+</li>
+<li>R2
+: <a class="el" href="struct_pre_computed_signature.html#a79f06fb57842597372e00dd34c1a804a">PreComputedSignature</a>
+</li>
+<li>ra
+: <a class="el" href="struct_pre_computed_signature.html#a54462643b8a2b4f2741bf8d2e6909d11">PreComputedSignature</a>
+</li>
+<li>rb
+: <a class="el" href="struct_pre_computed_signature.html#a6a1db672c609943fe7af84320dc68ba3">PreComputedSignature</a>
+</li>
+<li>rf
+: <a class="el" href="struct_pre_computed_signature.html#ac244bd559a96812bcee7671abc299b66">PreComputedSignature</a>
+</li>
+<li>rl_ver
+: <a class="el" href="struct_epid11_signature.html#a43cb3ed13c862ff05a9292623ad57c5e">Epid11Signature</a>
+, <a class="el" href="struct_epid_signature.html#a4155f3f4f1223fc4ae50c94f5305def1">EpidSignature</a>
+</li>
+<li>rx
+: <a class="el" href="struct_pre_computed_signature.html#acd0674d5b5e96244645e9abef7bdbddc">PreComputedSignature</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>s
+: <a class="el" href="struct_join_request.html#a73bf8989df5f90eb3d06e7a42ad74d1d">JoinRequest</a>
+</li>
+<li>sa
+: <a class="el" href="struct_basic_signature.html#a69115a4776d15b48411dd6c3a76d0f3d">BasicSignature</a>
+, <a class="el" href="struct_epid11_basic_signature.html#aeb221cf52bc2b1a9bf6e0a9779bfd20f">Epid11BasicSignature</a>
+</li>
+<li>salpha
+: <a class="el" href="struct_epid11_basic_signature.html#a1a73fc922f69e2499643dd4c53d0d42d">Epid11BasicSignature</a>
+</li>
+<li>sb
+: <a class="el" href="struct_basic_signature.html#a91daebc5b577688afeed2a7ee7913245">BasicSignature</a>
+, <a class="el" href="struct_epid11_basic_signature.html#a29a700f3bec251600e18b2292081df4b">Epid11BasicSignature</a>
+</li>
+<li>sbeta
+: <a class="el" href="struct_epid11_basic_signature.html#afe28bad6328f81e6f7af011cc96ac2e5">Epid11BasicSignature</a>
+</li>
+<li>seed
+: <a class="el" href="struct_compressed_priv_key.html#a54b9af7699f517bbaef3d52d03e3fed8">CompressedPrivKey</a>
+</li>
+<li>sf
+: <a class="el" href="struct_basic_signature.html#a79d8dec8c5da176e497abf22e4c43adb">BasicSignature</a>
+, <a class="el" href="struct_epid11_basic_signature.html#ae17b45194997a6fa13c6014a51ec711c">Epid11BasicSignature</a>
+</li>
+<li>sigma
+: <a class="el" href="struct_epid11_signature.html#abf24a8df563ba3f535486d8dad7384f4">Epid11Signature</a>
+, <a class="el" href="struct_epid_signature.html#a89d2e38223944310b6eeeadf6061a2dd">EpidSignature</a>
+</li>
+<li>sigma0
+: <a class="el" href="struct_epid11_signature.html#a48526e73f02ad3f1544c4c71c481f153">Epid11Signature</a>
+, <a class="el" href="struct_epid_signature.html#ab0fe5f98bff737fcfbfe0b4d658e83f2">EpidSignature</a>
+</li>
+<li>signature
+: <a class="el" href="struct_epid_ca_certificate.html#a2f8f09ae02919c379c38386668b47418">EpidCaCertificate</a>
+</li>
+<li>smu
+: <a class="el" href="struct_epid11_nr_proof.html#a1ad7fe6b32c09f2504ee49731c0ad145">Epid11NrProof</a>
+, <a class="el" href="struct_nr_proof.html#a717ec36a6c91acd01d9b642bb20fc178">NrProof</a>
+</li>
+<li>snu
+: <a class="el" href="struct_epid11_nr_proof.html#aa8406e938b2f87bded9e374e93a8ee5d">Epid11NrProof</a>
+, <a class="el" href="struct_nr_proof.html#ae2e9f22089793a4d44a0f7f5cdb78a0c">NrProof</a>
+</li>
+<li>sx
+: <a class="el" href="struct_basic_signature.html#a0e8ea6a2cd3af10e9b59d96d7d06bc69">BasicSignature</a>
+, <a class="el" href="struct_epid11_basic_signature.html#a2718346665210b7e26521bf4a15cb3bd">Epid11BasicSignature</a>
+</li>
+<li>sy
+: <a class="el" href="struct_epid11_basic_signature.html#a911441845fc9b82d514133371b5ba87c">Epid11BasicSignature</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>T
+: <a class="el" href="struct_basic_signature.html#a730f74d85cfb4fa4089d43c87b97a624">BasicSignature</a>
+, <a class="el" href="struct_epid11_nr_proof.html#a5ad9ba3bfac4eac37fd4a4e33ea65ddc">Epid11NrProof</a>
+</li>
+<li>t
+: <a class="el" href="struct_epid2_params.html#a200a0cba1c9e4ad512bece23f2461a5f">Epid2Params</a>
+</li>
+<li>T
+: <a class="el" href="struct_nr_proof.html#ace535065bbf96502b893ac677dc8dcd3">NrProof</a>
+, <a class="el" href="struct_pre_computed_signature.html#a73471643dc757115701833ca2e831a72">PreComputedSignature</a>
+</li>
+<li>T1
+: <a class="el" href="struct_epid11_basic_signature.html#a58b058a9c5119a240177acfade328b3b">Epid11BasicSignature</a>
+</li>
+<li>T2
+: <a class="el" href="struct_epid11_basic_signature.html#a267cf4e17d10584736b0c38f3668d822">Epid11BasicSignature</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>version
+: <a class="el" href="struct_epid11_group_rl.html#a63afa9863e8dcb63ff884e6e4093c481">Epid11GroupRl</a>
+, <a class="el" href="struct_epid11_priv_rl.html#a2b3899f5a35bf64f860d6d91bccb03c8">Epid11PrivRl</a>
+, <a class="el" href="struct_epid11_sig_rl.html#aa38674729293f4879ff94328dd3c59b1">Epid11SigRl</a>
+, <a class="el" href="struct_group_rl.html#a69c41d99cdfc5b6ece7442f466f7ec3f">GroupRl</a>
+, <a class="el" href="struct_priv_rl.html#a4c6b51cec760f7e81ca8635422ac6a50">PrivRl</a>
+, <a class="el" href="struct_sig_rl.html#ac9d4c343c539dba799e1f42eb38b351f">SigRl</a>
+, <a class="el" href="struct_verifier_rl.html#afa44ab69ffff5a3508366aeb2131fdaa">VerifierRl</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>w
+: <a class="el" href="struct_epid11_group_pub_key.html#a056c7138246e2bdcd47eaad501b756bb">Epid11GroupPubKey</a>
+, <a class="el" href="struct_group_pub_key.html#a86be439104fb60b324784baf24a943f9">GroupPubKey</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>x
+: <a class="el" href="struct_ecdsa_public_key.html#a37c51614faf022eec491b4de8f3a13e1">EcdsaPublicKey</a>
+, <a class="el" href="struct_ecdsa_signature.html#a64b623605a55a267a36df18f29142d0d">EcdsaSignature</a>
+, <a class="el" href="struct_epid11_g2_elem_str.html#af28558484298f4f56377ededf57a4a04">Epid11G2ElemStr</a>
+, <a class="el" href="struct_epid_ca_certificate.html#a4f77996f90ed7da1d0503c4236b2c9d1">EpidCaCertificate</a>
+, <a class="el" href="struct_g1_elem_str.html#a3b0e658d6e5697763ad9c633c11d4ec4">G1ElemStr</a>
+, <a class="el" href="struct_g2_elem_str.html#a145ec5b20a6f4f00b080e11c8680afc3">G2ElemStr</a>
+, <a class="el" href="struct_gt_elem_str.html#aeaeb0e9e1c6efd378a475eb9a6c42132">GtElemStr</a>
+, <a class="el" href="struct_membership_credential.html#a2c5c0d22999d6917fea5ad6618883bcf">MembershipCredential</a>
+, <a class="el" href="struct_priv_key.html#aa805f9e124f05bdb733c85cb93614cbd">PrivKey</a>
+</li>
+<li>xi
+: <a class="el" href="struct_epid2_params.html#ae1d8f5d6036a82064e91bc137b278e74">Epid2Params</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
+<li>y
+: <a class="el" href="struct_ecdsa_public_key.html#a4503c4613386cbc78add1dc245c99284">EcdsaPublicKey</a>
+, <a class="el" href="struct_ecdsa_signature.html#a2efd6bf37b12f35135bf325fa491b029">EcdsaSignature</a>
+, <a class="el" href="struct_epid11_g2_elem_str.html#a9e8984e479bcbe8bd36c65e80c340032">Epid11G2ElemStr</a>
+, <a class="el" href="struct_epid_ca_certificate.html#abd69cce8d5e3940787ee0d17f72184ab">EpidCaCertificate</a>
+, <a class="el" href="struct_g1_elem_str.html#a8f2455ca314e885ea180dadf84bf27c3">G1ElemStr</a>
+, <a class="el" href="struct_g2_elem_str.html#a43141b2458aecceed8ee2748270f7908">G2ElemStr</a>
+</li>
+</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
diff --git a/doc/html/functions_b.html b/doc/html/functions_b.html
deleted file mode 100644
index a2e5748..0000000
--- a/doc/html/functions_b.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_b.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
-<li>B
-: <a class="el" href="struct_basic_signature.html#ae90cb6af66b010ae39913f033c1e65ac">BasicSignature</a>
-, <a class="el" href="struct_commit_values.html#abc97167d51a8d0669da9a8d97353db4d">CommitValues</a>
-</li>
-<li>b
-: <a class="el" href="struct_epid2_params.html#a2f868edb49be49f645101ef5ebbbc551">Epid2Params</a>
-, <a class="el" href="struct_epid_ca_certificate.html#a280e0b0238cf45834c21849ab8a7e124">EpidCaCertificate</a>
-, <a class="el" href="struct_nr_verify_commit_values.html#af4773d71220b730b6108b198640cfef6">NrVerifyCommitValues</a>
-, <a class="el" href="struct_pre_computed_signature.html#a666710432d9d54ca896647a976892c4f">PreComputedSignature</a>
-</li>
-<li>B
-: <a class="el" href="struct_pre_computed_signature.html#a9cc2eb61572a1aca9e6bc3d5e6f4c1fe">PreComputedSignature</a>
-</li>
-<li>b
-: <a class="el" href="struct_sig_rl_entry.html#ac6a47ff0d1b8ea1512e0ff14983ac5ce">SigRlEntry</a>
-</li>
-<li>B
-: <a class="el" href="struct_verifier_rl.html#a5d9a9265fffa96fd5f9260543eb08c68">VerifierRl</a>
-</li>
-<li>beta
-: <a class="el" href="struct_epid2_params.html#ac2d7507c6f58c3451beacacb91b52695">Epid2Params</a>
-</li>
-<li>bk
-: <a class="el" href="struct_sig_rl.html#ac23a919993d99d24a5150302f1778102">SigRl</a>
-</li>
-<li>bp
-: <a class="el" href="struct_nr_verify_commit_values.html#a6f6f9cd6d4ce1a2625276c3ebf09663a">NrVerifyCommitValues</a>
-</li>
-<li>buf
-: <a class="el" href="struct_stack.html#a41da8a13c8a2dc6d4b957864822a1e4b">Stack</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_c.html b/doc/html/functions_c.html
deleted file mode 100644
index e373d8a..0000000
--- a/doc/html/functions_c.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_c.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
-<li>c
-: <a class="el" href="struct_basic_signature.html#a4daa94db5068db3f10960f3dd178d603">BasicSignature</a>
-, <a class="el" href="struct_join_request.html#a55e30a274e83b808db6fbab5ae6c6cb8">JoinRequest</a>
-, <a class="el" href="struct_nr_proof.html#a0de1aa69acf3d93da34cf4a613b359a1">NrProof</a>
-</li>
-<li>commit_values
-: <a class="el" href="struct_member_ctx.html#ab85e4325ad7e8e20c58fb93093f119ed">MemberCtx</a>
-, <a class="el" href="struct_verifier_ctx.html#a2b1bd7f1a90a8effc0f79c008cb3d31a">VerifierCtx</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_d.html b/doc/html/functions_d.html
deleted file mode 100644
index 48a9295..0000000
--- a/doc/html/functions_d.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_d.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
-<li>data
-: <a class="el" href="struct_big_num_str.html#a442dcf33889b4f85c5b1228d2c8e6838">BigNumStr</a>
-, <a class="el" href="struct_ecdsa_private_key.html#a97efee9b4079f95d94a104f9a6d8c96d">EcdsaPrivateKey</a>
-, <a class="el" href="struct_fp_elem_str.html#a5ddb96a5567750f2834335851c906c45">FpElemStr</a>
-, <a class="el" href="struct_fq_elem_str.html#aac1a876b51a8d2c6d1510e4df2fd3f14">FqElemStr</a>
-, <a class="el" href="struct_oct_str128.html#a7482aa9b0b580fdd50bd65419d52d4b9">OctStr128</a>
-, <a class="el" href="struct_oct_str16.html#a86ed6671693a3f60ec4ff7de2c1206c3">OctStr16</a>
-, <a class="el" href="struct_oct_str256.html#a359781bb84f5717a16094583a00ef14e">OctStr256</a>
-, <a class="el" href="struct_oct_str32.html#a5588a7e70f3d73f6ce58b567a9f5c5c8">OctStr32</a>
-, <a class="el" href="struct_oct_str512.html#abd4d1b97fe49321571da86de1aeac653">OctStr512</a>
-, <a class="el" href="struct_oct_str64.html#a0e107d78192a5ae0b48ed9e5c4eab0fc">OctStr64</a>
-, <a class="el" href="struct_oct_str8.html#a5e6c56fda48c88b419e621b464b03bef">OctStr8</a>
-, <a class="el" href="struct_sha256_digest.html#a4b6462ddd3f89e4c40220ceb6b1c7f28">Sha256Digest</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_e.html b/doc/html/functions_e.html
deleted file mode 100644
index 89b95e9..0000000
--- a/doc/html/functions_e.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_e.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
-<li>e12
-: <a class="el" href="struct_member_ctx.html#a9d5c2782a44b9d369079edba9a0b2462">MemberCtx</a>
-, <a class="el" href="struct_member_precomp.html#a55e5c4b25c8f0f426969a8d745260fe5">MemberPrecomp</a>
-, <a class="el" href="struct_verifier_ctx.html#ac40d686427ecb1d8c0ac4620dabdeb1e">VerifierCtx</a>
-, <a class="el" href="struct_verifier_precomp.html#ad1106376f12772942af0331eb74de6e5">VerifierPrecomp</a>
-</li>
-<li>e22
-: <a class="el" href="struct_member_ctx.html#a87bc05ae4afd66010ca08ac47f4c034b">MemberCtx</a>
-, <a class="el" href="struct_member_precomp.html#a4e7412969bed3964f813b093b948e7b4">MemberPrecomp</a>
-, <a class="el" href="struct_verifier_ctx.html#ac9277f6b9723c2cab5edd7f872a7595d">VerifierCtx</a>
-, <a class="el" href="struct_verifier_precomp.html#af8fd90f3a5a2be932a97dcd86099d5b2">VerifierPrecomp</a>
-</li>
-<li>e2w
-: <a class="el" href="struct_member_ctx.html#a96f683c1b5c4df63274ca400d6f09832">MemberCtx</a>
-, <a class="el" href="struct_member_precomp.html#a879d5a7b0c30088b23f6e5c5fc62f834">MemberPrecomp</a>
-, <a class="el" href="struct_verifier_ctx.html#afbbf27c2f7897f64dc06a2cb4e1aa32a">VerifierCtx</a>
-, <a class="el" href="struct_verifier_precomp.html#a8caf79578e3c0baf91921460391103ca">VerifierPrecomp</a>
-</li>
-<li>ea2
-: <a class="el" href="struct_member_ctx.html#a18b7ab447a75c75a341cd3865b7e0cc8">MemberCtx</a>
-, <a class="el" href="struct_member_precomp.html#a573551f6494e372f44fd3bdf5b02aeda">MemberPrecomp</a>
-</li>
-<li>eg12
-: <a class="el" href="struct_verifier_ctx.html#ad6486d46703ff4e148cac53e8582faab">VerifierCtx</a>
-, <a class="el" href="struct_verifier_precomp.html#ab061d6cc07d1467eeb5bf25f3ea7e306">VerifierPrecomp</a>
-</li>
-<li>element_size
-: <a class="el" href="struct_stack.html#abcbae1a2f5b8f56dd4ca19c0ed0810f3">Stack</a>
-</li>
-<li>epid2_params
-: <a class="el" href="struct_member_ctx.html#a907868ed2cef684e542a0bb813d9b04c">MemberCtx</a>
-, <a class="el" href="struct_verifier_ctx.html#adeb96848d86f31447bf66c4a8dabe296">VerifierCtx</a>
-</li>
-<li>epid_version
-: <a class="el" href="struct_epid_file_header.html#a35d43c51c1739940381e4898ca87b824">EpidFileHeader</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_f.html b/doc/html/functions_f.html
deleted file mode 100644
index 72d5595..0000000
--- a/doc/html/functions_f.html
+++ /dev/null
@@ -1,100 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_f.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
-<li>F
-: <a class="el" href="struct_join_p_commit_values.html#add1f958cc9787ad84658d9973f7b7c94">JoinPCommitValues</a>
-, <a class="el" href="struct_join_request.html#a005651506fd4511e8a3537f6c3634532">JoinRequest</a>
-</li>
-<li>f
-: <a class="el" href="struct_priv_key.html#ad7ee0392a583edd2e287cf8c1f9066ba">PrivKey</a>
-, <a class="el" href="struct_priv_key__.html#a183eb6658baec9825313ab534608fa10">PrivKey_</a>
-, <a class="el" href="struct_priv_rl.html#a60d73f9ef5fc81f117b3abadf8c18466">PrivRl</a>
-</li>
-<li>file_type
-: <a class="el" href="struct_epid_file_header.html#af5d48c739cc6c00c6e1ce35abf4f1473">EpidFileHeader</a>
-</li>
-<li>Fp
-: <a class="el" href="struct_epid2_params__.html#a45d742532485af7f34d43606a3f96b5d">Epid2Params_</a>
-</li>
-<li>Fq
-: <a class="el" href="struct_epid2_params__.html#a9cd99a40a7427666ff4b940ed69f69a0">Epid2Params_</a>
-</li>
-<li>Fq2
-: <a class="el" href="struct_epid2_params__.html#aebda3f9b5ed6f015adc992216bacf29f">Epid2Params_</a>
-</li>
-<li>Fq6
-: <a class="el" href="struct_epid2_params__.html#af3e9afc48ec8274f15d10f5f991c0937">Epid2Params_</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_g.html b/doc/html/functions_g.html
deleted file mode 100644
index edb3cd4..0000000
--- a/doc/html/functions_g.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_g.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
-<li>g1
-: <a class="el" href="struct_commit_values.html#a22512a6efa7b7b0277b211be64f71c30">CommitValues</a>
-, <a class="el" href="struct_epid2_params.html#a4c5195b4fa9393a07a121336202531ad">Epid2Params</a>
-</li>
-<li>G1
-: <a class="el" href="struct_epid2_params__.html#ade20ba985bc9219832df78ee9d255ee5">Epid2Params_</a>
-</li>
-<li>g1
-: <a class="el" href="struct_epid2_params__.html#a337490f043e867b6c8d92180a9120541">Epid2Params_</a>
-, <a class="el" href="struct_join_p_commit_values.html#a9e61fb0b847e50f84fdadf25e461ca8f">JoinPCommitValues</a>
-, <a class="el" href="struct_nr_verify_commit_values.html#a46c08b69a0fb1f342b8ee4bc1d77ed7f">NrVerifyCommitValues</a>
-</li>
-<li>g2
-: <a class="el" href="struct_commit_values.html#af7022c18732bbee8c12328923a4a12a1">CommitValues</a>
-, <a class="el" href="struct_epid2_params.html#a609b0aac17fca34fe39bee29676a9618">Epid2Params</a>
-, <a class="el" href="struct_epid2_params__.html#a20dcfa40dba6679f45f1b90a91791a5c">Epid2Params_</a>
-</li>
-<li>G2
-: <a class="el" href="struct_epid2_params__.html#ae15ab066b26bbf1be8772743d604c766">Epid2Params_</a>
-</li>
-<li>g2
-: <a class="el" href="struct_join_p_commit_values.html#a29a56f9fe05b695dc13ac7d926b84975">JoinPCommitValues</a>
-</li>
-<li>gamma
-: <a class="el" href="struct_i_priv_key.html#a6d484175317aef09fb959c3ca55fc70a">IPrivKey</a>
-</li>
-<li>gid
-: <a class="el" href="struct_compressed_priv_key.html#ac6689899f1d9a6a8c5e4915563679840">CompressedPrivKey</a>
-, <a class="el" href="struct_epid_group_pub_key_certificate.html#a3ed78ceb88e3fa13b2403d48fdebd753">EpidGroupPubKeyCertificate</a>
-, <a class="el" href="struct_group_pub_key.html#ae8e77ab4d5eb3c8e566c24a64cce56ee">GroupPubKey</a>
-, <a class="el" href="struct_group_pub_key__.html#afd2192bfd1e24c09951d9c0200a74f95">GroupPubKey_</a>
-, <a class="el" href="struct_group_rl.html#a51022e172ab8b945efc69f1e63170107">GroupRl</a>
-, <a class="el" href="struct_i_priv_key.html#ad400a4237b6d50855538fd40580eb1bb">IPrivKey</a>
-, <a class="el" href="struct_membership_credential.html#afbff64ec55888c7e2a658eabb5e16671">MembershipCredential</a>
-, <a class="el" href="struct_priv_key.html#ab416dcb4366427c24b44c2a02e4ae7c8">PrivKey</a>
-, <a class="el" href="struct_priv_key__.html#a0892f451bb967dd7c99fe1d926d5056f">PrivKey_</a>
-, <a class="el" href="struct_priv_rl.html#af7317529b8e55476bd06b66ed8131d64">PrivRl</a>
-, <a class="el" href="struct_sig_rl.html#a12757d30fcccd310716433948e0b603e">SigRl</a>
-, <a class="el" href="struct_verifier_rl.html#ab85c4666d16145ff16443e84468d2d7d">VerifierRl</a>
-</li>
-<li>group_rl
-: <a class="el" href="struct_verifier_ctx.html#a5424a579436533625aa53b516b43ec94">VerifierCtx</a>
-</li>
-<li>GT
-: <a class="el" href="struct_epid2_params__.html#ac085cbd970d89fb382b621fb2884e420">Epid2Params_</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_h.html b/doc/html/functions_h.html
deleted file mode 100644
index dcb325c..0000000
--- a/doc/html/functions_h.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_h.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
-<li>h1
-: <a class="el" href="struct_commit_values.html#a42297d157420f0b554bce8a8cbe95c46">CommitValues</a>
-, <a class="el" href="struct_epid_group_pub_key_certificate.html#a79f1e0e6dd0abb47b06b7e11d7bb2c19">EpidGroupPubKeyCertificate</a>
-, <a class="el" href="struct_group_pub_key.html#a8c22c758ea186f95e3bf4b2ef8451da5">GroupPubKey</a>
-, <a class="el" href="struct_group_pub_key__.html#a2322bc1b42f85e0d01b50b15d064f840">GroupPubKey_</a>
-, <a class="el" href="struct_join_p_commit_values.html#a237b5057eece79798f17f3b0a4604024">JoinPCommitValues</a>
-</li>
-<li>h2
-: <a class="el" href="struct_commit_values.html#a4a93cb984bac3de47bb60511b382a074">CommitValues</a>
-, <a class="el" href="struct_epid_group_pub_key_certificate.html#a67d15525c455401db87a6cbabc6f2700">EpidGroupPubKeyCertificate</a>
-, <a class="el" href="struct_group_pub_key.html#a2a4320ec99fd1a15df412fbf2a8d49f1">GroupPubKey</a>
-, <a class="el" href="struct_group_pub_key__.html#a4d95b831d9a66071092678547df921ae">GroupPubKey_</a>
-, <a class="el" href="struct_join_p_commit_values.html#a173606388fab3698177b71b58969fa76">JoinPCommitValues</a>
-</li>
-<li>hash_alg
-: <a class="el" href="struct_member_ctx.html#a590ef513bda4c468a461de84d4385990">MemberCtx</a>
-, <a class="el" href="struct_verifier_ctx.html#a2a13a21ed54acd9fd26bd4a9221a4eb7">VerifierCtx</a>
-</li>
-<li>header
-: <a class="el" href="struct_epid_ca_certificate.html#ac03cf7257c52ad14e3dd3201b930dd50">EpidCaCertificate</a>
-, <a class="el" href="struct_epid_group_pub_key_certificate.html#a705c109c7023bf179c38157ebe4c7436">EpidGroupPubKeyCertificate</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_n.html b/doc/html/functions_n.html
deleted file mode 100644
index 23782aa..0000000
--- a/doc/html/functions_n.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_n.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
-<li>n1
-: <a class="el" href="struct_priv_rl.html#a6da9639ec4061689d1c30a58e0befd14">PrivRl</a>
-</li>
-<li>n2
-: <a class="el" href="struct_epid_signature.html#a62a6b0ffcd5f68dd3d2786a58fe43017">EpidSignature</a>
-, <a class="el" href="struct_sig_rl.html#a9dfb6b508db9051f4dc480a51d702af2">SigRl</a>
-</li>
-<li>n3
-: <a class="el" href="struct_group_rl.html#a9067f01c63cdefbc8e23c3cf67a10172">GroupRl</a>
-</li>
-<li>n4
-: <a class="el" href="struct_verifier_rl.html#a1e3f84b873bccc0c882aa6432c42d2f7">VerifierRl</a>
-</li>
-<li>name
-: <a class="el" href="struct_allowed_basename.html#addc76fe7f064b1d18edcb0a34a878db2">AllowedBasename</a>
-</li>
-<li>neg
-: <a class="el" href="struct_epid2_params.html#af23f07fb0e1745c0ad14aceeaa946928">Epid2Params</a>
-, <a class="el" href="struct_epid2_params__.html#a1e50604a1739e48e8588d666d33d03ef">Epid2Params_</a>
-</li>
-<li>next
-: <a class="el" href="struct_allowed_basename.html#affc96b4ca9846cee782c3316818d3ae1">AllowedBasename</a>
-</li>
-<li>NI
-: <a class="el" href="struct_join_p_commit_values.html#a2a045f80d378b8b096d05854b0a15b17">JoinPCommitValues</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_p.html b/doc/html/functions_p.html
deleted file mode 100644
index 8355af1..0000000
--- a/doc/html/functions_p.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_p.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
-<li>p
-: <a class="el" href="struct_commit_values.html#af5bf0f288e76f28ce54fe2df813881ef">CommitValues</a>
-, <a class="el" href="struct_epid2_params.html#ac0e0dad45b10927860cd5fa4f8101f08">Epid2Params</a>
-, <a class="el" href="struct_epid2_params__.html#ad90e9f295e28d3f93852e87e97640e76">Epid2Params_</a>
-, <a class="el" href="struct_join_p_commit_values.html#af5e8b7bc6e080d712470c9bad1b5e48c">JoinPCommitValues</a>
-, <a class="el" href="struct_nr_verify_commit_values.html#a00d147a62b1ba82f168df73245230bab">NrVerifyCommitValues</a>
-</li>
-<li>pairing_state
-: <a class="el" href="struct_epid2_params__.html#a74aa52f336a194b20627f8a540196dd5">Epid2Params_</a>
-</li>
-<li>presigs
-: <a class="el" href="struct_member_ctx.html#ac2f16d027485dbb10f71e835e3a25799">MemberCtx</a>
-</li>
-<li>prime
-: <a class="el" href="struct_epid_ca_certificate.html#a3a44e8050ca2f5085652b2b4e15b779c">EpidCaCertificate</a>
-</li>
-<li>priv_key
-: <a class="el" href="struct_member_ctx.html#af645f48f24ae31ce9ef9992617e5d6db">MemberCtx</a>
-</li>
-<li>priv_rl
-: <a class="el" href="struct_verifier_ctx.html#a630740c525aa9ee808c6a59c2ce15db3">VerifierCtx</a>
-</li>
-<li>pub_key
-: <a class="el" href="struct_member_ctx.html#a2eff58d4b2eaf1bd5f86ad85ffbcf99e">MemberCtx</a>
-, <a class="el" href="struct_verifier_ctx.html#a8e4846973639e85dee44c643802aa51c">VerifierCtx</a>
-</li>
-<li>pubkey
-: <a class="el" href="struct_epid_ca_certificate.html#a9d2fc21f46cf9fc96e2ea557b70e5356">EpidCaCertificate</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_r.html b/doc/html/functions_r.html
deleted file mode 100644
index 313ae27..0000000
--- a/doc/html/functions_r.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_r.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>r
-: <a class="el" href="struct_epid_ca_certificate.html#ab9d4c318b1fc8d38d3ce53b29f2dfee2">EpidCaCertificate</a>
-</li>
-<li>R
-: <a class="el" href="struct_join_p_commit_values.html#ab5bb16513636868f9d87019aa67051b9">JoinPCommitValues</a>
-</li>
-<li>R1
-: <a class="el" href="struct_commit_values.html#a00f7731d75085be08f171771c8f43d30">CommitValues</a>
-</li>
-<li>r1
-: <a class="el" href="struct_nr_verify_commit_values.html#ac28b67d09aff827d88d73a9b382b8781">NrVerifyCommitValues</a>
-</li>
-<li>R1
-: <a class="el" href="struct_pre_computed_signature.html#a72be597624957e3d668c95ff6f445f94">PreComputedSignature</a>
-</li>
-<li>R2
-: <a class="el" href="struct_commit_values.html#acb0d12e761fadb149924cdf21290b9bf">CommitValues</a>
-</li>
-<li>r2
-: <a class="el" href="struct_nr_verify_commit_values.html#adfb4fa346d6be553671fc6346fc74c83">NrVerifyCommitValues</a>
-</li>
-<li>R2
-: <a class="el" href="struct_pre_computed_signature.html#a79f06fb57842597372e00dd34c1a804a">PreComputedSignature</a>
-</li>
-<li>ra
-: <a class="el" href="struct_pre_computed_signature.html#a54462643b8a2b4f2741bf8d2e6909d11">PreComputedSignature</a>
-</li>
-<li>rb
-: <a class="el" href="struct_pre_computed_signature.html#a6a1db672c609943fe7af84320dc68ba3">PreComputedSignature</a>
-</li>
-<li>rf
-: <a class="el" href="struct_pre_computed_signature.html#ac244bd559a96812bcee7671abc299b66">PreComputedSignature</a>
-</li>
-<li>rl_ver
-: <a class="el" href="struct_epid_signature.html#a4155f3f4f1223fc4ae50c94f5305def1">EpidSignature</a>
-</li>
-<li>rnd_func
-: <a class="el" href="struct_member_ctx.html#a91a1750c59cd25d31fc07709b1da65af">MemberCtx</a>
-</li>
-<li>rnd_param
-: <a class="el" href="struct_member_ctx.html#a91619280f591f192761ceaae2f75261c">MemberCtx</a>
-</li>
-<li>rx
-: <a class="el" href="struct_pre_computed_signature.html#acd0674d5b5e96244645e9abef7bdbddc">PreComputedSignature</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_s.html b/doc/html/functions_s.html
deleted file mode 100644
index 671de83..0000000
--- a/doc/html/functions_s.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_s.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>s
-: <a class="el" href="struct_join_request.html#a73bf8989df5f90eb3d06e7a42ad74d1d">JoinRequest</a>
-</li>
-<li>sa
-: <a class="el" href="struct_basic_signature.html#a69115a4776d15b48411dd6c3a76d0f3d">BasicSignature</a>
-</li>
-<li>sb
-: <a class="el" href="struct_basic_signature.html#a91daebc5b577688afeed2a7ee7913245">BasicSignature</a>
-</li>
-<li>seed
-: <a class="el" href="struct_compressed_priv_key.html#a54b9af7699f517bbaef3d52d03e3fed8">CompressedPrivKey</a>
-</li>
-<li>sf
-: <a class="el" href="struct_basic_signature.html#a79d8dec8c5da176e497abf22e4c43adb">BasicSignature</a>
-</li>
-<li>sig_rl
-: <a class="el" href="struct_verifier_ctx.html#a71fe864652cd3cf986dcd92c97edc52e">VerifierCtx</a>
-</li>
-<li>sigma
-: <a class="el" href="struct_epid_signature.html#a89d2e38223944310b6eeeadf6061a2dd">EpidSignature</a>
-</li>
-<li>sigma0
-: <a class="el" href="struct_epid_signature.html#ab0fe5f98bff737fcfbfe0b4d658e83f2">EpidSignature</a>
-</li>
-<li>signature
-: <a class="el" href="struct_epid_ca_certificate.html#a2f8f09ae02919c379c38386668b47418">EpidCaCertificate</a>
-, <a class="el" href="struct_epid_group_pub_key_certificate.html#a118c43bee82e3cbb13add3d97f0a6a7d">EpidGroupPubKeyCertificate</a>
-</li>
-<li>smu
-: <a class="el" href="struct_nr_proof.html#a717ec36a6c91acd01d9b642bb20fc178">NrProof</a>
-</li>
-<li>snu
-: <a class="el" href="struct_nr_proof.html#ae2e9f22089793a4d44a0f7f5cdb78a0c">NrProof</a>
-</li>
-<li>sx
-: <a class="el" href="struct_basic_signature.html#a0e8ea6a2cd3af10e9b59d96d7d06bc69">BasicSignature</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_t.html b/doc/html/functions_t.html
deleted file mode 100644
index d845079..0000000
--- a/doc/html/functions_t.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_t.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
-<li>T
-: <a class="el" href="struct_basic_signature.html#a730f74d85cfb4fa4089d43c87b97a624">BasicSignature</a>
-, <a class="el" href="struct_commit_values.html#ab2da47fe5c28b4202658c5ad3523ea1a">CommitValues</a>
-</li>
-<li>t
-: <a class="el" href="struct_epid2_params.html#a200a0cba1c9e4ad512bece23f2461a5f">Epid2Params</a>
-, <a class="el" href="struct_epid2_params__.html#a4bca3d05a46b1325ac2490ebeb460543">Epid2Params_</a>
-</li>
-<li>T
-: <a class="el" href="struct_nr_proof.html#ace535065bbf96502b893ac677dc8dcd3">NrProof</a>
-</li>
-<li>t
-: <a class="el" href="struct_nr_verify_commit_values.html#a64ef396e14aa573fda80a44532421a2f">NrVerifyCommitValues</a>
-</li>
-<li>T
-: <a class="el" href="struct_pre_computed_signature.html#a73471643dc757115701833ca2e831a72">PreComputedSignature</a>
-</li>
-<li>text
-: <a class="el" href="struct_error_text_entry.html#aa6b2528ee3cd37397a9ce382284cd01a">ErrorTextEntry</a>
-</li>
-<li>top
-: <a class="el" href="struct_stack.html#a0adc2afde769affc767fa708ac378880">Stack</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_v.html b/doc/html/functions_v.html
deleted file mode 100644
index 5903919..0000000
--- a/doc/html/functions_v.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_v.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
-<li>value
-: <a class="el" href="struct_error_text_entry.html#a8bbdabb59eded9b6206ea17b5cb04648">ErrorTextEntry</a>
-</li>
-<li>verifier_rl
-: <a class="el" href="struct_verifier_ctx.html#aed00ae85eaae4a5c12e4254a956ddab4">VerifierCtx</a>
-</li>
-<li>version
-: <a class="el" href="struct_group_rl.html#a69c41d99cdfc5b6ece7442f466f7ec3f">GroupRl</a>
-, <a class="el" href="struct_priv_rl.html#a4c6b51cec760f7e81ca8635422ac6a50">PrivRl</a>
-, <a class="el" href="struct_sig_rl.html#ac9d4c343c539dba799e1f42eb38b351f">SigRl</a>
-, <a class="el" href="struct_verifier_rl.html#afa44ab69ffff5a3508366aeb2131fdaa">VerifierRl</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html
index 445df8d..056b9bc 100644
--- a/doc/html/functions_vars.html
+++ b/doc/html/functions_vars.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -61,9 +61,12 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
<li>a
-: <a class="el" href="struct_epid_ca_certificate.html#a2811c1914ffae913820f13da914c8f01">EpidCaCertificate</a>
+: <a class="el" href="struct_epid11_gt_elem_str.html#aed8dd86f1696c2f3537154fc904bf2b0">Epid11GtElemStr</a>
+, <a class="el" href="struct_epid11_params.html#a01381f84b2d747b6273e21c71c58a1b0">Epid11Params</a>
+, <a class="el" href="struct_epid_ca_certificate.html#a2811c1914ffae913820f13da914c8f01">EpidCaCertificate</a>
, <a class="el" href="struct_fq12_elem_str.html#a0520947335aaf52de90af1dec5bdd112">Fq12ElemStr</a>
, <a class="el" href="struct_fq2_elem_str.html#ab1d253eb24ba30eaf516ac429daab915">Fq2ElemStr</a>
+, <a class="el" href="struct_fq3_elem_str.html#af1be0a4d5c9c674d75bec34f95e3c731">Fq3ElemStr</a>
, <a class="el" href="struct_fq6_elem_str.html#a89d656e5c815b4a2382d11ef6932a7d2">Fq6ElemStr</a>
</li>
<li>A
@@ -74,15 +77,424 @@ $(document).ready(function(){initNavTree('functions_vars.html','');});
</li>
<li>A
: <a class="el" href="struct_priv_key.html#a266c7e369b8b868ef5755e9cd3c0c849">PrivKey</a>
-, <a class="el" href="struct_priv_key__.html#aaf02af1379a0801f49a3f8845e7a1b1f">PrivKey_</a>
</li>
-<li>allowed_basenames
-: <a class="el" href="struct_member_ctx.html#acd3f0e198a1a462d5cee67341e006fe6">MemberCtx</a>
+<li>a_tick
+: <a class="el" href="struct_epid11_params.html#ae8770bb921aac9214ff8c45c41dbb228">Epid11Params</a>
</li>
<li>ax
: <a class="el" href="struct_compressed_priv_key.html#a0b0535f0567eb0e48f799d27991d0f66">CompressedPrivKey</a>
</li>
</ul>
+
+
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>B
+: <a class="el" href="struct_basic_signature.html#ae90cb6af66b010ae39913f033c1e65ac">BasicSignature</a>
+, <a class="el" href="struct_epid11_basic_signature.html#a27fd7ae99d1ada652e21e7508a467c0b">Epid11BasicSignature</a>
+</li>
+<li>b
+: <a class="el" href="struct_epid11_params.html#a27b45ed7771a3024d1d059b4b4ff6eae">Epid11Params</a>
+, <a class="el" href="struct_epid11_sig_rl_entry.html#abe47cfbd00684941f93a211417bedf0c">Epid11SigRlEntry</a>
+, <a class="el" href="struct_epid2_params.html#a2f868edb49be49f645101ef5ebbbc551">Epid2Params</a>
+, <a class="el" href="struct_epid_ca_certificate.html#a280e0b0238cf45834c21849ab8a7e124">EpidCaCertificate</a>
+, <a class="el" href="struct_pre_computed_signature.html#a666710432d9d54ca896647a976892c4f">PreComputedSignature</a>
+</li>
+<li>B
+: <a class="el" href="struct_pre_computed_signature.html#a9cc2eb61572a1aca9e6bc3d5e6f4c1fe">PreComputedSignature</a>
+</li>
+<li>b
+: <a class="el" href="struct_sig_rl_entry.html#ac6a47ff0d1b8ea1512e0ff14983ac5ce">SigRlEntry</a>
+</li>
+<li>B
+: <a class="el" href="struct_verifier_rl.html#a5d9a9265fffa96fd5f9260543eb08c68">VerifierRl</a>
+</li>
+<li>b_tick
+: <a class="el" href="struct_epid11_params.html#ade3f88ce73d7de656ec67d9fdb0719d7">Epid11Params</a>
+</li>
+<li>beta
+: <a class="el" href="struct_epid2_params.html#ac2d7507c6f58c3451beacacb91b52695">Epid2Params</a>
+</li>
+<li>bk
+: <a class="el" href="struct_epid11_sig_rl.html#a6473f8a98f76c9f82183041ea5ae17e3">Epid11SigRl</a>
+, <a class="el" href="struct_sig_rl.html#ac23a919993d99d24a5150302f1778102">SigRl</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
+<li>c
+: <a class="el" href="struct_basic_signature.html#a4daa94db5068db3f10960f3dd178d603">BasicSignature</a>
+, <a class="el" href="struct_epid11_basic_signature.html#a9cc6efcd3d7270022779bd16776168ed">Epid11BasicSignature</a>
+, <a class="el" href="struct_epid11_nr_proof.html#a2e5ee8dc25d296538dce935397a93d68">Epid11NrProof</a>
+, <a class="el" href="struct_join_request.html#a55e30a274e83b808db6fbab5ae6c6cb8">JoinRequest</a>
+, <a class="el" href="struct_nr_proof.html#a0de1aa69acf3d93da34cf4a613b359a1">NrProof</a>
+</li>
+<li>coeff
+: <a class="el" href="struct_epid11_params.html#aacc39ebe0cc625321039ffb6be0b0e87">Epid11Params</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>data
+: <a class="el" href="struct_big_num_str.html#a442dcf33889b4f85c5b1228d2c8e6838">BigNumStr</a>
+, <a class="el" href="struct_ecdsa_private_key.html#a97efee9b4079f95d94a104f9a6d8c96d">EcdsaPrivateKey</a>
+, <a class="el" href="struct_fp_elem_str.html#a5ddb96a5567750f2834335851c906c45">FpElemStr</a>
+, <a class="el" href="struct_fq_elem_str.html#aac1a876b51a8d2c6d1510e4df2fd3f14">FqElemStr</a>
+, <a class="el" href="struct_oct_str128.html#a7482aa9b0b580fdd50bd65419d52d4b9">OctStr128</a>
+, <a class="el" href="struct_oct_str16.html#a86ed6671693a3f60ec4ff7de2c1206c3">OctStr16</a>
+, <a class="el" href="struct_oct_str256.html#a359781bb84f5717a16094583a00ef14e">OctStr256</a>
+, <a class="el" href="struct_oct_str32.html#a5588a7e70f3d73f6ce58b567a9f5c5c8">OctStr32</a>
+, <a class="el" href="struct_oct_str512.html#abd4d1b97fe49321571da86de1aeac653">OctStr512</a>
+, <a class="el" href="struct_oct_str600.html#a06d53af92a06e1decc6062fd16c43a59">OctStr600</a>
+, <a class="el" href="struct_oct_str64.html#a0e107d78192a5ae0b48ed9e5c4eab0fc">OctStr64</a>
+, <a class="el" href="struct_oct_str768.html#ae45eea89259bd22e60a8d960063921cc">OctStr768</a>
+, <a class="el" href="struct_oct_str80.html#af80e2b81554109d9a41c5e771aceb8c9">OctStr80</a>
+, <a class="el" href="struct_oct_str8.html#a5e6c56fda48c88b419e621b464b03bef">OctStr8</a>
+, <a class="el" href="struct_sha256_digest.html#a4b6462ddd3f89e4c40220ceb6b1c7f28">Sha256Digest</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>e12
+: <a class="el" href="struct_epid11_verifier_precomp.html#a0a980adb039089263ec59a995600ee91">Epid11VerifierPrecomp</a>
+, <a class="el" href="struct_member_precomp.html#a55e5c4b25c8f0f426969a8d745260fe5">MemberPrecomp</a>
+, <a class="el" href="struct_verifier_precomp.html#ad1106376f12772942af0331eb74de6e5">VerifierPrecomp</a>
+</li>
+<li>e22
+: <a class="el" href="struct_epid11_verifier_precomp.html#ad0ff2a13c2c87460296900dde72a2f30">Epid11VerifierPrecomp</a>
+, <a class="el" href="struct_member_precomp.html#a4e7412969bed3964f813b093b948e7b4">MemberPrecomp</a>
+, <a class="el" href="struct_verifier_precomp.html#af8fd90f3a5a2be932a97dcd86099d5b2">VerifierPrecomp</a>
+</li>
+<li>e2w
+: <a class="el" href="struct_epid11_verifier_precomp.html#a14ebadf105aff085edb9a817a2d1db89">Epid11VerifierPrecomp</a>
+, <a class="el" href="struct_member_precomp.html#a879d5a7b0c30088b23f6e5c5fc62f834">MemberPrecomp</a>
+, <a class="el" href="struct_verifier_precomp.html#a8caf79578e3c0baf91921460391103ca">VerifierPrecomp</a>
+</li>
+<li>ea2
+: <a class="el" href="struct_member_precomp.html#a573551f6494e372f44fd3bdf5b02aeda">MemberPrecomp</a>
+</li>
+<li>eg12
+: <a class="el" href="struct_verifier_precomp.html#ab061d6cc07d1467eeb5bf25f3ea7e306">VerifierPrecomp</a>
+</li>
+<li>epid_version
+: <a class="el" href="struct_epid_file_header.html#a35d43c51c1739940381e4898ca87b824">EpidFileHeader</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>f
+: <a class="el" href="struct_epid11_priv_rl.html#abbb75fee81aecb2dde7e2daab895ad3b">Epid11PrivRl</a>
+</li>
+<li>F
+: <a class="el" href="struct_join_request.html#a005651506fd4511e8a3537f6c3634532">JoinRequest</a>
+</li>
+<li>f
+: <a class="el" href="struct_priv_key.html#ad7ee0392a583edd2e287cf8c1f9066ba">PrivKey</a>
+, <a class="el" href="struct_priv_rl.html#a60d73f9ef5fc81f117b3abadf8c18466">PrivRl</a>
+</li>
+<li>file_type
+: <a class="el" href="struct_epid_file_header.html#af5d48c739cc6c00c6e1ce35abf4f1473">EpidFileHeader</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
+<li>g1
+: <a class="el" href="struct_epid11_params.html#a835e70da717cd5b0c94e242a6418a287">Epid11Params</a>
+, <a class="el" href="struct_epid2_params.html#a4c5195b4fa9393a07a121336202531ad">Epid2Params</a>
+</li>
+<li>g2
+: <a class="el" href="struct_epid11_params.html#a1c6bbc4e066449d9c329f88cb653ef7c">Epid11Params</a>
+, <a class="el" href="struct_epid2_params.html#a609b0aac17fca34fe39bee29676a9618">Epid2Params</a>
+</li>
+<li>g3
+: <a class="el" href="struct_epid11_params.html#a7eb9a1371d7187ae81bccfa8d5595033">Epid11Params</a>
+</li>
+<li>gamma
+: <a class="el" href="struct_i_priv_key.html#a6d484175317aef09fb959c3ca55fc70a">IPrivKey</a>
+</li>
+<li>gid
+: <a class="el" href="struct_compressed_priv_key.html#ac6689899f1d9a6a8c5e4915563679840">CompressedPrivKey</a>
+, <a class="el" href="struct_epid11_group_pub_key.html#a964344b3c595bdd585bb9b5d9d0ea762">Epid11GroupPubKey</a>
+, <a class="el" href="struct_epid11_group_rl.html#a97f165c59bc447e3ca3c2148a096710f">Epid11GroupRl</a>
+, <a class="el" href="struct_epid11_priv_rl.html#aa8945d81e30674b52a6d0900b64feb3c">Epid11PrivRl</a>
+, <a class="el" href="struct_epid11_sig_rl.html#ad45b0e3e1be59649150dd34c104000ac">Epid11SigRl</a>
+, <a class="el" href="struct_epid11_verifier_precomp.html#a03138e937f4488bdbc52ed473dc313da">Epid11VerifierPrecomp</a>
+, <a class="el" href="struct_group_pub_key.html#ae8e77ab4d5eb3c8e566c24a64cce56ee">GroupPubKey</a>
+, <a class="el" href="struct_group_rl.html#a51022e172ab8b945efc69f1e63170107">GroupRl</a>
+, <a class="el" href="struct_i_priv_key.html#ad400a4237b6d50855538fd40580eb1bb">IPrivKey</a>
+, <a class="el" href="struct_membership_credential.html#afbff64ec55888c7e2a658eabb5e16671">MembershipCredential</a>
+, <a class="el" href="struct_priv_key.html#ab416dcb4366427c24b44c2a02e4ae7c8">PrivKey</a>
+, <a class="el" href="struct_priv_rl.html#af7317529b8e55476bd06b66ed8131d64">PrivRl</a>
+, <a class="el" href="struct_sig_rl.html#a12757d30fcccd310716433948e0b603e">SigRl</a>
+, <a class="el" href="struct_verifier_precomp.html#afc3e29a325c95c62bb192d5f8cdd5c1c">VerifierPrecomp</a>
+, <a class="el" href="struct_verifier_rl.html#ab85c4666d16145ff16443e84468d2d7d">VerifierRl</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
+<li>h
+: <a class="el" href="struct_epid11_params.html#ae2d1dc635d9d7cba496c3d64fb6f9d5b">Epid11Params</a>
+</li>
+<li>h1
+: <a class="el" href="struct_epid11_group_pub_key.html#a36f688472e2655052d485eac67d8c362">Epid11GroupPubKey</a>
+, <a class="el" href="struct_group_pub_key.html#a8c22c758ea186f95e3bf4b2ef8451da5">GroupPubKey</a>
+</li>
+<li>h2
+: <a class="el" href="struct_epid11_group_pub_key.html#aa724e9d2f0cb6019c05547d76a13b72a">Epid11GroupPubKey</a>
+, <a class="el" href="struct_group_pub_key.html#a2a4320ec99fd1a15df412fbf2a8d49f1">GroupPubKey</a>
+</li>
+<li>h_tick
+: <a class="el" href="struct_epid11_params.html#a0fe238db4ebc0225899dc2dac97d11c0">Epid11Params</a>
+</li>
+<li>header
+: <a class="el" href="struct_epid_ca_certificate.html#ac03cf7257c52ad14e3dd3201b930dd50">EpidCaCertificate</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>K
+: <a class="el" href="struct_basic_signature.html#a0078cc83ecf6c7e31f96b7d44aa60e21">BasicSignature</a>
+, <a class="el" href="struct_epid11_basic_signature.html#a5882fcbfd272774e12e50a2d77f0b139">Epid11BasicSignature</a>
+</li>
+<li>k
+: <a class="el" href="struct_epid11_sig_rl_entry.html#a5de66e1352eafe95774a0d76bac8f01a">Epid11SigRlEntry</a>
+</li>
+<li>K
+: <a class="el" href="struct_pre_computed_signature.html#a2a4eaffe2717bd9c8c360599612adbe6">PreComputedSignature</a>
+</li>
+<li>k
+: <a class="el" href="struct_sig_rl_entry.html#a0dfeb058614e81878bfbf86ae3edac3c">SigRlEntry</a>
+</li>
+<li>K
+: <a class="el" href="struct_verifier_rl.html#ac7d3dceab4772096bbbeb3fa735d18a9">VerifierRl</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>n1
+: <a class="el" href="struct_epid11_priv_rl.html#ad95f880f40e2f40c723f5bdbd22ecfa2">Epid11PrivRl</a>
+, <a class="el" href="struct_priv_rl.html#a6da9639ec4061689d1c30a58e0befd14">PrivRl</a>
+</li>
+<li>n2
+: <a class="el" href="struct_epid11_signature.html#ad25c277223a5210063163ea554d08ad4">Epid11Signature</a>
+, <a class="el" href="struct_epid11_sig_rl.html#a8c654d43df132db7874f4c84c177dc12">Epid11SigRl</a>
+, <a class="el" href="struct_epid_signature.html#a62a6b0ffcd5f68dd3d2786a58fe43017">EpidSignature</a>
+, <a class="el" href="struct_sig_rl.html#a9dfb6b508db9051f4dc480a51d702af2">SigRl</a>
+</li>
+<li>n3
+: <a class="el" href="struct_epid11_group_rl.html#a35cb954f598d4006b0f047cde77010a5">Epid11GroupRl</a>
+, <a class="el" href="struct_group_rl.html#a9067f01c63cdefbc8e23c3cf67a10172">GroupRl</a>
+</li>
+<li>n4
+: <a class="el" href="struct_verifier_rl.html#a1e3f84b873bccc0c882aa6432c42d2f7">VerifierRl</a>
+</li>
+<li>nd
+: <a class="el" href="struct_epid11_basic_signature.html#af18200712d2cf3ed3ccaee328e8a4e0f">Epid11BasicSignature</a>
+</li>
+<li>neg
+: <a class="el" href="struct_epid2_params.html#af23f07fb0e1745c0ad14aceeaa946928">Epid2Params</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
+<li>orderG2
+: <a class="el" href="struct_epid11_params.html#a02bd6fa2ab256e3a07533e947ab0101e">Epid11Params</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>p
+: <a class="el" href="struct_epid11_params.html#a2aa4d8a2ebe0dfeb6d930fd7b39f9d1a">Epid11Params</a>
+, <a class="el" href="struct_epid2_params.html#ac0e0dad45b10927860cd5fa4f8101f08">Epid2Params</a>
+</li>
+<li>p_tick
+: <a class="el" href="struct_epid11_params.html#a77a8350b97a7afb584a46eb5b32f03bf">Epid11Params</a>
+</li>
+<li>prime
+: <a class="el" href="struct_epid_ca_certificate.html#a3a44e8050ca2f5085652b2b4e15b779c">EpidCaCertificate</a>
+</li>
+<li>pubkey
+: <a class="el" href="struct_epid_ca_certificate.html#a9d2fc21f46cf9fc96e2ea557b70e5356">EpidCaCertificate</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_q"></a>- q -</h3><ul>
+<li>q
+: <a class="el" href="struct_epid11_params.html#aad03fd1cc3955bb8879535fa7298123f">Epid11Params</a>
+, <a class="el" href="struct_epid2_params.html#a023603228fed2854ddae2e228938940f">Epid2Params</a>
+</li>
+<li>q_tick
+: <a class="el" href="struct_epid11_params.html#a49462f35596d07a456a731d0690fdd83">Epid11Params</a>
+</li>
+<li>qnr
+: <a class="el" href="struct_epid11_params.html#af22cfcd6c7ec0e7e7369b79554b963bd">Epid11Params</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>r
+: <a class="el" href="struct_epid_ca_certificate.html#ab9d4c318b1fc8d38d3ce53b29f2dfee2">EpidCaCertificate</a>
+</li>
+<li>R1
+: <a class="el" href="struct_pre_computed_signature.html#a72be597624957e3d668c95ff6f445f94">PreComputedSignature</a>
+</li>
+<li>R2
+: <a class="el" href="struct_pre_computed_signature.html#a79f06fb57842597372e00dd34c1a804a">PreComputedSignature</a>
+</li>
+<li>ra
+: <a class="el" href="struct_pre_computed_signature.html#a54462643b8a2b4f2741bf8d2e6909d11">PreComputedSignature</a>
+</li>
+<li>rb
+: <a class="el" href="struct_pre_computed_signature.html#a6a1db672c609943fe7af84320dc68ba3">PreComputedSignature</a>
+</li>
+<li>rf
+: <a class="el" href="struct_pre_computed_signature.html#ac244bd559a96812bcee7671abc299b66">PreComputedSignature</a>
+</li>
+<li>rl_ver
+: <a class="el" href="struct_epid11_signature.html#a43cb3ed13c862ff05a9292623ad57c5e">Epid11Signature</a>
+, <a class="el" href="struct_epid_signature.html#a4155f3f4f1223fc4ae50c94f5305def1">EpidSignature</a>
+</li>
+<li>rx
+: <a class="el" href="struct_pre_computed_signature.html#acd0674d5b5e96244645e9abef7bdbddc">PreComputedSignature</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>s
+: <a class="el" href="struct_join_request.html#a73bf8989df5f90eb3d06e7a42ad74d1d">JoinRequest</a>
+</li>
+<li>sa
+: <a class="el" href="struct_basic_signature.html#a69115a4776d15b48411dd6c3a76d0f3d">BasicSignature</a>
+, <a class="el" href="struct_epid11_basic_signature.html#aeb221cf52bc2b1a9bf6e0a9779bfd20f">Epid11BasicSignature</a>
+</li>
+<li>salpha
+: <a class="el" href="struct_epid11_basic_signature.html#a1a73fc922f69e2499643dd4c53d0d42d">Epid11BasicSignature</a>
+</li>
+<li>sb
+: <a class="el" href="struct_basic_signature.html#a91daebc5b577688afeed2a7ee7913245">BasicSignature</a>
+, <a class="el" href="struct_epid11_basic_signature.html#a29a700f3bec251600e18b2292081df4b">Epid11BasicSignature</a>
+</li>
+<li>sbeta
+: <a class="el" href="struct_epid11_basic_signature.html#afe28bad6328f81e6f7af011cc96ac2e5">Epid11BasicSignature</a>
+</li>
+<li>seed
+: <a class="el" href="struct_compressed_priv_key.html#a54b9af7699f517bbaef3d52d03e3fed8">CompressedPrivKey</a>
+</li>
+<li>sf
+: <a class="el" href="struct_basic_signature.html#a79d8dec8c5da176e497abf22e4c43adb">BasicSignature</a>
+, <a class="el" href="struct_epid11_basic_signature.html#ae17b45194997a6fa13c6014a51ec711c">Epid11BasicSignature</a>
+</li>
+<li>sigma
+: <a class="el" href="struct_epid11_signature.html#abf24a8df563ba3f535486d8dad7384f4">Epid11Signature</a>
+, <a class="el" href="struct_epid_signature.html#a89d2e38223944310b6eeeadf6061a2dd">EpidSignature</a>
+</li>
+<li>sigma0
+: <a class="el" href="struct_epid11_signature.html#a48526e73f02ad3f1544c4c71c481f153">Epid11Signature</a>
+, <a class="el" href="struct_epid_signature.html#ab0fe5f98bff737fcfbfe0b4d658e83f2">EpidSignature</a>
+</li>
+<li>signature
+: <a class="el" href="struct_epid_ca_certificate.html#a2f8f09ae02919c379c38386668b47418">EpidCaCertificate</a>
+</li>
+<li>smu
+: <a class="el" href="struct_epid11_nr_proof.html#a1ad7fe6b32c09f2504ee49731c0ad145">Epid11NrProof</a>
+, <a class="el" href="struct_nr_proof.html#a717ec36a6c91acd01d9b642bb20fc178">NrProof</a>
+</li>
+<li>snu
+: <a class="el" href="struct_epid11_nr_proof.html#aa8406e938b2f87bded9e374e93a8ee5d">Epid11NrProof</a>
+, <a class="el" href="struct_nr_proof.html#ae2e9f22089793a4d44a0f7f5cdb78a0c">NrProof</a>
+</li>
+<li>sx
+: <a class="el" href="struct_basic_signature.html#a0e8ea6a2cd3af10e9b59d96d7d06bc69">BasicSignature</a>
+, <a class="el" href="struct_epid11_basic_signature.html#a2718346665210b7e26521bf4a15cb3bd">Epid11BasicSignature</a>
+</li>
+<li>sy
+: <a class="el" href="struct_epid11_basic_signature.html#a911441845fc9b82d514133371b5ba87c">Epid11BasicSignature</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
+<li>T
+: <a class="el" href="struct_basic_signature.html#a730f74d85cfb4fa4089d43c87b97a624">BasicSignature</a>
+, <a class="el" href="struct_epid11_nr_proof.html#a5ad9ba3bfac4eac37fd4a4e33ea65ddc">Epid11NrProof</a>
+</li>
+<li>t
+: <a class="el" href="struct_epid2_params.html#a200a0cba1c9e4ad512bece23f2461a5f">Epid2Params</a>
+</li>
+<li>T
+: <a class="el" href="struct_nr_proof.html#ace535065bbf96502b893ac677dc8dcd3">NrProof</a>
+, <a class="el" href="struct_pre_computed_signature.html#a73471643dc757115701833ca2e831a72">PreComputedSignature</a>
+</li>
+<li>T1
+: <a class="el" href="struct_epid11_basic_signature.html#a58b058a9c5119a240177acfade328b3b">Epid11BasicSignature</a>
+</li>
+<li>T2
+: <a class="el" href="struct_epid11_basic_signature.html#a267cf4e17d10584736b0c38f3668d822">Epid11BasicSignature</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>version
+: <a class="el" href="struct_epid11_group_rl.html#a63afa9863e8dcb63ff884e6e4093c481">Epid11GroupRl</a>
+, <a class="el" href="struct_epid11_priv_rl.html#a2b3899f5a35bf64f860d6d91bccb03c8">Epid11PrivRl</a>
+, <a class="el" href="struct_epid11_sig_rl.html#aa38674729293f4879ff94328dd3c59b1">Epid11SigRl</a>
+, <a class="el" href="struct_group_rl.html#a69c41d99cdfc5b6ece7442f466f7ec3f">GroupRl</a>
+, <a class="el" href="struct_priv_rl.html#a4c6b51cec760f7e81ca8635422ac6a50">PrivRl</a>
+, <a class="el" href="struct_sig_rl.html#ac9d4c343c539dba799e1f42eb38b351f">SigRl</a>
+, <a class="el" href="struct_verifier_rl.html#afa44ab69ffff5a3508366aeb2131fdaa">VerifierRl</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>w
+: <a class="el" href="struct_epid11_group_pub_key.html#a056c7138246e2bdcd47eaad501b756bb">Epid11GroupPubKey</a>
+, <a class="el" href="struct_group_pub_key.html#a86be439104fb60b324784baf24a943f9">GroupPubKey</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
+<li>x
+: <a class="el" href="struct_ecdsa_public_key.html#a37c51614faf022eec491b4de8f3a13e1">EcdsaPublicKey</a>
+, <a class="el" href="struct_ecdsa_signature.html#a64b623605a55a267a36df18f29142d0d">EcdsaSignature</a>
+, <a class="el" href="struct_epid11_g2_elem_str.html#af28558484298f4f56377ededf57a4a04">Epid11G2ElemStr</a>
+, <a class="el" href="struct_epid_ca_certificate.html#a4f77996f90ed7da1d0503c4236b2c9d1">EpidCaCertificate</a>
+, <a class="el" href="struct_g1_elem_str.html#a3b0e658d6e5697763ad9c633c11d4ec4">G1ElemStr</a>
+, <a class="el" href="struct_g2_elem_str.html#a145ec5b20a6f4f00b080e11c8680afc3">G2ElemStr</a>
+, <a class="el" href="struct_gt_elem_str.html#aeaeb0e9e1c6efd378a475eb9a6c42132">GtElemStr</a>
+, <a class="el" href="struct_membership_credential.html#a2c5c0d22999d6917fea5ad6618883bcf">MembershipCredential</a>
+, <a class="el" href="struct_priv_key.html#aa805f9e124f05bdb733c85cb93614cbd">PrivKey</a>
+</li>
+<li>xi
+: <a class="el" href="struct_epid2_params.html#ae1d8f5d6036a82064e91bc137b278e74">Epid2Params</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
+<li>y
+: <a class="el" href="struct_ecdsa_public_key.html#a4503c4613386cbc78add1dc245c99284">EcdsaPublicKey</a>
+, <a class="el" href="struct_ecdsa_signature.html#a2efd6bf37b12f35135bf325fa491b029">EcdsaSignature</a>
+, <a class="el" href="struct_epid11_g2_elem_str.html#a9e8984e479bcbe8bd36c65e80c340032">Epid11G2ElemStr</a>
+, <a class="el" href="struct_epid_ca_certificate.html#abd69cce8d5e3940787ee0d17f72184ab">EpidCaCertificate</a>
+, <a class="el" href="struct_g1_elem_str.html#a8f2455ca314e885ea180dadf84bf27c3">G1ElemStr</a>
+, <a class="el" href="struct_g2_elem_str.html#a43141b2458aecceed8ee2748270f7908">G2ElemStr</a>
+</li>
+</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
diff --git a/doc/html/functions_vars_b.html b/doc/html/functions_vars_b.html
deleted file mode 100644
index d19d237..0000000
--- a/doc/html/functions_vars_b.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_b.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
-<li>B
-: <a class="el" href="struct_basic_signature.html#ae90cb6af66b010ae39913f033c1e65ac">BasicSignature</a>
-, <a class="el" href="struct_commit_values.html#abc97167d51a8d0669da9a8d97353db4d">CommitValues</a>
-</li>
-<li>b
-: <a class="el" href="struct_epid2_params.html#a2f868edb49be49f645101ef5ebbbc551">Epid2Params</a>
-, <a class="el" href="struct_epid_ca_certificate.html#a280e0b0238cf45834c21849ab8a7e124">EpidCaCertificate</a>
-, <a class="el" href="struct_nr_verify_commit_values.html#af4773d71220b730b6108b198640cfef6">NrVerifyCommitValues</a>
-, <a class="el" href="struct_pre_computed_signature.html#a666710432d9d54ca896647a976892c4f">PreComputedSignature</a>
-</li>
-<li>B
-: <a class="el" href="struct_pre_computed_signature.html#a9cc2eb61572a1aca9e6bc3d5e6f4c1fe">PreComputedSignature</a>
-</li>
-<li>b
-: <a class="el" href="struct_sig_rl_entry.html#ac6a47ff0d1b8ea1512e0ff14983ac5ce">SigRlEntry</a>
-</li>
-<li>B
-: <a class="el" href="struct_verifier_rl.html#a5d9a9265fffa96fd5f9260543eb08c68">VerifierRl</a>
-</li>
-<li>beta
-: <a class="el" href="struct_epid2_params.html#ac2d7507c6f58c3451beacacb91b52695">Epid2Params</a>
-</li>
-<li>bk
-: <a class="el" href="struct_sig_rl.html#ac23a919993d99d24a5150302f1778102">SigRl</a>
-</li>
-<li>bp
-: <a class="el" href="struct_nr_verify_commit_values.html#a6f6f9cd6d4ce1a2625276c3ebf09663a">NrVerifyCommitValues</a>
-</li>
-<li>buf
-: <a class="el" href="struct_stack.html#a41da8a13c8a2dc6d4b957864822a1e4b">Stack</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_c.html b/doc/html/functions_vars_c.html
deleted file mode 100644
index 0225552..0000000
--- a/doc/html/functions_vars_c.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_c.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
-<li>c
-: <a class="el" href="struct_basic_signature.html#a4daa94db5068db3f10960f3dd178d603">BasicSignature</a>
-, <a class="el" href="struct_join_request.html#a55e30a274e83b808db6fbab5ae6c6cb8">JoinRequest</a>
-, <a class="el" href="struct_nr_proof.html#a0de1aa69acf3d93da34cf4a613b359a1">NrProof</a>
-</li>
-<li>commit_values
-: <a class="el" href="struct_member_ctx.html#ab85e4325ad7e8e20c58fb93093f119ed">MemberCtx</a>
-, <a class="el" href="struct_verifier_ctx.html#a2b1bd7f1a90a8effc0f79c008cb3d31a">VerifierCtx</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_d.html b/doc/html/functions_vars_d.html
deleted file mode 100644
index 5887dbf..0000000
--- a/doc/html/functions_vars_d.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_d.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
-<li>data
-: <a class="el" href="struct_big_num_str.html#a442dcf33889b4f85c5b1228d2c8e6838">BigNumStr</a>
-, <a class="el" href="struct_ecdsa_private_key.html#a97efee9b4079f95d94a104f9a6d8c96d">EcdsaPrivateKey</a>
-, <a class="el" href="struct_fp_elem_str.html#a5ddb96a5567750f2834335851c906c45">FpElemStr</a>
-, <a class="el" href="struct_fq_elem_str.html#aac1a876b51a8d2c6d1510e4df2fd3f14">FqElemStr</a>
-, <a class="el" href="struct_oct_str128.html#a7482aa9b0b580fdd50bd65419d52d4b9">OctStr128</a>
-, <a class="el" href="struct_oct_str16.html#a86ed6671693a3f60ec4ff7de2c1206c3">OctStr16</a>
-, <a class="el" href="struct_oct_str256.html#a359781bb84f5717a16094583a00ef14e">OctStr256</a>
-, <a class="el" href="struct_oct_str32.html#a5588a7e70f3d73f6ce58b567a9f5c5c8">OctStr32</a>
-, <a class="el" href="struct_oct_str512.html#abd4d1b97fe49321571da86de1aeac653">OctStr512</a>
-, <a class="el" href="struct_oct_str64.html#a0e107d78192a5ae0b48ed9e5c4eab0fc">OctStr64</a>
-, <a class="el" href="struct_oct_str8.html#a5e6c56fda48c88b419e621b464b03bef">OctStr8</a>
-, <a class="el" href="struct_sha256_digest.html#a4b6462ddd3f89e4c40220ceb6b1c7f28">Sha256Digest</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_e.html b/doc/html/functions_vars_e.html
deleted file mode 100644
index 81b785f..0000000
--- a/doc/html/functions_vars_e.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_e.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
-<li>e12
-: <a class="el" href="struct_member_ctx.html#a9d5c2782a44b9d369079edba9a0b2462">MemberCtx</a>
-, <a class="el" href="struct_member_precomp.html#a55e5c4b25c8f0f426969a8d745260fe5">MemberPrecomp</a>
-, <a class="el" href="struct_verifier_ctx.html#ac40d686427ecb1d8c0ac4620dabdeb1e">VerifierCtx</a>
-, <a class="el" href="struct_verifier_precomp.html#ad1106376f12772942af0331eb74de6e5">VerifierPrecomp</a>
-</li>
-<li>e22
-: <a class="el" href="struct_member_ctx.html#a87bc05ae4afd66010ca08ac47f4c034b">MemberCtx</a>
-, <a class="el" href="struct_member_precomp.html#a4e7412969bed3964f813b093b948e7b4">MemberPrecomp</a>
-, <a class="el" href="struct_verifier_ctx.html#ac9277f6b9723c2cab5edd7f872a7595d">VerifierCtx</a>
-, <a class="el" href="struct_verifier_precomp.html#af8fd90f3a5a2be932a97dcd86099d5b2">VerifierPrecomp</a>
-</li>
-<li>e2w
-: <a class="el" href="struct_member_ctx.html#a96f683c1b5c4df63274ca400d6f09832">MemberCtx</a>
-, <a class="el" href="struct_member_precomp.html#a879d5a7b0c30088b23f6e5c5fc62f834">MemberPrecomp</a>
-, <a class="el" href="struct_verifier_ctx.html#afbbf27c2f7897f64dc06a2cb4e1aa32a">VerifierCtx</a>
-, <a class="el" href="struct_verifier_precomp.html#a8caf79578e3c0baf91921460391103ca">VerifierPrecomp</a>
-</li>
-<li>ea2
-: <a class="el" href="struct_member_ctx.html#a18b7ab447a75c75a341cd3865b7e0cc8">MemberCtx</a>
-, <a class="el" href="struct_member_precomp.html#a573551f6494e372f44fd3bdf5b02aeda">MemberPrecomp</a>
-</li>
-<li>eg12
-: <a class="el" href="struct_verifier_ctx.html#ad6486d46703ff4e148cac53e8582faab">VerifierCtx</a>
-, <a class="el" href="struct_verifier_precomp.html#ab061d6cc07d1467eeb5bf25f3ea7e306">VerifierPrecomp</a>
-</li>
-<li>element_size
-: <a class="el" href="struct_stack.html#abcbae1a2f5b8f56dd4ca19c0ed0810f3">Stack</a>
-</li>
-<li>epid2_params
-: <a class="el" href="struct_member_ctx.html#a907868ed2cef684e542a0bb813d9b04c">MemberCtx</a>
-, <a class="el" href="struct_verifier_ctx.html#adeb96848d86f31447bf66c4a8dabe296">VerifierCtx</a>
-</li>
-<li>epid_version
-: <a class="el" href="struct_epid_file_header.html#a35d43c51c1739940381e4898ca87b824">EpidFileHeader</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_f.html b/doc/html/functions_vars_f.html
deleted file mode 100644
index a9cdb55..0000000
--- a/doc/html/functions_vars_f.html
+++ /dev/null
@@ -1,100 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_f.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
-<li>F
-: <a class="el" href="struct_join_p_commit_values.html#add1f958cc9787ad84658d9973f7b7c94">JoinPCommitValues</a>
-, <a class="el" href="struct_join_request.html#a005651506fd4511e8a3537f6c3634532">JoinRequest</a>
-</li>
-<li>f
-: <a class="el" href="struct_priv_key.html#ad7ee0392a583edd2e287cf8c1f9066ba">PrivKey</a>
-, <a class="el" href="struct_priv_key__.html#a183eb6658baec9825313ab534608fa10">PrivKey_</a>
-, <a class="el" href="struct_priv_rl.html#a60d73f9ef5fc81f117b3abadf8c18466">PrivRl</a>
-</li>
-<li>file_type
-: <a class="el" href="struct_epid_file_header.html#af5d48c739cc6c00c6e1ce35abf4f1473">EpidFileHeader</a>
-</li>
-<li>Fp
-: <a class="el" href="struct_epid2_params__.html#a45d742532485af7f34d43606a3f96b5d">Epid2Params_</a>
-</li>
-<li>Fq
-: <a class="el" href="struct_epid2_params__.html#a9cd99a40a7427666ff4b940ed69f69a0">Epid2Params_</a>
-</li>
-<li>Fq2
-: <a class="el" href="struct_epid2_params__.html#aebda3f9b5ed6f015adc992216bacf29f">Epid2Params_</a>
-</li>
-<li>Fq6
-: <a class="el" href="struct_epid2_params__.html#af3e9afc48ec8274f15d10f5f991c0937">Epid2Params_</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_g.html b/doc/html/functions_vars_g.html
deleted file mode 100644
index fc37948..0000000
--- a/doc/html/functions_vars_g.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_g.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_g"></a>- g -</h3><ul>
-<li>g1
-: <a class="el" href="struct_commit_values.html#a22512a6efa7b7b0277b211be64f71c30">CommitValues</a>
-, <a class="el" href="struct_epid2_params.html#a4c5195b4fa9393a07a121336202531ad">Epid2Params</a>
-</li>
-<li>G1
-: <a class="el" href="struct_epid2_params__.html#ade20ba985bc9219832df78ee9d255ee5">Epid2Params_</a>
-</li>
-<li>g1
-: <a class="el" href="struct_epid2_params__.html#a337490f043e867b6c8d92180a9120541">Epid2Params_</a>
-, <a class="el" href="struct_join_p_commit_values.html#a9e61fb0b847e50f84fdadf25e461ca8f">JoinPCommitValues</a>
-, <a class="el" href="struct_nr_verify_commit_values.html#a46c08b69a0fb1f342b8ee4bc1d77ed7f">NrVerifyCommitValues</a>
-</li>
-<li>g2
-: <a class="el" href="struct_commit_values.html#af7022c18732bbee8c12328923a4a12a1">CommitValues</a>
-, <a class="el" href="struct_epid2_params.html#a609b0aac17fca34fe39bee29676a9618">Epid2Params</a>
-, <a class="el" href="struct_epid2_params__.html#a20dcfa40dba6679f45f1b90a91791a5c">Epid2Params_</a>
-</li>
-<li>G2
-: <a class="el" href="struct_epid2_params__.html#ae15ab066b26bbf1be8772743d604c766">Epid2Params_</a>
-</li>
-<li>g2
-: <a class="el" href="struct_join_p_commit_values.html#a29a56f9fe05b695dc13ac7d926b84975">JoinPCommitValues</a>
-</li>
-<li>gamma
-: <a class="el" href="struct_i_priv_key.html#a6d484175317aef09fb959c3ca55fc70a">IPrivKey</a>
-</li>
-<li>gid
-: <a class="el" href="struct_compressed_priv_key.html#ac6689899f1d9a6a8c5e4915563679840">CompressedPrivKey</a>
-, <a class="el" href="struct_epid_group_pub_key_certificate.html#a3ed78ceb88e3fa13b2403d48fdebd753">EpidGroupPubKeyCertificate</a>
-, <a class="el" href="struct_group_pub_key.html#ae8e77ab4d5eb3c8e566c24a64cce56ee">GroupPubKey</a>
-, <a class="el" href="struct_group_pub_key__.html#afd2192bfd1e24c09951d9c0200a74f95">GroupPubKey_</a>
-, <a class="el" href="struct_group_rl.html#a51022e172ab8b945efc69f1e63170107">GroupRl</a>
-, <a class="el" href="struct_i_priv_key.html#ad400a4237b6d50855538fd40580eb1bb">IPrivKey</a>
-, <a class="el" href="struct_membership_credential.html#afbff64ec55888c7e2a658eabb5e16671">MembershipCredential</a>
-, <a class="el" href="struct_priv_key.html#ab416dcb4366427c24b44c2a02e4ae7c8">PrivKey</a>
-, <a class="el" href="struct_priv_key__.html#a0892f451bb967dd7c99fe1d926d5056f">PrivKey_</a>
-, <a class="el" href="struct_priv_rl.html#af7317529b8e55476bd06b66ed8131d64">PrivRl</a>
-, <a class="el" href="struct_sig_rl.html#a12757d30fcccd310716433948e0b603e">SigRl</a>
-, <a class="el" href="struct_verifier_rl.html#ab85c4666d16145ff16443e84468d2d7d">VerifierRl</a>
-</li>
-<li>group_rl
-: <a class="el" href="struct_verifier_ctx.html#a5424a579436533625aa53b516b43ec94">VerifierCtx</a>
-</li>
-<li>GT
-: <a class="el" href="struct_epid2_params__.html#ac085cbd970d89fb382b621fb2884e420">Epid2Params_</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_h.html b/doc/html/functions_vars_h.html
deleted file mode 100644
index 53e982c..0000000
--- a/doc/html/functions_vars_h.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_h.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_h"></a>- h -</h3><ul>
-<li>h1
-: <a class="el" href="struct_commit_values.html#a42297d157420f0b554bce8a8cbe95c46">CommitValues</a>
-, <a class="el" href="struct_epid_group_pub_key_certificate.html#a79f1e0e6dd0abb47b06b7e11d7bb2c19">EpidGroupPubKeyCertificate</a>
-, <a class="el" href="struct_group_pub_key.html#a8c22c758ea186f95e3bf4b2ef8451da5">GroupPubKey</a>
-, <a class="el" href="struct_group_pub_key__.html#a2322bc1b42f85e0d01b50b15d064f840">GroupPubKey_</a>
-, <a class="el" href="struct_join_p_commit_values.html#a237b5057eece79798f17f3b0a4604024">JoinPCommitValues</a>
-</li>
-<li>h2
-: <a class="el" href="struct_commit_values.html#a4a93cb984bac3de47bb60511b382a074">CommitValues</a>
-, <a class="el" href="struct_epid_group_pub_key_certificate.html#a67d15525c455401db87a6cbabc6f2700">EpidGroupPubKeyCertificate</a>
-, <a class="el" href="struct_group_pub_key.html#a2a4320ec99fd1a15df412fbf2a8d49f1">GroupPubKey</a>
-, <a class="el" href="struct_group_pub_key__.html#a4d95b831d9a66071092678547df921ae">GroupPubKey_</a>
-, <a class="el" href="struct_join_p_commit_values.html#a173606388fab3698177b71b58969fa76">JoinPCommitValues</a>
-</li>
-<li>hash_alg
-: <a class="el" href="struct_member_ctx.html#a590ef513bda4c468a461de84d4385990">MemberCtx</a>
-, <a class="el" href="struct_verifier_ctx.html#a2a13a21ed54acd9fd26bd4a9221a4eb7">VerifierCtx</a>
-</li>
-<li>header
-: <a class="el" href="struct_epid_ca_certificate.html#ac03cf7257c52ad14e3dd3201b930dd50">EpidCaCertificate</a>
-, <a class="el" href="struct_epid_group_pub_key_certificate.html#a705c109c7023bf179c38157ebe4c7436">EpidGroupPubKeyCertificate</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_k.html b/doc/html/functions_vars_k.html
deleted file mode 100644
index 84e55cd..0000000
--- a/doc/html/functions_vars_k.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_k.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
-<li>K
-: <a class="el" href="struct_basic_signature.html#a0078cc83ecf6c7e31f96b7d44aa60e21">BasicSignature</a>
-, <a class="el" href="struct_commit_values.html#a49f073d0132a51020c0bfc819ec0d619">CommitValues</a>
-</li>
-<li>k
-: <a class="el" href="struct_nr_verify_commit_values.html#a316d13c42592a5cccacafb5543c74696">NrVerifyCommitValues</a>
-</li>
-<li>K
-: <a class="el" href="struct_pre_computed_signature.html#a2a4eaffe2717bd9c8c360599612adbe6">PreComputedSignature</a>
-</li>
-<li>k
-: <a class="el" href="struct_sig_rl_entry.html#a0dfeb058614e81878bfbf86ae3edac3c">SigRlEntry</a>
-</li>
-<li>K
-: <a class="el" href="struct_verifier_rl.html#ac7d3dceab4772096bbbeb3fa735d18a9">VerifierRl</a>
-</li>
-<li>kp
-: <a class="el" href="struct_nr_verify_commit_values.html#a189855b5445f5ae8a374ff78ab4b536a">NrVerifyCommitValues</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_l.html b/doc/html/functions_vars_l.html
deleted file mode 100644
index b5eef3e..0000000
--- a/doc/html/functions_vars_l.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_l.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
-<li>length
-: <a class="el" href="struct_allowed_basename.html#a15d6406bf481929526413be47ab5eec8">AllowedBasename</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_m.html b/doc/html/functions_vars_m.html
deleted file mode 100644
index 58b6aa8..0000000
--- a/doc/html/functions_vars_m.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_m.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
-<li>max_size
-: <a class="el" href="struct_stack.html#abcc9e152813f8e38fda7971902f4c33d">Stack</a>
-</li>
-<li>msg
-: <a class="el" href="struct_nr_verify_commit_values.html#ac86cca7003dea44bf5368a0340e12a54">NrVerifyCommitValues</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_n.html b/doc/html/functions_vars_n.html
deleted file mode 100644
index b154f66..0000000
--- a/doc/html/functions_vars_n.html
+++ /dev/null
@@ -1,102 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_n.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
-<li>n1
-: <a class="el" href="struct_priv_rl.html#a6da9639ec4061689d1c30a58e0befd14">PrivRl</a>
-</li>
-<li>n2
-: <a class="el" href="struct_epid_signature.html#a62a6b0ffcd5f68dd3d2786a58fe43017">EpidSignature</a>
-, <a class="el" href="struct_sig_rl.html#a9dfb6b508db9051f4dc480a51d702af2">SigRl</a>
-</li>
-<li>n3
-: <a class="el" href="struct_group_rl.html#a9067f01c63cdefbc8e23c3cf67a10172">GroupRl</a>
-</li>
-<li>n4
-: <a class="el" href="struct_verifier_rl.html#a1e3f84b873bccc0c882aa6432c42d2f7">VerifierRl</a>
-</li>
-<li>name
-: <a class="el" href="struct_allowed_basename.html#addc76fe7f064b1d18edcb0a34a878db2">AllowedBasename</a>
-</li>
-<li>neg
-: <a class="el" href="struct_epid2_params.html#af23f07fb0e1745c0ad14aceeaa946928">Epid2Params</a>
-, <a class="el" href="struct_epid2_params__.html#a1e50604a1739e48e8588d666d33d03ef">Epid2Params_</a>
-</li>
-<li>next
-: <a class="el" href="struct_allowed_basename.html#affc96b4ca9846cee782c3316818d3ae1">AllowedBasename</a>
-</li>
-<li>NI
-: <a class="el" href="struct_join_p_commit_values.html#a2a045f80d378b8b096d05854b0a15b17">JoinPCommitValues</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_p.html b/doc/html/functions_vars_p.html
deleted file mode 100644
index 03f386e..0000000
--- a/doc/html/functions_vars_p.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_p.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
-<li>p
-: <a class="el" href="struct_commit_values.html#af5bf0f288e76f28ce54fe2df813881ef">CommitValues</a>
-, <a class="el" href="struct_epid2_params.html#ac0e0dad45b10927860cd5fa4f8101f08">Epid2Params</a>
-, <a class="el" href="struct_epid2_params__.html#ad90e9f295e28d3f93852e87e97640e76">Epid2Params_</a>
-, <a class="el" href="struct_join_p_commit_values.html#af5e8b7bc6e080d712470c9bad1b5e48c">JoinPCommitValues</a>
-, <a class="el" href="struct_nr_verify_commit_values.html#a00d147a62b1ba82f168df73245230bab">NrVerifyCommitValues</a>
-</li>
-<li>pairing_state
-: <a class="el" href="struct_epid2_params__.html#a74aa52f336a194b20627f8a540196dd5">Epid2Params_</a>
-</li>
-<li>presigs
-: <a class="el" href="struct_member_ctx.html#ac2f16d027485dbb10f71e835e3a25799">MemberCtx</a>
-</li>
-<li>prime
-: <a class="el" href="struct_epid_ca_certificate.html#a3a44e8050ca2f5085652b2b4e15b779c">EpidCaCertificate</a>
-</li>
-<li>priv_key
-: <a class="el" href="struct_member_ctx.html#af645f48f24ae31ce9ef9992617e5d6db">MemberCtx</a>
-</li>
-<li>priv_rl
-: <a class="el" href="struct_verifier_ctx.html#a630740c525aa9ee808c6a59c2ce15db3">VerifierCtx</a>
-</li>
-<li>pub_key
-: <a class="el" href="struct_member_ctx.html#a2eff58d4b2eaf1bd5f86ad85ffbcf99e">MemberCtx</a>
-, <a class="el" href="struct_verifier_ctx.html#a8e4846973639e85dee44c643802aa51c">VerifierCtx</a>
-</li>
-<li>pubkey
-: <a class="el" href="struct_epid_ca_certificate.html#a9d2fc21f46cf9fc96e2ea557b70e5356">EpidCaCertificate</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_q.html b/doc/html/functions_vars_q.html
deleted file mode 100644
index ae5b02c..0000000
--- a/doc/html/functions_vars_q.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_q.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_q"></a>- q -</h3><ul>
-<li>q
-: <a class="el" href="struct_epid2_params.html#a023603228fed2854ddae2e228938940f">Epid2Params</a>
-, <a class="el" href="struct_epid2_params__.html#a6d56c3f4dff7e92a0738e7866208bf4d">Epid2Params_</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_r.html b/doc/html/functions_vars_r.html
deleted file mode 100644
index a9c20fb..0000000
--- a/doc/html/functions_vars_r.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_r.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>r
-: <a class="el" href="struct_epid_ca_certificate.html#ab9d4c318b1fc8d38d3ce53b29f2dfee2">EpidCaCertificate</a>
-</li>
-<li>R
-: <a class="el" href="struct_join_p_commit_values.html#ab5bb16513636868f9d87019aa67051b9">JoinPCommitValues</a>
-</li>
-<li>R1
-: <a class="el" href="struct_commit_values.html#a00f7731d75085be08f171771c8f43d30">CommitValues</a>
-</li>
-<li>r1
-: <a class="el" href="struct_nr_verify_commit_values.html#ac28b67d09aff827d88d73a9b382b8781">NrVerifyCommitValues</a>
-</li>
-<li>R1
-: <a class="el" href="struct_pre_computed_signature.html#a72be597624957e3d668c95ff6f445f94">PreComputedSignature</a>
-</li>
-<li>R2
-: <a class="el" href="struct_commit_values.html#acb0d12e761fadb149924cdf21290b9bf">CommitValues</a>
-</li>
-<li>r2
-: <a class="el" href="struct_nr_verify_commit_values.html#adfb4fa346d6be553671fc6346fc74c83">NrVerifyCommitValues</a>
-</li>
-<li>R2
-: <a class="el" href="struct_pre_computed_signature.html#a79f06fb57842597372e00dd34c1a804a">PreComputedSignature</a>
-</li>
-<li>ra
-: <a class="el" href="struct_pre_computed_signature.html#a54462643b8a2b4f2741bf8d2e6909d11">PreComputedSignature</a>
-</li>
-<li>rb
-: <a class="el" href="struct_pre_computed_signature.html#a6a1db672c609943fe7af84320dc68ba3">PreComputedSignature</a>
-</li>
-<li>rf
-: <a class="el" href="struct_pre_computed_signature.html#ac244bd559a96812bcee7671abc299b66">PreComputedSignature</a>
-</li>
-<li>rl_ver
-: <a class="el" href="struct_epid_signature.html#a4155f3f4f1223fc4ae50c94f5305def1">EpidSignature</a>
-</li>
-<li>rnd_func
-: <a class="el" href="struct_member_ctx.html#a91a1750c59cd25d31fc07709b1da65af">MemberCtx</a>
-</li>
-<li>rnd_param
-: <a class="el" href="struct_member_ctx.html#a91619280f591f192761ceaae2f75261c">MemberCtx</a>
-</li>
-<li>rx
-: <a class="el" href="struct_pre_computed_signature.html#acd0674d5b5e96244645e9abef7bdbddc">PreComputedSignature</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_s.html b/doc/html/functions_vars_s.html
deleted file mode 100644
index e6a4e85..0000000
--- a/doc/html/functions_vars_s.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_s.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>s
-: <a class="el" href="struct_join_request.html#a73bf8989df5f90eb3d06e7a42ad74d1d">JoinRequest</a>
-</li>
-<li>sa
-: <a class="el" href="struct_basic_signature.html#a69115a4776d15b48411dd6c3a76d0f3d">BasicSignature</a>
-</li>
-<li>sb
-: <a class="el" href="struct_basic_signature.html#a91daebc5b577688afeed2a7ee7913245">BasicSignature</a>
-</li>
-<li>seed
-: <a class="el" href="struct_compressed_priv_key.html#a54b9af7699f517bbaef3d52d03e3fed8">CompressedPrivKey</a>
-</li>
-<li>sf
-: <a class="el" href="struct_basic_signature.html#a79d8dec8c5da176e497abf22e4c43adb">BasicSignature</a>
-</li>
-<li>sig_rl
-: <a class="el" href="struct_verifier_ctx.html#a71fe864652cd3cf986dcd92c97edc52e">VerifierCtx</a>
-</li>
-<li>sigma
-: <a class="el" href="struct_epid_signature.html#a89d2e38223944310b6eeeadf6061a2dd">EpidSignature</a>
-</li>
-<li>sigma0
-: <a class="el" href="struct_epid_signature.html#ab0fe5f98bff737fcfbfe0b4d658e83f2">EpidSignature</a>
-</li>
-<li>signature
-: <a class="el" href="struct_epid_ca_certificate.html#a2f8f09ae02919c379c38386668b47418">EpidCaCertificate</a>
-, <a class="el" href="struct_epid_group_pub_key_certificate.html#a118c43bee82e3cbb13add3d97f0a6a7d">EpidGroupPubKeyCertificate</a>
-</li>
-<li>smu
-: <a class="el" href="struct_nr_proof.html#a717ec36a6c91acd01d9b642bb20fc178">NrProof</a>
-</li>
-<li>snu
-: <a class="el" href="struct_nr_proof.html#ae2e9f22089793a4d44a0f7f5cdb78a0c">NrProof</a>
-</li>
-<li>sx
-: <a class="el" href="struct_basic_signature.html#a0e8ea6a2cd3af10e9b59d96d7d06bc69">BasicSignature</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_t.html b/doc/html/functions_vars_t.html
deleted file mode 100644
index 6a1d668..0000000
--- a/doc/html/functions_vars_t.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_t.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
-<li>T
-: <a class="el" href="struct_basic_signature.html#a730f74d85cfb4fa4089d43c87b97a624">BasicSignature</a>
-, <a class="el" href="struct_commit_values.html#ab2da47fe5c28b4202658c5ad3523ea1a">CommitValues</a>
-</li>
-<li>t
-: <a class="el" href="struct_epid2_params.html#a200a0cba1c9e4ad512bece23f2461a5f">Epid2Params</a>
-, <a class="el" href="struct_epid2_params__.html#a4bca3d05a46b1325ac2490ebeb460543">Epid2Params_</a>
-</li>
-<li>T
-: <a class="el" href="struct_nr_proof.html#ace535065bbf96502b893ac677dc8dcd3">NrProof</a>
-</li>
-<li>t
-: <a class="el" href="struct_nr_verify_commit_values.html#a64ef396e14aa573fda80a44532421a2f">NrVerifyCommitValues</a>
-</li>
-<li>T
-: <a class="el" href="struct_pre_computed_signature.html#a73471643dc757115701833ca2e831a72">PreComputedSignature</a>
-</li>
-<li>text
-: <a class="el" href="struct_error_text_entry.html#aa6b2528ee3cd37397a9ce382284cd01a">ErrorTextEntry</a>
-</li>
-<li>top
-: <a class="el" href="struct_stack.html#a0adc2afde769affc767fa708ac378880">Stack</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_v.html b/doc/html/functions_vars_v.html
deleted file mode 100644
index 6356653..0000000
--- a/doc/html/functions_vars_v.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_v.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
-<li>value
-: <a class="el" href="struct_error_text_entry.html#a8bbdabb59eded9b6206ea17b5cb04648">ErrorTextEntry</a>
-</li>
-<li>verifier_rl
-: <a class="el" href="struct_verifier_ctx.html#aed00ae85eaae4a5c12e4254a956ddab4">VerifierCtx</a>
-</li>
-<li>version
-: <a class="el" href="struct_group_rl.html#a69c41d99cdfc5b6ece7442f466f7ec3f">GroupRl</a>
-, <a class="el" href="struct_priv_rl.html#a4c6b51cec760f7e81ca8635422ac6a50">PrivRl</a>
-, <a class="el" href="struct_sig_rl.html#ac9d4c343c539dba799e1f42eb38b351f">SigRl</a>
-, <a class="el" href="struct_verifier_rl.html#afa44ab69ffff5a3508366aeb2131fdaa">VerifierRl</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_w.html b/doc/html/functions_vars_w.html
deleted file mode 100644
index 4034b01..0000000
--- a/doc/html/functions_vars_w.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_w.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
-<li>w
-: <a class="el" href="struct_commit_values.html#ac00af9d3eeb74543808a9e52e692f614">CommitValues</a>
-, <a class="el" href="struct_epid_group_pub_key_certificate.html#aa7c144c9b55acf3021fa5e2b8eb5fb8e">EpidGroupPubKeyCertificate</a>
-, <a class="el" href="struct_group_pub_key.html#a86be439104fb60b324784baf24a943f9">GroupPubKey</a>
-, <a class="el" href="struct_group_pub_key__.html#a4d1537e5bd834b6fc92eb2fd7c826329">GroupPubKey_</a>
-, <a class="el" href="struct_join_p_commit_values.html#ac0e998b80c93cd7076172b5262dccaf0">JoinPCommitValues</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_x.html b/doc/html/functions_vars_x.html
deleted file mode 100644
index 17d2cc6..0000000
--- a/doc/html/functions_vars_x.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_x.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
-<li>x
-: <a class="el" href="struct_ecdsa_public_key.html#a37c51614faf022eec491b4de8f3a13e1">EcdsaPublicKey</a>
-, <a class="el" href="struct_ecdsa_signature.html#a64b623605a55a267a36df18f29142d0d">EcdsaSignature</a>
-, <a class="el" href="struct_epid_ca_certificate.html#a4f77996f90ed7da1d0503c4236b2c9d1">EpidCaCertificate</a>
-, <a class="el" href="struct_fq12_elem_dat.html#ac73d5fe5cde8325f87eb719ea2e27ef1">Fq12ElemDat</a>
-, <a class="el" href="struct_fq2_elem_dat.html#ac7980c3e4eecb24c4b388d7f9903f835">Fq2ElemDat</a>
-, <a class="el" href="struct_fq6_elem_dat.html#af56452e7fa0d07a2d392bb7cccd6d268">Fq6ElemDat</a>
-, <a class="el" href="struct_fq_elem_dat.html#a9c3b30d0473490a4b01631969c0e0c0b">FqElemDat</a>
-, <a class="el" href="struct_g1_elem_str.html#a3b0e658d6e5697763ad9c633c11d4ec4">G1ElemStr</a>
-, <a class="el" href="struct_g2_elem_str.html#a145ec5b20a6f4f00b080e11c8680afc3">G2ElemStr</a>
-, <a class="el" href="struct_gt_elem_str.html#aeaeb0e9e1c6efd378a475eb9a6c42132">GtElemStr</a>
-, <a class="el" href="struct_membership_credential.html#a2c5c0d22999d6917fea5ad6618883bcf">MembershipCredential</a>
-, <a class="el" href="struct_priv_key.html#aa805f9e124f05bdb733c85cb93614cbd">PrivKey</a>
-, <a class="el" href="struct_priv_key__.html#a327d7192cbb6b5638e3f6f1c3d9d2d5b">PrivKey_</a>
-</li>
-<li>xi
-: <a class="el" href="struct_epid2_params.html#ae1d8f5d6036a82064e91bc137b278e74">Epid2Params</a>
-, <a class="el" href="struct_epid2_params__.html#a51a678f0f26804e0c6f3a4c55fcf6731">Epid2Params_</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_vars_y.html b/doc/html/functions_vars_y.html
deleted file mode 100644
index 96f739b..0000000
--- a/doc/html/functions_vars_y.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields - Variables</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_vars_y.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
-<li>y
-: <a class="el" href="struct_ecdsa_public_key.html#a4503c4613386cbc78add1dc245c99284">EcdsaPublicKey</a>
-, <a class="el" href="struct_ecdsa_signature.html#a2efd6bf37b12f35135bf325fa491b029">EcdsaSignature</a>
-, <a class="el" href="struct_epid_ca_certificate.html#abd69cce8d5e3940787ee0d17f72184ab">EpidCaCertificate</a>
-, <a class="el" href="struct_g1_elem_str.html#a8f2455ca314e885ea180dadf84bf27c3">G1ElemStr</a>
-, <a class="el" href="struct_g2_elem_str.html#a43141b2458aecceed8ee2748270f7908">G2ElemStr</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_w.html b/doc/html/functions_w.html
deleted file mode 100644
index 8c463ab..0000000
--- a/doc/html/functions_w.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_w.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
-<li>w
-: <a class="el" href="struct_commit_values.html#ac00af9d3eeb74543808a9e52e692f614">CommitValues</a>
-, <a class="el" href="struct_epid_group_pub_key_certificate.html#aa7c144c9b55acf3021fa5e2b8eb5fb8e">EpidGroupPubKeyCertificate</a>
-, <a class="el" href="struct_group_pub_key.html#a86be439104fb60b324784baf24a943f9">GroupPubKey</a>
-, <a class="el" href="struct_group_pub_key__.html#a4d1537e5bd834b6fc92eb2fd7c826329">GroupPubKey_</a>
-, <a class="el" href="struct_join_p_commit_values.html#ac0e998b80c93cd7076172b5262dccaf0">JoinPCommitValues</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_x.html b/doc/html/functions_x.html
deleted file mode 100644
index e54c6eb..0000000
--- a/doc/html/functions_x.html
+++ /dev/null
@@ -1,95 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_x.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_x"></a>- x -</h3><ul>
-<li>x
-: <a class="el" href="struct_ecdsa_public_key.html#a37c51614faf022eec491b4de8f3a13e1">EcdsaPublicKey</a>
-, <a class="el" href="struct_ecdsa_signature.html#a64b623605a55a267a36df18f29142d0d">EcdsaSignature</a>
-, <a class="el" href="struct_epid_ca_certificate.html#a4f77996f90ed7da1d0503c4236b2c9d1">EpidCaCertificate</a>
-, <a class="el" href="struct_fq12_elem_dat.html#ac73d5fe5cde8325f87eb719ea2e27ef1">Fq12ElemDat</a>
-, <a class="el" href="struct_fq2_elem_dat.html#ac7980c3e4eecb24c4b388d7f9903f835">Fq2ElemDat</a>
-, <a class="el" href="struct_fq6_elem_dat.html#af56452e7fa0d07a2d392bb7cccd6d268">Fq6ElemDat</a>
-, <a class="el" href="struct_fq_elem_dat.html#a9c3b30d0473490a4b01631969c0e0c0b">FqElemDat</a>
-, <a class="el" href="struct_g1_elem_str.html#a3b0e658d6e5697763ad9c633c11d4ec4">G1ElemStr</a>
-, <a class="el" href="struct_g2_elem_str.html#a145ec5b20a6f4f00b080e11c8680afc3">G2ElemStr</a>
-, <a class="el" href="struct_gt_elem_str.html#aeaeb0e9e1c6efd378a475eb9a6c42132">GtElemStr</a>
-, <a class="el" href="struct_membership_credential.html#a2c5c0d22999d6917fea5ad6618883bcf">MembershipCredential</a>
-, <a class="el" href="struct_priv_key.html#aa805f9e124f05bdb733c85cb93614cbd">PrivKey</a>
-, <a class="el" href="struct_priv_key__.html#a327d7192cbb6b5638e3f6f1c3d9d2d5b">PrivKey_</a>
-</li>
-<li>xi
-: <a class="el" href="struct_epid2_params.html#ae1d8f5d6036a82064e91bc137b278e74">Epid2Params</a>
-, <a class="el" href="struct_epid2_params__.html#a51a678f0f26804e0c6f3a4c55fcf6731">Epid2Params_</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_y.html b/doc/html/functions_y.html
deleted file mode 100644
index 47cbd2d..0000000
--- a/doc/html/functions_y.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_y.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-
-<h3><a class="anchor" id="index_y"></a>- y -</h3><ul>
-<li>y
-: <a class="el" href="struct_ecdsa_public_key.html#a4503c4613386cbc78add1dc245c99284">EcdsaPublicKey</a>
-, <a class="el" href="struct_ecdsa_signature.html#a2efd6bf37b12f35135bf325fa491b029">EcdsaSignature</a>
-, <a class="el" href="struct_epid_ca_certificate.html#abd69cce8d5e3940787ee0d17f72184ab">EpidCaCertificate</a>
-, <a class="el" href="struct_g1_elem_str.html#a8f2455ca314e885ea180dadf84bf27c3">G1ElemStr</a>
-, <a class="el" href="struct_g2_elem_str.html#a43141b2458aecceed8ee2748270f7908">G2ElemStr</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/get__sigsize_8c.html b/doc/html/get__sigsize_8c.html
deleted file mode 100644
index e1196ac..0000000
--- a/doc/html/get__sigsize_8c.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/member/get_sigsize.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('get__sigsize_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">get_sigsize.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>EpidGetSigSize implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="member_2api_8h.html">epid/member/api.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="endian__convert_8h.html">epid/common/endian_convert.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga76e535722467af7c16809b5b521e0000"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000">EpidGetSigSize</a> (<a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl)</td></tr>
-<tr class="memdesc:ga76e535722467af7c16809b5b521e0000"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the size in bytes required for a Intel(R) EPID signature. <a href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000">More...</a><br /></td></tr>
-<tr class="separator:ga76e535722467af7c16809b5b521e0000"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>EpidGetSigSize implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_512d3e62841a8535b716ec4cf8b9e950.html">member</a></li><li class="navelem"><a class="el" href="get__sigsize_8c.html">get_sigsize.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals.html b/doc/html/globals.html
index 85cb870..bc81e4f 100644
--- a/doc/html/globals.html
+++ b/doc/html/globals.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -59,10 +59,9 @@ $(document).ready(function(){initNavTree('globals.html','');});
<div class="contents">
<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
-<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
-<li>AddBasename()
-: <a class="el" href="member_2context_8c.html#a9ef563fb256bbdd0a08358fbfa0bde10">context.c</a>
-, <a class="el" href="member_2context_8h.html#a9ef563fb256bbdd0a08358fbfa0bde10">context.h</a>
+<h3><a class="anchor" id="index__"></a>- _ -</h3><ul>
+<li>_Bool
+: <a class="el" href="stdtypes_8h.html#aeaff0db5524987a2f50d71ac0162ceb2">stdtypes.h</a>
</li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/globals_b.html b/doc/html/globals_b.html
index 82c9bd3..32e6596 100644
--- a/doc/html/globals_b.html
+++ b/doc/html/globals_b.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -64,20 +64,28 @@ $(document).ready(function(){initNavTree('globals_b.html','');});
: <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">bignum.h</a>
</li>
<li>BigNumAdd()
-: <a class="el" href="group___big_num_primitives.html#gae70fd9b3026f0ab3c7e9601d0a3186b8">bignum.c</a>
-, <a class="el" href="group___big_num_primitives.html#gae70fd9b3026f0ab3c7e9601d0a3186b8">bignum.h</a>
+: <a class="el" href="group___big_num_primitives.html#gae70fd9b3026f0ab3c7e9601d0a3186b8">bignum.h</a>
+</li>
+<li>BigNumDiv()
+: <a class="el" href="group___big_num_primitives.html#ga166134085464b0df2c8efcfccf8ec573">bignum.h</a>
+</li>
+<li>BigNumIsEven()
+: <a class="el" href="group___big_num_primitives.html#gaf0366e47226563b17fcbc8e3ed766084">bignum.h</a>
+</li>
+<li>BigNumIsZero()
+: <a class="el" href="group___big_num_primitives.html#gacde6564a814617a96985b379be0dfabb">bignum.h</a>
</li>
<li>BigNumMod()
-: <a class="el" href="group___big_num_primitives.html#ga7dd6038987210d10bf843602fef0c929">bignum.c</a>
-, <a class="el" href="group___big_num_primitives.html#ga7dd6038987210d10bf843602fef0c929">bignum.h</a>
+: <a class="el" href="group___big_num_primitives.html#ga7dd6038987210d10bf843602fef0c929">bignum.h</a>
</li>
<li>BigNumMul()
-: <a class="el" href="group___big_num_primitives.html#ga03c89b8b8dd87de2c0f4b5822145d317">bignum.c</a>
-, <a class="el" href="group___big_num_primitives.html#ga03c89b8b8dd87de2c0f4b5822145d317">bignum.h</a>
+: <a class="el" href="group___big_num_primitives.html#ga03c89b8b8dd87de2c0f4b5822145d317">bignum.h</a>
+</li>
+<li>BigNumPow2N()
+: <a class="el" href="group___big_num_primitives.html#gafd64b66fc85dab0005f4a1bb67bdf7b4">bignum.h</a>
</li>
<li>BigNumSub()
-: <a class="el" href="group___big_num_primitives.html#gacbec9669ab0fe768e2be74dcaca397ea">bignum.c</a>
-, <a class="el" href="group___big_num_primitives.html#gacbec9669ab0fe768e2be74dcaca397ea">bignum.h</a>
+: <a class="el" href="group___big_num_primitives.html#gacbec9669ab0fe768e2be74dcaca397ea">bignum.h</a>
</li>
<li>BitSupplier
: <a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">bitsupplier.h</a>
@@ -85,24 +93,6 @@ $(document).ready(function(){initNavTree('globals_b.html','');});
<li>bool
: <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">stdtypes.h</a>
</li>
-<li>BREAK_ON_EPID_ERROR
-: <a class="el" href="nr__prove_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">nr_prove.c</a>
-, <a class="el" href="signbasic_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">signbasic.c</a>
-, <a class="el" href="request__join_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">request_join.c</a>
-, <a class="el" href="verifybasic_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">verifybasic.c</a>
-, <a class="el" href="nrverify_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">nrverify.c</a>
-, <a class="el" href="presig_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">presig.c</a>
-, <a class="el" href="verify_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">verify.c</a>
-, <a class="el" href="decompress__privkey_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">decompress_privkey.c</a>
-, <a class="el" href="pairing_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">pairing.c</a>
-</li>
-<li>BREAK_ON_IPP_ERROR
-: <a class="el" href="ecdsa__verify_8c.html#a2a33926ecd5e3365607fe56acb4e997a">ecdsa_verify.c</a>
-, <a class="el" href="pairing_8c.html#a05172cee9b4cc2d463a7cd7b66d1123b">pairing.c</a>
-</li>
-<li>BYTE_LENGTH
-: <a class="el" href="printutils_8c.html#aa9b6652aabab4e1adadd19b5366d1f69">printutils.c</a>
-</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
diff --git a/doc/html/globals_c.html b/doc/html/globals_c.html
deleted file mode 100644
index a3ef228..0000000
--- a/doc/html/globals_c.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_c.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
-
-<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
-<li>CalculateCommitmentHash()
-: <a class="el" href="group___epid_common.html#ga23f8ea0f7529e8e7a81bd88e607dda01">commitment.c</a>
-, <a class="el" href="group___epid_common.html#ga23f8ea0f7529e8e7a81bd88e607dda01">commitment.h</a>
-</li>
-<li>ContainsBasename()
-: <a class="el" href="member_2context_8h.html#a15f1294cb5004433360eb6d1ab0b3322">context.h</a>
-, <a class="el" href="member_2context_8c.html#a15f1294cb5004433360eb6d1ab0b3322">context.c</a>
-</li>
-<li>COUNT_OF
-: <a class="el" href="nr__prove_8c.html#ac362b8d551a6a185f226af3be3d931f8">nr_prove.c</a>
-, <a class="el" href="presig_8c.html#ac362b8d551a6a185f226af3be3d931f8">presig.c</a>
-, <a class="el" href="verifybasic_8c.html#ac362b8d551a6a185f226af3be3d931f8">verifybasic.c</a>
-</li>
-<li>CreateEpid2Params()
-: <a class="el" href="group___epid_common.html#ga5c396a5ac8a0e5ec1e02330c53420dce">epid2params.h</a>
-</li>
-<li>CreateGroupPubKey()
-: <a class="el" href="group___epid_common.html#ga20a575d3d538b0bac654fd57f20e2b30">grouppubkey.c</a>
-, <a class="el" href="group___epid_common.html#ga20a575d3d538b0bac654fd57f20e2b30">grouppubkey.h</a>
-</li>
-<li>CreatePrivKey()
-: <a class="el" href="group___epid_common.html#gae51985a0e811f4bbb2d70b62e35b881e">privkey.h</a>
-, <a class="el" href="group___epid_common.html#gae51985a0e811f4bbb2d70b62e35b881e">privkey.c</a>
-</li>
-<li>CreateStack()
-: <a class="el" href="group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58">stack.h</a>
-, <a class="el" href="group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58">stack.c</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals_d.html b/doc/html/globals_d.html
index 48bbd7b..5a581ac 100644
--- a/doc/html/globals_d.html
+++ b/doc/html/globals_d.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -60,49 +60,26 @@ $(document).ready(function(){initNavTree('globals_d.html','');});
<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
-<li>DeleteBasenames()
-: <a class="el" href="member_2context_8c.html#a5f956a682bdde4ea1459e01beae0e9f0">context.c</a>
-, <a class="el" href="member_2context_8h.html#a5f956a682bdde4ea1459e01beae0e9f0">context.h</a>
-</li>
<li>DeleteBigNum()
: <a class="el" href="group___big_num_primitives.html#ga2d17600068b1d94000635c6644258a03">bignum.h</a>
-, <a class="el" href="group___big_num_primitives.html#ga2d17600068b1d94000635c6644258a03">bignum.c</a>
</li>
<li>DeleteEcGroup()
-: <a class="el" href="group___ec_group_primitives.html#gab7af276256c27610eda85ff432b846ea">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#gab7af276256c27610eda85ff432b846ea">ecgroup.h</a>
+: <a class="el" href="group___ec_group_primitives.html#gab7af276256c27610eda85ff432b846ea">ecgroup.h</a>
</li>
<li>DeleteEcPoint()
: <a class="el" href="group___ec_group_primitives.html#ga8cb086d792bffb79b3ca07e6ca4ce0e7">ecgroup.h</a>
-, <a class="el" href="group___ec_group_primitives.html#ga8cb086d792bffb79b3ca07e6ca4ce0e7">ecgroup.c</a>
</li>
-<li>DeleteEpid2Params()
-: <a class="el" href="group___epid_common.html#gac22664b5f7df5cd4da1bd7b1b1e7912f">epid2params.c</a>
-, <a class="el" href="group___epid_common.html#gac22664b5f7df5cd4da1bd7b1b1e7912f">epid2params.h</a>
+<li>DeleteEpid11PairingState()
+: <a class="el" href="group___epid11_pairing_primitives.html#gaa3457d6f85889bc714910252fd21c758">tatepairing.h</a>
</li>
<li>DeleteFfElement()
-: <a class="el" href="group___finite_field_primitives.html#ga1bad3c6945d1d709fceb07a1dd03000e">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga1bad3c6945d1d709fceb07a1dd03000e">finitefield.h</a>
+: <a class="el" href="group___finite_field_primitives.html#ga1bad3c6945d1d709fceb07a1dd03000e">finitefield.h</a>
</li>
<li>DeleteFiniteField()
-: <a class="el" href="group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f">finitefield.h</a>
-</li>
-<li>DeleteGroupPubKey()
-: <a class="el" href="group___epid_common.html#ga07c9b47d326ee784aecb78195adffb8b">grouppubkey.h</a>
-, <a class="el" href="group___epid_common.html#ga07c9b47d326ee784aecb78195adffb8b">grouppubkey.c</a>
+: <a class="el" href="group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f">finitefield.h</a>
</li>
<li>DeletePairingState()
-: <a class="el" href="group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d">pairing.c</a>
-, <a class="el" href="group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d">pairing.h</a>
-</li>
-<li>DeletePrivKey()
-: <a class="el" href="group___epid_common.html#ga53db100214e65e362fa426508a240d12">privkey.c</a>
-, <a class="el" href="group___epid_common.html#ga53db100214e65e362fa426508a240d12">privkey.h</a>
-</li>
-<li>DeleteStack()
-: <a class="el" href="group___epid_common.html#ga3335a4754825c54840263aa4b2a9bf67">stack.h</a>
-, <a class="el" href="group___epid_common.html#ga3335a4754825c54840263aa4b2a9bf67">stack.c</a>
+: <a class="el" href="group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d">pairing.h</a>
</li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/globals_defs.html b/doc/html/globals_defs.html
index 63b1b75..32be0f5 100644
--- a/doc/html/globals_defs.html
+++ b/doc/html/globals_defs.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -57,131 +57,17 @@ $(document).ready(function(){initNavTree('globals_defs.html','');});
</script>
<div id="doc-content">
<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
-<li>BREAK_ON_EPID_ERROR
-: <a class="el" href="pairing_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">pairing.c</a>
-, <a class="el" href="decompress__privkey_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">decompress_privkey.c</a>
-, <a class="el" href="nr__prove_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">nr_prove.c</a>
-, <a class="el" href="presig_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">presig.c</a>
-, <a class="el" href="request__join_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">request_join.c</a>
-, <a class="el" href="signbasic_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">signbasic.c</a>
-, <a class="el" href="nrverify_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">nrverify.c</a>
-, <a class="el" href="verify_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">verify.c</a>
-, <a class="el" href="verifybasic_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">verifybasic.c</a>
+&#160;<ul>
+<li>_Bool
+: <a class="el" href="stdtypes_8h.html#aeaff0db5524987a2f50d71ac0162ceb2">stdtypes.h</a>
</li>
-<li>BREAK_ON_IPP_ERROR
-: <a class="el" href="ecdsa__verify_8c.html#a2a33926ecd5e3365607fe56acb4e997a">ecdsa_verify.c</a>
-, <a class="el" href="pairing_8c.html#a05172cee9b4cc2d463a7cd7b66d1123b">pairing.c</a>
-</li>
-<li>BYTE_LENGTH
-: <a class="el" href="printutils_8c.html#aa9b6652aabab4e1adadd19b5366d1f69">printutils.c</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
-<li>COUNT_OF
-: <a class="el" href="nr__prove_8c.html#ac362b8d551a6a185f226af3be3d931f8">nr_prove.c</a>
-, <a class="el" href="presig_8c.html#ac362b8d551a6a185f226af3be3d931f8">presig.c</a>
-, <a class="el" href="verifybasic_8c.html#ac362b8d551a6a185f226af3be3d931f8">verifybasic.c</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
-<li>EPHKEYGEN_WATCHDOG
-: <a class="el" href="ecdsa__sign_8c.html#a09a23295da4c2aec9954cba93db848fb">ecdsa_sign.c</a>
-</li>
-<li>EPID_ECHASH_WATCHDOG
-: <a class="el" href="ecgroup_8c.html#a26d8b2ac362504939125b9196abc8aaa">ecgroup.c</a>
-</li>
-<li>EPID_ENABLE_EPID_ZERO_MEMORY_ON_FREE
-: <a class="el" href="group___epid_common.html#gab1587898f15de1b51cd5e799a43465ff">memory.h</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
<li>false
: <a class="el" href="stdtypes_8h.html#a65e9886d74aaee76545e83dd09011727">stdtypes.h</a>
</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
-<li>INDENT
-: <a class="el" href="printutils_8c.html#a502b06aa5ad25116c775d201326bad52">printutils.c</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
-<li>MAKE_INDENT
-: <a class="el" href="printutils_8c.html#a91e2eeae06fcf21c3fa4fc0eadf6b0cd">printutils.c</a>
-</li>
-<li>MIN
-: <a class="el" href="memory_8c.html#a3acffbd305ee72dcd4593c0d8af64a4f">memory.c</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
-<li>ntohl
-: <a class="el" href="group___epid_common.html#ga29a7e07cd5181e738f98fc026979efca">endian_convert.h</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
-<li>PRINT
-: <a class="el" href="printutils_8c.html#a15bb631053a1fce9c5470701900984c7">printutils.c</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>RETURN_ON_IPP_ERROR
-: <a class="el" href="pairing_8c.html#ae10abdda5f1cafa6919c41f0d7f7caf8">pairing.c</a>
-</li>
-<li>RNG_WATCHDOG
-: <a class="el" href="finitefield_8c.html#a84d66c4493b912014a9acf0e123b2d4c">finitefield.c</a>
-</li>
-<li>RSIZE_MAX
-: <a class="el" href="memory_8c.html#ad810bebef54644d4ea2fb181581aa0f9">memory.c</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>SAFE_ALLOC
-: <a class="el" href="group___epid_common.html#ga38fad13430eba25f9f9b05e35ecd22f8">memory.h</a>
-</li>
-<li>SAFE_FREE
-: <a class="el" href="group___epid_common.html#ga2ca3c202ee727774d55890e568621842">memory.h</a>
-</li>
-<li>SAFE_REALLOC
-: <a class="el" href="group___epid_common.html#ga41c113e15b695291199c27fac4bd53fa">memory.h</a>
-</li>
-<li>SEPARATOR
-: <a class="el" href="printutils_8c.html#af68c3a5ad6ffce6c97fff154856a823d">printutils.c</a>
-</li>
-</ul>
-
-
-<h3><a class="anchor" id="index_t"></a>- t -</h3><ul>
<li>true
: <a class="el" href="stdtypes_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7">stdtypes.h</a>
</li>
</ul>
-
-
-<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
-<li>WIDTH
-: <a class="el" href="printutils_8c.html#a241aeeb764887ae5e3de58b98f04b16d">printutils.c</a>
-</li>
-</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
diff --git a/doc/html/globals_e.html b/doc/html/globals_e.html
index a2efb89..4d01760 100644
--- a/doc/html/globals_e.html
+++ b/doc/html/globals_e.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -60,237 +60,248 @@ $(document).ready(function(){initNavTree('globals_e.html','');});
<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
-<li>eccontains()
-: <a class="el" href="ecgroup_8c.html#ac0a2b4aa2484318938498e29c8ee4a9b">ecgroup.c</a>
-</li>
<li>EcdsaSignBuffer()
: <a class="el" href="group___ecdsa_primitives.html#ga67091ecae643c1b8a0b0a4946eda7afe">ecdsa.h</a>
-, <a class="el" href="group___ecdsa_primitives.html#ga67091ecae643c1b8a0b0a4946eda7afe">ecdsa_sign.c</a>
</li>
<li>EcdsaVerifyBuffer()
: <a class="el" href="group___ecdsa_primitives.html#gaab68de7291db6e42a01e99c2fa40057f">ecdsa.h</a>
-, <a class="el" href="group___ecdsa_primitives.html#gaab68de7291db6e42a01e99c2fa40057f">ecdsa_verify.c</a>
</li>
<li>EcExp()
-: <a class="el" href="group___ec_group_primitives.html#ga01bf8d6fa60a2e445490966b3a06c270">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga01bf8d6fa60a2e445490966b3a06c270">ecgroup.h</a>
+: <a class="el" href="group___ec_group_primitives.html#ga01bf8d6fa60a2e445490966b3a06c270">ecgroup.h</a>
</li>
<li>EcGetRandom()
-: <a class="el" href="group___ec_group_primitives.html#ga3f96c43d14d24de0f7a5e214aef64196">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga3f96c43d14d24de0f7a5e214aef64196">ecgroup.h</a>
+: <a class="el" href="group___ec_group_primitives.html#ga3f96c43d14d24de0f7a5e214aef64196">ecgroup.h</a>
</li>
<li>EcGroup
: <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">ecgroup.h</a>
</li>
<li>EcHash()
-: <a class="el" href="group___ec_group_primitives.html#gadc22ee07864a7ee681a881029b69d76a">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#gadc22ee07864a7ee681a881029b69d76a">ecgroup.h</a>
+: <a class="el" href="group___ec_group_primitives.html#gadc22ee07864a7ee681a881029b69d76a">ecgroup.h</a>
</li>
<li>EcInGroup()
-: <a class="el" href="group___ec_group_primitives.html#ga4d0f32aede3066eae500241b387bd970">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga4d0f32aede3066eae500241b387bd970">ecgroup.h</a>
+: <a class="el" href="group___ec_group_primitives.html#ga4d0f32aede3066eae500241b387bd970">ecgroup.h</a>
</li>
<li>EcInverse()
: <a class="el" href="group___ec_group_primitives.html#ga0b6d7a3398251e9352fb29ef4abef466">ecgroup.h</a>
-, <a class="el" href="group___ec_group_primitives.html#ga0b6d7a3398251e9352fb29ef4abef466">ecgroup.c</a>
</li>
<li>EcIsEqual()
-: <a class="el" href="group___ec_group_primitives.html#gad3b3c63c48fa24e8dea07837b05bc061">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#gad3b3c63c48fa24e8dea07837b05bc061">ecgroup.h</a>
+: <a class="el" href="group___ec_group_primitives.html#gad3b3c63c48fa24e8dea07837b05bc061">ecgroup.h</a>
</li>
<li>EcIsIdentity()
-: <a class="el" href="group___ec_group_primitives.html#ga9cf15b34bc4ff12e58b169dd989d8210">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga9cf15b34bc4ff12e58b169dd989d8210">ecgroup.h</a>
+: <a class="el" href="group___ec_group_primitives.html#ga9cf15b34bc4ff12e58b169dd989d8210">ecgroup.h</a>
</li>
<li>EcMakePoint()
-: <a class="el" href="group___ec_group_primitives.html#ga8a6114a48214a327d4ec04fd25e5940e">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga8a6114a48214a327d4ec04fd25e5940e">ecgroup.h</a>
+: <a class="el" href="group___ec_group_primitives.html#ga8a6114a48214a327d4ec04fd25e5940e">ecgroup.h</a>
</li>
<li>EcMul()
-: <a class="el" href="group___ec_group_primitives.html#ga25c9013cc76907d73765eb7a96aa8c96">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga25c9013cc76907d73765eb7a96aa8c96">ecgroup.h</a>
+: <a class="el" href="group___ec_group_primitives.html#ga25c9013cc76907d73765eb7a96aa8c96">ecgroup.h</a>
</li>
<li>EcMultiExp()
-: <a class="el" href="group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4">ecgroup.h</a>
+: <a class="el" href="group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4">ecgroup.h</a>
+</li>
+<li>EcMultiExpBn()
+: <a class="el" href="group___ec_group_primitives.html#ga76d24378455eb96a3257fe8045c0993a">ecgroup.h</a>
</li>
<li>EcPoint
: <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">ecgroup.h</a>
</li>
<li>EcSscmExp()
-: <a class="el" href="group___ec_group_primitives.html#gaf3b6a548aa6f0d4f028a14feca251f57">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#gaf3b6a548aa6f0d4f028a14feca251f57">ecgroup.h</a>
+: <a class="el" href="group___ec_group_primitives.html#gaf3b6a548aa6f0d4f028a14feca251f57">ecgroup.h</a>
</li>
<li>EcSscmMultiExp()
-: <a class="el" href="group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4">ecgroup.h</a>
+: <a class="el" href="group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4">ecgroup.h</a>
+</li>
+<li>Epid11AreSigsLinked()
+: <a class="el" href="group___epid11_verifier_module.html#gab0b6560b226a37321f5ca5d4fb55eba7">api.h</a>
+</li>
+<li>Epid11CheckPrivRlEntry()
+: <a class="el" href="group___epid11_verifier_module.html#ga0b79c79d09e3551158e1c38c7c335929">api.h</a>
+</li>
+<li>Epid11EcHash()
+: <a class="el" href="group___ec_group_primitives.html#gadf83fa559585375faad9a8b1559249bc">ecgroup.h</a>
+</li>
+<li>Epid11G1ElemStr
+: <a class="el" href="group___epid11_types.html#gadff9c05d5b7751024152b40dda545545">types.h</a>
+</li>
+<li>Epid11G3ElemStr
+: <a class="el" href="group___epid11_types.html#gaf1f4f1d6f001895abe548cfb33611c23">types.h</a>
+</li>
+<li>Epid11GroupId
+: <a class="el" href="group___epid11_types.html#ga7293cec8f937d6f5da42084403f978f1">types.h</a>
+</li>
+<li>Epid11NrVerify()
+: <a class="el" href="group___epid11_verifier_module.html#ga3a2e320d7de6156b2ce9d73e9cdce813">api.h</a>
+</li>
+<li>Epid11Pairing()
+: <a class="el" href="group___epid11_pairing_primitives.html#gaa4076dfe25e8e61ac6753333a322c059">tatepairing.h</a>
+</li>
+<li>Epid11PairingState
+: <a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">tatepairing.h</a>
+</li>
+<li>Epid11ParseGroupPubKeyFile()
+: <a class="el" href="group___epid11_file_parser_module.html#ga1f92d1cb6bd7d9815711fde515b40a4c">file_parser.h</a>
+</li>
+<li>Epid11ParseGroupRlFile()
+: <a class="el" href="group___epid11_file_parser_module.html#gae28a844eb68828480b2a76fcb7d252a3">file_parser.h</a>
+</li>
+<li>Epid11ParsePrivRlFile()
+: <a class="el" href="group___epid11_file_parser_module.html#gae682077d315c39ed298ef198fd738546">file_parser.h</a>
+</li>
+<li>Epid11ParseSigRlFile()
+: <a class="el" href="group___epid11_file_parser_module.html#gac3f6daaa5333627d4efe5438c1fe8868">file_parser.h</a>
+</li>
+<li>Epid11VerifierCreate()
+: <a class="el" href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8">api.h</a>
</li>
-<li>EPHKEYGEN_WATCHDOG
-: <a class="el" href="ecdsa__sign_8c.html#a09a23295da4c2aec9954cba93db848fb">ecdsa_sign.c</a>
+<li>Epid11VerifierCtx
+: <a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">api.h</a>
</li>
-<li>EPID_ECHASH_WATCHDOG
-: <a class="el" href="ecgroup_8c.html#a26d8b2ac362504939125b9196abc8aaa">ecgroup.c</a>
+<li>Epid11VerifierDelete()
+: <a class="el" href="group___epid11_verifier_module.html#ga63cae8d5abcf4d7e3af4157de18998f1">api.h</a>
</li>
-<li>EPID_ENABLE_EPID_ZERO_MEMORY_ON_FREE
-: <a class="el" href="group___epid_common.html#gab1587898f15de1b51cd5e799a43465ff">memory.h</a>
+<li>Epid11VerifierSetBasename()
+: <a class="el" href="group___epid11_verifier_module.html#ga0cb6d30df527ee0d8f0a1b68d2b7c0c0">api.h</a>
+</li>
+<li>Epid11VerifierSetGroupRl()
+: <a class="el" href="group___epid11_verifier_module.html#ga809c777908b2f9d029062d9424cb5f65">api.h</a>
+</li>
+<li>Epid11VerifierSetPrivRl()
+: <a class="el" href="group___epid11_verifier_module.html#gaffbe6ac2bc7236ad65126a17ebdceb14">api.h</a>
+</li>
+<li>Epid11VerifierSetSigRl()
+: <a class="el" href="group___epid11_verifier_module.html#gaff5a014b0334be7e8583f0f99cb5e9b8">api.h</a>
+</li>
+<li>Epid11VerifierWritePrecomp()
+: <a class="el" href="group___epid11_verifier_module.html#ga241520cb925e5be89893a2037451cf1c">api.h</a>
+</li>
+<li>Epid11Verify()
+: <a class="el" href="group___epid11_verifier_module.html#gafe5ad6bde38ad0c3e0a9960975fd5216">api.h</a>
+</li>
+<li>Epid11VerifyBasicSig()
+: <a class="el" href="group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070">api.h</a>
</li>
<li>EpidAddPreSigs()
: <a class="el" href="group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236">api.h</a>
-, <a class="el" href="group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236">context.c</a>
-</li>
-<li>EpidAlloc()
-: <a class="el" href="group___epid_common.html#gada170fd890504b013139f4a33033ae4b">memory.c</a>
-, <a class="el" href="group___epid_common.html#gada170fd890504b013139f4a33033ae4b">memory.h</a>
</li>
<li>EpidAreSigsLinked()
: <a class="el" href="group___epid_verifier_module.html#gae44bd8acbc1e7205aeedff0c7e2632a8">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#gae44bd8acbc1e7205aeedff0c7e2632a8">sigs_linked.c</a>
+</li>
+<li>EpidBlacklistSig()
+: <a class="el" href="group___epid_verifier_module.html#ga8eaeb9f4a34e9e37ccdf342919f38c69">api.h</a>
</li>
<li>EpidCheckPrivRlEntry()
: <a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea">check_privrl_entry.c</a>
-</li>
-<li>EpidComputePreSig()
-: <a class="el" href="member_2context_8h.html#a0423e8400abd2171062e4c42b90b8145">context.h</a>
-, <a class="el" href="presig_8c.html#a0423e8400abd2171062e4c42b90b8145">presig.c</a>
</li>
<li>EpidDecompressPrivKey()
: <a class="el" href="group___epid_member_module.html#gaf8cd05388f017486f14da2ee48d067ef">api.h</a>
-, <a class="el" href="group___epid_member_module.html#gaf8cd05388f017486f14da2ee48d067ef">decompress_privkey.c</a>
</li>
<li>EpidFileType
: <a class="el" href="group___file_parser.html#ga9a33be7edc6b4c7a867fb07bd2bddecb">file_parser.h</a>
</li>
-<li>EpidFree()
-: <a class="el" href="group___epid_common.html#gaeae76709e6bfc80c9d79ec4943ccc1ac">memory.c</a>
-, <a class="el" href="group___epid_common.html#gaeae76709e6bfc80c9d79ec4943ccc1ac">memory.h</a>
-</li>
<li>EpidGetNumPreSigs()
: <a class="el" href="group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075">api.h</a>
-, <a class="el" href="group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075">context.c</a>
</li>
<li>EpidGetSigSize()
: <a class="el" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000">api.h</a>
-, <a class="el" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000">get_sigsize.c</a>
+</li>
+<li>EpidGetVerifierRlSize()
+: <a class="el" href="group___epid_verifier_module.html#ga2a75c7d5775e852a7b6e24178dd4054f">api.h</a>
</li>
<li>EpidIsPrivKeyInGroup()
: <a class="el" href="group___epid_member_module.html#ga8e3f201d1e9dc668659e08a3bdf543b6">api.h</a>
-, <a class="el" href="group___epid_member_module.html#ga8e3f201d1e9dc668659e08a3bdf543b6">request_join.c</a>
</li>
<li>EpidMemberCreate()
: <a class="el" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb">api.h</a>
-, <a class="el" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb">context.c</a>
</li>
<li>EpidMemberDelete()
-: <a class="el" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">context.c</a>
-, <a class="el" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">api.h</a>
+: <a class="el" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">api.h</a>
</li>
<li>EpidMemberSetHashAlg()
: <a class="el" href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf">api.h</a>
-, <a class="el" href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf">context.c</a>
</li>
<li>EpidMemberWritePrecomp()
-: <a class="el" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">context.c</a>
-, <a class="el" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">api.h</a>
+: <a class="el" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">api.h</a>
</li>
<li>EpidNrProve()
: <a class="el" href="group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc">api.h</a>
-, <a class="el" href="group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc">nr_prove.c</a>
</li>
<li>EpidNrVerify()
: <a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700">nrverify.c</a>
+</li>
+<li>EpidParseFileHeader()
+: <a class="el" href="group___file_parser.html#ga8e38d1102eb1dd9b5af2e2f79236da55">file_parser.h</a>
</li>
<li>EpidParseGroupPubKeyFile()
-: <a class="el" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">file_parser.c</a>
-, <a class="el" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">file_parser.h</a>
+: <a class="el" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">file_parser.h</a>
</li>
<li>EpidParseGroupRlFile()
-: <a class="el" href="group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f">file_parser.c</a>
-, <a class="el" href="group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f">file_parser.h</a>
+: <a class="el" href="group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f">file_parser.h</a>
</li>
<li>EpidParsePrivRlFile()
-: <a class="el" href="group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e">file_parser.c</a>
-, <a class="el" href="group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e">file_parser.h</a>
+: <a class="el" href="group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e">file_parser.h</a>
</li>
<li>EpidParseSigRlFile()
-: <a class="el" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">file_parser.c</a>
-, <a class="el" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">file_parser.h</a>
-</li>
-<li>EpidRealloc()
-: <a class="el" href="group___epid_common.html#ga6911838728d546e4a51d7bcb8404525c">memory.c</a>
-, <a class="el" href="group___epid_common.html#ga6911838728d546e4a51d7bcb8404525c">memory.h</a>
+: <a class="el" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">file_parser.h</a>
</li>
<li>EpidRegisterBaseName()
: <a class="el" href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d">api.h</a>
-, <a class="el" href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d">context.c</a>
</li>
<li>EpidRequestJoin()
: <a class="el" href="group___epid_member_module.html#ga13dd0d72be9babf8194d472d7712a361">api.h</a>
-, <a class="el" href="group___epid_member_module.html#ga13dd0d72be9babf8194d472d7712a361">request_join.c</a>
</li>
<li>EpidSign()
: <a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640">api.h</a>
-, <a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640">sign.c</a>
</li>
<li>EpidSignBasic()
: <a class="el" href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa">api.h</a>
-, <a class="el" href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa">signbasic.c</a>
</li>
<li>EpidStatus
: <a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">errors.h</a>
</li>
<li>EpidStatusToString()
: <a class="el" href="group___error_codes.html#ga59e8680ce52509302fd58a987e45004d">errors.h</a>
-, <a class="el" href="group___error_codes.html#ga59e8680ce52509302fd58a987e45004d">errors.c</a>
</li>
<li>EpidVerifierCreate()
-: <a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">context.c</a>
-, <a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">api.h</a>
+: <a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">api.h</a>
</li>
<li>EpidVerifierDelete()
: <a class="el" href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12">context.c</a>
+</li>
+<li>EpidVerifierSetBasename()
+: <a class="el" href="group___epid_verifier_module.html#ga1c3810ef361da678a1f77823bd9c37a6">api.h</a>
</li>
<li>EpidVerifierSetGroupRl()
-: <a class="el" href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">context.c</a>
-, <a class="el" href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">api.h</a>
+: <a class="el" href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">api.h</a>
</li>
<li>EpidVerifierSetHashAlg()
: <a class="el" href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92">context.c</a>
</li>
<li>EpidVerifierSetPrivRl()
: <a class="el" href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e">context.c</a>
</li>
<li>EpidVerifierSetSigRl()
: <a class="el" href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf">context.c</a>
</li>
<li>EpidVerifierSetVerifierRl()
: <a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a">context.c</a>
</li>
<li>EpidVerifierWritePrecomp()
-: <a class="el" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">context.c</a>
-, <a class="el" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">api.h</a>
+: <a class="el" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">api.h</a>
</li>
<li>EpidVerify()
-: <a class="el" href="group___epid_verifier_module.html#ga39b240a17f310894e9f5946c9a731798">verify.c</a>
-, <a class="el" href="group___epid_verifier_module.html#ga39b240a17f310894e9f5946c9a731798">api.h</a>
+: <a class="el" href="group___epid_verifier_module.html#gae3f9c37628e18b880d8bbee3e7f55064">api.h</a>
</li>
<li>EpidVerifyBasicSig()
-: <a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a">verifybasic.c</a>
-, <a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a">api.h</a>
+: <a class="el" href="group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e">api.h</a>
+</li>
+<li>EpidVersion
+: <a class="el" href="group___file_parser.html#ga1562efc7c1891875d6b2b9180d65de9d">file_parser.h</a>
</li>
<li>EpidWritePreSigs()
-: <a class="el" href="group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d">context.c</a>
-, <a class="el" href="group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d">api.h</a>
+: <a class="el" href="group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d">api.h</a>
</li>
-<li>EpidZeroMemory()
-: <a class="el" href="group___epid_common.html#gad471f600f6032f432b99432fda97a070">memory.c</a>
-, <a class="el" href="group___epid_common.html#gad471f600f6032f432b99432fda97a070">memory.h</a>
+<li>EpidWriteVerifierRl()
+: <a class="el" href="group___epid_verifier_module.html#gac857bff47e7d80363eac15285471fe81">api.h</a>
</li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/globals_enum.html b/doc/html/globals_enum.html
index 9054ce7..e5d8f31 100644
--- a/doc/html/globals_enum.html
+++ b/doc/html/globals_enum.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -64,6 +64,9 @@ $(document).ready(function(){initNavTree('globals_enum.html','');});
<li>EpidStatus
: <a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">errors.h</a>
</li>
+<li>EpidVersion
+: <a class="el" href="group___file_parser.html#ga1562efc7c1891875d6b2b9180d65de9d">file_parser.h</a>
+</li>
<li>HashAlg
: <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">types.h</a>
</li>
diff --git a/doc/html/globals_eval.html b/doc/html/globals_eval.html
index 4e265cb..d509456 100644
--- a/doc/html/globals_eval.html
+++ b/doc/html/globals_eval.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -60,6 +60,12 @@ $(document).ready(function(){initNavTree('globals_eval.html','');});
&#160;
<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>kEpid1x
+: <a class="el" href="group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da5f270e2e8c2412bc07de293023f425cc">file_parser.h</a>
+</li>
+<li>kEpid2x
+: <a class="el" href="group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da6af0ee9d9689f1d4325bdd0beb8a89e2">file_parser.h</a>
+</li>
<li>kEpidBadArgErr
: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf">errors.h</a>
</li>
@@ -75,9 +81,15 @@ $(document).ready(function(){initNavTree('globals_eval.html','');});
<li>kEpidHashAlgorithmNotSupported
: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad4d4ff24a7ef2cd7a50b8082265e9ff4">errors.h</a>
</li>
+<li>kEpidInconsistentBasenameSetErr
+: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a94ae9c9b9337afd2fefd3b4f9c3160df">errors.h</a>
+</li>
<li>kEpidMathErr
: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6">errors.h</a>
</li>
+<li>kEpidMathQuadraticNonResidueError
+: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab2768a1a5c4374cb1ac6175c09c73129">errors.h</a>
+</li>
<li>kEpidMemAllocErr
: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a11a4d2f1c37064eb663de08dc57bcda8">errors.h</a>
</li>
@@ -96,17 +108,17 @@ $(document).ready(function(){initNavTree('globals_eval.html','');});
<li>kEpidSigInvalid
: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8">errors.h</a>
</li>
-<li>kEpidSigRevokedinGroupRl
-: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a2b38f44424cecd7b432194a2012dc9c7">errors.h</a>
+<li>kEpidSigRevokedInGroupRl
+: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aedd43fb4043bef3b515fc23f1d9a5fe5">errors.h</a>
</li>
-<li>kEpidSigRevokedinPrivRl
-: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a780a20821863553b88ca617a6fc0f718">errors.h</a>
+<li>kEpidSigRevokedInPrivRl
+: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1dc7b7e6ff97c7ed9ff4191d76ebd6e1">errors.h</a>
</li>
-<li>kEpidSigRevokedinSigRl
-: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aff83186b61d48f9fee5f691c5b219bc1">errors.h</a>
+<li>kEpidSigRevokedInSigRl
+: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a43c658cbf0d156850d71ce3f8efd461c">errors.h</a>
</li>
-<li>kEpidSigRevokedinVerifierRl
-: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360addbba767bb884b4459a567056b4d3f86">errors.h</a>
+<li>kEpidSigRevokedInVerifierRl
+: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a486e052baa99c6c25ae5d5cc710de298">errors.h</a>
</li>
<li>kEpidSigValid
: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab45ad60085d03c03ea30b40a0519897e">errors.h</a>
@@ -123,15 +135,24 @@ $(document).ready(function(){initNavTree('globals_eval.html','');});
<li>kGroupRlRequestFile
: <a class="el" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbab772fa1e3f221af125ffb34b86b3f24c">file_parser.h</a>
</li>
+<li>kInvalidHashAlg
+: <a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a68b2137c7946583a99f0dac2286523eb">types.h</a>
+</li>
<li>kIssuingCaPubKeyFile
: <a class="el" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac24554caafe2db01e2daed413188cd92">file_parser.h</a>
</li>
+<li>kNumEpidVersions
+: <a class="el" href="group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da8bbd27765997dd10f1c0378dbecef01d">file_parser.h</a>
+</li>
<li>kNumFileTypes
: <a class="el" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac6d742ea3dd3b17f6d763970ac84b811">file_parser.h</a>
</li>
<li>kPrintUtilAnnotated
: <a class="el" href="group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ae2d5345c14f57fc992a613003c3c443d">printutils.h</a>
</li>
+<li>kPrintUtilFormatCount
+: <a class="el" href="group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ade23610605d0ba7dd48db5060e28995a">printutils.h</a>
+</li>
<li>kPrintUtilUnannotated
: <a class="el" href="group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83aeb475b793d8d357087d7fcc74702ffae">printutils.h</a>
</li>
diff --git a/doc/html/globals_f.html b/doc/html/globals_f.html
index 7b7f7bf..a7623e4 100644
--- a/doc/html/globals_f.html
+++ b/doc/html/globals_f.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -64,51 +64,49 @@ $(document).ready(function(){initNavTree('globals_f.html','');});
: <a class="el" href="stdtypes_8h.html#a65e9886d74aaee76545e83dd09011727">stdtypes.h</a>
</li>
<li>FfAdd()
-: <a class="el" href="group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b">finitefield.h</a>
+: <a class="el" href="group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b">finitefield.h</a>
</li>
<li>FfElement
: <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">finitefield.h</a>
</li>
<li>FfExp()
-: <a class="el" href="group___finite_field_primitives.html#gaf0ddbc1bad048d67771cba119eb44a6c">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#gaf0ddbc1bad048d67771cba119eb44a6c">finitefield.h</a>
+: <a class="el" href="group___finite_field_primitives.html#gaf0ddbc1bad048d67771cba119eb44a6c">finitefield.h</a>
</li>
<li>FfGetRandom()
: <a class="el" href="group___finite_field_primitives.html#ga6622db072782fd9e53b4d59dd3dbd8e8">finitefield.h</a>
-, <a class="el" href="group___finite_field_primitives.html#ga6622db072782fd9e53b4d59dd3dbd8e8">finitefield.c</a>
</li>
<li>FfHash()
-: <a class="el" href="group___finite_field_primitives.html#ga18a952cebb4a1274c73e6cb0c19e8aea">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga18a952cebb4a1274c73e6cb0c19e8aea">finitefield.h</a>
+: <a class="el" href="group___finite_field_primitives.html#ga18a952cebb4a1274c73e6cb0c19e8aea">finitefield.h</a>
</li>
<li>FfInv()
-: <a class="el" href="group___finite_field_primitives.html#ga26069d035d0f6ade33af2b5d5c14949a">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga26069d035d0f6ade33af2b5d5c14949a">finitefield.h</a>
+: <a class="el" href="group___finite_field_primitives.html#ga26069d035d0f6ade33af2b5d5c14949a">finitefield.h</a>
</li>
<li>FfIsEqual()
-: <a class="el" href="group___finite_field_primitives.html#gaed2acb8583e9c9f6b49fdb660c672625">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#gaed2acb8583e9c9f6b49fdb660c672625">finitefield.h</a>
+: <a class="el" href="group___finite_field_primitives.html#gaed2acb8583e9c9f6b49fdb660c672625">finitefield.h</a>
</li>
<li>FfIsZero()
: <a class="el" href="group___finite_field_primitives.html#ga20d9140e5670d679ef8183d9b5115f53">finitefield.h</a>
-, <a class="el" href="group___finite_field_primitives.html#ga20d9140e5670d679ef8183d9b5115f53">finitefield.c</a>
</li>
<li>FfMul()
-: <a class="el" href="group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5">finitefield.h</a>
+: <a class="el" href="group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5">finitefield.h</a>
</li>
<li>FfMultiExp()
: <a class="el" href="group___finite_field_primitives.html#ga84d21decc1c957bcf6e98e1492eb2ac3">finitefield.h</a>
-, <a class="el" href="group___finite_field_primitives.html#ga84d21decc1c957bcf6e98e1492eb2ac3">finitefield.c</a>
+</li>
+<li>FfMultiExpBn()
+: <a class="el" href="group___finite_field_primitives.html#ga1ef46fc83f9c11263a2aa1ec906c9144">finitefield.h</a>
</li>
<li>FfNeg()
: <a class="el" href="group___finite_field_primitives.html#gae7a8c7503b6fc7a41bcaab4d45ca37b2">finitefield.h</a>
-, <a class="el" href="group___finite_field_primitives.html#gae7a8c7503b6fc7a41bcaab4d45ca37b2">finitefield.c</a>
+</li>
+<li>FfSqrt()
+: <a class="el" href="group___finite_field_primitives.html#ga39892fe2ab431e166dbbcf57756660f6">finitefield.h</a>
</li>
<li>FfSscmMultiExp()
-: <a class="el" href="group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634">finitefield.h</a>
+: <a class="el" href="group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634">finitefield.h</a>
+</li>
+<li>FfSub()
+: <a class="el" href="group___finite_field_primitives.html#ga59d20610f245ff4bc3a17b7bfe289991">finitefield.h</a>
</li>
<li>FiniteField
: <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">finitefield.h</a>
diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html
index 786416a..e172435 100644
--- a/doc/html/globals_func.html
+++ b/doc/html/globals_func.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -59,10 +59,432 @@ $(document).ready(function(){initNavTree('globals_func.html','');});
<div class="contents">
&#160;
-<h3><a class="anchor" id="index_a"></a>- a -</h3><ul>
-<li>AddBasename()
-: <a class="el" href="member_2context_8c.html#a9ef563fb256bbdd0a08358fbfa0bde10">context.c</a>
-, <a class="el" href="member_2context_8h.html#a9ef563fb256bbdd0a08358fbfa0bde10">context.h</a>
+<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
+<li>BigNumAdd()
+: <a class="el" href="group___big_num_primitives.html#gae70fd9b3026f0ab3c7e9601d0a3186b8">bignum.h</a>
+</li>
+<li>BigNumDiv()
+: <a class="el" href="group___big_num_primitives.html#ga166134085464b0df2c8efcfccf8ec573">bignum.h</a>
+</li>
+<li>BigNumIsEven()
+: <a class="el" href="group___big_num_primitives.html#gaf0366e47226563b17fcbc8e3ed766084">bignum.h</a>
+</li>
+<li>BigNumIsZero()
+: <a class="el" href="group___big_num_primitives.html#gacde6564a814617a96985b379be0dfabb">bignum.h</a>
+</li>
+<li>BigNumMod()
+: <a class="el" href="group___big_num_primitives.html#ga7dd6038987210d10bf843602fef0c929">bignum.h</a>
+</li>
+<li>BigNumMul()
+: <a class="el" href="group___big_num_primitives.html#ga03c89b8b8dd87de2c0f4b5822145d317">bignum.h</a>
+</li>
+<li>BigNumPow2N()
+: <a class="el" href="group___big_num_primitives.html#gafd64b66fc85dab0005f4a1bb67bdf7b4">bignum.h</a>
+</li>
+<li>BigNumSub()
+: <a class="el" href="group___big_num_primitives.html#gacbec9669ab0fe768e2be74dcaca397ea">bignum.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
+<li>DeleteBigNum()
+: <a class="el" href="group___big_num_primitives.html#ga2d17600068b1d94000635c6644258a03">bignum.h</a>
+</li>
+<li>DeleteEcGroup()
+: <a class="el" href="group___ec_group_primitives.html#gab7af276256c27610eda85ff432b846ea">ecgroup.h</a>
+</li>
+<li>DeleteEcPoint()
+: <a class="el" href="group___ec_group_primitives.html#ga8cb086d792bffb79b3ca07e6ca4ce0e7">ecgroup.h</a>
+</li>
+<li>DeleteEpid11PairingState()
+: <a class="el" href="group___epid11_pairing_primitives.html#gaa3457d6f85889bc714910252fd21c758">tatepairing.h</a>
+</li>
+<li>DeleteFfElement()
+: <a class="el" href="group___finite_field_primitives.html#ga1bad3c6945d1d709fceb07a1dd03000e">finitefield.h</a>
+</li>
+<li>DeleteFiniteField()
+: <a class="el" href="group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f">finitefield.h</a>
+</li>
+<li>DeletePairingState()
+: <a class="el" href="group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d">pairing.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
+<li>EcdsaSignBuffer()
+: <a class="el" href="group___ecdsa_primitives.html#ga67091ecae643c1b8a0b0a4946eda7afe">ecdsa.h</a>
+</li>
+<li>EcdsaVerifyBuffer()
+: <a class="el" href="group___ecdsa_primitives.html#gaab68de7291db6e42a01e99c2fa40057f">ecdsa.h</a>
+</li>
+<li>EcExp()
+: <a class="el" href="group___ec_group_primitives.html#ga01bf8d6fa60a2e445490966b3a06c270">ecgroup.h</a>
+</li>
+<li>EcGetRandom()
+: <a class="el" href="group___ec_group_primitives.html#ga3f96c43d14d24de0f7a5e214aef64196">ecgroup.h</a>
+</li>
+<li>EcHash()
+: <a class="el" href="group___ec_group_primitives.html#gadc22ee07864a7ee681a881029b69d76a">ecgroup.h</a>
+</li>
+<li>EcInGroup()
+: <a class="el" href="group___ec_group_primitives.html#ga4d0f32aede3066eae500241b387bd970">ecgroup.h</a>
+</li>
+<li>EcInverse()
+: <a class="el" href="group___ec_group_primitives.html#ga0b6d7a3398251e9352fb29ef4abef466">ecgroup.h</a>
+</li>
+<li>EcIsEqual()
+: <a class="el" href="group___ec_group_primitives.html#gad3b3c63c48fa24e8dea07837b05bc061">ecgroup.h</a>
+</li>
+<li>EcIsIdentity()
+: <a class="el" href="group___ec_group_primitives.html#ga9cf15b34bc4ff12e58b169dd989d8210">ecgroup.h</a>
+</li>
+<li>EcMakePoint()
+: <a class="el" href="group___ec_group_primitives.html#ga8a6114a48214a327d4ec04fd25e5940e">ecgroup.h</a>
+</li>
+<li>EcMul()
+: <a class="el" href="group___ec_group_primitives.html#ga25c9013cc76907d73765eb7a96aa8c96">ecgroup.h</a>
+</li>
+<li>EcMultiExp()
+: <a class="el" href="group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4">ecgroup.h</a>
+</li>
+<li>EcMultiExpBn()
+: <a class="el" href="group___ec_group_primitives.html#ga76d24378455eb96a3257fe8045c0993a">ecgroup.h</a>
+</li>
+<li>EcSscmExp()
+: <a class="el" href="group___ec_group_primitives.html#gaf3b6a548aa6f0d4f028a14feca251f57">ecgroup.h</a>
+</li>
+<li>EcSscmMultiExp()
+: <a class="el" href="group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4">ecgroup.h</a>
+</li>
+<li>Epid11AreSigsLinked()
+: <a class="el" href="group___epid11_verifier_module.html#gab0b6560b226a37321f5ca5d4fb55eba7">api.h</a>
+</li>
+<li>Epid11CheckPrivRlEntry()
+: <a class="el" href="group___epid11_verifier_module.html#ga0b79c79d09e3551158e1c38c7c335929">api.h</a>
+</li>
+<li>Epid11EcHash()
+: <a class="el" href="group___ec_group_primitives.html#gadf83fa559585375faad9a8b1559249bc">ecgroup.h</a>
+</li>
+<li>Epid11NrVerify()
+: <a class="el" href="group___epid11_verifier_module.html#ga3a2e320d7de6156b2ce9d73e9cdce813">api.h</a>
+</li>
+<li>Epid11Pairing()
+: <a class="el" href="group___epid11_pairing_primitives.html#gaa4076dfe25e8e61ac6753333a322c059">tatepairing.h</a>
+</li>
+<li>Epid11ParseGroupPubKeyFile()
+: <a class="el" href="group___epid11_file_parser_module.html#ga1f92d1cb6bd7d9815711fde515b40a4c">file_parser.h</a>
+</li>
+<li>Epid11ParseGroupRlFile()
+: <a class="el" href="group___epid11_file_parser_module.html#gae28a844eb68828480b2a76fcb7d252a3">file_parser.h</a>
+</li>
+<li>Epid11ParsePrivRlFile()
+: <a class="el" href="group___epid11_file_parser_module.html#gae682077d315c39ed298ef198fd738546">file_parser.h</a>
+</li>
+<li>Epid11ParseSigRlFile()
+: <a class="el" href="group___epid11_file_parser_module.html#gac3f6daaa5333627d4efe5438c1fe8868">file_parser.h</a>
+</li>
+<li>Epid11VerifierCreate()
+: <a class="el" href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8">api.h</a>
+</li>
+<li>Epid11VerifierDelete()
+: <a class="el" href="group___epid11_verifier_module.html#ga63cae8d5abcf4d7e3af4157de18998f1">api.h</a>
+</li>
+<li>Epid11VerifierSetBasename()
+: <a class="el" href="group___epid11_verifier_module.html#ga0cb6d30df527ee0d8f0a1b68d2b7c0c0">api.h</a>
+</li>
+<li>Epid11VerifierSetGroupRl()
+: <a class="el" href="group___epid11_verifier_module.html#ga809c777908b2f9d029062d9424cb5f65">api.h</a>
+</li>
+<li>Epid11VerifierSetPrivRl()
+: <a class="el" href="group___epid11_verifier_module.html#gaffbe6ac2bc7236ad65126a17ebdceb14">api.h</a>
+</li>
+<li>Epid11VerifierSetSigRl()
+: <a class="el" href="group___epid11_verifier_module.html#gaff5a014b0334be7e8583f0f99cb5e9b8">api.h</a>
+</li>
+<li>Epid11VerifierWritePrecomp()
+: <a class="el" href="group___epid11_verifier_module.html#ga241520cb925e5be89893a2037451cf1c">api.h</a>
+</li>
+<li>Epid11Verify()
+: <a class="el" href="group___epid11_verifier_module.html#gafe5ad6bde38ad0c3e0a9960975fd5216">api.h</a>
+</li>
+<li>Epid11VerifyBasicSig()
+: <a class="el" href="group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070">api.h</a>
+</li>
+<li>EpidAddPreSigs()
+: <a class="el" href="group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236">api.h</a>
+</li>
+<li>EpidAreSigsLinked()
+: <a class="el" href="group___epid_verifier_module.html#gae44bd8acbc1e7205aeedff0c7e2632a8">api.h</a>
+</li>
+<li>EpidBlacklistSig()
+: <a class="el" href="group___epid_verifier_module.html#ga8eaeb9f4a34e9e37ccdf342919f38c69">api.h</a>
+</li>
+<li>EpidCheckPrivRlEntry()
+: <a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea">api.h</a>
+</li>
+<li>EpidDecompressPrivKey()
+: <a class="el" href="group___epid_member_module.html#gaf8cd05388f017486f14da2ee48d067ef">api.h</a>
+</li>
+<li>EpidGetNumPreSigs()
+: <a class="el" href="group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075">api.h</a>
+</li>
+<li>EpidGetSigSize()
+: <a class="el" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000">api.h</a>
+</li>
+<li>EpidGetVerifierRlSize()
+: <a class="el" href="group___epid_verifier_module.html#ga2a75c7d5775e852a7b6e24178dd4054f">api.h</a>
+</li>
+<li>EpidIsPrivKeyInGroup()
+: <a class="el" href="group___epid_member_module.html#ga8e3f201d1e9dc668659e08a3bdf543b6">api.h</a>
+</li>
+<li>EpidMemberCreate()
+: <a class="el" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb">api.h</a>
+</li>
+<li>EpidMemberDelete()
+: <a class="el" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">api.h</a>
+</li>
+<li>EpidMemberSetHashAlg()
+: <a class="el" href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf">api.h</a>
+</li>
+<li>EpidMemberWritePrecomp()
+: <a class="el" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">api.h</a>
+</li>
+<li>EpidNrProve()
+: <a class="el" href="group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc">api.h</a>
+</li>
+<li>EpidNrVerify()
+: <a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700">api.h</a>
+</li>
+<li>EpidParseFileHeader()
+: <a class="el" href="group___file_parser.html#ga8e38d1102eb1dd9b5af2e2f79236da55">file_parser.h</a>
+</li>
+<li>EpidParseGroupPubKeyFile()
+: <a class="el" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">file_parser.h</a>
+</li>
+<li>EpidParseGroupRlFile()
+: <a class="el" href="group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f">file_parser.h</a>
+</li>
+<li>EpidParsePrivRlFile()
+: <a class="el" href="group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e">file_parser.h</a>
+</li>
+<li>EpidParseSigRlFile()
+: <a class="el" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">file_parser.h</a>
+</li>
+<li>EpidRegisterBaseName()
+: <a class="el" href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d">api.h</a>
+</li>
+<li>EpidRequestJoin()
+: <a class="el" href="group___epid_member_module.html#ga13dd0d72be9babf8194d472d7712a361">api.h</a>
+</li>
+<li>EpidSign()
+: <a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640">api.h</a>
+</li>
+<li>EpidSignBasic()
+: <a class="el" href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa">api.h</a>
+</li>
+<li>EpidStatusToString()
+: <a class="el" href="group___error_codes.html#ga59e8680ce52509302fd58a987e45004d">errors.h</a>
+</li>
+<li>EpidVerifierCreate()
+: <a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">api.h</a>
+</li>
+<li>EpidVerifierDelete()
+: <a class="el" href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12">api.h</a>
+</li>
+<li>EpidVerifierSetBasename()
+: <a class="el" href="group___epid_verifier_module.html#ga1c3810ef361da678a1f77823bd9c37a6">api.h</a>
+</li>
+<li>EpidVerifierSetGroupRl()
+: <a class="el" href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">api.h</a>
+</li>
+<li>EpidVerifierSetHashAlg()
+: <a class="el" href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92">api.h</a>
+</li>
+<li>EpidVerifierSetPrivRl()
+: <a class="el" href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e">api.h</a>
+</li>
+<li>EpidVerifierSetSigRl()
+: <a class="el" href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf">api.h</a>
+</li>
+<li>EpidVerifierSetVerifierRl()
+: <a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a">api.h</a>
+</li>
+<li>EpidVerifierWritePrecomp()
+: <a class="el" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">api.h</a>
+</li>
+<li>EpidVerify()
+: <a class="el" href="group___epid_verifier_module.html#gae3f9c37628e18b880d8bbee3e7f55064">api.h</a>
+</li>
+<li>EpidVerifyBasicSig()
+: <a class="el" href="group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e">api.h</a>
+</li>
+<li>EpidWritePreSigs()
+: <a class="el" href="group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d">api.h</a>
+</li>
+<li>EpidWriteVerifierRl()
+: <a class="el" href="group___epid_verifier_module.html#gac857bff47e7d80363eac15285471fe81">api.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
+<li>FfAdd()
+: <a class="el" href="group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b">finitefield.h</a>
+</li>
+<li>FfExp()
+: <a class="el" href="group___finite_field_primitives.html#gaf0ddbc1bad048d67771cba119eb44a6c">finitefield.h</a>
+</li>
+<li>FfGetRandom()
+: <a class="el" href="group___finite_field_primitives.html#ga6622db072782fd9e53b4d59dd3dbd8e8">finitefield.h</a>
+</li>
+<li>FfHash()
+: <a class="el" href="group___finite_field_primitives.html#ga18a952cebb4a1274c73e6cb0c19e8aea">finitefield.h</a>
+</li>
+<li>FfInv()
+: <a class="el" href="group___finite_field_primitives.html#ga26069d035d0f6ade33af2b5d5c14949a">finitefield.h</a>
+</li>
+<li>FfIsEqual()
+: <a class="el" href="group___finite_field_primitives.html#gaed2acb8583e9c9f6b49fdb660c672625">finitefield.h</a>
+</li>
+<li>FfIsZero()
+: <a class="el" href="group___finite_field_primitives.html#ga20d9140e5670d679ef8183d9b5115f53">finitefield.h</a>
+</li>
+<li>FfMul()
+: <a class="el" href="group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5">finitefield.h</a>
+</li>
+<li>FfMultiExp()
+: <a class="el" href="group___finite_field_primitives.html#ga84d21decc1c957bcf6e98e1492eb2ac3">finitefield.h</a>
+</li>
+<li>FfMultiExpBn()
+: <a class="el" href="group___finite_field_primitives.html#ga1ef46fc83f9c11263a2aa1ec906c9144">finitefield.h</a>
+</li>
+<li>FfNeg()
+: <a class="el" href="group___finite_field_primitives.html#gae7a8c7503b6fc7a41bcaab4d45ca37b2">finitefield.h</a>
+</li>
+<li>FfSqrt()
+: <a class="el" href="group___finite_field_primitives.html#ga39892fe2ab431e166dbbcf57756660f6">finitefield.h</a>
+</li>
+<li>FfSscmMultiExp()
+: <a class="el" href="group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634">finitefield.h</a>
+</li>
+<li>FfSub()
+: <a class="el" href="group___finite_field_primitives.html#ga59d20610f245ff4bc3a17b7bfe289991">finitefield.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
+<li>InitFfElementFromBn()
+: <a class="el" href="group___finite_field_primitives.html#ga90b2c192708973b54b7a3e82b34536ed">finitefield.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
+<li>NewBigNum()
+: <a class="el" href="group___big_num_primitives.html#gad5f6f262bfd780fed3678bcee16f0aed">bignum.h</a>
+</li>
+<li>NewEcGroup()
+: <a class="el" href="group___ec_group_primitives.html#gaf4e23677dd378ef2e0cf55df79cbdb62">ecgroup.h</a>
+</li>
+<li>NewEcPoint()
+: <a class="el" href="group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb">ecgroup.h</a>
+</li>
+<li>NewEpid11PairingState()
+: <a class="el" href="group___epid11_pairing_primitives.html#ga0ee658e26e9f933ba2ffbf2504dfae7e">tatepairing.h</a>
+</li>
+<li>NewFfElement()
+: <a class="el" href="group___finite_field_primitives.html#gacc54f315ede2dbeb8c5990c024a0de6c">finitefield.h</a>
+</li>
+<li>NewFiniteField()
+: <a class="el" href="group___finite_field_primitives.html#ga7d99fdc5e4573668a5744e49df7ab67c">finitefield.h</a>
+</li>
+<li>NewFiniteFieldViaBinomalExtension()
+: <a class="el" href="group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2">finitefield.h</a>
+</li>
+<li>NewFiniteFieldViaPolynomialExtension()
+: <a class="el" href="group___finite_field_primitives.html#gae69af62a03179718cac81b004549c598">finitefield.h</a>
+</li>
+<li>NewPairingState()
+: <a class="el" href="group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc">pairing.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
+<li>Pairing()
+: <a class="el" href="group___pairing_primitives.html#ga5dd07d13536e27c37eaeee285297066c">pairing.h</a>
+</li>
+<li>PrintBigNum()
+: <a class="el" href="group___epid_print.html#ga45a933b44fc1dfe926e3af89c198070a">printutils.h</a>
+</li>
+<li>PrintBigNumStr()
+: <a class="el" href="group___epid_print.html#ga5f249c594ed12e4a9b11b7bc101da85d">printutils.h</a>
+</li>
+<li>PrintEcPoint()
+: <a class="el" href="group___epid_print.html#ga0d6377d9c1651d0101ec6b61feaa78ca">printutils.h</a>
+</li>
+<li>PrintFfElement()
+: <a class="el" href="group___epid_print.html#gaa3b1cbbfc6f78562658953113e5798cf">printutils.h</a>
+</li>
+<li>PrintFpElemStr()
+: <a class="el" href="group___epid_print.html#gae553c3a156a0e4968b89635ab0757580">printutils.h</a>
+</li>
+<li>PrintFq12ElemStr()
+: <a class="el" href="group___epid_print.html#gaf185fe3df270cd8b4a2969bf3cfc5d5f">printutils.h</a>
+</li>
+<li>PrintFq2ElemStr()
+: <a class="el" href="group___epid_print.html#ga883a834ab1703365bb0bca4abd3104de">printutils.h</a>
+</li>
+<li>PrintFq6ElemStr()
+: <a class="el" href="group___epid_print.html#ga3f2961ef6b4c44a6205d422d8a293476">printutils.h</a>
+</li>
+<li>PrintFqElemStr()
+: <a class="el" href="group___epid_print.html#ga6c9fea48fa0477f4a98abb50f891a5e4">printutils.h</a>
+</li>
+<li>PrintG1ElemStr()
+: <a class="el" href="group___epid_print.html#ga87168a3ce5306f9839b8e8d6c9a5f84f">printutils.h</a>
+</li>
+<li>PrintG2ElemStr()
+: <a class="el" href="group___epid_print.html#gab76a4cf0385dc4a76bb56ee9f0e3e87a">printutils.h</a>
+</li>
+<li>PrintGtElemStr()
+: <a class="el" href="group___epid_print.html#ga138cd388247a58680d4701d59d6976d2">printutils.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
+<li>ReadBigNum()
+: <a class="el" href="group___big_num_primitives.html#ga808cf477b70ed06358b11756bfe36024">bignum.h</a>
+</li>
+<li>ReadEcPoint()
+: <a class="el" href="group___ec_group_primitives.html#ga2d433f567fa2419465a49604f4da21ad">ecgroup.h</a>
+</li>
+<li>ReadFfElement()
+: <a class="el" href="group___finite_field_primitives.html#ga884d9e1baadf29a410244a735853e3c7">finitefield.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
+<li>Sha256MessageDigest()
+: <a class="el" href="group___hash_primitives.html#ga86d62aac9efd7445acee311b41846c6c">hash.h</a>
+</li>
+</ul>
+
+
+<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
+<li>WriteBigNum()
+: <a class="el" href="group___big_num_primitives.html#ga79d86c872fe8da0f217e3ba069f98d38">bignum.h</a>
+</li>
+<li>WriteEcPoint()
+: <a class="el" href="group___ec_group_primitives.html#ga4bb7d6691ffbb6e947c1068453e27fbd">ecgroup.h</a>
+</li>
+<li>WriteFfElement()
+: <a class="el" href="group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900">finitefield.h</a>
</li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/globals_func_b.html b/doc/html/globals_func_b.html
deleted file mode 100644
index 452e4ac..0000000
--- a/doc/html/globals_func_b.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_func_b.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_b"></a>- b -</h3><ul>
-<li>BigNumAdd()
-: <a class="el" href="group___big_num_primitives.html#gae70fd9b3026f0ab3c7e9601d0a3186b8">bignum.c</a>
-, <a class="el" href="group___big_num_primitives.html#gae70fd9b3026f0ab3c7e9601d0a3186b8">bignum.h</a>
-</li>
-<li>BigNumMod()
-: <a class="el" href="group___big_num_primitives.html#ga7dd6038987210d10bf843602fef0c929">bignum.h</a>
-, <a class="el" href="group___big_num_primitives.html#ga7dd6038987210d10bf843602fef0c929">bignum.c</a>
-</li>
-<li>BigNumMul()
-: <a class="el" href="group___big_num_primitives.html#ga03c89b8b8dd87de2c0f4b5822145d317">bignum.c</a>
-, <a class="el" href="group___big_num_primitives.html#ga03c89b8b8dd87de2c0f4b5822145d317">bignum.h</a>
-</li>
-<li>BigNumSub()
-: <a class="el" href="group___big_num_primitives.html#gacbec9669ab0fe768e2be74dcaca397ea">bignum.h</a>
-, <a class="el" href="group___big_num_primitives.html#gacbec9669ab0fe768e2be74dcaca397ea">bignum.c</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals_func_c.html b/doc/html/globals_func_c.html
deleted file mode 100644
index 032b6ee..0000000
--- a/doc/html/globals_func_c.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_func_c.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_c"></a>- c -</h3><ul>
-<li>CalculateCommitmentHash()
-: <a class="el" href="group___epid_common.html#ga23f8ea0f7529e8e7a81bd88e607dda01">commitment.c</a>
-, <a class="el" href="group___epid_common.html#ga23f8ea0f7529e8e7a81bd88e607dda01">commitment.h</a>
-</li>
-<li>ContainsBasename()
-: <a class="el" href="member_2context_8h.html#a15f1294cb5004433360eb6d1ab0b3322">context.h</a>
-, <a class="el" href="member_2context_8c.html#a15f1294cb5004433360eb6d1ab0b3322">context.c</a>
-</li>
-<li>CreateEpid2Params()
-: <a class="el" href="group___epid_common.html#ga5c396a5ac8a0e5ec1e02330c53420dce">epid2params.h</a>
-</li>
-<li>CreateGroupPubKey()
-: <a class="el" href="group___epid_common.html#ga20a575d3d538b0bac654fd57f20e2b30">grouppubkey.h</a>
-, <a class="el" href="group___epid_common.html#ga20a575d3d538b0bac654fd57f20e2b30">grouppubkey.c</a>
-</li>
-<li>CreatePrivKey()
-: <a class="el" href="group___epid_common.html#gae51985a0e811f4bbb2d70b62e35b881e">privkey.c</a>
-, <a class="el" href="group___epid_common.html#gae51985a0e811f4bbb2d70b62e35b881e">privkey.h</a>
-</li>
-<li>CreateStack()
-: <a class="el" href="group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58">stack.h</a>
-, <a class="el" href="group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58">stack.c</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals_func_d.html b/doc/html/globals_func_d.html
deleted file mode 100644
index b6f814e..0000000
--- a/doc/html/globals_func_d.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_func_d.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_d"></a>- d -</h3><ul>
-<li>DeleteBasenames()
-: <a class="el" href="member_2context_8c.html#a5f956a682bdde4ea1459e01beae0e9f0">context.c</a>
-, <a class="el" href="member_2context_8h.html#a5f956a682bdde4ea1459e01beae0e9f0">context.h</a>
-</li>
-<li>DeleteBigNum()
-: <a class="el" href="group___big_num_primitives.html#ga2d17600068b1d94000635c6644258a03">bignum.h</a>
-, <a class="el" href="group___big_num_primitives.html#ga2d17600068b1d94000635c6644258a03">bignum.c</a>
-</li>
-<li>DeleteEcGroup()
-: <a class="el" href="group___ec_group_primitives.html#gab7af276256c27610eda85ff432b846ea">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#gab7af276256c27610eda85ff432b846ea">ecgroup.h</a>
-</li>
-<li>DeleteEcPoint()
-: <a class="el" href="group___ec_group_primitives.html#ga8cb086d792bffb79b3ca07e6ca4ce0e7">ecgroup.h</a>
-, <a class="el" href="group___ec_group_primitives.html#ga8cb086d792bffb79b3ca07e6ca4ce0e7">ecgroup.c</a>
-</li>
-<li>DeleteEpid2Params()
-: <a class="el" href="group___epid_common.html#gac22664b5f7df5cd4da1bd7b1b1e7912f">epid2params.c</a>
-, <a class="el" href="group___epid_common.html#gac22664b5f7df5cd4da1bd7b1b1e7912f">epid2params.h</a>
-</li>
-<li>DeleteFfElement()
-: <a class="el" href="group___finite_field_primitives.html#ga1bad3c6945d1d709fceb07a1dd03000e">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga1bad3c6945d1d709fceb07a1dd03000e">finitefield.h</a>
-</li>
-<li>DeleteFiniteField()
-: <a class="el" href="group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f">finitefield.h</a>
-</li>
-<li>DeleteGroupPubKey()
-: <a class="el" href="group___epid_common.html#ga07c9b47d326ee784aecb78195adffb8b">grouppubkey.h</a>
-, <a class="el" href="group___epid_common.html#ga07c9b47d326ee784aecb78195adffb8b">grouppubkey.c</a>
-</li>
-<li>DeletePairingState()
-: <a class="el" href="group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d">pairing.c</a>
-, <a class="el" href="group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d">pairing.h</a>
-</li>
-<li>DeletePrivKey()
-: <a class="el" href="group___epid_common.html#ga53db100214e65e362fa426508a240d12">privkey.c</a>
-, <a class="el" href="group___epid_common.html#ga53db100214e65e362fa426508a240d12">privkey.h</a>
-</li>
-<li>DeleteStack()
-: <a class="el" href="group___epid_common.html#ga3335a4754825c54840263aa4b2a9bf67">stack.h</a>
-, <a class="el" href="group___epid_common.html#ga3335a4754825c54840263aa4b2a9bf67">stack.c</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals_func_e.html b/doc/html/globals_func_e.html
deleted file mode 100644
index e0bd93d..0000000
--- a/doc/html/globals_func_e.html
+++ /dev/null
@@ -1,287 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_func_e.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_e"></a>- e -</h3><ul>
-<li>eccontains()
-: <a class="el" href="ecgroup_8c.html#ac0a2b4aa2484318938498e29c8ee4a9b">ecgroup.c</a>
-</li>
-<li>EcdsaSignBuffer()
-: <a class="el" href="group___ecdsa_primitives.html#ga67091ecae643c1b8a0b0a4946eda7afe">ecdsa.h</a>
-, <a class="el" href="group___ecdsa_primitives.html#ga67091ecae643c1b8a0b0a4946eda7afe">ecdsa_sign.c</a>
-</li>
-<li>EcdsaVerifyBuffer()
-: <a class="el" href="group___ecdsa_primitives.html#gaab68de7291db6e42a01e99c2fa40057f">ecdsa.h</a>
-, <a class="el" href="group___ecdsa_primitives.html#gaab68de7291db6e42a01e99c2fa40057f">ecdsa_verify.c</a>
-</li>
-<li>EcExp()
-: <a class="el" href="group___ec_group_primitives.html#ga01bf8d6fa60a2e445490966b3a06c270">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga01bf8d6fa60a2e445490966b3a06c270">ecgroup.h</a>
-</li>
-<li>EcGetRandom()
-: <a class="el" href="group___ec_group_primitives.html#ga3f96c43d14d24de0f7a5e214aef64196">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga3f96c43d14d24de0f7a5e214aef64196">ecgroup.h</a>
-</li>
-<li>EcHash()
-: <a class="el" href="group___ec_group_primitives.html#gadc22ee07864a7ee681a881029b69d76a">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#gadc22ee07864a7ee681a881029b69d76a">ecgroup.h</a>
-</li>
-<li>EcInGroup()
-: <a class="el" href="group___ec_group_primitives.html#ga4d0f32aede3066eae500241b387bd970">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga4d0f32aede3066eae500241b387bd970">ecgroup.h</a>
-</li>
-<li>EcInverse()
-: <a class="el" href="group___ec_group_primitives.html#ga0b6d7a3398251e9352fb29ef4abef466">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga0b6d7a3398251e9352fb29ef4abef466">ecgroup.h</a>
-</li>
-<li>EcIsEqual()
-: <a class="el" href="group___ec_group_primitives.html#gad3b3c63c48fa24e8dea07837b05bc061">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#gad3b3c63c48fa24e8dea07837b05bc061">ecgroup.h</a>
-</li>
-<li>EcIsIdentity()
-: <a class="el" href="group___ec_group_primitives.html#ga9cf15b34bc4ff12e58b169dd989d8210">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga9cf15b34bc4ff12e58b169dd989d8210">ecgroup.h</a>
-</li>
-<li>EcMakePoint()
-: <a class="el" href="group___ec_group_primitives.html#ga8a6114a48214a327d4ec04fd25e5940e">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga8a6114a48214a327d4ec04fd25e5940e">ecgroup.h</a>
-</li>
-<li>EcMul()
-: <a class="el" href="group___ec_group_primitives.html#ga25c9013cc76907d73765eb7a96aa8c96">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga25c9013cc76907d73765eb7a96aa8c96">ecgroup.h</a>
-</li>
-<li>EcMultiExp()
-: <a class="el" href="group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4">ecgroup.h</a>
-</li>
-<li>EcSscmExp()
-: <a class="el" href="group___ec_group_primitives.html#gaf3b6a548aa6f0d4f028a14feca251f57">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#gaf3b6a548aa6f0d4f028a14feca251f57">ecgroup.h</a>
-</li>
-<li>EcSscmMultiExp()
-: <a class="el" href="group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4">ecgroup.h</a>
-</li>
-<li>EpidAddPreSigs()
-: <a class="el" href="group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236">api.h</a>
-, <a class="el" href="group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236">context.c</a>
-</li>
-<li>EpidAlloc()
-: <a class="el" href="group___epid_common.html#gada170fd890504b013139f4a33033ae4b">memory.c</a>
-, <a class="el" href="group___epid_common.html#gada170fd890504b013139f4a33033ae4b">memory.h</a>
-</li>
-<li>EpidAreSigsLinked()
-: <a class="el" href="group___epid_verifier_module.html#gae44bd8acbc1e7205aeedff0c7e2632a8">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#gae44bd8acbc1e7205aeedff0c7e2632a8">sigs_linked.c</a>
-</li>
-<li>EpidCheckPrivRlEntry()
-: <a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea">check_privrl_entry.c</a>
-</li>
-<li>EpidComputePreSig()
-: <a class="el" href="member_2context_8h.html#a0423e8400abd2171062e4c42b90b8145">context.h</a>
-, <a class="el" href="presig_8c.html#a0423e8400abd2171062e4c42b90b8145">presig.c</a>
-</li>
-<li>EpidDecompressPrivKey()
-: <a class="el" href="group___epid_member_module.html#gaf8cd05388f017486f14da2ee48d067ef">api.h</a>
-, <a class="el" href="group___epid_member_module.html#gaf8cd05388f017486f14da2ee48d067ef">decompress_privkey.c</a>
-</li>
-<li>EpidFree()
-: <a class="el" href="group___epid_common.html#gaeae76709e6bfc80c9d79ec4943ccc1ac">memory.c</a>
-, <a class="el" href="group___epid_common.html#gaeae76709e6bfc80c9d79ec4943ccc1ac">memory.h</a>
-</li>
-<li>EpidGetNumPreSigs()
-: <a class="el" href="group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075">api.h</a>
-, <a class="el" href="group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075">context.c</a>
-</li>
-<li>EpidGetSigSize()
-: <a class="el" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000">api.h</a>
-, <a class="el" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000">get_sigsize.c</a>
-</li>
-<li>EpidIsPrivKeyInGroup()
-: <a class="el" href="group___epid_member_module.html#ga8e3f201d1e9dc668659e08a3bdf543b6">api.h</a>
-, <a class="el" href="group___epid_member_module.html#ga8e3f201d1e9dc668659e08a3bdf543b6">request_join.c</a>
-</li>
-<li>EpidMemberCreate()
-: <a class="el" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb">api.h</a>
-, <a class="el" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb">context.c</a>
-</li>
-<li>EpidMemberDelete()
-: <a class="el" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">api.h</a>
-, <a class="el" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">context.c</a>
-</li>
-<li>EpidMemberSetHashAlg()
-: <a class="el" href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf">api.h</a>
-, <a class="el" href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf">context.c</a>
-</li>
-<li>EpidMemberWritePrecomp()
-: <a class="el" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">api.h</a>
-, <a class="el" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">context.c</a>
-</li>
-<li>EpidNrProve()
-: <a class="el" href="group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc">nr_prove.c</a>
-, <a class="el" href="group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc">api.h</a>
-</li>
-<li>EpidNrVerify()
-: <a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700">nrverify.c</a>
-</li>
-<li>EpidParseGroupPubKeyFile()
-: <a class="el" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">file_parser.h</a>
-, <a class="el" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">file_parser.c</a>
-</li>
-<li>EpidParseGroupRlFile()
-: <a class="el" href="group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f">file_parser.c</a>
-, <a class="el" href="group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f">file_parser.h</a>
-</li>
-<li>EpidParsePrivRlFile()
-: <a class="el" href="group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e">file_parser.c</a>
-, <a class="el" href="group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e">file_parser.h</a>
-</li>
-<li>EpidParseSigRlFile()
-: <a class="el" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">file_parser.c</a>
-, <a class="el" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">file_parser.h</a>
-</li>
-<li>EpidRealloc()
-: <a class="el" href="group___epid_common.html#ga6911838728d546e4a51d7bcb8404525c">memory.c</a>
-, <a class="el" href="group___epid_common.html#ga6911838728d546e4a51d7bcb8404525c">memory.h</a>
-</li>
-<li>EpidRegisterBaseName()
-: <a class="el" href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d">context.c</a>
-, <a class="el" href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d">api.h</a>
-</li>
-<li>EpidRequestJoin()
-: <a class="el" href="group___epid_member_module.html#ga13dd0d72be9babf8194d472d7712a361">api.h</a>
-, <a class="el" href="group___epid_member_module.html#ga13dd0d72be9babf8194d472d7712a361">request_join.c</a>
-</li>
-<li>EpidSign()
-: <a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640">api.h</a>
-, <a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640">sign.c</a>
-</li>
-<li>EpidSignBasic()
-: <a class="el" href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa">api.h</a>
-, <a class="el" href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa">signbasic.c</a>
-</li>
-<li>EpidStatusToString()
-: <a class="el" href="group___error_codes.html#ga59e8680ce52509302fd58a987e45004d">errors.c</a>
-, <a class="el" href="group___error_codes.html#ga59e8680ce52509302fd58a987e45004d">errors.h</a>
-</li>
-<li>EpidVerifierCreate()
-: <a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">context.c</a>
-</li>
-<li>EpidVerifierDelete()
-: <a class="el" href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12">context.c</a>
-</li>
-<li>EpidVerifierSetGroupRl()
-: <a class="el" href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">context.c</a>
-</li>
-<li>EpidVerifierSetHashAlg()
-: <a class="el" href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92">context.c</a>
-, <a class="el" href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92">api.h</a>
-</li>
-<li>EpidVerifierSetPrivRl()
-: <a class="el" href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e">context.c</a>
-</li>
-<li>EpidVerifierSetSigRl()
-: <a class="el" href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf">context.c</a>
-, <a class="el" href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf">api.h</a>
-</li>
-<li>EpidVerifierSetVerifierRl()
-: <a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a">context.c</a>
-</li>
-<li>EpidVerifierWritePrecomp()
-: <a class="el" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">context.c</a>
-, <a class="el" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">api.h</a>
-</li>
-<li>EpidVerify()
-: <a class="el" href="group___epid_verifier_module.html#ga39b240a17f310894e9f5946c9a731798">verify.c</a>
-, <a class="el" href="group___epid_verifier_module.html#ga39b240a17f310894e9f5946c9a731798">api.h</a>
-</li>
-<li>EpidVerifyBasicSig()
-: <a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a">api.h</a>
-, <a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a">verifybasic.c</a>
-</li>
-<li>EpidWritePreSigs()
-: <a class="el" href="group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d">context.c</a>
-, <a class="el" href="group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d">api.h</a>
-</li>
-<li>EpidZeroMemory()
-: <a class="el" href="group___epid_common.html#gad471f600f6032f432b99432fda97a070">memory.h</a>
-, <a class="el" href="group___epid_common.html#gad471f600f6032f432b99432fda97a070">memory.c</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals_func_f.html b/doc/html/globals_func_f.html
deleted file mode 100644
index b3b0673..0000000
--- a/doc/html/globals_func_f.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_func_f.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_f"></a>- f -</h3><ul>
-<li>FfAdd()
-: <a class="el" href="group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b">finitefield.h</a>
-</li>
-<li>FfExp()
-: <a class="el" href="group___finite_field_primitives.html#gaf0ddbc1bad048d67771cba119eb44a6c">finitefield.h</a>
-, <a class="el" href="group___finite_field_primitives.html#gaf0ddbc1bad048d67771cba119eb44a6c">finitefield.c</a>
-</li>
-<li>FfGetRandom()
-: <a class="el" href="group___finite_field_primitives.html#ga6622db072782fd9e53b4d59dd3dbd8e8">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga6622db072782fd9e53b4d59dd3dbd8e8">finitefield.h</a>
-</li>
-<li>FfHash()
-: <a class="el" href="group___finite_field_primitives.html#ga18a952cebb4a1274c73e6cb0c19e8aea">finitefield.h</a>
-, <a class="el" href="group___finite_field_primitives.html#ga18a952cebb4a1274c73e6cb0c19e8aea">finitefield.c</a>
-</li>
-<li>FfInv()
-: <a class="el" href="group___finite_field_primitives.html#ga26069d035d0f6ade33af2b5d5c14949a">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga26069d035d0f6ade33af2b5d5c14949a">finitefield.h</a>
-</li>
-<li>FfIsEqual()
-: <a class="el" href="group___finite_field_primitives.html#gaed2acb8583e9c9f6b49fdb660c672625">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#gaed2acb8583e9c9f6b49fdb660c672625">finitefield.h</a>
-</li>
-<li>FfIsZero()
-: <a class="el" href="group___finite_field_primitives.html#ga20d9140e5670d679ef8183d9b5115f53">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga20d9140e5670d679ef8183d9b5115f53">finitefield.h</a>
-</li>
-<li>FfMul()
-: <a class="el" href="group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5">finitefield.h</a>
-, <a class="el" href="group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5">finitefield.c</a>
-</li>
-<li>FfMultiExp()
-: <a class="el" href="group___finite_field_primitives.html#ga84d21decc1c957bcf6e98e1492eb2ac3">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga84d21decc1c957bcf6e98e1492eb2ac3">finitefield.h</a>
-</li>
-<li>FfNeg()
-: <a class="el" href="group___finite_field_primitives.html#gae7a8c7503b6fc7a41bcaab4d45ca37b2">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#gae7a8c7503b6fc7a41bcaab4d45ca37b2">finitefield.h</a>
-</li>
-<li>FfSscmMultiExp()
-: <a class="el" href="group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634">finitefield.h</a>
-, <a class="el" href="group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634">finitefield.c</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals_func_i.html b/doc/html/globals_func_i.html
deleted file mode 100644
index 26cdb45..0000000
--- a/doc/html/globals_func_i.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_func_i.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
-<li>InitFiniteFieldFromIpp()
-: <a class="el" href="finitefield_8c.html#a4c64c2cce3c0384dd0346049c52b6a62">finitefield.c</a>
-</li>
-<li>IsSigRlValid()
-: <a class="el" href="group___epid_common.html#ga23ec3f6c8b89eb63e04d2b1ec6fd2696">sigrlvalid.h</a>
-, <a class="el" href="group___epid_common.html#ga23ec3f6c8b89eb63e04d2b1ec6fd2696">sigrlvalid.c</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals_func_m.html b/doc/html/globals_func_m.html
deleted file mode 100644
index 58fbba2..0000000
--- a/doc/html/globals_func_m.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_func_m.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
-<li>memcpy_S()
-: <a class="el" href="group___epid_common.html#ga4856121ac4bce4161a015a8a2b4f5b1c">memory.c</a>
-, <a class="el" href="group___epid_common.html#ga4856121ac4bce4161a015a8a2b4f5b1c">memory.h</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals_func_n.html b/doc/html/globals_func_n.html
deleted file mode 100644
index e940ff2..0000000
--- a/doc/html/globals_func_n.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_func_n.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
-<li>NewBigNum()
-: <a class="el" href="group___big_num_primitives.html#gad5f6f262bfd780fed3678bcee16f0aed">bignum.c</a>
-, <a class="el" href="group___big_num_primitives.html#gad5f6f262bfd780fed3678bcee16f0aed">bignum.h</a>
-</li>
-<li>NewEcGroup()
-: <a class="el" href="group___ec_group_primitives.html#gaf4e23677dd378ef2e0cf55df79cbdb62">ecgroup.h</a>
-, <a class="el" href="group___ec_group_primitives.html#gaf4e23677dd378ef2e0cf55df79cbdb62">ecgroup.c</a>
-</li>
-<li>NewEcPoint()
-: <a class="el" href="group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb">ecgroup.h</a>
-</li>
-<li>NewFfElement()
-: <a class="el" href="group___finite_field_primitives.html#gacc54f315ede2dbeb8c5990c024a0de6c">finitefield.h</a>
-, <a class="el" href="group___finite_field_primitives.html#gacc54f315ede2dbeb8c5990c024a0de6c">finitefield.c</a>
-</li>
-<li>NewFiniteField()
-: <a class="el" href="group___finite_field_primitives.html#ga7d99fdc5e4573668a5744e49df7ab67c">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga7d99fdc5e4573668a5744e49df7ab67c">finitefield.h</a>
-</li>
-<li>NewFiniteFieldViaBinomalExtension()
-: <a class="el" href="group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2">finitefield.h</a>
-</li>
-<li>NewFq6()
-: <a class="el" href="epid2params_8c.html#a4df651310b76dd27a30a3bca19d9534f">epid2params.c</a>
-</li>
-<li>NewPairingState()
-: <a class="el" href="group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc">pairing.h</a>
-, <a class="el" href="group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc">pairing.c</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals_func_o.html b/doc/html/globals_func_o.html
deleted file mode 100644
index ec740c2..0000000
--- a/doc/html/globals_func_o.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_func_o.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
-<li>OctStr2Bnu()
-: <a class="el" href="bignum_8c.html#a28eedfb401b5f88317f22417a64ef34c">bignum.c</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals_func_p.html b/doc/html/globals_func_p.html
deleted file mode 100644
index 61f42fd..0000000
--- a/doc/html/globals_func_p.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_func_p.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
-<li>Pairing()
-: <a class="el" href="group___pairing_primitives.html#ga5dd07d13536e27c37eaeee285297066c">pairing.c</a>
-, <a class="el" href="group___pairing_primitives.html#ga5dd07d13536e27c37eaeee285297066c">pairing.h</a>
-</li>
-<li>PrintBigNum()
-: <a class="el" href="group___epid_print.html#ga45a933b44fc1dfe926e3af89c198070a">printutils.h</a>
-, <a class="el" href="group___epid_print.html#ga45a933b44fc1dfe926e3af89c198070a">printutils.c</a>
-</li>
-<li>PrintBigNumStr()
-: <a class="el" href="group___epid_print.html#ga5f249c594ed12e4a9b11b7bc101da85d">printutils.c</a>
-, <a class="el" href="group___epid_print.html#ga5f249c594ed12e4a9b11b7bc101da85d">printutils.h</a>
-</li>
-<li>PrintEcPoint()
-: <a class="el" href="group___epid_print.html#ga0d6377d9c1651d0101ec6b61feaa78ca">printutils.h</a>
-, <a class="el" href="group___epid_print.html#ga0d6377d9c1651d0101ec6b61feaa78ca">printutils.c</a>
-</li>
-<li>PrintFfElement()
-: <a class="el" href="group___epid_print.html#gaa3b1cbbfc6f78562658953113e5798cf">printutils.c</a>
-, <a class="el" href="group___epid_print.html#gaa3b1cbbfc6f78562658953113e5798cf">printutils.h</a>
-</li>
-<li>PrintFpElemStr()
-: <a class="el" href="group___epid_print.html#gae553c3a156a0e4968b89635ab0757580">printutils.c</a>
-, <a class="el" href="group___epid_print.html#gae553c3a156a0e4968b89635ab0757580">printutils.h</a>
-</li>
-<li>PrintFq12ElemStr()
-: <a class="el" href="group___epid_print.html#gaf185fe3df270cd8b4a2969bf3cfc5d5f">printutils.c</a>
-, <a class="el" href="group___epid_print.html#gaf185fe3df270cd8b4a2969bf3cfc5d5f">printutils.h</a>
-</li>
-<li>PrintFq2ElemStr()
-: <a class="el" href="group___epid_print.html#ga883a834ab1703365bb0bca4abd3104de">printutils.h</a>
-, <a class="el" href="group___epid_print.html#ga883a834ab1703365bb0bca4abd3104de">printutils.c</a>
-</li>
-<li>PrintFq6ElemStr()
-: <a class="el" href="group___epid_print.html#ga3f2961ef6b4c44a6205d422d8a293476">printutils.c</a>
-, <a class="el" href="group___epid_print.html#ga3f2961ef6b4c44a6205d422d8a293476">printutils.h</a>
-</li>
-<li>PrintFqElemStr()
-: <a class="el" href="group___epid_print.html#ga6c9fea48fa0477f4a98abb50f891a5e4">printutils.c</a>
-, <a class="el" href="group___epid_print.html#ga6c9fea48fa0477f4a98abb50f891a5e4">printutils.h</a>
-</li>
-<li>PrintG1ElemStr()
-: <a class="el" href="group___epid_print.html#ga87168a3ce5306f9839b8e8d6c9a5f84f">printutils.c</a>
-, <a class="el" href="group___epid_print.html#ga87168a3ce5306f9839b8e8d6c9a5f84f">printutils.h</a>
-</li>
-<li>PrintG2ElemStr()
-: <a class="el" href="group___epid_print.html#gab76a4cf0385dc4a76bb56ee9f0e3e87a">printutils.c</a>
-, <a class="el" href="group___epid_print.html#gab76a4cf0385dc4a76bb56ee9f0e3e87a">printutils.h</a>
-</li>
-<li>PrintGtElemStr()
-: <a class="el" href="group___epid_print.html#ga138cd388247a58680d4701d59d6976d2">printutils.h</a>
-, <a class="el" href="group___epid_print.html#ga138cd388247a58680d4701d59d6976d2">printutils.c</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals_func_r.html b/doc/html/globals_func_r.html
deleted file mode 100644
index f4db740..0000000
--- a/doc/html/globals_func_r.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_func_r.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
-<li>ReadBigNum()
-: <a class="el" href="group___big_num_primitives.html#ga808cf477b70ed06358b11756bfe36024">bignum.c</a>
-, <a class="el" href="group___big_num_primitives.html#ga808cf477b70ed06358b11756bfe36024">bignum.h</a>
-</li>
-<li>ReadEcPoint()
-: <a class="el" href="group___ec_group_primitives.html#ga2d433f567fa2419465a49604f4da21ad">ecgroup.h</a>
-, <a class="el" href="group___ec_group_primitives.html#ga2d433f567fa2419465a49604f4da21ad">ecgroup.c</a>
-</li>
-<li>ReadFfElement()
-: <a class="el" href="group___finite_field_primitives.html#ga884d9e1baadf29a410244a735853e3c7">finitefield.h</a>
-, <a class="el" href="group___finite_field_primitives.html#ga884d9e1baadf29a410244a735853e3c7">finitefield.c</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals_func_s.html b/doc/html/globals_func_s.html
deleted file mode 100644
index 8dad2c4..0000000
--- a/doc/html/globals_func_s.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_func_s.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>SetCalculatedCommitValues()
-: <a class="el" href="group___epid_common.html#ga3f3c3b965dd714179cbc2f8d96678ee0">commitment.c</a>
-, <a class="el" href="group___epid_common.html#ga3f3c3b965dd714179cbc2f8d96678ee0">commitment.h</a>
-</li>
-<li>SetKeySpecificCommitValues()
-: <a class="el" href="group___epid_common.html#ga2d54f4f222e965222024113c0420602d">commitment.h</a>
-</li>
-<li>Sha256MessageDigest()
-: <a class="el" href="group___hash_primitives.html#ga86d62aac9efd7445acee311b41846c6c">hash.h</a>
-, <a class="el" href="group___hash_primitives.html#ga86d62aac9efd7445acee311b41846c6c">sha256.c</a>
-</li>
-<li>StackGetSize()
-: <a class="el" href="group___epid_common.html#gab34066dc882ad63362c43c0790973fdc">stack.h</a>
-, <a class="el" href="group___epid_common.html#gab34066dc882ad63362c43c0790973fdc">stack.c</a>
-</li>
-<li>StackPopN()
-: <a class="el" href="group___epid_common.html#ga8cdde2b366f4473f0a6965bcfea5b6a6">stack.h</a>
-, <a class="el" href="group___epid_common.html#ga8cdde2b366f4473f0a6965bcfea5b6a6">stack.c</a>
-</li>
-<li>StackPushN()
-: <a class="el" href="group___epid_common.html#ga0b4dedb867504e0148aa0e1fdf642b2b">stack.c</a>
-, <a class="el" href="group___epid_common.html#ga0b4dedb867504e0148aa0e1fdf642b2b">stack.h</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals_func_w.html b/doc/html/globals_func_w.html
deleted file mode 100644
index 378005e..0000000
--- a/doc/html/globals_func_w.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Globals</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_func_w.html','');});
-</script>
-<div id="doc-content">
-<div class="contents">
-&#160;
-
-<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
-<li>WriteBigNum()
-: <a class="el" href="group___big_num_primitives.html#ga47f356d816bcb5742ba6d78000861328">bignum.c</a>
-, <a class="el" href="group___big_num_primitives.html#ga47f356d816bcb5742ba6d78000861328">bignum.h</a>
-</li>
-<li>WriteEcPoint()
-: <a class="el" href="group___ec_group_primitives.html#ga4bb7d6691ffbb6e947c1068453e27fbd">ecgroup.h</a>
-, <a class="el" href="group___ec_group_primitives.html#ga4bb7d6691ffbb6e947c1068453e27fbd">ecgroup.c</a>
-</li>
-<li>WriteFfElement()
-: <a class="el" href="group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900">finitefield.h</a>
-, <a class="el" href="group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900">finitefield.c</a>
-</li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/globals_g.html b/doc/html/globals_g.html
index 363836c..73f98a5 100644
--- a/doc/html/globals_g.html
+++ b/doc/html/globals_g.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/globals_h.html b/doc/html/globals_h.html
index e45607a..227a488 100644
--- a/doc/html/globals_h.html
+++ b/doc/html/globals_h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/globals_i.html b/doc/html/globals_i.html
index 6d046c6..cd8c032 100644
--- a/doc/html/globals_i.html
+++ b/doc/html/globals_i.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -60,15 +60,8 @@ $(document).ready(function(){initNavTree('globals_i.html','');});
<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
<h3><a class="anchor" id="index_i"></a>- i -</h3><ul>
-<li>INDENT
-: <a class="el" href="printutils_8c.html#a502b06aa5ad25116c775d201326bad52">printutils.c</a>
-</li>
-<li>InitFiniteFieldFromIpp()
-: <a class="el" href="finitefield_8c.html#a4c64c2cce3c0384dd0346049c52b6a62">finitefield.c</a>
-</li>
-<li>IsSigRlValid()
-: <a class="el" href="group___epid_common.html#ga23ec3f6c8b89eb63e04d2b1ec6fd2696">sigrlvalid.h</a>
-, <a class="el" href="group___epid_common.html#ga23ec3f6c8b89eb63e04d2b1ec6fd2696">sigrlvalid.c</a>
+<li>InitFfElementFromBn()
+: <a class="el" href="group___finite_field_primitives.html#ga90b2c192708973b54b7a3e82b34536ed">finitefield.h</a>
</li>
<li>IssuerNonce
: <a class="el" href="group___epid_types.html#ga55eb2193045bde31af3f551565126042">types.h</a>
diff --git a/doc/html/globals_k.html b/doc/html/globals_k.html
index 0952438..b403cac 100644
--- a/doc/html/globals_k.html
+++ b/doc/html/globals_k.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -60,6 +60,12 @@ $(document).ready(function(){initNavTree('globals_k.html','');});
<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
<h3><a class="anchor" id="index_k"></a>- k -</h3><ul>
+<li>kEpid1x
+: <a class="el" href="group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da5f270e2e8c2412bc07de293023f425cc">file_parser.h</a>
+</li>
+<li>kEpid2x
+: <a class="el" href="group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da6af0ee9d9689f1d4325bdd0beb8a89e2">file_parser.h</a>
+</li>
<li>kEpidBadArgErr
: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf">errors.h</a>
</li>
@@ -73,15 +79,20 @@ $(document).ready(function(){initNavTree('globals_k.html','');});
: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e">errors.h</a>
</li>
<li>kEpidFileTypeCode
-: <a class="el" href="group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33">file_parser.c</a>
-, <a class="el" href="group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33">file_parser.h</a>
+: <a class="el" href="group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33">file_parser.h</a>
</li>
<li>kEpidHashAlgorithmNotSupported
: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad4d4ff24a7ef2cd7a50b8082265e9ff4">errors.h</a>
</li>
+<li>kEpidInconsistentBasenameSetErr
+: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a94ae9c9b9337afd2fefd3b4f9c3160df">errors.h</a>
+</li>
<li>kEpidMathErr
: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6">errors.h</a>
</li>
+<li>kEpidMathQuadraticNonResidueError
+: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab2768a1a5c4374cb1ac6175c09c73129">errors.h</a>
+</li>
<li>kEpidMemAllocErr
: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a11a4d2f1c37064eb663de08dc57bcda8">errors.h</a>
</li>
@@ -100,17 +111,17 @@ $(document).ready(function(){initNavTree('globals_k.html','');});
<li>kEpidSigInvalid
: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8">errors.h</a>
</li>
-<li>kEpidSigRevokedinGroupRl
-: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a2b38f44424cecd7b432194a2012dc9c7">errors.h</a>
+<li>kEpidSigRevokedInGroupRl
+: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aedd43fb4043bef3b515fc23f1d9a5fe5">errors.h</a>
</li>
-<li>kEpidSigRevokedinPrivRl
-: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a780a20821863553b88ca617a6fc0f718">errors.h</a>
+<li>kEpidSigRevokedInPrivRl
+: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1dc7b7e6ff97c7ed9ff4191d76ebd6e1">errors.h</a>
</li>
-<li>kEpidSigRevokedinSigRl
-: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aff83186b61d48f9fee5f691c5b219bc1">errors.h</a>
+<li>kEpidSigRevokedInSigRl
+: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a43c658cbf0d156850d71ce3f8efd461c">errors.h</a>
</li>
-<li>kEpidSigRevokedinVerifierRl
-: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360addbba767bb884b4459a567056b4d3f86">errors.h</a>
+<li>kEpidSigRevokedInVerifierRl
+: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a486e052baa99c6c25ae5d5cc710de298">errors.h</a>
</li>
<li>kEpidSigValid
: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab45ad60085d03c03ea30b40a0519897e">errors.h</a>
@@ -118,6 +129,9 @@ $(document).ready(function(){initNavTree('globals_k.html','');});
<li>kEpidUnderflowErr
: <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a83a867b4f71ee13edbfca2f1b72abbec">errors.h</a>
</li>
+<li>kEpidVersionCode
+: <a class="el" href="group___file_parser.html#gaae808987ce82188dff42baa4e43cab82">file_parser.h</a>
+</li>
<li>kGroupPubKeyFile
: <a class="el" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba1f8d8c4b253403a35c51e05d34a7ca1e">file_parser.h</a>
</li>
@@ -127,15 +141,24 @@ $(document).ready(function(){initNavTree('globals_k.html','');});
<li>kGroupRlRequestFile
: <a class="el" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbab772fa1e3f221af125ffb34b86b3f24c">file_parser.h</a>
</li>
+<li>kInvalidHashAlg
+: <a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a68b2137c7946583a99f0dac2286523eb">types.h</a>
+</li>
<li>kIssuingCaPubKeyFile
: <a class="el" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac24554caafe2db01e2daed413188cd92">file_parser.h</a>
</li>
+<li>kNumEpidVersions
+: <a class="el" href="group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da8bbd27765997dd10f1c0378dbecef01d">file_parser.h</a>
+</li>
<li>kNumFileTypes
: <a class="el" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac6d742ea3dd3b17f6d763970ac84b811">file_parser.h</a>
</li>
<li>kPrintUtilAnnotated
: <a class="el" href="group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ae2d5345c14f57fc992a613003c3c443d">printutils.h</a>
</li>
+<li>kPrintUtilFormatCount
+: <a class="el" href="group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ade23610605d0ba7dd48db5060e28995a">printutils.h</a>
+</li>
<li>kPrintUtilUnannotated
: <a class="el" href="group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83aeb475b793d8d357087d7fcc74702ffae">printutils.h</a>
</li>
diff --git a/doc/html/globals_m.html b/doc/html/globals_m.html
index b688464..4e74e83 100644
--- a/doc/html/globals_m.html
+++ b/doc/html/globals_m.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -60,15 +60,8 @@ $(document).ready(function(){initNavTree('globals_m.html','');});
<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
-<li>MAKE_INDENT
-: <a class="el" href="printutils_8c.html#a91e2eeae06fcf21c3fa4fc0eadf6b0cd">printutils.c</a>
-</li>
-<li>memcpy_S()
-: <a class="el" href="group___epid_common.html#ga4856121ac4bce4161a015a8a2b4f5b1c">memory.c</a>
-, <a class="el" href="group___epid_common.html#ga4856121ac4bce4161a015a8a2b4f5b1c">memory.h</a>
-</li>
-<li>MIN
-: <a class="el" href="memory_8c.html#a3acffbd305ee72dcd4593c0d8af64a4f">memory.c</a>
+<li>MemberCtx
+: <a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">api.h</a>
</li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/globals_n.html b/doc/html/globals_n.html
index 1b72d41..2edd5a5 100644
--- a/doc/html/globals_n.html
+++ b/doc/html/globals_n.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -61,38 +61,31 @@ $(document).ready(function(){initNavTree('globals_n.html','');});
<h3><a class="anchor" id="index_n"></a>- n -</h3><ul>
<li>NewBigNum()
-: <a class="el" href="group___big_num_primitives.html#gad5f6f262bfd780fed3678bcee16f0aed">bignum.c</a>
-, <a class="el" href="group___big_num_primitives.html#gad5f6f262bfd780fed3678bcee16f0aed">bignum.h</a>
+: <a class="el" href="group___big_num_primitives.html#gad5f6f262bfd780fed3678bcee16f0aed">bignum.h</a>
</li>
<li>NewEcGroup()
: <a class="el" href="group___ec_group_primitives.html#gaf4e23677dd378ef2e0cf55df79cbdb62">ecgroup.h</a>
-, <a class="el" href="group___ec_group_primitives.html#gaf4e23677dd378ef2e0cf55df79cbdb62">ecgroup.c</a>
</li>
<li>NewEcPoint()
-: <a class="el" href="group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb">ecgroup.c</a>
-, <a class="el" href="group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb">ecgroup.h</a>
+: <a class="el" href="group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb">ecgroup.h</a>
+</li>
+<li>NewEpid11PairingState()
+: <a class="el" href="group___epid11_pairing_primitives.html#ga0ee658e26e9f933ba2ffbf2504dfae7e">tatepairing.h</a>
</li>
<li>NewFfElement()
: <a class="el" href="group___finite_field_primitives.html#gacc54f315ede2dbeb8c5990c024a0de6c">finitefield.h</a>
-, <a class="el" href="group___finite_field_primitives.html#gacc54f315ede2dbeb8c5990c024a0de6c">finitefield.c</a>
</li>
<li>NewFiniteField()
-: <a class="el" href="group___finite_field_primitives.html#ga7d99fdc5e4573668a5744e49df7ab67c">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga7d99fdc5e4573668a5744e49df7ab67c">finitefield.h</a>
+: <a class="el" href="group___finite_field_primitives.html#ga7d99fdc5e4573668a5744e49df7ab67c">finitefield.h</a>
</li>
<li>NewFiniteFieldViaBinomalExtension()
-: <a class="el" href="group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2">finitefield.h</a>
+: <a class="el" href="group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2">finitefield.h</a>
</li>
-<li>NewFq6()
-: <a class="el" href="epid2params_8c.html#a4df651310b76dd27a30a3bca19d9534f">epid2params.c</a>
+<li>NewFiniteFieldViaPolynomialExtension()
+: <a class="el" href="group___finite_field_primitives.html#gae69af62a03179718cac81b004549c598">finitefield.h</a>
</li>
<li>NewPairingState()
-: <a class="el" href="group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc">pairing.c</a>
-, <a class="el" href="group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc">pairing.h</a>
-</li>
-<li>ntohl
-: <a class="el" href="group___epid_common.html#ga29a7e07cd5181e738f98fc026979efca">endian_convert.h</a>
+: <a class="el" href="group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc">pairing.h</a>
</li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/globals_p.html b/doc/html/globals_p.html
index 196ac75..45b4ea4 100644
--- a/doc/html/globals_p.html
+++ b/doc/html/globals_p.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -61,62 +61,46 @@ $(document).ready(function(){initNavTree('globals_p.html','');});
<h3><a class="anchor" id="index_p"></a>- p -</h3><ul>
<li>Pairing()
-: <a class="el" href="group___pairing_primitives.html#ga5dd07d13536e27c37eaeee285297066c">pairing.c</a>
-, <a class="el" href="group___pairing_primitives.html#ga5dd07d13536e27c37eaeee285297066c">pairing.h</a>
+: <a class="el" href="group___pairing_primitives.html#ga5dd07d13536e27c37eaeee285297066c">pairing.h</a>
</li>
<li>PairingState
: <a class="el" href="group___pairing_primitives.html#ga3f1fa61d25487f96dfb0ffef4ad35607">pairing.h</a>
</li>
-<li>PRINT
-: <a class="el" href="printutils_8c.html#a15bb631053a1fce9c5470701900984c7">printutils.c</a>
-</li>
<li>PrintBigNum()
-: <a class="el" href="group___epid_print.html#ga45a933b44fc1dfe926e3af89c198070a">printutils.c</a>
-, <a class="el" href="group___epid_print.html#ga45a933b44fc1dfe926e3af89c198070a">printutils.h</a>
+: <a class="el" href="group___epid_print.html#ga45a933b44fc1dfe926e3af89c198070a">printutils.h</a>
</li>
<li>PrintBigNumStr()
: <a class="el" href="group___epid_print.html#ga5f249c594ed12e4a9b11b7bc101da85d">printutils.h</a>
-, <a class="el" href="group___epid_print.html#ga5f249c594ed12e4a9b11b7bc101da85d">printutils.c</a>
</li>
<li>PrintEcPoint()
-: <a class="el" href="group___epid_print.html#ga0d6377d9c1651d0101ec6b61feaa78ca">printutils.c</a>
-, <a class="el" href="group___epid_print.html#ga0d6377d9c1651d0101ec6b61feaa78ca">printutils.h</a>
+: <a class="el" href="group___epid_print.html#ga0d6377d9c1651d0101ec6b61feaa78ca">printutils.h</a>
</li>
<li>PrintFfElement()
-: <a class="el" href="group___epid_print.html#gaa3b1cbbfc6f78562658953113e5798cf">printutils.c</a>
-, <a class="el" href="group___epid_print.html#gaa3b1cbbfc6f78562658953113e5798cf">printutils.h</a>
+: <a class="el" href="group___epid_print.html#gaa3b1cbbfc6f78562658953113e5798cf">printutils.h</a>
</li>
<li>PrintFpElemStr()
-: <a class="el" href="group___epid_print.html#gae553c3a156a0e4968b89635ab0757580">printutils.c</a>
-, <a class="el" href="group___epid_print.html#gae553c3a156a0e4968b89635ab0757580">printutils.h</a>
+: <a class="el" href="group___epid_print.html#gae553c3a156a0e4968b89635ab0757580">printutils.h</a>
</li>
<li>PrintFq12ElemStr()
: <a class="el" href="group___epid_print.html#gaf185fe3df270cd8b4a2969bf3cfc5d5f">printutils.h</a>
-, <a class="el" href="group___epid_print.html#gaf185fe3df270cd8b4a2969bf3cfc5d5f">printutils.c</a>
</li>
<li>PrintFq2ElemStr()
-: <a class="el" href="group___epid_print.html#ga883a834ab1703365bb0bca4abd3104de">printutils.c</a>
-, <a class="el" href="group___epid_print.html#ga883a834ab1703365bb0bca4abd3104de">printutils.h</a>
+: <a class="el" href="group___epid_print.html#ga883a834ab1703365bb0bca4abd3104de">printutils.h</a>
</li>
<li>PrintFq6ElemStr()
: <a class="el" href="group___epid_print.html#ga3f2961ef6b4c44a6205d422d8a293476">printutils.h</a>
-, <a class="el" href="group___epid_print.html#ga3f2961ef6b4c44a6205d422d8a293476">printutils.c</a>
</li>
<li>PrintFqElemStr()
-: <a class="el" href="group___epid_print.html#ga6c9fea48fa0477f4a98abb50f891a5e4">printutils.c</a>
-, <a class="el" href="group___epid_print.html#ga6c9fea48fa0477f4a98abb50f891a5e4">printutils.h</a>
+: <a class="el" href="group___epid_print.html#ga6c9fea48fa0477f4a98abb50f891a5e4">printutils.h</a>
</li>
<li>PrintG1ElemStr()
-: <a class="el" href="group___epid_print.html#ga87168a3ce5306f9839b8e8d6c9a5f84f">printutils.c</a>
-, <a class="el" href="group___epid_print.html#ga87168a3ce5306f9839b8e8d6c9a5f84f">printutils.h</a>
+: <a class="el" href="group___epid_print.html#ga87168a3ce5306f9839b8e8d6c9a5f84f">printutils.h</a>
</li>
<li>PrintG2ElemStr()
: <a class="el" href="group___epid_print.html#gab76a4cf0385dc4a76bb56ee9f0e3e87a">printutils.h</a>
-, <a class="el" href="group___epid_print.html#gab76a4cf0385dc4a76bb56ee9f0e3e87a">printutils.c</a>
</li>
<li>PrintGtElemStr()
: <a class="el" href="group___epid_print.html#ga138cd388247a58680d4701d59d6976d2">printutils.h</a>
-, <a class="el" href="group___epid_print.html#ga138cd388247a58680d4701d59d6976d2">printutils.c</a>
</li>
<li>PrintUtilFormat
: <a class="el" href="group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83">printutils.h</a>
diff --git a/doc/html/globals_r.html b/doc/html/globals_r.html
index a3f9836..9d6af06 100644
--- a/doc/html/globals_r.html
+++ b/doc/html/globals_r.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -61,29 +61,17 @@ $(document).ready(function(){initNavTree('globals_r.html','');});
<h3><a class="anchor" id="index_r"></a>- r -</h3><ul>
<li>ReadBigNum()
-: <a class="el" href="group___big_num_primitives.html#ga808cf477b70ed06358b11756bfe36024">bignum.c</a>
-, <a class="el" href="group___big_num_primitives.html#ga808cf477b70ed06358b11756bfe36024">bignum.h</a>
+: <a class="el" href="group___big_num_primitives.html#ga808cf477b70ed06358b11756bfe36024">bignum.h</a>
</li>
<li>ReadEcPoint()
: <a class="el" href="group___ec_group_primitives.html#ga2d433f567fa2419465a49604f4da21ad">ecgroup.h</a>
-, <a class="el" href="group___ec_group_primitives.html#ga2d433f567fa2419465a49604f4da21ad">ecgroup.c</a>
</li>
<li>ReadFfElement()
-: <a class="el" href="group___finite_field_primitives.html#ga884d9e1baadf29a410244a735853e3c7">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga884d9e1baadf29a410244a735853e3c7">finitefield.h</a>
+: <a class="el" href="group___finite_field_primitives.html#ga884d9e1baadf29a410244a735853e3c7">finitefield.h</a>
</li>
<li>ReKeySeed
: <a class="el" href="group___epid_types.html#ga54bd22670f2e348593db7ab631131d10">types.h</a>
</li>
-<li>RETURN_ON_IPP_ERROR
-: <a class="el" href="pairing_8c.html#ae10abdda5f1cafa6919c41f0d7f7caf8">pairing.c</a>
-</li>
-<li>RNG_WATCHDOG
-: <a class="el" href="finitefield_8c.html#a84d66c4493b912014a9acf0e123b2d4c">finitefield.c</a>
-</li>
-<li>RSIZE_MAX
-: <a class="el" href="memory_8c.html#ad810bebef54644d4ea2fb181581aa0f9">memory.c</a>
-</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
diff --git a/doc/html/globals_s.html b/doc/html/globals_s.html
index 91f6e87..ffba267 100644
--- a/doc/html/globals_s.html
+++ b/doc/html/globals_s.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -60,43 +60,11 @@ $(document).ready(function(){initNavTree('globals_s.html','');});
<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
<h3><a class="anchor" id="index_s"></a>- s -</h3><ul>
-<li>SAFE_ALLOC
-: <a class="el" href="group___epid_common.html#ga38fad13430eba25f9f9b05e35ecd22f8">memory.h</a>
-</li>
-<li>SAFE_FREE
-: <a class="el" href="group___epid_common.html#ga2ca3c202ee727774d55890e568621842">memory.h</a>
-</li>
-<li>SAFE_REALLOC
-: <a class="el" href="group___epid_common.html#ga41c113e15b695291199c27fac4bd53fa">memory.h</a>
-</li>
<li>Seed
: <a class="el" href="group___epid_types.html#ga888541b8148df69c634a92c64ed51317">types.h</a>
</li>
-<li>SEPARATOR
-: <a class="el" href="printutils_8c.html#af68c3a5ad6ffce6c97fff154856a823d">printutils.c</a>
-</li>
-<li>SetCalculatedCommitValues()
-: <a class="el" href="group___epid_common.html#ga3f3c3b965dd714179cbc2f8d96678ee0">commitment.c</a>
-, <a class="el" href="group___epid_common.html#ga3f3c3b965dd714179cbc2f8d96678ee0">commitment.h</a>
-</li>
-<li>SetKeySpecificCommitValues()
-: <a class="el" href="group___epid_common.html#ga2d54f4f222e965222024113c0420602d">commitment.h</a>
-</li>
<li>Sha256MessageDigest()
: <a class="el" href="group___hash_primitives.html#ga86d62aac9efd7445acee311b41846c6c">hash.h</a>
-, <a class="el" href="group___hash_primitives.html#ga86d62aac9efd7445acee311b41846c6c">sha256.c</a>
-</li>
-<li>StackGetSize()
-: <a class="el" href="group___epid_common.html#gab34066dc882ad63362c43c0790973fdc">stack.c</a>
-, <a class="el" href="group___epid_common.html#gab34066dc882ad63362c43c0790973fdc">stack.h</a>
-</li>
-<li>StackPopN()
-: <a class="el" href="group___epid_common.html#ga8cdde2b366f4473f0a6965bcfea5b6a6">stack.c</a>
-, <a class="el" href="group___epid_common.html#ga8cdde2b366f4473f0a6965bcfea5b6a6">stack.h</a>
-</li>
-<li>StackPushN()
-: <a class="el" href="group___epid_common.html#ga0b4dedb867504e0148aa0e1fdf642b2b">stack.c</a>
-, <a class="el" href="group___epid_common.html#ga0b4dedb867504e0148aa0e1fdf642b2b">stack.h</a>
</li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/globals_t.html b/doc/html/globals_t.html
index a6e1ee1..7e7f3e8 100644
--- a/doc/html/globals_t.html
+++ b/doc/html/globals_t.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/globals_type.html b/doc/html/globals_type.html
index 8975797..1dfada3 100644
--- a/doc/html/globals_type.html
+++ b/doc/html/globals_type.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -73,6 +73,21 @@ $(document).ready(function(){initNavTree('globals_type.html','');});
<li>EcPoint
: <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">ecgroup.h</a>
</li>
+<li>Epid11G1ElemStr
+: <a class="el" href="group___epid11_types.html#gadff9c05d5b7751024152b40dda545545">types.h</a>
+</li>
+<li>Epid11G3ElemStr
+: <a class="el" href="group___epid11_types.html#gaf1f4f1d6f001895abe548cfb33611c23">types.h</a>
+</li>
+<li>Epid11GroupId
+: <a class="el" href="group___epid11_types.html#ga7293cec8f937d6f5da42084403f978f1">types.h</a>
+</li>
+<li>Epid11PairingState
+: <a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">tatepairing.h</a>
+</li>
+<li>Epid11VerifierCtx
+: <a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">api.h</a>
+</li>
<li>FfElement
: <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">finitefield.h</a>
</li>
@@ -85,6 +100,9 @@ $(document).ready(function(){initNavTree('globals_type.html','');});
<li>IssuerNonce
: <a class="el" href="group___epid_types.html#ga55eb2193045bde31af3f551565126042">types.h</a>
</li>
+<li>MemberCtx
+: <a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">api.h</a>
+</li>
<li>PairingState
: <a class="el" href="group___pairing_primitives.html#ga3f1fa61d25487f96dfb0ffef4ad35607">pairing.h</a>
</li>
@@ -94,6 +112,9 @@ $(document).ready(function(){initNavTree('globals_type.html','');});
<li>Seed
: <a class="el" href="group___epid_types.html#ga888541b8148df69c634a92c64ed51317">types.h</a>
</li>
+<li>VerifierCtx
+: <a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">api.h</a>
+</li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
diff --git a/doc/html/globals_o.html b/doc/html/globals_v.html
index 8b0da4a..dfd3098 100644
--- a/doc/html/globals_o.html
+++ b/doc/html/globals_v.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,15 +53,15 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('globals_o.html','');});
+$(document).ready(function(){initNavTree('globals_v.html','');});
</script>
<div id="doc-content">
<div class="contents">
<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
-<h3><a class="anchor" id="index_o"></a>- o -</h3><ul>
-<li>OctStr2Bnu()
-: <a class="el" href="bignum_8c.html#a28eedfb401b5f88317f22417a64ef34c">bignum.c</a>
+<h3><a class="anchor" id="index_v"></a>- v -</h3><ul>
+<li>VerifierCtx
+: <a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">api.h</a>
</li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/globals_vars.html b/doc/html/globals_vars.html
index 80dfdad..ea821a9 100644
--- a/doc/html/globals_vars.html
+++ b/doc/html/globals_vars.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -59,8 +59,10 @@ $(document).ready(function(){initNavTree('globals_vars.html','');});
<div class="contents">
&#160;<ul>
<li>kEpidFileTypeCode
-: <a class="el" href="group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33">file_parser.c</a>
-, <a class="el" href="group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33">file_parser.h</a>
+: <a class="el" href="group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33">file_parser.h</a>
+</li>
+<li>kEpidVersionCode
+: <a class="el" href="group___file_parser.html#gaae808987ce82188dff42baa4e43cab82">file_parser.h</a>
</li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/globals_w.html b/doc/html/globals_w.html
index 6a29179..4907342 100644
--- a/doc/html/globals_w.html
+++ b/doc/html/globals_w.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -60,20 +60,14 @@ $(document).ready(function(){initNavTree('globals_w.html','');});
<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div>
<h3><a class="anchor" id="index_w"></a>- w -</h3><ul>
-<li>WIDTH
-: <a class="el" href="printutils_8c.html#a241aeeb764887ae5e3de58b98f04b16d">printutils.c</a>
-</li>
<li>WriteBigNum()
-: <a class="el" href="group___big_num_primitives.html#ga47f356d816bcb5742ba6d78000861328">bignum.c</a>
-, <a class="el" href="group___big_num_primitives.html#ga47f356d816bcb5742ba6d78000861328">bignum.h</a>
+: <a class="el" href="group___big_num_primitives.html#ga79d86c872fe8da0f217e3ba069f98d38">bignum.h</a>
</li>
<li>WriteEcPoint()
: <a class="el" href="group___ec_group_primitives.html#ga4bb7d6691ffbb6e947c1068453e27fbd">ecgroup.h</a>
-, <a class="el" href="group___ec_group_primitives.html#ga4bb7d6691ffbb6e947c1068453e27fbd">ecgroup.c</a>
</li>
<li>WriteFfElement()
-: <a class="el" href="group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900">finitefield.c</a>
-, <a class="el" href="group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900">finitefield.h</a>
+: <a class="el" href="group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900">finitefield.h</a>
</li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/glossary_8dox.html b/doc/html/glossary_8dox.html
index 268f395..e8cf60a 100644
--- a/doc/html/glossary_8dox.html
+++ b/doc/html/glossary_8dox.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/group___big_num_primitives.html b/doc/html/group___big_num_primitives.html
index c54ac40..b71ca76 100644
--- a/doc/html/group___big_num_primitives.html
+++ b/doc/html/group___big_num_primitives.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -86,9 +86,9 @@ Functions</h2></td></tr>
<tr class="memitem:ga808cf477b70ed06358b11756bfe36024"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga808cf477b70ed06358b11756bfe36024">ReadBigNum</a> (void const *bn_str, size_t strlen, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *bn)</td></tr>
<tr class="memdesc:ga808cf477b70ed06358b11756bfe36024"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deserializes a BigNum from a string. <a href="#ga808cf477b70ed06358b11756bfe36024">More...</a><br /></td></tr>
<tr class="separator:ga808cf477b70ed06358b11756bfe36024"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga47f356d816bcb5742ba6d78000861328"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga47f356d816bcb5742ba6d78000861328">WriteBigNum</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *bn, size_t strlen, void const *bn_str)</td></tr>
-<tr class="memdesc:ga47f356d816bcb5742ba6d78000861328"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes a BigNum to a string. <a href="#ga47f356d816bcb5742ba6d78000861328">More...</a><br /></td></tr>
-<tr class="separator:ga47f356d816bcb5742ba6d78000861328"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga79d86c872fe8da0f217e3ba069f98d38"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga79d86c872fe8da0f217e3ba069f98d38">WriteBigNum</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *bn, size_t strlen, void *bn_str)</td></tr>
+<tr class="memdesc:ga79d86c872fe8da0f217e3ba069f98d38"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes a BigNum to a string. <a href="#ga79d86c872fe8da0f217e3ba069f98d38">More...</a><br /></td></tr>
+<tr class="separator:ga79d86c872fe8da0f217e3ba069f98d38"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae70fd9b3026f0ab3c7e9601d0a3186b8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#gae70fd9b3026f0ab3c7e9601d0a3186b8">BigNumAdd</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *b, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *r)</td></tr>
<tr class="memdesc:gae70fd9b3026f0ab3c7e9601d0a3186b8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds two BigNum values. <a href="#gae70fd9b3026f0ab3c7e9601d0a3186b8">More...</a><br /></td></tr>
<tr class="separator:gae70fd9b3026f0ab3c7e9601d0a3186b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -98,9 +98,21 @@ Functions</h2></td></tr>
<tr class="memitem:ga03c89b8b8dd87de2c0f4b5822145d317"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga03c89b8b8dd87de2c0f4b5822145d317">BigNumMul</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *b, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *r)</td></tr>
<tr class="memdesc:ga03c89b8b8dd87de2c0f4b5822145d317"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multiplies two BigNum values. <a href="#ga03c89b8b8dd87de2c0f4b5822145d317">More...</a><br /></td></tr>
<tr class="separator:ga03c89b8b8dd87de2c0f4b5822145d317"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga166134085464b0df2c8efcfccf8ec573"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga166134085464b0df2c8efcfccf8ec573">BigNumDiv</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *b, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *q, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *r)</td></tr>
+<tr class="memdesc:ga166134085464b0df2c8efcfccf8ec573"><td class="mdescLeft">&#160;</td><td class="mdescRight">Divides two BigNum values. <a href="#ga166134085464b0df2c8efcfccf8ec573">More...</a><br /></td></tr>
+<tr class="separator:ga166134085464b0df2c8efcfccf8ec573"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga7dd6038987210d10bf843602fef0c929"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#ga7dd6038987210d10bf843602fef0c929">BigNumMod</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *b, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *r)</td></tr>
<tr class="memdesc:ga7dd6038987210d10bf843602fef0c929"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes modular reduction for BigNum value by specified modulus. <a href="#ga7dd6038987210d10bf843602fef0c929">More...</a><br /></td></tr>
<tr class="separator:ga7dd6038987210d10bf843602fef0c929"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf0366e47226563b17fcbc8e3ed766084"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#gaf0366e47226563b17fcbc8e3ed766084">BigNumIsEven</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *is_even)</td></tr>
+<tr class="memdesc:gaf0366e47226563b17fcbc8e3ed766084"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a BigNum is even. <a href="#gaf0366e47226563b17fcbc8e3ed766084">More...</a><br /></td></tr>
+<tr class="separator:gaf0366e47226563b17fcbc8e3ed766084"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacde6564a814617a96985b379be0dfabb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#gacde6564a814617a96985b379be0dfabb">BigNumIsZero</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *a, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *is_zero)</td></tr>
+<tr class="memdesc:gacde6564a814617a96985b379be0dfabb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a BigNum is zero. <a href="#gacde6564a814617a96985b379be0dfabb">More...</a><br /></td></tr>
+<tr class="separator:gacde6564a814617a96985b379be0dfabb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafd64b66fc85dab0005f4a1bb67bdf7b4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___big_num_primitives.html#gafd64b66fc85dab0005f4a1bb67bdf7b4">BigNumPow2N</a> (unsigned int n, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *r)</td></tr>
+<tr class="memdesc:gafd64b66fc85dab0005f4a1bb67bdf7b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Raises 2 to the given power. <a href="#gafd64b66fc85dab0005f4a1bb67bdf7b4">More...</a><br /></td></tr>
+<tr class="separator:gafd64b66fc85dab0005f4a1bb67bdf7b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Big number operations. </p>
@@ -140,8 +152,8 @@ Functions</h2></td></tr>
<p>Adds two BigNum values. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The left hand parameter. </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">b</td><td>The right hand parameter. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The first operand to be added. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">b</td><td>The second operand to be added. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">r</td><td>The result of adding a and b.</td></tr>
</table>
</dd>
@@ -150,6 +162,129 @@ Functions</h2></td></tr>
</div>
</div>
+<a class="anchor" id="ga166134085464b0df2c8efcfccf8ec573"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> BigNumDiv </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *&#160;</td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *&#160;</td>
+ <td class="paramname"><em>q</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *&#160;</td>
+ <td class="paramname"><em>r</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Divides two BigNum values. </p>
+<dl class="section note"><dt>Note</dt><dd>Only needed for Intel(R) EPID 1.1 verification.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>Dividend parameter. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">b</td><td>Divisor parameter. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">q</td><td>Quotient of result. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">r</td><td>Remainder of result.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaf0366e47226563b17fcbc8e3ed766084"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> BigNumIsEven </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *&#160;</td>
+ <td class="paramname"><em>is_even</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Checks if a BigNum is even. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The BigNum to check. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">is_even</td><td>The result of the check.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gacde6564a814617a96985b379be0dfabb"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> BigNumIsZero </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *&#160;</td>
+ <td class="paramname"><em>is_zero</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Checks if a BigNum is zero. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The BigNum to check. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">is_zero</td><td>The result of the check.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a> </dd></dl>
+
+</div>
+</div>
<a class="anchor" id="ga7dd6038987210d10bf843602fef0c929"></a>
<div class="memitem">
<div class="memproto">
@@ -226,8 +361,8 @@ Functions</h2></td></tr>
<p>Multiplies two BigNum values. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The left hand parameter. </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">b</td><td>The right hand parameter. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The first operand to be multiplied. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">b</td><td>The second operand to be multiplied. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">r</td><td>The result of multiplying a and b.</td></tr>
</table>
</dd>
@@ -236,6 +371,42 @@ Functions</h2></td></tr>
</div>
</div>
+<a class="anchor" id="gafd64b66fc85dab0005f4a1bb67bdf7b4"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> BigNumPow2N </td>
+ <td>(</td>
+ <td class="paramtype">unsigned int&#160;</td>
+ <td class="paramname"><em>n</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *&#160;</td>
+ <td class="paramname"><em>r</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Raises 2 to the given power. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">n</td><td>The power. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">r</td><td>The result of 2^n.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a> </dd></dl>
+
+</div>
+</div>
<a class="anchor" id="gacbec9669ab0fe768e2be74dcaca397ea"></a>
<div class="memitem">
<div class="memproto">
@@ -269,8 +440,8 @@ Functions</h2></td></tr>
<p>Subtracts two BigNum values. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The left hand parameter. </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">b</td><td>The right hand parameter. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The first operand to use in subtraction. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">b</td><td>The second operand to use in subtraction. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">r</td><td>The result of subtracting a and b.</td></tr>
</table>
</dd>
@@ -387,7 +558,7 @@ Functions</h2></td></tr>
</div>
</div>
-<a class="anchor" id="ga47f356d816bcb5742ba6d78000861328"></a>
+<a class="anchor" id="ga79d86c872fe8da0f217e3ba069f98d38"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
@@ -406,7 +577,7 @@ Functions</h2></td></tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype">void const *&#160;</td>
+ <td class="paramtype">void *&#160;</td>
<td class="paramname"><em>bn_str</em>&#160;</td>
</tr>
<tr>
diff --git a/doc/html/group___big_num_primitives.js b/doc/html/group___big_num_primitives.js
index d4354d5..ccdcec2 100644
--- a/doc/html/group___big_num_primitives.js
+++ b/doc/html/group___big_num_primitives.js
@@ -2,11 +2,15 @@ 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#ga47f356d816bcb5742ba6d78000861328", null ]
+ [ "WriteBigNum", "group___big_num_primitives.html#ga79d86c872fe8da0f217e3ba069f98d38", null ]
]; \ No newline at end of file
diff --git a/doc/html/group___ec_group_primitives.html b/doc/html/group___ec_group_primitives.html
index de489f9..8c143ca 100644
--- a/doc/html/group___ec_group_primitives.html
+++ b/doc/html/group___ec_group_primitives.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -111,6 +111,9 @@ Functions</h2></td></tr>
<tr class="memitem:gae96c38e004ccd2211290ad6e66415ec4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4">EcMultiExp</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const **a, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const **b, size_t m, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
<tr class="memdesc:gae96c38e004ccd2211290ad6e66415ec4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multi-exponentiates elements in elliptic curve group. <a href="#gae96c38e004ccd2211290ad6e66415ec4">More...</a><br /></td></tr>
<tr class="separator:gae96c38e004ccd2211290ad6e66415ec4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga76d24378455eb96a3257fe8045c0993a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga76d24378455eb96a3257fe8045c0993a">EcMultiExpBn</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const **a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const **b, size_t m, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
+<tr class="memdesc:ga76d24378455eb96a3257fe8045c0993a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multi-exponentiates elements in elliptic curve group. <a href="#ga76d24378455eb96a3257fe8045c0993a">More...</a><br /></td></tr>
+<tr class="separator:ga76d24378455eb96a3257fe8045c0993a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga40e3431d3dbe8cf7a65ada7b7811cba4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4">EcSscmMultiExp</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const **a, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const **b, size_t m, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
<tr class="memdesc:ga40e3431d3dbe8cf7a65ada7b7811cba4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Software side-channel mitigated implementation of EcMultiExp. <a href="#ga40e3431d3dbe8cf7a65ada7b7811cba4">More...</a><br /></td></tr>
<tr class="separator:ga40e3431d3dbe8cf7a65ada7b7811cba4"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -120,6 +123,9 @@ Functions</h2></td></tr>
<tr class="memitem:ga4d0f32aede3066eae500241b387bd970"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#ga4d0f32aede3066eae500241b387bd970">EcInGroup</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, void const *p_str, size_t strlen, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> *in_group)</td></tr>
<tr class="memdesc:ga4d0f32aede3066eae500241b387bd970"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a point is in an elliptic curve group. <a href="#ga4d0f32aede3066eae500241b387bd970">More...</a><br /></td></tr>
<tr class="separator:ga4d0f32aede3066eae500241b387bd970"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadf83fa559585375faad9a8b1559249bc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#gadf83fa559585375faad9a8b1559249bc">Epid11EcHash</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, void const *msg, size_t msg_len, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
+<tr class="memdesc:gadf83fa559585375faad9a8b1559249bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hashes an arbitrary message to an Intel(R) EPID 1.1 element in an elliptic curve group. <a href="#gadf83fa559585375faad9a8b1559249bc">More...</a><br /></td></tr>
+<tr class="separator:gadf83fa559585375faad9a8b1559249bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gadc22ee07864a7ee681a881029b69d76a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___ec_group_primitives.html#gadc22ee07864a7ee681a881029b69d76a">EcHash</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *g, void const *msg, size_t msg_len, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *r)</td></tr>
<tr class="memdesc:gadc22ee07864a7ee681a881029b69d76a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hashes an arbitrary message to an element in an elliptic curve group. <a href="#gadc22ee07864a7ee681a881029b69d76a">More...</a><br /></td></tr>
<tr class="separator:gadc22ee07864a7ee681a881029b69d76a"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -648,8 +654,8 @@ Functions</h2></td></tr>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">g</td><td>The elliptic curve group. </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The left hand parameter. </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">b</td><td>The right hand parameter. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The first operand to be multiplied. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">b</td><td>The second operand to be multiplied. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">r</td><td>The result of multiplying a and b.</td></tr>
</table>
</dd>
@@ -722,6 +728,67 @@ Functions</h2></td></tr>
</div>
</div>
+<a class="anchor" id="ga76d24378455eb96a3257fe8045c0993a"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EcMultiExpBn </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *&#160;</td>
+ <td class="paramname"><em>g</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const **&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const **&#160;</td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *&#160;</td>
+ <td class="paramname"><em>r</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Multi-exponentiates elements in elliptic curve group. </p>
+<p>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]).</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">g</td><td>The elliptic curve group. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The bases. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">b</td><td>The powers. Power must be less than the order of the elliptic curve group. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">m</td><td>Number of entries in a and b. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">r</td><td>The result of raising each a to the corresponding power b and multiplying the results.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___ec_group_primitives.html#gaf4e23677dd378ef2e0cf55df79cbdb62" title="Constructs a new EcGroup. ">NewEcGroup</a> </dd>
+<dd>
+<a class="el" href="group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb" title="Creates a new EcPoint. ">NewEcPoint</a> </dd></dl>
+
+</div>
+</div>
<a class="anchor" id="gaf3b6a548aa6f0d4f028a14feca251f57"></a>
<div class="memitem">
<div class="memproto">
@@ -839,6 +906,59 @@ Functions</h2></td></tr>
</div>
</div>
+<a class="anchor" id="gadf83fa559585375faad9a8b1559249bc"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11EcHash </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *&#160;</td>
+ <td class="paramname"><em>g</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void const *&#160;</td>
+ <td class="paramname"><em>msg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>msg_len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *&#160;</td>
+ <td class="paramname"><em>r</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Hashes an arbitrary message to an Intel(R) EPID 1.1 element in an elliptic curve group. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">g</td><td>The elliptic curve group. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">msg</td><td>The message. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">msg_len</td><td>The size of msg in bytes. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">r</td><td>The hashed value.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___ec_group_primitives.html#gaf4e23677dd378ef2e0cf55df79cbdb62" title="Constructs a new EcGroup. ">NewEcGroup</a> </dd>
+<dd>
+<a class="el" href="group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb" title="Creates a new EcPoint. ">NewEcPoint</a> </dd></dl>
+
+</div>
+</div>
<a class="anchor" id="gaf4e23677dd378ef2e0cf55df79cbdb62"></a>
<div class="memitem">
<div class="memproto">
@@ -907,8 +1027,8 @@ Functions</h2></td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">ff</td><td>The finite field on which the curve is based. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The A value of the elliptic curve. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">b</td><td>The B value of the elliptic curve. </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>The X co-ordinate of the base point of the elliptic curve. </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>The Y co-ordinate of the base point of the elliptic curve. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">x</td><td>The X-coordinate of the base point of the elliptic curve. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">y</td><td>The Y-coordinate of the base point of the elliptic curve. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">order</td><td>The order of the elliptic curve group. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">cofactor</td><td>The co-factor of the elliptic curve. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">g</td><td>The newly constructed elliptic curve group.</td></tr>
diff --git a/doc/html/group___ec_group_primitives.js b/doc/html/group___ec_group_primitives.js
index bf32859..af74b1c 100644
--- a/doc/html/group___ec_group_primitives.js
+++ b/doc/html/group___ec_group_primitives.js
@@ -14,8 +14,10 @@ var group___ec_group_primitives =
[ "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 ],
diff --git a/doc/html/group___ecdsa_primitives.html b/doc/html/group___ecdsa_primitives.html
index e1c37b9..50d135d 100644
--- a/doc/html/group___ecdsa_primitives.html
+++ b/doc/html/group___ecdsa_primitives.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -129,7 +129,7 @@ Functions</h2></td></tr>
</div><div class="memdoc">
<p>Creates ECDSA signature of buffer. </p>
-<p>Uses Elliptic Curve Digital Signature Algorithm (ECDSA) to generate a signature of the SHA256 hash of the input buffer with the provided private key.</p>
+<p>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.</p>
<p>The operation is over the standard secp256r1 curve.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
@@ -190,7 +190,7 @@ Functions</h2></td></tr>
</div><div class="memdoc">
<p>Verifies authenticity of a digital signature over a buffer. </p>
-<p>Uses Elliptic Curve Digital Signature Algorithm (ECDSA) to verify that the SHA256 hash of the input buffer was signed with the private key corresponding to the provided public key.</p>
+<p>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.</p>
<p>The operation is over the standard secp256r1 curve.</p>
<dl class="section warning"><dt>Warning</dt><dd>It is the responsibility of the caller to verify the identity of the public key.</dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
diff --git a/doc/html/group___epid11_file_parser_module.html b/doc/html/group___epid11_file_parser_module.html
new file mode 100644
index 0000000..4f3dc04
--- /dev/null
+++ b/doc/html/group___epid11_file_parser_module.html
@@ -0,0 +1,362 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: EPID 1.1 support</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group___epid11_file_parser_module.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">EPID 1.1 support<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___file_parser.html">fileparser</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Parser for 1.1 issuer material.
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga1f92d1cb6bd7d9815711fde515b40a4c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_file_parser_module.html#ga1f92d1cb6bd7d9815711fde515b40a4c">Epid11ParseGroupPubKeyFile</a> (void const *buf, size_t len, <a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *cert, <a class="el" href="struct_epid11_group_pub_key.html">Epid11GroupPubKey</a> *pubkey)</td></tr>
+<tr class="memdesc:ga1f92d1cb6bd7d9815711fde515b40a4c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts group public key from buffer in issuer binary format. <a href="#ga1f92d1cb6bd7d9815711fde515b40a4c">More...</a><br /></td></tr>
+<tr class="separator:ga1f92d1cb6bd7d9815711fde515b40a4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae682077d315c39ed298ef198fd738546"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_file_parser_module.html#gae682077d315c39ed298ef198fd738546">Epid11ParsePrivRlFile</a> (void const *buf, size_t len, <a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *cert, <a class="el" href="struct_epid11_priv_rl.html">Epid11PrivRl</a> *rl, size_t *rl_len)</td></tr>
+<tr class="memdesc:gae682077d315c39ed298ef198fd738546"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts private key revocation list from buffer in issuer binary format. <a href="#gae682077d315c39ed298ef198fd738546">More...</a><br /></td></tr>
+<tr class="separator:gae682077d315c39ed298ef198fd738546"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac3f6daaa5333627d4efe5438c1fe8868"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_file_parser_module.html#gac3f6daaa5333627d4efe5438c1fe8868">Epid11ParseSigRlFile</a> (void const *buf, size_t len, <a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *cert, <a class="el" href="struct_epid11_sig_rl.html">Epid11SigRl</a> *rl, size_t *rl_len)</td></tr>
+<tr class="memdesc:gac3f6daaa5333627d4efe5438c1fe8868"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts signature revocation list from buffer in issuer binary format. <a href="#gac3f6daaa5333627d4efe5438c1fe8868">More...</a><br /></td></tr>
+<tr class="separator:gac3f6daaa5333627d4efe5438c1fe8868"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae28a844eb68828480b2a76fcb7d252a3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_file_parser_module.html#gae28a844eb68828480b2a76fcb7d252a3">Epid11ParseGroupRlFile</a> (void const *buf, size_t len, <a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *cert, <a class="el" href="struct_epid11_group_rl.html">Epid11GroupRl</a> *rl, size_t *rl_len)</td></tr>
+<tr class="memdesc:gae28a844eb68828480b2a76fcb7d252a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts group revocation list from buffer in issuer binary format. <a href="#gae28a844eb68828480b2a76fcb7d252a3">More...</a><br /></td></tr>
+<tr class="separator:gae28a844eb68828480b2a76fcb7d252a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Parser for 1.1 issuer material. </p>
+<p>Defines the APIs needed to parse Intel(R) EPID 1.1 issuer material.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga1f92d1cb6bd7d9815711fde515b40a4c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11ParseGroupPubKeyFile </td>
+ <td>(</td>
+ <td class="paramtype">void const *&#160;</td>
+ <td class="paramname"><em>buf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *&#160;</td>
+ <td class="paramname"><em>cert</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_group_pub_key.html">Epid11GroupPubKey</a> *&#160;</td>
+ <td class="paramname"><em>pubkey</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Extracts group public key from buffer in issuer binary format. </p>
+<p>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.</p>
+<dl class="section warning"><dt>Warning</dt><dd>It is the responsibility of the caller to authenticate the <a class="el" href="struct_epid_ca_certificate.html" title="IoT CA Certificate binary format. ">EpidCaCertificate</a>.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">buf</td><td>Pointer to buffer containing public key to extract.</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>The size of buf in bytes.</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">cert</td><td>The issuing CA public key certificate.</td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">pubkey</td><td>The extracted group public key.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+ <table class="retval">
+ <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8" title="Signature is invalid. ">kEpidSigInvalid</a></td><td>Parsing failed due to data authentication failure.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae28a844eb68828480b2a76fcb7d252a3"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11ParseGroupRlFile </td>
+ <td>(</td>
+ <td class="paramtype">void const *&#160;</td>
+ <td class="paramname"><em>buf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *&#160;</td>
+ <td class="paramname"><em>cert</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_group_rl.html">Epid11GroupRl</a> *&#160;</td>
+ <td class="paramname"><em>rl</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t *&#160;</td>
+ <td class="paramname"><em>rl_len</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Extracts group revocation list from buffer in issuer binary format. </p>
+<p>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.</p>
+<p>To determine the required size of the revocation list output buffer, provide a null pointer for the output buffer.</p>
+<dl class="section warning"><dt>Warning</dt><dd>It is the responsibility of the caller to authenticate the <a class="el" href="struct_epid_ca_certificate.html" title="IoT CA Certificate binary format. ">EpidCaCertificate</a>.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">buf</td><td>Pointer to buffer containing the revocation list to extract.</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>The size of buf in bytes.</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">cert</td><td>The issuing CA public key certificate.</td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">rl</td><td>The extracted revocation list. If Null, rl_len is filled with the required output buffer size.</td></tr>
+ <tr><td class="paramdir">[in,out]</td><td class="paramname">rl_len</td><td>The size of rl in bytes.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+ <table class="retval">
+ <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8" title="Signature is invalid. ">kEpidSigInvalid</a></td><td>Parsing failed due to data authentication failure.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae682077d315c39ed298ef198fd738546"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11ParsePrivRlFile </td>
+ <td>(</td>
+ <td class="paramtype">void const *&#160;</td>
+ <td class="paramname"><em>buf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *&#160;</td>
+ <td class="paramname"><em>cert</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_priv_rl.html">Epid11PrivRl</a> *&#160;</td>
+ <td class="paramname"><em>rl</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t *&#160;</td>
+ <td class="paramname"><em>rl_len</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Extracts private key revocation list from buffer in issuer binary format. </p>
+<p>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.</p>
+<p>To determine the required size of the revocation list output buffer, provide a null pointer for the output buffer.</p>
+<dl class="section warning"><dt>Warning</dt><dd>It is the responsibility of the caller to authenticate the <a class="el" href="struct_epid_ca_certificate.html" title="IoT CA Certificate binary format. ">EpidCaCertificate</a>.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">buf</td><td>Pointer to buffer containing the revocation list to extract.</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>The size of buf in bytes.</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">cert</td><td>The issuing CA public key certificate.</td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">rl</td><td>The extracted revocation list. If Null, rl_len is filled with the required output buffer size.</td></tr>
+ <tr><td class="paramdir">[in,out]</td><td class="paramname">rl_len</td><td>The size of rl in bytes.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+ <table class="retval">
+ <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8" title="Signature is invalid. ">kEpidSigInvalid</a></td><td>Parsing failed due to data authentication failure.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac3f6daaa5333627d4efe5438c1fe8868"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11ParseSigRlFile </td>
+ <td>(</td>
+ <td class="paramtype">void const *&#160;</td>
+ <td class="paramname"><em>buf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *&#160;</td>
+ <td class="paramname"><em>cert</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_sig_rl.html">Epid11SigRl</a> *&#160;</td>
+ <td class="paramname"><em>rl</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t *&#160;</td>
+ <td class="paramname"><em>rl_len</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Extracts signature revocation list from buffer in issuer binary format. </p>
+<p>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.</p>
+<p>To determine the required size of the revocation list output buffer, provide a null pointer for the output buffer.</p>
+<dl class="section warning"><dt>Warning</dt><dd>It is the responsibility of the caller to authenticate the <a class="el" href="struct_epid_ca_certificate.html" title="IoT CA Certificate binary format. ">EpidCaCertificate</a>.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">buf</td><td>Pointer to buffer containing the revocation list to extract.</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>The size of buf in bytes.</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">cert</td><td>The issuing CA public key certificate.</td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">rl</td><td>The extracted revocation list. If Null, rl_len is filled with the required output buffer size.</td></tr>
+ <tr><td class="paramdir">[in,out]</td><td class="paramname">rl_len</td><td>The size of rl in bytes.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+ <table class="retval">
+ <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8" title="Signature is invalid. ">kEpidSigInvalid</a></td><td>Parsing failed due to data authentication failure.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/group___epid11_file_parser_module.js b/doc/html/group___epid11_file_parser_module.js
new file mode 100644
index 0000000..aacd290
--- /dev/null
+++ b/doc/html/group___epid11_file_parser_module.js
@@ -0,0 +1,7 @@
+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/doc/html/group___epid11_pairing_primitives.html b/doc/html/group___epid11_pairing_primitives.html
new file mode 100644
index 0000000..0d60502
--- /dev/null
+++ b/doc/html/group___epid11_pairing_primitives.html
@@ -0,0 +1,245 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: EPID 1.1 specific pairing</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group___epid11_pairing_primitives.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">EPID 1.1 specific pairing<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_math.html">math</a> &raquo; <a class="el" href="group___pairing_primitives.html">pairing</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>EPID 1.1 pairing operations.
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga74236e8ebbfc30a7daa7fa1cf1df148b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga74236e8ebbfc30a7daa7fa1cf1df148b"></a>
+typedef struct <a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">Epid11PairingState</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">Epid11PairingState</a></td></tr>
+<tr class="memdesc:ga74236e8ebbfc30a7daa7fa1cf1df148b"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pairing. <br /></td></tr>
+<tr class="separator:ga74236e8ebbfc30a7daa7fa1cf1df148b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga0ee658e26e9f933ba2ffbf2504dfae7e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_pairing_primitives.html#ga0ee658e26e9f933ba2ffbf2504dfae7e">NewEpid11PairingState</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> const *ga, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> const *gb, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> const *ff, <a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">Epid11PairingState</a> **ps)</td></tr>
+<tr class="memdesc:ga0ee658e26e9f933ba2ffbf2504dfae7e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a new Tate pairing state. <a href="#ga0ee658e26e9f933ba2ffbf2504dfae7e">More...</a><br /></td></tr>
+<tr class="separator:ga0ee658e26e9f933ba2ffbf2504dfae7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa3457d6f85889bc714910252fd21c758"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_pairing_primitives.html#gaa3457d6f85889bc714910252fd21c758">DeleteEpid11PairingState</a> (<a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">Epid11PairingState</a> **ps)</td></tr>
+<tr class="memdesc:gaa3457d6f85889bc714910252fd21c758"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees a previously allocated by Epid11PairingState. <a href="#gaa3457d6f85889bc714910252fd21c758">More...</a><br /></td></tr>
+<tr class="separator:gaa3457d6f85889bc714910252fd21c758"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa4076dfe25e8e61ac6753333a322c059"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_pairing_primitives.html#gaa4076dfe25e8e61ac6753333a322c059">Epid11Pairing</a> (<a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">Epid11PairingState</a> *ps, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *a, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *b, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *d)</td></tr>
+<tr class="memdesc:gaa4076dfe25e8e61ac6753333a322c059"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a Tate Pairing for two parameters. <a href="#gaa4076dfe25e8e61ac6753333a322c059">More...</a><br /></td></tr>
+<tr class="separator:gaa4076dfe25e8e61ac6753333a322c059"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>EPID 1.1 pairing operations. </p>
+<p>Provides APIs for defining and using a pairing relationship between two Elliptic curve groups.</p>
+<p>These pairing operations are intended to support Intel(R) EPID 1.1 verification.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gaa3457d6f85889bc714910252fd21c758"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void DeleteEpid11PairingState </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">Epid11PairingState</a> **&#160;</td>
+ <td class="paramname"><em>ps</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Frees a previously allocated by Epid11PairingState. </p>
+<p>Frees memory pointed to by pairing state. Nulls the pointer.</p>
+<p>This pairing operation is intended to support Intel(R) EPID 1.1 verification.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ps</td><td>The pairing state. Can be NULL.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid11_pairing_primitives.html#ga0ee658e26e9f933ba2ffbf2504dfae7e" title="Constructs a new Tate pairing state. ">NewEpid11PairingState</a> </dd>
+<dd>
+<a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaa4076dfe25e8e61ac6753333a322c059"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11Pairing </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">Epid11PairingState</a> *&#160;</td>
+ <td class="paramname"><em>ps</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *&#160;</td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td>
+ <td class="paramname"><em>d</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Computes a Tate Pairing for two parameters. </p>
+<p>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.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ps</td><td>The pairing state. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The first value to pair. Must be in ga. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">b</td><td>The second value to pair. Must be in gb. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">d</td><td>The result of the pairing. Must be in ff.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0ee658e26e9f933ba2ffbf2504dfae7e"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> NewEpid11PairingState </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> const *&#160;</td>
+ <td class="paramname"><em>ga</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> const *&#160;</td>
+ <td class="paramname"><em>gb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> const *&#160;</td>
+ <td class="paramname"><em>ff</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">Epid11PairingState</a> **&#160;</td>
+ <td class="paramname"><em>ps</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Constructs a new Tate pairing state. </p>
+<p>Allocates memory and creates a new pairing state for Tate pairing.</p>
+<p>Use <a class="el" href="group___epid11_pairing_primitives.html#gaa3457d6f85889bc714910252fd21c758" title="Frees a previously allocated by Epid11PairingState. ">DeleteEpid11PairingState()</a> to free memory.</p>
+<p>This pairing operation is intended to support Intel(R) EPID 1.1 verification.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ga</td><td>The EcGroup from which the first parameter of the pairing will be taken. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">gb</td><td>The EcGroup from which the second parameter of the pairing will be taken. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">ff</td><td>The result finite field. Must be a Fq12 field. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">ps</td><td>Newly constructed pairing state.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid11_pairing_primitives.html#gaa3457d6f85889bc714910252fd21c758" title="Frees a previously allocated by Epid11PairingState. ">DeleteEpid11PairingState</a> </dd>
+<dd>
+<a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/group___epid11_pairing_primitives.js b/doc/html/group___epid11_pairing_primitives.js
new file mode 100644
index 0000000..53b346a
--- /dev/null
+++ b/doc/html/group___epid11_pairing_primitives.js
@@ -0,0 +1,7 @@
+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/doc/html/group___epid11_types.html b/doc/html/group___epid11_types.html
new file mode 100644
index 0000000..8b4241f
--- /dev/null
+++ b/doc/html/group___epid11_types.html
@@ -0,0 +1,150 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: EPID 1.1 specific types</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group___epid11_types.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> </div>
+ <div class="headertitle">
+<div class="title">EPID 1.1 specific types<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Intel(R) EPID 1.1 specific data types.
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_oct_str80.html">OctStr80</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">80 bit octet string <a href="struct_oct_str80.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_oct_str600.html">OctStr600</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">600 bit octet string <a href="struct_oct_str600.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_oct_str768.html">OctStr768</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">768 bit octet string <a href="struct_oct_str768.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_fq3_elem_str.html">Fq3ElemStr</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialized Fq3 element. <a href="struct_fq3_elem_str.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_g2_elem_str.html">Epid11G2ElemStr</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialized Intel(R) EPID 1.1 G2 element. <a href="struct_epid11_g2_elem_str.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_gt_elem_str.html">Epid11GtElemStr</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialized Intel(R) EPID 1.1 GT element. <a href="struct_epid11_gt_elem_str.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html">Epid11Params</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 Parameters. <a href="struct_epid11_params.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_group_pub_key.html">Epid11GroupPubKey</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 group public key. <a href="struct_epid11_group_pub_key.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 basic signature. <a href="struct_epid11_basic_signature.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_nr_proof.html">Epid11NrProof</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 non-revoked Proof. <a href="struct_epid11_nr_proof.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_signature.html">Epid11Signature</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 Signature. <a href="struct_epid11_signature.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_priv_rl.html">Epid11PrivRl</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 private-key based revocation list. <a href="struct_epid11_priv_rl.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_sig_rl_entry.html">Epid11SigRlEntry</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 entry in SigRL (B,K) <a href="struct_epid11_sig_rl_entry.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_sig_rl.html">Epid11SigRl</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 signature based revocation list. <a href="struct_epid11_sig_rl.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_group_rl.html">Epid11GroupRl</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 group revocation list. <a href="struct_epid11_group_rl.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gadff9c05d5b7751024152b40dda545545"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gadff9c05d5b7751024152b40dda545545"></a>
+typedef <a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_types.html#gadff9c05d5b7751024152b40dda545545">Epid11G1ElemStr</a></td></tr>
+<tr class="memdesc:gadff9c05d5b7751024152b40dda545545"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialized Intel(R) EPID 1.1 G1 element. <br /></td></tr>
+<tr class="separator:gadff9c05d5b7751024152b40dda545545"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf1f4f1d6f001895abe548cfb33611c23"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf1f4f1d6f001895abe548cfb33611c23"></a>
+typedef <a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_types.html#gaf1f4f1d6f001895abe548cfb33611c23">Epid11G3ElemStr</a></td></tr>
+<tr class="memdesc:gaf1f4f1d6f001895abe548cfb33611c23"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serialized Intel(R) EPID 1.1 G3 element. <br /></td></tr>
+<tr class="separator:gaf1f4f1d6f001895abe548cfb33611c23"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7293cec8f937d6f5da42084403f978f1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7293cec8f937d6f5da42084403f978f1"></a>
+typedef <a class="el" href="struct_oct_str32.html">OctStr32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_types.html#ga7293cec8f937d6f5da42084403f978f1">Epid11GroupId</a></td></tr>
+<tr class="memdesc:ga7293cec8f937d6f5da42084403f978f1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 group ID. <br /></td></tr>
+<tr class="separator:ga7293cec8f937d6f5da42084403f978f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Intel(R) EPID 1.1 specific data types. </p>
+<p>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.</p>
+<dl class="section see"><dt>See also</dt><dd><a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/group___epid11_types.js b/doc/html/group___epid11_types.js
new file mode 100644
index 0000000..4d71606
--- /dev/null
+++ b/doc/html/group___epid11_types.js
@@ -0,0 +1,97 @@
+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/doc/html/group___epid11_verifier_module.html b/doc/html/group___epid11_verifier_module.html
new file mode 100644
index 0000000..8b383c3
--- /dev/null
+++ b/doc/html/group___epid11_verifier_module.html
@@ -0,0 +1,780 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: EPID 1.1 support</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('group___epid11_verifier_module.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">EPID 1.1 support<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_verifier_module.html">verifier</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Intel(R) EPID 1.1 Verifier functionality.
+<a href="#details">More...</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_verifier_precomp.html">Epid11VerifierPrecomp</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 Pre-computed verifier settings. <a href="struct_epid11_verifier_precomp.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gabe6a864a06322205ae7536ffea34c702"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabe6a864a06322205ae7536ffea34c702"></a>
+typedef struct <a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a></td></tr>
+<tr class="memdesc:gabe6a864a06322205ae7536ffea34c702"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal context of Intel(R) EPID 1.1 verifier. <br /></td></tr>
+<tr class="separator:gabe6a864a06322205ae7536ffea34c702"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac5a8f8d7624063ea428d81dbdbf61fa8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8">Epid11VerifierCreate</a> (<a class="el" href="struct_epid11_group_pub_key.html">Epid11GroupPubKey</a> const *pub_key, <a class="el" href="struct_epid11_verifier_precomp.html">Epid11VerifierPrecomp</a> const *precomp, <a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> **ctx)</td></tr>
+<tr class="memdesc:gac5a8f8d7624063ea428d81dbdbf61fa8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new Intel(R) EPID 1.1 verifier context. <a href="#gac5a8f8d7624063ea428d81dbdbf61fa8">More...</a><br /></td></tr>
+<tr class="separator:gac5a8f8d7624063ea428d81dbdbf61fa8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga63cae8d5abcf4d7e3af4157de18998f1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#ga63cae8d5abcf4d7e3af4157de18998f1">Epid11VerifierDelete</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> **ctx)</td></tr>
+<tr class="memdesc:ga63cae8d5abcf4d7e3af4157de18998f1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deletes an existing Intel(R) EPID 1.1 verifier context. <a href="#ga63cae8d5abcf4d7e3af4157de18998f1">More...</a><br /></td></tr>
+<tr class="separator:ga63cae8d5abcf4d7e3af4157de18998f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga241520cb925e5be89893a2037451cf1c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#ga241520cb925e5be89893a2037451cf1c">Epid11VerifierWritePrecomp</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *ctx, <a class="el" href="struct_epid11_verifier_precomp.html">Epid11VerifierPrecomp</a> *precomp)</td></tr>
+<tr class="memdesc:ga241520cb925e5be89893a2037451cf1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes the pre-computed Intel(R) EPID 1.1 verifier settings. <a href="#ga241520cb925e5be89893a2037451cf1c">More...</a><br /></td></tr>
+<tr class="separator:ga241520cb925e5be89893a2037451cf1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaffbe6ac2bc7236ad65126a17ebdceb14"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#gaffbe6ac2bc7236ad65126a17ebdceb14">Epid11VerifierSetPrivRl</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> *ctx, <a class="el" href="struct_epid11_priv_rl.html">Epid11PrivRl</a> const *priv_rl, size_t priv_rl_size)</td></tr>
+<tr class="memdesc:gaffbe6ac2bc7236ad65126a17ebdceb14"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the Intel(R) EPID 1.1 private key based revocation list. <a href="#gaffbe6ac2bc7236ad65126a17ebdceb14">More...</a><br /></td></tr>
+<tr class="separator:gaffbe6ac2bc7236ad65126a17ebdceb14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaff5a014b0334be7e8583f0f99cb5e9b8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#gaff5a014b0334be7e8583f0f99cb5e9b8">Epid11VerifierSetSigRl</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> *ctx, <a class="el" href="struct_epid11_sig_rl.html">Epid11SigRl</a> const *sig_rl, size_t sig_rl_size)</td></tr>
+<tr class="memdesc:gaff5a014b0334be7e8583f0f99cb5e9b8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the Intel(R) EPID 1.1 signature based revocation list. <a href="#gaff5a014b0334be7e8583f0f99cb5e9b8">More...</a><br /></td></tr>
+<tr class="separator:gaff5a014b0334be7e8583f0f99cb5e9b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga809c777908b2f9d029062d9424cb5f65"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#ga809c777908b2f9d029062d9424cb5f65">Epid11VerifierSetGroupRl</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> *ctx, <a class="el" href="struct_epid11_group_rl.html">Epid11GroupRl</a> const *grp_rl, size_t grp_rl_size)</td></tr>
+<tr class="memdesc:ga809c777908b2f9d029062d9424cb5f65"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the Intel(R) EPID 1.1 group based revocation list. <a href="#ga809c777908b2f9d029062d9424cb5f65">More...</a><br /></td></tr>
+<tr class="separator:ga809c777908b2f9d029062d9424cb5f65"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0cb6d30df527ee0d8f0a1b68d2b7c0c0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#ga0cb6d30df527ee0d8f0a1b68d2b7c0c0">Epid11VerifierSetBasename</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> *ctx, void const *basename, size_t basename_len)</td></tr>
+<tr class="memdesc:ga0cb6d30df527ee0d8f0a1b68d2b7c0c0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the basename to be used by a verifier. <a href="#ga0cb6d30df527ee0d8f0a1b68d2b7c0c0">More...</a><br /></td></tr>
+<tr class="separator:ga0cb6d30df527ee0d8f0a1b68d2b7c0c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafe5ad6bde38ad0c3e0a9960975fd5216"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#gafe5ad6bde38ad0c3e0a9960975fd5216">Epid11Verify</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *ctx, <a class="el" href="struct_epid11_signature.html">Epid11Signature</a> const *sig, size_t sig_len, void const *msg, size_t msg_len)</td></tr>
+<tr class="memdesc:gafe5ad6bde38ad0c3e0a9960975fd5216"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies an Intel(R) EPID 1.1 signature and checks revocation status. <a href="#gafe5ad6bde38ad0c3e0a9960975fd5216">More...</a><br /></td></tr>
+<tr class="separator:gafe5ad6bde38ad0c3e0a9960975fd5216"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab0b6560b226a37321f5ca5d4fb55eba7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#gab0b6560b226a37321f5ca5d4fb55eba7">Epid11AreSigsLinked</a> (<a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *sig1, <a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *sig2)</td></tr>
+<tr class="memdesc:gab0b6560b226a37321f5ca5d4fb55eba7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if two Intel(R) EPID 1.1 signatures are linked. <a href="#gab0b6560b226a37321f5ca5d4fb55eba7">More...</a><br /></td></tr>
+<tr class="separator:gab0b6560b226a37321f5ca5d4fb55eba7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7b5d19277da043c2b79721975d7bd070"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070">Epid11VerifyBasicSig</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *ctx, <a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *sig, void const *msg, size_t msg_len)</td></tr>
+<tr class="memdesc:ga7b5d19277da043c2b79721975d7bd070"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies an Intel(R) EPID 1.1 member signature without revocation checks. <a href="#ga7b5d19277da043c2b79721975d7bd070">More...</a><br /></td></tr>
+<tr class="separator:ga7b5d19277da043c2b79721975d7bd070"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3a2e320d7de6156b2ce9d73e9cdce813"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#ga3a2e320d7de6156b2ce9d73e9cdce813">Epid11NrVerify</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *ctx, <a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *sig, void const *msg, size_t msg_len, <a class="el" href="struct_epid11_sig_rl_entry.html">Epid11SigRlEntry</a> const *sigrl_entry, <a class="el" href="struct_epid11_nr_proof.html">Epid11NrProof</a> const *proof)</td></tr>
+<tr class="memdesc:ga3a2e320d7de6156b2ce9d73e9cdce813"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies the non-revoked proof for a single Intel(R) EPID 1.1 signature based revocation list entry. <a href="#ga3a2e320d7de6156b2ce9d73e9cdce813">More...</a><br /></td></tr>
+<tr class="separator:ga3a2e320d7de6156b2ce9d73e9cdce813"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0b79c79d09e3551158e1c38c7c335929"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#ga0b79c79d09e3551158e1c38c7c335929">Epid11CheckPrivRlEntry</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *ctx, <a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *sig, <a class="el" href="struct_fp_elem_str.html">FpElemStr</a> const *f)</td></tr>
+<tr class="memdesc:ga0b79c79d09e3551158e1c38c7c335929"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies an Intel(R) EPID 1.1 signature has not been revoked in the private key based revocation list. <a href="#ga0b79c79d09e3551158e1c38c7c335929">More...</a><br /></td></tr>
+<tr class="separator:ga0b79c79d09e3551158e1c38c7c335929"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Intel(R) EPID 1.1 Verifier functionality. </p>
+<p>To verify signatures coming from member devices that belong to an Intel&reg; EPID 1.1 group, you need to use Intel&reg; EPID 1.1 verifier APIs.</p>
+<p>If you are acting as a verifier for both Intel&reg; EPID 1.1 and 2.0 members, you can determine if you need version 1.1 or 2.0 verification by checking the Intel&reg; EPID version field in the group public key file (see <a class="el" href="group___file_parser.html#ga8e38d1102eb1dd9b5af2e2f79236da55" title="Extracts Intel(R) EPID Binary Output File header information. ">EpidParseFileHeader</a>). You can also check the version in other binary issuer material, such as the GroupRL and SigRL.</p>
+<p>The 1.1 verifier APIs take a verifier context as input. Each verifier context (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702" title="Internal context of Intel(R) EPID 1.1 verifier. ">Epid11VerifierCtx</a>) represents a verifier for a single group.</p>
+<p>The Intel&reg; EPID 1.1 specification does not provide hash algorithm selection and verifier blacklist revocation. Therefore, APIs such as <a class="el" href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92" title="Sets the hash algorithm to be used by a verifier. ">EpidVerifierSetHashAlg</a> and <a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a" title="Sets the verifier revocation list. ">EpidVerifierSetVerifierRl</a> are not available.</p>
+<p>You can find the Intel&reg; EPID 1.1 API headers in the 1.1 directories, for example, <code>epid/verifier/1.1/api.h</code>.</p>
+<p>Intel&reg; EPID 1.1 APIs and data structures are indicated with the "Epid11" prefix. For example, the Intel&reg; EPID 1.1 version of <a class="el" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb" title="Extracts group public key from buffer in issuer binary format. ">EpidParseGroupPubKeyFile</a> is called <a class="el" href="group___epid11_file_parser_module.html#ga1f92d1cb6bd7d9815711fde515b40a4c" title="Extracts group public key from buffer in issuer binary format. ">Epid11ParseGroupPubKeyFile</a>, and the Intel&reg; EPID 1.1 version of <code><a class="el" href="struct_group_rl.html" title="group revocation list ">GroupRl</a></code> is <code><a class="el" href="struct_epid11_group_rl.html" title="Intel(R) EPID 1.1 group revocation list. ">Epid11GroupRl</a></code>. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="gab0b6560b226a37321f5ca5d4fb55eba7"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> Epid11AreSigsLinked </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *&#160;</td>
+ <td class="paramname"><em>sig1</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *&#160;</td>
+ <td class="paramname"><em>sig2</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Determines if two Intel(R) EPID 1.1 signatures are linked. </p>
+<p>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.</p>
+<p>This API supports Intel(R) EPID 1.1 verification.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">sig1</td><td>A basic signature. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">sig2</td><td>A basic signature.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>bool</dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+ <table class="retval">
+ <tr><td class="paramname">true</td><td>if the signatures were generated by the same member </td></tr>
+ <tr><td class="paramname">false</td><td>if it couldn't be determined if the signatures were generated by the same member</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd>The input signatures should be verified using <a class="el" href="group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070" title="Verifies an Intel(R) EPID 1.1 member signature without revocation checks. ">Epid11VerifyBasicSig()</a> before invocation. Behavior is undefined if either of the signatures cannot be verified.</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070" title="Verifies an Intel(R) EPID 1.1 member signature without revocation checks. ">Epid11VerifyBasicSig</a> </dd>
+<dd>
+<a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0b79c79d09e3551158e1c38c7c335929"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11CheckPrivRlEntry </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *&#160;</td>
+ <td class="paramname"><em>ctx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *&#160;</td>
+ <td class="paramname"><em>sig</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_fp_elem_str.html">FpElemStr</a> const *&#160;</td>
+ <td class="paramname"><em>f</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Verifies an Intel(R) EPID 1.1 signature has not been revoked in the private key based revocation list. </p>
+<p>Used in constrained environments where, due to limited memory, it may not be possible to process through a large and potentially unbounded revocation list.</p>
+<p>This API supports Intel(R) EPID 1.1 verification.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ctx</td><td>The verifier context. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">sig</td><td>The basic signature. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">f</td><td>The private key based revocation list entry.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd>Sig should be verified using <a class="el" href="group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070" title="Verifies an Intel(R) EPID 1.1 member signature without revocation checks. ">Epid11VerifyBasicSig()</a> before invocation. Behavior is undefined if sig cannot be verified.</dd>
+<dd>
+This function should be used in conjunction with <a class="el" href="group___epid11_verifier_module.html#ga3a2e320d7de6156b2ce9d73e9cdce813" title="Verifies the non-revoked proof for a single Intel(R) EPID 1.1 signature based revocation list entry...">Epid11NrVerify()</a> and <a class="el" href="group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070" title="Verifies an Intel(R) EPID 1.1 member signature without revocation checks. ">Epid11VerifyBasicSig()</a>.</dd>
+<dd>
+If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the verify should de considered to have failed.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a> </dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8" title="Creates a new Intel(R) EPID 1.1 verifier context. ">Epid11VerifierCreate</a> </dd>
+<dd>
+<a class="el" href="group___epid11_verifier_module.html#ga3a2e320d7de6156b2ce9d73e9cdce813" title="Verifies the non-revoked proof for a single Intel(R) EPID 1.1 signature based revocation list entry...">Epid11NrVerify</a> </dd>
+<dd>
+<a class="el" href="group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070" title="Verifies an Intel(R) EPID 1.1 member signature without revocation checks. ">Epid11VerifyBasicSig</a> </dd>
+<dd>
+<a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga3a2e320d7de6156b2ce9d73e9cdce813"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11NrVerify </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *&#160;</td>
+ <td class="paramname"><em>ctx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *&#160;</td>
+ <td class="paramname"><em>sig</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void const *&#160;</td>
+ <td class="paramname"><em>msg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>msg_len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_sig_rl_entry.html">Epid11SigRlEntry</a> const *&#160;</td>
+ <td class="paramname"><em>sigrl_entry</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_nr_proof.html">Epid11NrProof</a> const *&#160;</td>
+ <td class="paramname"><em>proof</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Verifies the non-revoked proof for a single Intel(R) EPID 1.1 signature based revocation list entry. </p>
+<p>Used in constrained environments where, due to limited memory, it may not be possible to process through a large and potentially unbounded revocation list.</p>
+<p>This API supports Intel(R) EPID 1.1 verification.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ctx</td><td>The verifier context. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">sig</td><td>The basic signature. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">msg</td><td>The message that was signed. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">msg_len</td><td>The size of msg in bytes. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">sigrl_entry</td><td>The signature based revocation list entry. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">proof</td><td>The non-revoked proof.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Sig should be verified using <a class="el" href="group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070" title="Verifies an Intel(R) EPID 1.1 member signature without revocation checks. ">Epid11VerifyBasicSig()</a> before invocation. Behavior is undefined if sig cannot be verified.</dd>
+<dd>
+This function should be used in conjunction with <a class="el" href="group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070" title="Verifies an Intel(R) EPID 1.1 member signature without revocation checks. ">Epid11VerifyBasicSig()</a> and <a class="el" href="group___epid11_verifier_module.html#ga0b79c79d09e3551158e1c38c7c335929" title="Verifies an Intel(R) EPID 1.1 signature has not been revoked in the private key based revocation list...">Epid11CheckPrivRlEntry()</a>.</dd>
+<dd>
+If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the verify should de considered to have failed.</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8" title="Creates a new Intel(R) EPID 1.1 verifier context. ">Epid11VerifierCreate</a> </dd>
+<dd>
+<a class="el" href="group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070" title="Verifies an Intel(R) EPID 1.1 member signature without revocation checks. ">Epid11VerifyBasicSig</a> </dd>
+<dd>
+<a class="el" href="group___epid11_verifier_module.html#ga0b79c79d09e3551158e1c38c7c335929" title="Verifies an Intel(R) EPID 1.1 signature has not been revoked in the private key based revocation list...">Epid11CheckPrivRlEntry</a> </dd>
+<dd>
+<a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac5a8f8d7624063ea428d81dbdbf61fa8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11VerifierCreate </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="struct_epid11_group_pub_key.html">Epid11GroupPubKey</a> const *&#160;</td>
+ <td class="paramname"><em>pub_key</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_verifier_precomp.html">Epid11VerifierPrecomp</a> const *&#160;</td>
+ <td class="paramname"><em>precomp</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> **&#160;</td>
+ <td class="paramname"><em>ctx</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a new Intel(R) EPID 1.1 verifier context. </p>
+<p>Must be called to create the verifier context that is used by other "Verifier" APIs.</p>
+<p>Allocates memory for the context, then initialize it.</p>
+<p><a class="el" href="group___epid11_verifier_module.html#ga63cae8d5abcf4d7e3af4157de18998f1" title="Deletes an existing Intel(R) EPID 1.1 verifier context. ">Epid11VerifierDelete()</a> must be called to safely release the member context.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">pub_key</td><td>The group certificate. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">precomp</td><td>Optional pre-computed data. If NULL the value is computed internally and is readable using <a class="el" href="group___epid11_verifier_module.html#ga241520cb925e5be89893a2037451cf1c" title="Serializes the pre-computed Intel(R) EPID 1.1 verifier settings. ">Epid11VerifierWritePrecomp()</a>. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">ctx</td><td>Newly constructed verifier context.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section note"><dt>Note</dt><dd>If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the content of ctx is undefined.</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid11_verifier_module.html#ga63cae8d5abcf4d7e3af4157de18998f1" title="Deletes an existing Intel(R) EPID 1.1 verifier context. ">Epid11VerifierDelete</a> </dd>
+<dd>
+<a class="el" href="group___epid11_verifier_module.html#ga241520cb925e5be89893a2037451cf1c" title="Serializes the pre-computed Intel(R) EPID 1.1 verifier settings. ">Epid11VerifierWritePrecomp</a> </dd>
+<dd>
+<a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga63cae8d5abcf4d7e3af4157de18998f1"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Epid11VerifierDelete </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> **&#160;</td>
+ <td class="paramname"><em>ctx</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Deletes an existing Intel(R) EPID 1.1 verifier context. </p>
+<p>Must be called to safely release a verifier context created using <a class="el" href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8" title="Creates a new Intel(R) EPID 1.1 verifier context. ">Epid11VerifierCreate()</a>.</p>
+<p>De-initializes the context, frees memory used by the context, and sets the context pointer to NULL.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>The verifier context. Can be NULL.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8" title="Creates a new Intel(R) EPID 1.1 verifier context. ">Epid11VerifierCreate</a> </dd>
+<dd>
+<a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga0cb6d30df527ee0d8f0a1b68d2b7c0c0"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11VerifierSetBasename </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> *&#160;</td>
+ <td class="paramname"><em>ctx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void const *&#160;</td>
+ <td class="paramname"><em>basename</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>basename_len</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Sets the basename to be used by a verifier. </p>
+<p>This API allows setting a zero length base name.</p>
+<dl class="section warning"><dt>Warning</dt><dd>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.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>The verifier context. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">basename</td><td>The basename. Pass NULL for random base. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">basename_len</td><td>Number of bytes in basename buffer. Must be 0 if basename is NULL.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8" title="Creates a new Intel(R) EPID 1.1 verifier context. ">Epid11VerifierCreate</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga809c777908b2f9d029062d9424cb5f65"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11VerifierSetGroupRl </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> *&#160;</td>
+ <td class="paramname"><em>ctx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_group_rl.html">Epid11GroupRl</a> const *&#160;</td>
+ <td class="paramname"><em>grp_rl</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>grp_rl_size</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Sets the Intel(R) EPID 1.1 group based revocation list. </p>
+<p>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.</p>
+<p>This API supports Intel(R) EPID 1.1 verification.</p>
+<dl class="section attention"><dt>Attention</dt><dd>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.</dd>
+<dd>
+It is the responsibility of the caller to free the memory pointed to by grp_rl after the verifier is no longer using it.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>The verifier context. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">grp_rl</td><td>The group based revocation list. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">grp_rl_size</td><td>The size of the group based revocation list in bytes.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section note"><dt>Note</dt><dd>If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the group based revocation list pointed to by the verifier is undefined.</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8" title="Creates a new Intel(R) EPID 1.1 verifier context. ">Epid11VerifierCreate</a> </dd>
+<dd>
+<a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaffbe6ac2bc7236ad65126a17ebdceb14"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11VerifierSetPrivRl </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> *&#160;</td>
+ <td class="paramname"><em>ctx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_priv_rl.html">Epid11PrivRl</a> const *&#160;</td>
+ <td class="paramname"><em>priv_rl</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>priv_rl_size</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Sets the Intel(R) EPID 1.1 private key based revocation list. </p>
+<p>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.</p>
+<p>This API supports Intel(R) EPID 1.1 verification.</p>
+<dl class="section attention"><dt>Attention</dt><dd>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.</dd>
+<dd>
+It is the responsibility of the caller to free the memory pointed to by priv_rl after the verifier is no longer using it.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>The verifier context. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">priv_rl</td><td>The private key based revocation list. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">priv_rl_size</td><td>The size of the private key based revocation list in bytes.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section note"><dt>Note</dt><dd>If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the private key based revocation list pointed to by the verifier is undefined.</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8" title="Creates a new Intel(R) EPID 1.1 verifier context. ">Epid11VerifierCreate</a> </dd>
+<dd>
+<a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gaff5a014b0334be7e8583f0f99cb5e9b8"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11VerifierSetSigRl </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> *&#160;</td>
+ <td class="paramname"><em>ctx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_sig_rl.html">Epid11SigRl</a> const *&#160;</td>
+ <td class="paramname"><em>sig_rl</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>sig_rl_size</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Sets the Intel(R) EPID 1.1 signature based revocation list. </p>
+<p>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.</p>
+<p>This API supports Intel(R) EPID 1.1 verification.</p>
+<dl class="section attention"><dt>Attention</dt><dd>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.</dd>
+<dd>
+It is the responsibility of the caller to free the memory pointed to by sig_rl after the verifier is no longer using it.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>The verifier context. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">sig_rl</td><td>The signature based revocation list. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">sig_rl_size</td><td>The size of the signature based revocation list in bytes.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section note"><dt>Note</dt><dd>If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the signature based revocation list pointed to by the verifier is undefined.</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8" title="Creates a new Intel(R) EPID 1.1 verifier context. ">Epid11VerifierCreate</a> </dd>
+<dd>
+SdkOverview_11Verifier </dd>
+<dd>
+<a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga241520cb925e5be89893a2037451cf1c"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11VerifierWritePrecomp </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *&#160;</td>
+ <td class="paramname"><em>ctx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_verifier_precomp.html">Epid11VerifierPrecomp</a> *&#160;</td>
+ <td class="paramname"><em>precomp</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Serializes the pre-computed Intel(R) EPID 1.1 verifier settings. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ctx</td><td>The verifier context. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">precomp</td><td>The Serialized pre-computed verifier settings.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section note"><dt>Note</dt><dd>If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the content of precomp is undefined.</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gafe5ad6bde38ad0c3e0a9960975fd5216"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11Verify </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *&#160;</td>
+ <td class="paramname"><em>ctx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_signature.html">Epid11Signature</a> const *&#160;</td>
+ <td class="paramname"><em>sig</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>sig_len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void const *&#160;</td>
+ <td class="paramname"><em>msg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>msg_len</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Verifies an Intel(R) EPID 1.1 signature and checks revocation status. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ctx</td><td>The verifier context. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">sig</td><td>The signature. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">sig_len</td><td>The size of sig in bytes. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">msg</td><td>The message that was signed. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">msg_len</td><td>The size of msg in bytes.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="retval"><dt>Return values</dt><dd>
+ <table class="retval">
+ <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab45ad60085d03c03ea30b40a0519897e" title="Signature is valid. ">kEpidSigValid</a></td><td>Signature validated successfully </td></tr>
+ <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8" title="Signature is invalid. ">kEpidSigInvalid</a></td><td>Signature is invalid </td></tr>
+ <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aedd43fb4043bef3b515fc23f1d9a5fe5" title="Signature revoked in GroupRl. ">kEpidSigRevokedInGroupRl</a></td><td>Signature revoked in <a class="el" href="struct_group_rl.html" title="group revocation list ">GroupRl</a> </td></tr>
+ <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1dc7b7e6ff97c7ed9ff4191d76ebd6e1" title="Signature revoked in PrivRl. ">kEpidSigRevokedInPrivRl</a></td><td>Signature revoked in <a class="el" href="struct_priv_rl.html" title="private-key based revocation list. ">PrivRl</a> </td></tr>
+ <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a43c658cbf0d156850d71ce3f8efd461c" title="Signature revoked in SigRl. ">kEpidSigRevokedInSigRl</a></td><td>Signature revoked in <a class="el" href="struct_sig_rl.html" title="signature based revocation list ">SigRl</a></td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd>If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> or one of the values listed above the verify should de considered to have failed.</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8" title="Creates a new Intel(R) EPID 1.1 verifier context. ">Epid11VerifierCreate</a> </dd>
+<dd>
+<a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga7b5d19277da043c2b79721975d7bd070"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Epid11VerifyBasicSig </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *&#160;</td>
+ <td class="paramname"><em>ctx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *&#160;</td>
+ <td class="paramname"><em>sig</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void const *&#160;</td>
+ <td class="paramname"><em>msg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>msg_len</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Verifies an Intel(R) EPID 1.1 member signature without revocation checks. </p>
+<p>Used in constrained environments where, due to limited memory, it may not be possible to process through a large and potentially unbounded revocation list.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ctx</td><td>The verifier context. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">sig</td><td>The basic signature. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">msg</td><td>The message that was signed. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">msg_len</td><td>The size of msg in bytes.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function should be used in conjunction with <a class="el" href="group___epid11_verifier_module.html#ga3a2e320d7de6156b2ce9d73e9cdce813" title="Verifies the non-revoked proof for a single Intel(R) EPID 1.1 signature based revocation list entry...">Epid11NrVerify()</a> and <a class="el" href="group___epid11_verifier_module.html#ga0b79c79d09e3551158e1c38c7c335929" title="Verifies an Intel(R) EPID 1.1 signature has not been revoked in the private key based revocation list...">Epid11CheckPrivRlEntry()</a>.</dd>
+<dd>
+If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the verify should be considered to have failed.</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8" title="Creates a new Intel(R) EPID 1.1 verifier context. ">Epid11VerifierCreate</a> </dd>
+<dd>
+<a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/group___epid11_verifier_module.js b/doc/html/group___epid11_verifier_module.js
new file mode 100644
index 0000000..b686765
--- /dev/null
+++ b/doc/html/group___epid11_verifier_module.js
@@ -0,0 +1,22 @@
+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/doc/html/group___epid_common.html b/doc/html/group___epid_common.html
index e094004..83665db 100644
--- a/doc/html/group___epid_common.html
+++ b/doc/html/group___epid_common.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -59,10 +59,7 @@ $(document).ready(function(){initNavTree('group___epid_common.html','');});
<div class="header">
<div class="summary">
<a href="#groups">Modules</a> &#124;
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#define-members">Macros</a> &#124;
-<a href="#typedef-members">Typedefs</a> &#124;
-<a href="#func-members">Functions</a> </div>
+<a href="#typedef-members">Typedefs</a> </div>
<div class="headertitle">
<div class="title">common<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a></div></div> </div>
</div><!--header-->
@@ -89,151 +86,15 @@ Modules</h2></td></tr>
<tr class="memdesc:group___epid_types"><td class="mdescLeft">&#160;</td><td class="mdescRight">SDK data types. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_commit_values.html">CommitValues</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Storage for values to create commitment in Sign and Verify algorithms. <a href="struct_commit_values.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html">Epid2Params_</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal representation of <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a>. <a href="struct_epid2_params__.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_group_pub_key__.html">GroupPubKey_</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal representation of <a class="el" href="struct_group_pub_key.html" title="Intel(R) EPID 2.0 group public key. ">GroupPubKey</a>. <a href="struct_group_pub_key__.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_priv_key__.html">PrivKey_</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal implementation of <a class="el" href="struct_priv_key.html" title="Intel(R) EPID 2.0 private key. ">PrivKey</a>. <a href="struct_priv_key__.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:ga29a7e07cd5181e738f98fc026979efca"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga29a7e07cd5181e738f98fc026979efca">ntohl</a>(u32) </td></tr>
-<tr class="memdesc:ga29a7e07cd5181e738f98fc026979efca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Macros to transform oct str 32 into uint_32. <a href="#ga29a7e07cd5181e738f98fc026979efca">More...</a><br /></td></tr>
-<tr class="separator:ga29a7e07cd5181e738f98fc026979efca"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gab1587898f15de1b51cd5e799a43465ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gab1587898f15de1b51cd5e799a43465ff"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gab1587898f15de1b51cd5e799a43465ff">EPID_ENABLE_EPID_ZERO_MEMORY_ON_FREE</a></td></tr>
-<tr class="memdesc:gab1587898f15de1b51cd5e799a43465ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">When enabled secrets are wiped out from the memory by EpidFree. <br /></td></tr>
-<tr class="separator:gab1587898f15de1b51cd5e799a43465ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga38fad13430eba25f9f9b05e35ecd22f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga38fad13430eba25f9f9b05e35ecd22f8"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga38fad13430eba25f9f9b05e35ecd22f8">SAFE_ALLOC</a>(size)&#160;&#160;&#160;<a class="el" href="group___epid_common.html#gada170fd890504b013139f4a33033ae4b">EpidAlloc</a>(size);</td></tr>
-<tr class="memdesc:ga38fad13430eba25f9f9b05e35ecd22f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates zero initalized block of memory. <br /></td></tr>
-<tr class="separator:ga38fad13430eba25f9f9b05e35ecd22f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga2ca3c202ee727774d55890e568621842"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga2ca3c202ee727774d55890e568621842">SAFE_FREE</a>(ptr) </td></tr>
-<tr class="memdesc:ga2ca3c202ee727774d55890e568621842"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deallocates space allocated by <a class="el" href="group___epid_common.html#ga38fad13430eba25f9f9b05e35ecd22f8" title="Allocates zero initalized block of memory. ">SAFE_ALLOC()</a> and nulls pointer. <a href="#ga2ca3c202ee727774d55890e568621842">More...</a><br /></td></tr>
-<tr class="separator:ga2ca3c202ee727774d55890e568621842"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga41c113e15b695291199c27fac4bd53fa"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga41c113e15b695291199c27fac4bd53fa"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga41c113e15b695291199c27fac4bd53fa">SAFE_REALLOC</a>(ptr, size)&#160;&#160;&#160;<a class="el" href="group___epid_common.html#ga6911838728d546e4a51d7bcb8404525c">EpidRealloc</a>((ptr), (size))</td></tr>
-<tr class="memdesc:ga41c113e15b695291199c27fac4bd53fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Changes the size of the memory block pointed to by ptr. <br /></td></tr>
-<tr class="separator:ga41c113e15b695291199c27fac4bd53fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga6119a2c0323a3fca9e502b24bc378c2c"><td class="memItemLeft" align="right" valign="top">typedef int(__STDCALL *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a>) (unsigned int *rand_data, int num_bits, void *user_data)</td></tr>
<tr class="memdesc:ga6119a2c0323a3fca9e502b24bc378c2c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generates random data. <a href="#ga6119a2c0323a3fca9e502b24bc378c2c">More...</a><br /></td></tr>
<tr class="separator:ga6119a2c0323a3fca9e502b24bc378c2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga2d54f4f222e965222024113c0420602d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga2d54f4f222e965222024113c0420602d">SetKeySpecificCommitValues</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_commit_values.html">CommitValues</a> *values)</td></tr>
-<tr class="memdesc:ga2d54f4f222e965222024113c0420602d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set group public key related fields from <a class="el" href="struct_commit_values.html" title="Storage for values to create commitment in Sign and Verify algorithms. ">CommitValues</a> structure. <a href="#ga2d54f4f222e965222024113c0420602d">More...</a><br /></td></tr>
-<tr class="separator:ga2d54f4f222e965222024113c0420602d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga3f3c3b965dd714179cbc2f8d96678ee0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga3f3c3b965dd714179cbc2f8d96678ee0">SetCalculatedCommitValues</a> (<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a> const *B, <a class="el" href="struct_g1_elem_str.html">G1ElemStr</a> const *K, <a class="el" href="struct_g1_elem_str.html">G1ElemStr</a> const *T, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *R1, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *G1, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *R2, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *GT, <a class="el" href="struct_commit_values.html">CommitValues</a> *values)</td></tr>
-<tr class="memdesc:ga3f3c3b965dd714179cbc2f8d96678ee0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set <a class="el" href="struct_commit_values.html" title="Storage for values to create commitment in Sign and Verify algorithms. ">CommitValues</a> structure fields calculated in algorithm. <a href="#ga3f3c3b965dd714179cbc2f8d96678ee0">More...</a><br /></td></tr>
-<tr class="separator:ga3f3c3b965dd714179cbc2f8d96678ee0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga23f8ea0f7529e8e7a81bd88e607dda01"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga23f8ea0f7529e8e7a81bd88e607dda01">CalculateCommitmentHash</a> (<a class="el" href="struct_commit_values.html">CommitValues</a> const *values, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *Fp, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg, void const *msg, size_t msg_len, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *c)</td></tr>
-<tr class="memdesc:ga23f8ea0f7529e8e7a81bd88e607dda01"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculate Fp.hash(t3 || m) for Sign and Verfiy algorithms. <a href="#ga23f8ea0f7529e8e7a81bd88e607dda01">More...</a><br /></td></tr>
-<tr class="separator:ga23f8ea0f7529e8e7a81bd88e607dda01"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga5c396a5ac8a0e5ec1e02330c53420dce"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga5c396a5ac8a0e5ec1e02330c53420dce">CreateEpid2Params</a> (<a class="el" href="struct_epid2_params__.html">Epid2Params_</a> **params)</td></tr>
-<tr class="memdesc:ga5c396a5ac8a0e5ec1e02330c53420dce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs the internal representation of <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a>. <a href="#ga5c396a5ac8a0e5ec1e02330c53420dce">More...</a><br /></td></tr>
-<tr class="separator:ga5c396a5ac8a0e5ec1e02330c53420dce"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gac22664b5f7df5cd4da1bd7b1b1e7912f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gac22664b5f7df5cd4da1bd7b1b1e7912f">DeleteEpid2Params</a> (<a class="el" href="struct_epid2_params__.html">Epid2Params_</a> **epid_params)</td></tr>
-<tr class="memdesc:gac22664b5f7df5cd4da1bd7b1b1e7912f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deallocates storage for internal representation of <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a>. <a href="#gac22664b5f7df5cd4da1bd7b1b1e7912f">More...</a><br /></td></tr>
-<tr class="separator:gac22664b5f7df5cd4da1bd7b1b1e7912f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga20a575d3d538b0bac654fd57f20e2b30"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga20a575d3d538b0bac654fd57f20e2b30">CreateGroupPubKey</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key_str, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *G1, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *G2, <a class="el" href="struct_group_pub_key__.html">GroupPubKey_</a> **pub_key)</td></tr>
-<tr class="memdesc:ga20a575d3d538b0bac654fd57f20e2b30"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs internal representation of <a class="el" href="struct_group_pub_key.html" title="Intel(R) EPID 2.0 group public key. ">GroupPubKey</a>. <a href="#ga20a575d3d538b0bac654fd57f20e2b30">More...</a><br /></td></tr>
-<tr class="separator:ga20a575d3d538b0bac654fd57f20e2b30"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga07c9b47d326ee784aecb78195adffb8b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga07c9b47d326ee784aecb78195adffb8b">DeleteGroupPubKey</a> (<a class="el" href="struct_group_pub_key__.html">GroupPubKey_</a> **pub_key)</td></tr>
-<tr class="memdesc:ga07c9b47d326ee784aecb78195adffb8b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deallocates storage for internal representation of <a class="el" href="struct_group_pub_key.html" title="Intel(R) EPID 2.0 group public key. ">GroupPubKey</a>. <a href="#ga07c9b47d326ee784aecb78195adffb8b">More...</a><br /></td></tr>
-<tr class="separator:ga07c9b47d326ee784aecb78195adffb8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gad471f600f6032f432b99432fda97a070"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gad471f600f6032f432b99432fda97a070">EpidZeroMemory</a> (void *ptr, size_t size)</td></tr>
-<tr class="memdesc:gad471f600f6032f432b99432fda97a070"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clear information stored in block of memory pointer to by ptr. <a href="#gad471f600f6032f432b99432fda97a070">More...</a><br /></td></tr>
-<tr class="separator:gad471f600f6032f432b99432fda97a070"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gada170fd890504b013139f4a33033ae4b"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gada170fd890504b013139f4a33033ae4b">EpidAlloc</a> (size_t size)</td></tr>
-<tr class="memdesc:gada170fd890504b013139f4a33033ae4b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates memory of size bytes. <a href="#gada170fd890504b013139f4a33033ae4b">More...</a><br /></td></tr>
-<tr class="separator:gada170fd890504b013139f4a33033ae4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga6911838728d546e4a51d7bcb8404525c"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga6911838728d546e4a51d7bcb8404525c">EpidRealloc</a> (void *ptr, size_t new_size)</td></tr>
-<tr class="memdesc:ga6911838728d546e4a51d7bcb8404525c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reallocates memory allocated by EpidAlloc. <a href="#ga6911838728d546e4a51d7bcb8404525c">More...</a><br /></td></tr>
-<tr class="separator:ga6911838728d546e4a51d7bcb8404525c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gaeae76709e6bfc80c9d79ec4943ccc1ac"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gaeae76709e6bfc80c9d79ec4943ccc1ac">EpidFree</a> (void *ptr)</td></tr>
-<tr class="memdesc:gaeae76709e6bfc80c9d79ec4943ccc1ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees memory allocated by EpidAlloc. <a href="#gaeae76709e6bfc80c9d79ec4943ccc1ac">More...</a><br /></td></tr>
-<tr class="separator:gaeae76709e6bfc80c9d79ec4943ccc1ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga4856121ac4bce4161a015a8a2b4f5b1c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga4856121ac4bce4161a015a8a2b4f5b1c">memcpy_S</a> (void *dest, size_t destsz, void const *src, size_t count)</td></tr>
-<tr class="memdesc:ga4856121ac4bce4161a015a8a2b4f5b1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies bytes between buffers with security ehancements. <a href="#ga4856121ac4bce4161a015a8a2b4f5b1c">More...</a><br /></td></tr>
-<tr class="separator:ga4856121ac4bce4161a015a8a2b4f5b1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga23ec3f6c8b89eb63e04d2b1ec6fd2696"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga23ec3f6c8b89eb63e04d2b1ec6fd2696">IsSigRlValid</a> (<a class="el" href="group___epid_types.html#gada666b48d0cbc301985405fde896f1de">GroupId</a> const *gid, <a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl, size_t sig_rl_size)</td></tr>
-<tr class="memdesc:ga23ec3f6c8b89eb63e04d2b1ec6fd2696"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function to verify if signature based revocation list is valid. <a href="#ga23ec3f6c8b89eb63e04d2b1ec6fd2696">More...</a><br /></td></tr>
-<tr class="separator:ga23ec3f6c8b89eb63e04d2b1ec6fd2696"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga00cb25d52726cef61a9a5266176c2a58"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58">CreateStack</a> (size_t element_size, <a class="el" href="struct_stack.html">Stack</a> **stack)</td></tr>
-<tr class="memdesc:ga00cb25d52726cef61a9a5266176c2a58"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create stack. <a href="#ga00cb25d52726cef61a9a5266176c2a58">More...</a><br /></td></tr>
-<tr class="separator:ga00cb25d52726cef61a9a5266176c2a58"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga0b4dedb867504e0148aa0e1fdf642b2b"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga0b4dedb867504e0148aa0e1fdf642b2b">StackPushN</a> (<a class="el" href="struct_stack.html">Stack</a> *stack, size_t n, void *elements)</td></tr>
-<tr class="memdesc:ga0b4dedb867504e0148aa0e1fdf642b2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Push multiple elements to the stack. <a href="#ga0b4dedb867504e0148aa0e1fdf642b2b">More...</a><br /></td></tr>
-<tr class="separator:ga0b4dedb867504e0148aa0e1fdf642b2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga8cdde2b366f4473f0a6965bcfea5b6a6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga8cdde2b366f4473f0a6965bcfea5b6a6">StackPopN</a> (<a class="el" href="struct_stack.html">Stack</a> *stack, size_t n, void *elements)</td></tr>
-<tr class="memdesc:ga8cdde2b366f4473f0a6965bcfea5b6a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pop multiple elements from the stack. <a href="#ga8cdde2b366f4473f0a6965bcfea5b6a6">More...</a><br /></td></tr>
-<tr class="separator:ga8cdde2b366f4473f0a6965bcfea5b6a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gab34066dc882ad63362c43c0790973fdc"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gab34066dc882ad63362c43c0790973fdc">StackGetSize</a> (<a class="el" href="struct_stack.html">Stack</a> const *stack)</td></tr>
-<tr class="memdesc:gab34066dc882ad63362c43c0790973fdc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get number of elements in the stack. <a href="#gab34066dc882ad63362c43c0790973fdc">More...</a><br /></td></tr>
-<tr class="separator:gab34066dc882ad63362c43c0790973fdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga3335a4754825c54840263aa4b2a9bf67"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga3335a4754825c54840263aa4b2a9bf67">DeleteStack</a> (<a class="el" href="struct_stack.html">Stack</a> **stack)</td></tr>
-<tr class="memdesc:ga3335a4754825c54840263aa4b2a9bf67"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deallocates memory used for the stack. <a href="#ga3335a4754825c54840263aa4b2a9bf67">More...</a><br /></td></tr>
-<tr class="separator:ga3335a4754825c54840263aa4b2a9bf67"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gae51985a0e811f4bbb2d70b62e35b881e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gae51985a0e811f4bbb2d70b62e35b881e">CreatePrivKey</a> (<a class="el" href="struct_priv_key.html">PrivKey</a> const *priv_key_str, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *G1, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *Fp, <a class="el" href="struct_priv_key__.html">PrivKey_</a> **priv_key)</td></tr>
-<tr class="memdesc:gae51985a0e811f4bbb2d70b62e35b881e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs internal representation of <a class="el" href="struct_priv_key.html" title="Intel(R) EPID 2.0 private key. ">PrivKey</a>. <a href="#gae51985a0e811f4bbb2d70b62e35b881e">More...</a><br /></td></tr>
-<tr class="separator:gae51985a0e811f4bbb2d70b62e35b881e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga53db100214e65e362fa426508a240d12"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga53db100214e65e362fa426508a240d12">DeletePrivKey</a> (<a class="el" href="struct_priv_key__.html">PrivKey_</a> **priv_key)</td></tr>
-<tr class="memdesc:ga53db100214e65e362fa426508a240d12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deallocate storage for internal representation of <a class="el" href="struct_priv_key.html" title="Intel(R) EPID 2.0 private key. ">PrivKey</a>. <a href="#ga53db100214e65e362fa426508a240d12">More...</a><br /></td></tr>
-<tr class="separator:ga53db100214e65e362fa426508a240d12"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Common code shared between core sub-components. </p>
<p>Constants, utility functions, and libraries that are used widely in the implementation or definition of APIs and samples. </p>
-<h2 class="groupheader">Macro Definition Documentation</h2>
-<a class="anchor" id="ga29a7e07cd5181e738f98fc026979efca"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define ntohl</td>
- <td>(</td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">u32</td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line">((uint32_t)(((((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)&amp;(u32))[0]) &lt;&lt; 24) + \</div><div class="line"> ((((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)&amp;(u32))[1]) &lt;&lt; 16) + \</div><div class="line"> ((((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)&amp;(u32))[2]) &lt;&lt; 8) + \</div><div class="line"> (((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)&amp;(u32))[3])))</div></div><!-- fragment -->
-<p>Macros to transform oct str 32 into uint_32. </p>
-
-</div>
-</div>
-<a class="anchor" id="ga2ca3c202ee727774d55890e568621842"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define SAFE_FREE</td>
- <td>(</td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">ptr</td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line">{ \</div><div class="line"> if (NULL != (ptr)) { \</div><div class="line"> EpidFree(ptr); \</div><div class="line"> (ptr) = NULL; \</div><div class="line"> } \</div><div class="line"> }</div></div><!-- fragment -->
-<p>Deallocates space allocated by <a class="el" href="group___epid_common.html#ga38fad13430eba25f9f9b05e35ecd22f8" title="Allocates zero initalized block of memory. ">SAFE_ALLOC()</a> and nulls pointer. </p>
-
-</div>
-</div>
<h2 class="groupheader">Typedef Documentation</h2>
<a class="anchor" id="ga6119a2c0323a3fca9e502b24bc378c2c"></a>
<div class="memitem">
@@ -259,798 +120,6 @@ Functions</h2></td></tr>
</div>
</div>
-<h2 class="groupheader">Function Documentation</h2>
-<a class="anchor" id="ga23f8ea0f7529e8e7a81bd88e607dda01"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> CalculateCommitmentHash </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_commit_values.html">CommitValues</a> const *&#160;</td>
- <td class="paramname"><em>values</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *&#160;</td>
- <td class="paramname"><em>Fp</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a>&#160;</td>
- <td class="paramname"><em>hash_alg</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void const *&#160;</td>
- <td class="paramname"><em>msg</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>msg_len</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td>
- <td class="paramname"><em>c</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Calculate Fp.hash(t3 || m) for Sign and Verfiy algorithms. </p>
-<p>Calculate c = Fp.hash(t3 || m) where t3 is Fp.hash(p || g1 || g2 || h1 || h2 || w || B || K || T || R1 || R2).</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">values</td><td>Commit values to hash </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">Fp</td><td>Finite field to perfom hash operation in </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">hash_alg</td><td>Hash algorithm to use </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">msg</td><td>Message to hash </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">msg_len</td><td>Size of msg buffer in bytes </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">c</td><td>Result of calculation</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_common.html#ga2d54f4f222e965222024113c0420602d" title="Set group public key related fields from CommitValues structure. ">SetKeySpecificCommitValues</a> </dd>
-<dd>
-<a class="el" href="group___epid_common.html#ga3f3c3b965dd714179cbc2f8d96678ee0" title="Set CommitValues structure fields calculated in algorithm. ">SetCalculatedCommitValues</a> </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ga5c396a5ac8a0e5ec1e02330c53420dce"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> CreateEpid2Params </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_epid2_params__.html">Epid2Params_</a> **&#160;</td>
- <td class="paramname"><em>params</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructs the internal representation of <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a>. </p>
-<p>Allocates memory for the internal representation of <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a>. Initialize the <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a>. Use <a class="el" href="group___epid_common.html#gac22664b5f7df5cd4da1bd7b1b1e7912f" title="Deallocates storage for internal representation of Epid2Params. ">DeleteEpid2Params()</a> to deallocate memory.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in,out]</td><td class="paramname">params</td><td>Internal <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a></td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a> </dd></dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_common.html#gac22664b5f7df5cd4da1bd7b1b1e7912f" title="Deallocates storage for internal representation of Epid2Params. ">DeleteEpid2Params</a> </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ga20a575d3d538b0bac654fd57f20e2b30"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> CreateGroupPubKey </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *&#160;</td>
- <td class="paramname"><em>pub_key_str</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *&#160;</td>
- <td class="paramname"><em>G1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *&#160;</td>
- <td class="paramname"><em>G2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_group_pub_key__.html">GroupPubKey_</a> **&#160;</td>
- <td class="paramname"><em>pub_key</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructs internal representation of <a class="el" href="struct_group_pub_key.html" title="Intel(R) EPID 2.0 group public key. ">GroupPubKey</a>. </p>
-<p>Allocates memory and initializes gid, h1, h2, w parameters. Use <a class="el" href="group___epid_common.html#ga07c9b47d326ee784aecb78195adffb8b" title="Deallocates storage for internal representation of GroupPubKey. ">DeleteGroupPubKey()</a> to deallocate memory</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">pub_key_str</td><td>Oct string representation of group public key </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">G1</td><td>EcGroup containing elements h1 and h2 </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">G2</td><td>EcGroup containing element w </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">pub_key</td><td>Group public key: (gid, h1, h2, w)</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a> </dd></dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_common.html#ga07c9b47d326ee784aecb78195adffb8b" title="Deallocates storage for internal representation of GroupPubKey. ">DeleteGroupPubKey</a> </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="gae51985a0e811f4bbb2d70b62e35b881e"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> CreatePrivKey </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_priv_key.html">PrivKey</a> const *&#160;</td>
- <td class="paramname"><em>priv_key_str</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *&#160;</td>
- <td class="paramname"><em>G1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *&#160;</td>
- <td class="paramname"><em>Fp</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_priv_key__.html">PrivKey_</a> **&#160;</td>
- <td class="paramname"><em>priv_key</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Constructs internal representation of <a class="el" href="struct_priv_key.html" title="Intel(R) EPID 2.0 private key. ">PrivKey</a>. </p>
-<p>This function allocates memory and initializes gid, A, x, f parameters.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">priv_key_str</td><td>Serialized representation of private key </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">G1</td><td>EcGroup containing element A </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">Fp</td><td>FiniteField containing elements x and f </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">priv_key</td><td>Newly created private key: (gid, A, x, f)</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a> </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ga00cb25d52726cef61a9a5266176c2a58"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> CreateStack </td>
- <td>(</td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>element_size</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_stack.html">Stack</a> **&#160;</td>
- <td class="paramname"><em>stack</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Create stack. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">element_size</td><td>Size of stack element </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">stack</td><td><a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> context to be created</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>true is operation succeed, false if stack were failed to allocate</dd></dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_common.html#ga3335a4754825c54840263aa4b2a9bf67" title="Deallocates memory used for the stack. ">DeleteStack</a> </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="gac22664b5f7df5cd4da1bd7b1b1e7912f"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void DeleteEpid2Params </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_epid2_params__.html">Epid2Params_</a> **&#160;</td>
- <td class="paramname"><em>epid_params</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Deallocates storage for internal representation of <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a>. </p>
-<p>Frees the memory and nulls the pointer.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in,out]</td><td class="paramname">epid_params</td><td>params to be deallocated</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_common.html#ga5c396a5ac8a0e5ec1e02330c53420dce" title="Constructs the internal representation of Epid2Params. ">CreateEpid2Params</a> </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ga07c9b47d326ee784aecb78195adffb8b"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void DeleteGroupPubKey </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_group_pub_key__.html">GroupPubKey_</a> **&#160;</td>
- <td class="paramname"><em>pub_key</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Deallocates storage for internal representation of <a class="el" href="struct_group_pub_key.html" title="Intel(R) EPID 2.0 group public key. ">GroupPubKey</a>. </p>
-<p>Frees memory pointed to by Group public key. Nulls the pointer.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">pub_key</td><td>Group public key to be freed</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_common.html#ga20a575d3d538b0bac654fd57f20e2b30" title="Constructs internal representation of GroupPubKey. ">CreateGroupPubKey</a> </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ga53db100214e65e362fa426508a240d12"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void DeletePrivKey </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_priv_key__.html">PrivKey_</a> **&#160;</td>
- <td class="paramname"><em>priv_key</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Deallocate storage for internal representation of <a class="el" href="struct_priv_key.html" title="Intel(R) EPID 2.0 private key. ">PrivKey</a>. </p>
-<p>Frees memory pointed to by Member private key. Nulls the pointer.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">priv_key</td><td>Member private key to be freed </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ga3335a4754825c54840263aa4b2a9bf67"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void DeleteStack </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_stack.html">Stack</a> **&#160;</td>
- <td class="paramname"><em>stack</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Deallocates memory used for the stack. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in,out]</td><td class="paramname">stack</td><td><a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> context</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58" title="Create stack. ">CreateStack</a> </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="gada170fd890504b013139f4a33033ae4b"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void* EpidAlloc </td>
- <td>(</td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>size</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Allocates memory of size bytes. </p>
-<p>The content of memory is initialized with zeros. Memory must be freed with EpidFree function.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">size</td><td>number of bytes to allocate</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>pointer to allocated memory. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="gaeae76709e6bfc80c9d79ec4943ccc1ac"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void EpidFree </td>
- <td>(</td>
- <td class="paramtype">void *&#160;</td>
- <td class="paramname"><em>ptr</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Frees memory allocated by EpidAlloc. </p>
-<p>Clears information stored in the block of memory.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">ptr</td><td>pointer to allocated memory block </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ga6911838728d546e4a51d7bcb8404525c"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void* EpidRealloc </td>
- <td>(</td>
- <td class="paramtype">void *&#160;</td>
- <td class="paramname"><em>ptr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>new_size</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Reallocates memory allocated by EpidAlloc. </p>
-<p>In case of error NULL pointer is returned and input memory block is not changed. Memory must be freed with EpidFree function.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">ptr</td><td>pointer to memory block to reallocate </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">new_size</td><td>number of bytes to reallocate for</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>pointer to allocated memory. </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="gad471f600f6032f432b99432fda97a070"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void EpidZeroMemory </td>
- <td>(</td>
- <td class="paramtype">void *&#160;</td>
- <td class="paramname"><em>ptr</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>size</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Clear information stored in block of memory pointer to by ptr. </p>
-<dl class="section warning"><dt>Warning</dt><dd>This 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).</dd></dl>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">ptr</td><td>pointer to memory block </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">size</td><td>number of bytes to clear </td></tr>
- </table>
- </dd>
-</dl>
-
-</div>
-</div>
-<a class="anchor" id="ga23ec3f6c8b89eb63e04d2b1ec6fd2696"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> IsSigRlValid </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="group___epid_types.html#gada666b48d0cbc301985405fde896f1de">GroupId</a> const *&#160;</td>
- <td class="paramname"><em>gid</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_sig_rl.html">SigRl</a> const *&#160;</td>
- <td class="paramname"><em>sig_rl</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>sig_rl_size</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Function to verify if signature based revocation list is valid. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">gid</td><td>Group id </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">sig_rl</td><td>Signature based revocation list </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">sig_rl_size</td><td>Size of signature based revocation list</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>true if revocation list is valid </dd>
-<dd>
-false if revocation list is invalid </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ga4856121ac4bce4161a015a8a2b4f5b1c"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">int memcpy_S </td>
- <td>(</td>
- <td class="paramtype">void *&#160;</td>
- <td class="paramname"><em>dest</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>destsz</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void const *&#160;</td>
- <td class="paramname"><em>src</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>count</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Copies bytes between buffers with security ehancements. </p>
-<p>Copies count bytes from src to dest. If the source and destination overlap, the behavior is undefined.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[out]</td><td class="paramname">dest</td><td>pointer to the object to copy to </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">destsz</td><td>max number of bytes to modify in the destination (typically the size of the destination object) </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">src</td><td>pointer to the object to copy from </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">count</td><td>number of bytes to copy</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>zero on success and non-zero value on error.</dd></dl>
-<p>Copies bytes between buffers with security ehancements.</p>
-<dl class="section note"><dt>Note</dt><dd>Implementation follows C11 memcpy_s but with checks always enabled </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ga3f3c3b965dd714179cbc2f8d96678ee0"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> SetCalculatedCommitValues </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_g1_elem_str.html">G1ElemStr</a> const *&#160;</td>
- <td class="paramname"><em>B</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_g1_elem_str.html">G1ElemStr</a> const *&#160;</td>
- <td class="paramname"><em>K</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_g1_elem_str.html">G1ElemStr</a> const *&#160;</td>
- <td class="paramname"><em>T</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *&#160;</td>
- <td class="paramname"><em>R1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *&#160;</td>
- <td class="paramname"><em>G1</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *&#160;</td>
- <td class="paramname"><em>R2</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *&#160;</td>
- <td class="paramname"><em>GT</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_commit_values.html">CommitValues</a> *&#160;</td>
- <td class="paramname"><em>values</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set <a class="el" href="struct_commit_values.html" title="Storage for values to create commitment in Sign and Verify algorithms. ">CommitValues</a> structure fields calculated in algorithm. </p>
-<p>Set B, K, T, R1 and R2 fields of values argument.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">B</td><td>Value of B to set </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">K</td><td>Value of K to set </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">T</td><td>Value of T to set </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">R1</td><td>Value of R1 to set </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">G1</td><td>EcGroup containing element R1 </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">R2</td><td>Value of R2 to set </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">GT</td><td>FiniteField containing element R2 </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>Pointer to <a class="el" href="struct_commit_values.html" title="Storage for values to create commitment in Sign and Verify algorithms. ">CommitValues</a> structure to fill.</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_common.html#ga23f8ea0f7529e8e7a81bd88e607dda01" title="Calculate Fp.hash(t3 || m) for Sign and Verfiy algorithms. ">CalculateCommitmentHash</a> </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ga2d54f4f222e965222024113c0420602d"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> SetKeySpecificCommitValues </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *&#160;</td>
- <td class="paramname"><em>pub_key</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_commit_values.html">CommitValues</a> *&#160;</td>
- <td class="paramname"><em>values</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Set group public key related fields from <a class="el" href="struct_commit_values.html" title="Storage for values to create commitment in Sign and Verify algorithms. ">CommitValues</a> structure. </p>
-<p>Set p, g1, g2, h1, h2 and w fields of values argument.</p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">pub_key</td><td>Group public key </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>Pointer to <a class="el" href="struct_commit_values.html" title="Storage for values to create commitment in Sign and Verify algorithms. ">CommitValues</a> structure to fill.</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_common.html#ga23f8ea0f7529e8e7a81bd88e607dda01" title="Calculate Fp.hash(t3 || m) for Sign and Verfiy algorithms. ">CalculateCommitmentHash</a> </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="gab34066dc882ad63362c43c0790973fdc"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">size_t StackGetSize </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_stack.html">Stack</a> const *&#160;</td>
- <td class="paramname"><em>stack</em></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Get number of elements in the stack. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">stack</td><td><a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> context</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>Number of elements in the stack or 0 if stack is NULL</dd></dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58" title="Create stack. ">CreateStack</a> </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ga8cdde2b366f4473f0a6965bcfea5b6a6"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> StackPopN </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_stack.html">Stack</a> *&#160;</td>
- <td class="paramname"><em>stack</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>n</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void *&#160;</td>
- <td class="paramname"><em>elements</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Pop multiple elements from the stack. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in,out]</td><td class="paramname">stack</td><td><a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> context </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">n</td><td>Number of elements to pop from the stack </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">elements</td><td>Pointer to a buffer to store elements removed from the stack</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>true is operation succeed, false otherwise</dd></dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58" title="Create stack. ">CreateStack</a> </dd></dl>
-
-</div>
-</div>
-<a class="anchor" id="ga0b4dedb867504e0148aa0e1fdf642b2b"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">void* StackPushN </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_stack.html">Stack</a> *&#160;</td>
- <td class="paramname"><em>stack</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>n</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void *&#160;</td>
- <td class="paramname"><em>elements</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Push multiple elements to the stack. </p>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in,out]</td><td class="paramname">stack</td><td><a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> context </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">n</td><td>Number of elements to push to the stack </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">elements</td><td>Array of elements to push to the stack. Can be NULL</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd>A pointer to an array of new elements in the stack or NULL if stack is empty or push operation were failed.</dd></dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58" title="Create stack. ">CreateStack</a> </dd></dl>
-
-</div>
-</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
diff --git a/doc/html/group___epid_common.js b/doc/html/group___epid_common.js
index 78783bc..70dc2de 100644
--- a/doc/html/group___epid_common.js
+++ b/doc/html/group___epid_common.js
@@ -5,72 +5,5 @@ var group___epid_common =
[ "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" ],
- [ "CommitValues", "struct_commit_values.html", [
- [ "B", "struct_commit_values.html#abc97167d51a8d0669da9a8d97353db4d", null ],
- [ "g1", "struct_commit_values.html#a22512a6efa7b7b0277b211be64f71c30", null ],
- [ "g2", "struct_commit_values.html#af7022c18732bbee8c12328923a4a12a1", null ],
- [ "h1", "struct_commit_values.html#a42297d157420f0b554bce8a8cbe95c46", null ],
- [ "h2", "struct_commit_values.html#a4a93cb984bac3de47bb60511b382a074", null ],
- [ "K", "struct_commit_values.html#a49f073d0132a51020c0bfc819ec0d619", null ],
- [ "p", "struct_commit_values.html#af5bf0f288e76f28ce54fe2df813881ef", null ],
- [ "R1", "struct_commit_values.html#a00f7731d75085be08f171771c8f43d30", null ],
- [ "R2", "struct_commit_values.html#acb0d12e761fadb149924cdf21290b9bf", null ],
- [ "T", "struct_commit_values.html#ab2da47fe5c28b4202658c5ad3523ea1a", null ],
- [ "w", "struct_commit_values.html#ac00af9d3eeb74543808a9e52e692f614", null ]
- ] ],
- [ "Epid2Params_", "struct_epid2_params__.html", [
- [ "Fp", "struct_epid2_params__.html#a45d742532485af7f34d43606a3f96b5d", null ],
- [ "Fq", "struct_epid2_params__.html#a9cd99a40a7427666ff4b940ed69f69a0", null ],
- [ "Fq2", "struct_epid2_params__.html#aebda3f9b5ed6f015adc992216bacf29f", null ],
- [ "Fq6", "struct_epid2_params__.html#af3e9afc48ec8274f15d10f5f991c0937", null ],
- [ "g1", "struct_epid2_params__.html#a337490f043e867b6c8d92180a9120541", null ],
- [ "G1", "struct_epid2_params__.html#ade20ba985bc9219832df78ee9d255ee5", null ],
- [ "g2", "struct_epid2_params__.html#a20dcfa40dba6679f45f1b90a91791a5c", null ],
- [ "G2", "struct_epid2_params__.html#ae15ab066b26bbf1be8772743d604c766", null ],
- [ "GT", "struct_epid2_params__.html#ac085cbd970d89fb382b621fb2884e420", null ],
- [ "neg", "struct_epid2_params__.html#a1e50604a1739e48e8588d666d33d03ef", null ],
- [ "p", "struct_epid2_params__.html#ad90e9f295e28d3f93852e87e97640e76", null ],
- [ "pairing_state", "struct_epid2_params__.html#a74aa52f336a194b20627f8a540196dd5", null ],
- [ "q", "struct_epid2_params__.html#a6d56c3f4dff7e92a0738e7866208bf4d", null ],
- [ "t", "struct_epid2_params__.html#a4bca3d05a46b1325ac2490ebeb460543", null ],
- [ "xi", "struct_epid2_params__.html#a51a678f0f26804e0c6f3a4c55fcf6731", null ]
- ] ],
- [ "GroupPubKey_", "struct_group_pub_key__.html", [
- [ "gid", "struct_group_pub_key__.html#afd2192bfd1e24c09951d9c0200a74f95", null ],
- [ "h1", "struct_group_pub_key__.html#a2322bc1b42f85e0d01b50b15d064f840", null ],
- [ "h2", "struct_group_pub_key__.html#a4d95b831d9a66071092678547df921ae", null ],
- [ "w", "struct_group_pub_key__.html#a4d1537e5bd834b6fc92eb2fd7c826329", null ]
- ] ],
- [ "PrivKey_", "struct_priv_key__.html", [
- [ "A", "struct_priv_key__.html#aaf02af1379a0801f49a3f8845e7a1b1f", null ],
- [ "f", "struct_priv_key__.html#a183eb6658baec9825313ab534608fa10", null ],
- [ "gid", "struct_priv_key__.html#a0892f451bb967dd7c99fe1d926d5056f", null ],
- [ "x", "struct_priv_key__.html#a327d7192cbb6b5638e3f6f1c3d9d2d5b", null ]
- ] ],
- [ "EPID_ENABLE_EPID_ZERO_MEMORY_ON_FREE", "group___epid_common.html#gab1587898f15de1b51cd5e799a43465ff", null ],
- [ "ntohl", "group___epid_common.html#ga29a7e07cd5181e738f98fc026979efca", null ],
- [ "SAFE_ALLOC", "group___epid_common.html#ga38fad13430eba25f9f9b05e35ecd22f8", null ],
- [ "SAFE_FREE", "group___epid_common.html#ga2ca3c202ee727774d55890e568621842", null ],
- [ "SAFE_REALLOC", "group___epid_common.html#ga41c113e15b695291199c27fac4bd53fa", null ],
- [ "BitSupplier", "group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c", null ],
- [ "CalculateCommitmentHash", "group___epid_common.html#ga23f8ea0f7529e8e7a81bd88e607dda01", null ],
- [ "CreateEpid2Params", "group___epid_common.html#ga5c396a5ac8a0e5ec1e02330c53420dce", null ],
- [ "CreateGroupPubKey", "group___epid_common.html#ga20a575d3d538b0bac654fd57f20e2b30", null ],
- [ "CreatePrivKey", "group___epid_common.html#gae51985a0e811f4bbb2d70b62e35b881e", null ],
- [ "CreateStack", "group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58", null ],
- [ "DeleteEpid2Params", "group___epid_common.html#gac22664b5f7df5cd4da1bd7b1b1e7912f", null ],
- [ "DeleteGroupPubKey", "group___epid_common.html#ga07c9b47d326ee784aecb78195adffb8b", null ],
- [ "DeletePrivKey", "group___epid_common.html#ga53db100214e65e362fa426508a240d12", null ],
- [ "DeleteStack", "group___epid_common.html#ga3335a4754825c54840263aa4b2a9bf67", null ],
- [ "EpidAlloc", "group___epid_common.html#gada170fd890504b013139f4a33033ae4b", null ],
- [ "EpidFree", "group___epid_common.html#gaeae76709e6bfc80c9d79ec4943ccc1ac", null ],
- [ "EpidRealloc", "group___epid_common.html#ga6911838728d546e4a51d7bcb8404525c", null ],
- [ "EpidZeroMemory", "group___epid_common.html#gad471f600f6032f432b99432fda97a070", null ],
- [ "IsSigRlValid", "group___epid_common.html#ga23ec3f6c8b89eb63e04d2b1ec6fd2696", null ],
- [ "memcpy_S", "group___epid_common.html#ga4856121ac4bce4161a015a8a2b4f5b1c", null ],
- [ "SetCalculatedCommitValues", "group___epid_common.html#ga3f3c3b965dd714179cbc2f8d96678ee0", null ],
- [ "SetKeySpecificCommitValues", "group___epid_common.html#ga2d54f4f222e965222024113c0420602d", null ],
- [ "StackGetSize", "group___epid_common.html#gab34066dc882ad63362c43c0790973fdc", null ],
- [ "StackPopN", "group___epid_common.html#ga8cdde2b366f4473f0a6965bcfea5b6a6", null ],
- [ "StackPushN", "group___epid_common.html#ga0b4dedb867504e0148aa0e1fdf642b2b", null ]
+ [ "BitSupplier", "group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c", null ]
]; \ No newline at end of file
diff --git a/doc/html/group___epid_math.html b/doc/html/group___epid_math.html
index 574d726..8ced37b 100644
--- a/doc/html/group___epid_math.html
+++ b/doc/html/group___epid_math.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/group___epid_member_module.html b/doc/html/group___epid_member_module.html
index 898d1c9..156ea0b 100644
--- a/doc/html/group___epid_member_module.html
+++ b/doc/html/group___epid_member_module.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -59,6 +59,7 @@ $(document).ready(function(){initNavTree('group___epid_member_module.html','');}
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">member<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a></div></div> </div>
@@ -77,45 +78,52 @@ Data Structures</h2></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pre-computed signature. <a href="struct_pre_computed_signature.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gadfb10d5dfdadb0694792c7b06718e817"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gadfb10d5dfdadb0694792c7b06718e817"></a>
+typedef struct <a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a></td></tr>
+<tr class="memdesc:gadfb10d5dfdadb0694792c7b06718e817"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal context of member. <br /></td></tr>
+<tr class="separator:gadfb10d5dfdadb0694792c7b06718e817"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
-<tr class="memitem:ga561c4d544a78ee1bf59c3f4f919aa7bb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb">EpidMemberCreate</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_priv_key.html">PrivKey</a> const *priv_key, <a class="el" href="struct_member_precomp.html">MemberPrecomp</a> const *precomp, <a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a> rnd_func, void *rnd_param, <a class="el" href="struct_member_ctx.html">MemberCtx</a> **ctx)</td></tr>
+<tr class="memitem:ga561c4d544a78ee1bf59c3f4f919aa7bb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb">EpidMemberCreate</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_priv_key.html">PrivKey</a> const *priv_key, <a class="el" href="struct_member_precomp.html">MemberPrecomp</a> const *precomp, <a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a> rnd_func, void *rnd_param, <a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> **ctx)</td></tr>
<tr class="memdesc:ga561c4d544a78ee1bf59c3f4f919aa7bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new member context. <a href="#ga561c4d544a78ee1bf59c3f4f919aa7bb">More...</a><br /></td></tr>
<tr class="separator:ga561c4d544a78ee1bf59c3f4f919aa7bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga3824589c683c5e0e59d483462fce65d6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">EpidMemberDelete</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> **ctx)</td></tr>
+<tr class="memitem:ga3824589c683c5e0e59d483462fce65d6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">EpidMemberDelete</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> **ctx)</td></tr>
<tr class="memdesc:ga3824589c683c5e0e59d483462fce65d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deletes an existing member context. <a href="#ga3824589c683c5e0e59d483462fce65d6">More...</a><br /></td></tr>
<tr class="separator:ga3824589c683c5e0e59d483462fce65d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga5c35798d62cf81c4ca62b22c38809721"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">EpidMemberWritePrecomp</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx, <a class="el" href="struct_member_precomp.html">MemberPrecomp</a> *precomp)</td></tr>
+<tr class="memitem:ga5c35798d62cf81c4ca62b22c38809721"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">EpidMemberWritePrecomp</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *ctx, <a class="el" href="struct_member_precomp.html">MemberPrecomp</a> *precomp)</td></tr>
<tr class="memdesc:ga5c35798d62cf81c4ca62b22c38809721"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes the pre-computed member settings. <a href="#ga5c35798d62cf81c4ca62b22c38809721">More...</a><br /></td></tr>
<tr class="separator:ga5c35798d62cf81c4ca62b22c38809721"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga9998eb454838ff5d232ff22ecbab31bf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf">EpidMemberSetHashAlg</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> *ctx, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg)</td></tr>
+<tr class="memitem:ga9998eb454838ff5d232ff22ecbab31bf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf">EpidMemberSetHashAlg</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> *ctx, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg)</td></tr>
<tr class="memdesc:ga9998eb454838ff5d232ff22ecbab31bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the hash algorithm to be used by a member. <a href="#ga9998eb454838ff5d232ff22ecbab31bf">More...</a><br /></td></tr>
<tr class="separator:ga9998eb454838ff5d232ff22ecbab31bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga76e535722467af7c16809b5b521e0000"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000">EpidGetSigSize</a> (<a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl)</td></tr>
-<tr class="memdesc:ga76e535722467af7c16809b5b521e0000"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the size in bytes required for a Intel(R) EPID signature. <a href="#ga76e535722467af7c16809b5b521e0000">More...</a><br /></td></tr>
+<tr class="memdesc:ga76e535722467af7c16809b5b521e0000"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the size in bytes required for an Intel(R) EPID signature. <a href="#ga76e535722467af7c16809b5b521e0000">More...</a><br /></td></tr>
<tr class="separator:ga76e535722467af7c16809b5b521e0000"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga759155a719254f734157722716dac640"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640">EpidSign</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, void const *basename, size_t basename_len, <a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl, size_t sig_rl_size, <a class="el" href="struct_epid_signature.html">EpidSignature</a> *sig, size_t sig_len)</td></tr>
-<tr class="memdesc:ga759155a719254f734157722716dac640"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes a Intel(R) EPID signature. <a href="#ga759155a719254f734157722716dac640">More...</a><br /></td></tr>
+<tr class="memitem:ga759155a719254f734157722716dac640"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640">EpidSign</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, void const *basename, size_t basename_len, <a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl, size_t sig_rl_size, <a class="el" href="struct_epid_signature.html">EpidSignature</a> *sig, size_t sig_len)</td></tr>
+<tr class="memdesc:ga759155a719254f734157722716dac640"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes an Intel(R) EPID signature. <a href="#ga759155a719254f734157722716dac640">More...</a><br /></td></tr>
<tr class="separator:ga759155a719254f734157722716dac640"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gad92d3c3266ae1833ffb1dba9ad76035d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d">EpidRegisterBaseName</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> *ctx, void const *basename, size_t basename_len)</td></tr>
+<tr class="memitem:gad92d3c3266ae1833ffb1dba9ad76035d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d">EpidRegisterBaseName</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> *ctx, void const *basename, size_t basename_len)</td></tr>
<tr class="memdesc:gad92d3c3266ae1833ffb1dba9ad76035d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Registers a basename with a member. <a href="#gad92d3c3266ae1833ffb1dba9ad76035d">More...</a><br /></td></tr>
<tr class="separator:gad92d3c3266ae1833ffb1dba9ad76035d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gad2e3de5c6ce641a318f8a46b61e75236"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236">EpidAddPreSigs</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> *ctx, size_t number_presigs, <a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a> *presigs)</td></tr>
+<tr class="memitem:gad2e3de5c6ce641a318f8a46b61e75236"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236">EpidAddPreSigs</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> *ctx, size_t number_presigs, <a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a> *presigs)</td></tr>
<tr class="memdesc:gad2e3de5c6ce641a318f8a46b61e75236"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extends the member's pool of pre-computed signatures. <a href="#gad2e3de5c6ce641a318f8a46b61e75236">More...</a><br /></td></tr>
<tr class="separator:gad2e3de5c6ce641a318f8a46b61e75236"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gad78ca056dfea2565bbacd5734d9dc075"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075">EpidGetNumPreSigs</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx)</td></tr>
+<tr class="memitem:gad78ca056dfea2565bbacd5734d9dc075"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075">EpidGetNumPreSigs</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *ctx)</td></tr>
<tr class="memdesc:gad78ca056dfea2565bbacd5734d9dc075"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the number of pre-computed signatures in the member's pool. <a href="#gad78ca056dfea2565bbacd5734d9dc075">More...</a><br /></td></tr>
<tr class="separator:gad78ca056dfea2565bbacd5734d9dc075"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga9e12c7cec8d0c4e07b12c0e26a278c9d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d">EpidWritePreSigs</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> *ctx, <a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a> *presigs, size_t number_presigs)</td></tr>
+<tr class="memitem:ga9e12c7cec8d0c4e07b12c0e26a278c9d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d">EpidWritePreSigs</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> *ctx, <a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a> *presigs, size_t number_presigs)</td></tr>
<tr class="memdesc:ga9e12c7cec8d0c4e07b12c0e26a278c9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes pre-computed signatures from the member's pool. <a href="#ga9e12c7cec8d0c4e07b12c0e26a278c9d">More...</a><br /></td></tr>
<tr class="separator:ga9e12c7cec8d0c4e07b12c0e26a278c9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga13dd0d72be9babf8194d472d7712a361"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga13dd0d72be9babf8194d472d7712a361">EpidRequestJoin</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="group___epid_types.html#ga55eb2193045bde31af3f551565126042">IssuerNonce</a> const *ni, <a class="el" href="struct_fp_elem_str.html">FpElemStr</a> const *f, <a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a> rnd_func, void *rnd_param, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg, <a class="el" href="struct_join_request.html">JoinRequest</a> *join_request)</td></tr>
<tr class="memdesc:ga13dd0d72be9babf8194d472d7712a361"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a request to join a group. <a href="#ga13dd0d72be9babf8194d472d7712a361">More...</a><br /></td></tr>
<tr class="separator:ga13dd0d72be9babf8194d472d7712a361"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gae04a250d5981fcf9bd6f9f57e0468faa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa">EpidSignBasic</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, void const *basename, size_t basename_len, <a class="el" href="struct_basic_signature.html">BasicSignature</a> *sig)</td></tr>
+<tr class="memitem:gae04a250d5981fcf9bd6f9f57e0468faa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa">EpidSignBasic</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, void const *basename, size_t basename_len, <a class="el" href="struct_basic_signature.html">BasicSignature</a> *sig)</td></tr>
<tr class="memdesc:gae04a250d5981fcf9bd6f9f57e0468faa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a basic signature for use in constrained environment. <a href="#gae04a250d5981fcf9bd6f9f57e0468faa">More...</a><br /></td></tr>
<tr class="separator:gae04a250d5981fcf9bd6f9f57e0468faa"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gac8e2c6c1fead8030785a40427905a2cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc">EpidNrProve</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, <a class="el" href="struct_sig_rl_entry.html">SigRlEntry</a> const *sigrl_entry, <a class="el" href="struct_nr_proof.html">NrProof</a> *proof)</td></tr>
+<tr class="memitem:gac8e2c6c1fead8030785a40427905a2cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc">EpidNrProve</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, <a class="el" href="struct_sig_rl_entry.html">SigRlEntry</a> const *sigrl_entry, <a class="el" href="struct_nr_proof.html">NrProof</a> *proof)</td></tr>
<tr class="memdesc:gac8e2c6c1fead8030785a40427905a2cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates a non-revoked proof for a single signature based revocation list entry. <a href="#gac8e2c6c1fead8030785a40427905a2cc">More...</a><br /></td></tr>
<tr class="separator:gac8e2c6c1fead8030785a40427905a2cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8e3f201d1e9dc668659e08a3bdf543b6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga8e3f201d1e9dc668659e08a3bdf543b6">EpidIsPrivKeyInGroup</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_priv_key.html">PrivKey</a> const *priv_key)</td></tr>
@@ -127,7 +135,7 @@ Functions</h2></td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Member functionality. </p>
-<p>Defines the APIs needed by Intel(R) EPID members. Each member context (<a class="el" href="struct_member_ctx.html" title="Member context definition. ">MemberCtx</a>) represents membership in a single group. </p>
+<p>Defines the APIs needed by Intel(R) EPID members. Each member context (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817" title="Internal context of member. ">MemberCtx</a>) represents membership in a single group. </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gad2e3de5c6ce641a318f8a46b61e75236"></a>
<div class="memitem">
@@ -136,7 +144,7 @@ Functions</h2></td></tr>
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidAddPreSigs </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_member_ctx.html">MemberCtx</a> *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -220,8 +228,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#a15">signmsg.c</a>.</dd>
-</dl>
+
</div>
</div>
<a class="anchor" id="gad78ca056dfea2565bbacd5734d9dc075"></a>
@@ -231,7 +238,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr>
<td class="memname">size_t EpidGetNumPreSigs </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_member_ctx.html">MemberCtx</a> const *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *&#160;</td>
<td class="paramname"><em>ctx</em></td><td>)</td>
<td></td>
</tr>
@@ -266,7 +273,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
</table>
</div><div class="memdoc">
-<p>Computes the size in bytes required for a Intel(R) EPID signature. </p>
+<p>Computes the size in bytes required for an Intel(R) EPID signature. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">sig_rl</td><td>The signature based revocation list that is used. NULL is treated as a zero length list.</td></tr>
@@ -275,8 +282,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
</dl>
<dl class="section return"><dt>Returns</dt><dd>Size in bytes of an Intel(R) EPID signature including proofs for each entry in the signature based revocation list.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="struct_sig_rl.html" title="signature based revocation list ">SigRl</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#a20">signmsg.c</a>.</dd>
-</dl>
+
</div>
</div>
<a class="anchor" id="ga8e3f201d1e9dc668659e08a3bdf543b6"></a>
@@ -361,7 +367,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype"><a class="el" href="struct_member_ctx.html">MemberCtx</a> **&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> **&#160;</td>
<td class="paramname"><em>ctx</em>&#160;</td>
</tr>
<tr>
@@ -393,8 +399,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6" title="Deletes an existing member context. ">EpidMemberDelete</a> </dd>
<dd>
<a class="el" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721" title="Serializes the pre-computed member settings. ">EpidMemberWritePrecomp</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#a16">signmsg.c</a>.</dd>
-</dl>
+
</div>
</div>
<a class="anchor" id="ga3824589c683c5e0e59d483462fce65d6"></a>
@@ -404,7 +409,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr>
<td class="memname">void EpidMemberDelete </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_member_ctx.html">MemberCtx</a> **&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> **&#160;</td>
<td class="paramname"><em>ctx</em></td><td>)</td>
<td></td>
</tr>
@@ -421,8 +426,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb" title="Creates a new member context. ">EpidMemberCreate</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#a22">signmsg.c</a>.</dd>
-</dl>
+
</div>
</div>
<a class="anchor" id="ga9998eb454838ff5d232ff22ecbab31bf"></a>
@@ -432,7 +436,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidMemberSetHashAlg </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_member_ctx.html">MemberCtx</a> *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -462,8 +466,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb" title="Creates a new member context. ">EpidMemberCreate</a> </dd>
<dd>
<a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890" title="Recognized hash algorithms. ">HashAlg</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#a19">signmsg.c</a>.</dd>
-</dl>
+
</div>
</div>
<a class="anchor" id="ga5c35798d62cf81c4ca62b22c38809721"></a>
@@ -473,7 +476,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidMemberWritePrecomp </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_member_ctx.html">MemberCtx</a> const *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -500,8 +503,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
<dl class="section note"><dt>Note</dt><dd>If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a>, the content of precomp is undefined. </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#a17">signmsg.c</a>.</dd>
-</dl>
+
</div>
</div>
<a class="anchor" id="gac8e2c6c1fead8030785a40427905a2cc"></a>
@@ -511,7 +513,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidNrProve </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_member_ctx.html">MemberCtx</a> const *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -582,7 +584,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidRegisterBaseName </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_member_ctx.html">MemberCtx</a> *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -624,8 +626,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> or <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a3706f895a660260033b5b91890516c0f" title="argument would add duplicate entry ">kEpidDuplicateErr</a> it is undefined if the basename is registered. </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#a18">signmsg.c</a>.</dd>
-</dl>
+
</div>
</div>
<a class="anchor" id="ga13dd0d72be9babf8194d472d7712a361"></a>
@@ -712,7 +713,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidSign </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_member_ctx.html">MemberCtx</a> const *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -771,7 +772,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
</table>
</div><div class="memdoc">
-<p>Writes a Intel(R) EPID signature. </p>
+<p>Writes an Intel(R) EPID signature. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">ctx</td><td>The member context. </td></tr>
@@ -782,7 +783,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr><td class="paramdir">[in]</td><td class="paramname">sig_rl</td><td>The signature based revocation list. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">sig_rl_size</td><td>The size in bytes of the signature based revocation list. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">sig</td><td>The generated signature </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">sig_len</td><td>The size of signature in bytes. Must be equal to value returned by <a class="el" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000" title="Computes the size in bytes required for a Intel(R) EPID signature. ">EpidGetSigSize()</a>.</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">sig_len</td><td>The size of signature in bytes. Must be equal to value returned by <a class="el" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000" title="Computes the size in bytes required for an Intel(R) EPID signature. ">EpidGetSigSize()</a>.</td></tr>
</table>
</dd>
</dl>
@@ -792,9 +793,8 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<dd>
<a class="el" href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf" title="Sets the hash algorithm to be used by a member. ">EpidMemberSetHashAlg</a> </dd>
<dd>
-<a class="el" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000" title="Computes the size in bytes required for a Intel(R) EPID signature. ">EpidGetSigSize</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#a21">signmsg.c</a>.</dd>
-</dl>
+<a class="el" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000" title="Computes the size in bytes required for an Intel(R) EPID signature. ">EpidGetSigSize</a> </dd></dl>
+
</div>
</div>
<a class="anchor" id="gae04a250d5981fcf9bd6f9f57e0468faa"></a>
@@ -804,7 +804,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidSignBasic </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_member_ctx.html">MemberCtx</a> const *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -875,7 +875,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidWritePreSigs </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_member_ctx.html">MemberCtx</a> *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
diff --git a/doc/html/group___epid_member_module.js b/doc/html/group___epid_member_module.js
index 1a6c7f4..cb9d1c7 100644
--- a/doc/html/group___epid_member_module.js
+++ b/doc/html/group___epid_member_module.js
@@ -19,6 +19,7 @@ var group___epid_member_module =
[ "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 ],
diff --git a/doc/html/group___epid_module.html b/doc/html/group___epid_module.html
index 3b36d18..300aed1 100644
--- a/doc/html/group___epid_module.html
+++ b/doc/html/group___epid_module.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/group___epid_print.html b/doc/html/group___epid_print.html
index f4b0a4d..0e1a1b3 100644
--- a/doc/html/group___epid_print.html
+++ b/doc/html/group___epid_print.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -71,7 +71,8 @@ $(document).ready(function(){initNavTree('group___epid_print.html','');});
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga3e215d157eb205ad596bb84bce694a83"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83">PrintUtilFormat</a> { <a class="el" href="group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83aeb475b793d8d357087d7fcc74702ffae">kPrintUtilUnannotated</a> = 0,
-<a class="el" href="group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ae2d5345c14f57fc992a613003c3c443d">kPrintUtilAnnotated</a> = 1
+<a class="el" href="group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ae2d5345c14f57fc992a613003c3c443d">kPrintUtilAnnotated</a> = 1,
+<a class="el" href="group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ade23610605d0ba7dd48db5060e28995a">kPrintUtilFormatCount</a> = 2
}<tr class="memdesc:ga3e215d157eb205ad596bb84bce694a83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Print format. <a href="group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83">More...</a><br /></td></tr>
</td></tr>
<tr class="separator:ga3e215d157eb205ad596bb84bce694a83"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -138,6 +139,9 @@ Functions</h2></td></tr>
<tr><td class="fieldname"><a class="anchor" id="gga3e215d157eb205ad596bb84bce694a83ae2d5345c14f57fc992a613003c3c443d"></a>kPrintUtilAnnotated&#160;</td><td class="fielddoc">
<p>Annotated output format. </p>
</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="gga3e215d157eb205ad596bb84bce694a83ade23610605d0ba7dd48db5060e28995a"></a>kPrintUtilFormatCount&#160;</td><td class="fielddoc">
+<p>Count of print formats. </p>
+</td></tr>
</table>
</div>
diff --git a/doc/html/group___epid_print.js b/doc/html/group___epid_print.js
index 00d8c84..d1b92d4 100644
--- a/doc/html/group___epid_print.js
+++ b/doc/html/group___epid_print.js
@@ -2,7 +2,8 @@ var group___epid_print =
[
[ "PrintUtilFormat", "group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83", [
[ "kPrintUtilUnannotated", "group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83aeb475b793d8d357087d7fcc74702ffae", null ],
- [ "kPrintUtilAnnotated", "group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ae2d5345c14f57fc992a613003c3c443d", 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 ],
diff --git a/doc/html/group___epid_types.html b/doc/html/group___epid_types.html
index efdfd1d..6a65d8e 100644
--- a/doc/html/group___epid_types.html
+++ b/doc/html/group___epid_types.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -58,6 +58,7 @@ $(document).ready(function(){initNavTree('group___epid_types.html','');});
<div id="doc-content">
<div class="header">
<div class="summary">
+<a href="#groups">Modules</a> &#124;
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> </div>
@@ -69,6 +70,12 @@ $(document).ready(function(){initNavTree('group___epid_types.html','');});
<p>SDK data types.
<a href="#details">More...</a></p>
<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group___epid11_types"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></td></tr>
+<tr class="memdesc:group___epid11_types"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 specific data types. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_oct_str8.html">OctStr8</a></td></tr>
@@ -195,12 +202,13 @@ typedef <a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga5e450438f6f9a5eacd0cf5ce354ec890"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> { <br />
-&#160;&#160;<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890aefb89989305b5c34120b0f18ee8e2c5d">kSha256</a> = 0,
+&#160;&#160;<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a68b2137c7946583a99f0dac2286523eb">kInvalidHashAlg</a> = -1,
+<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890aefb89989305b5c34120b0f18ee8e2c5d">kSha256</a> = 0,
<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a0f4dde6e82b84f5769873f6704fcd290">kSha384</a> = 1,
<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890afb78d98f37fecc53dd1637d94c5c0055">kSha512</a> = 2,
-<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a9746b5049a62bca2f7b844925e6136ba">kSha512_256</a> = 3,
<br />
-&#160;&#160;<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a4fa16d3867498f5e2f8ae5c94b0fab85">kSha3_256</a> = 4,
+&#160;&#160;<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a9746b5049a62bca2f7b844925e6136ba">kSha512_256</a> = 3,
+<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a4fa16d3867498f5e2f8ae5c94b0fab85">kSha3_256</a> = 4,
<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a90d21c8885ab138f7cf91f253dd6ef86">kSha3_384</a> = 5,
<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890ade8e74cf7910b3a71fe902a40abf7eee">kSha3_512</a> = 6
<br />
@@ -211,7 +219,7 @@ Enumerations</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>SDK data types. </p>
<p>Defines serialized data types used by the SDK.</p>
-<p>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 EPID APIs.</p>
+<p>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.</p>
<p>For example <a class="el" href="struct_gt_elem_str.html" title="Serialized GT element. ">GtElemStr</a> is a 384 byte buffer that represents a serialized value that is compatible with a <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa" title="An element in a finite field. ">FfElement</a> belonging to the <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e" title="A finite field. ">FiniteField</a> GT. </p>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a class="anchor" id="ga5e450438f6f9a5eacd0cf5ce354ec890"></a>
@@ -226,7 +234,10 @@ Enumerations</h2></td></tr>
<p>Recognized hash algorithms. </p>
<table class="fieldtable">
-<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="gga5e450438f6f9a5eacd0cf5ce354ec890aefb89989305b5c34120b0f18ee8e2c5d"></a>kSha256&#160;</td><td class="fielddoc">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="gga5e450438f6f9a5eacd0cf5ce354ec890a68b2137c7946583a99f0dac2286523eb"></a>kInvalidHashAlg&#160;</td><td class="fielddoc">
+<p>Invalid. </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="gga5e450438f6f9a5eacd0cf5ce354ec890aefb89989305b5c34120b0f18ee8e2c5d"></a>kSha256&#160;</td><td class="fielddoc">
<p>SHA-256. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="gga5e450438f6f9a5eacd0cf5ce354ec890a0f4dde6e82b84f5769873f6704fcd290"></a>kSha384&#160;</td><td class="fielddoc">
diff --git a/doc/html/group___epid_types.js b/doc/html/group___epid_types.js
index f473312..e83078b 100644
--- a/doc/html/group___epid_types.js
+++ b/doc/html/group___epid_types.js
@@ -1,5 +1,6 @@
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 ]
] ],
@@ -158,6 +159,7 @@ var group___epid_types =
[ "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 ],
diff --git a/doc/html/group___epid_verifier_module.html b/doc/html/group___epid_verifier_module.html
index 1e2f5d1..2e07e21 100644
--- a/doc/html/group___epid_verifier_module.html
+++ b/doc/html/group___epid_verifier_module.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -58,7 +58,9 @@ $(document).ready(function(){initNavTree('group___epid_verifier_module.html','')
<div id="doc-content">
<div class="header">
<div class="summary">
+<a href="#groups">Modules</a> &#124;
<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">verifier<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a></div></div> </div>
@@ -68,57 +70,82 @@ $(document).ready(function(){initNavTree('group___epid_verifier_module.html','')
<p>Verifier functionality.
<a href="#details">More...</a></p>
<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group___epid11_verifier_module"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html">EPID 1.1 support</a></td></tr>
+<tr class="memdesc:group___epid11_verifier_module"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 Verifier functionality. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_precomp.html">VerifierPrecomp</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pre-computed member settings. <a href="struct_verifier_precomp.html#details">More...</a><br /></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pre-computed verifier settings. <a href="struct_verifier_precomp.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gaf172a5f8f7f069d38c5838b723a1a85c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf172a5f8f7f069d38c5838b723a1a85c"></a>
+typedef struct <a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a></td></tr>
+<tr class="memdesc:gaf172a5f8f7f069d38c5838b723a1a85c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal context of verifier. <br /></td></tr>
+<tr class="separator:gaf172a5f8f7f069d38c5838b723a1a85c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
-<tr class="memitem:ga1d116daaee5466a1485d26ebc4e3ab70"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">EpidVerifierCreate</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_verifier_precomp.html">VerifierPrecomp</a> const *precomp, <a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> **ctx)</td></tr>
+<tr class="memitem:ga1d116daaee5466a1485d26ebc4e3ab70"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">EpidVerifierCreate</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_verifier_precomp.html">VerifierPrecomp</a> const *precomp, <a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> **ctx)</td></tr>
<tr class="memdesc:ga1d116daaee5466a1485d26ebc4e3ab70"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new verifier context. <a href="#ga1d116daaee5466a1485d26ebc4e3ab70">More...</a><br /></td></tr>
<tr class="separator:ga1d116daaee5466a1485d26ebc4e3ab70"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga6707e691f4b3916f9c684d5bbd463d12"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12">EpidVerifierDelete</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> **ctx)</td></tr>
+<tr class="memitem:ga6707e691f4b3916f9c684d5bbd463d12"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12">EpidVerifierDelete</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> **ctx)</td></tr>
<tr class="memdesc:ga6707e691f4b3916f9c684d5bbd463d12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deletes an existing verifier context. <a href="#ga6707e691f4b3916f9c684d5bbd463d12">More...</a><br /></td></tr>
<tr class="separator:ga6707e691f4b3916f9c684d5bbd463d12"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga92df4d00ea4ee59d7bfd35b23da03392"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">EpidVerifierWritePrecomp</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_verifier_precomp.html">VerifierPrecomp</a> *precomp)</td></tr>
+<tr class="memitem:ga92df4d00ea4ee59d7bfd35b23da03392"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">EpidVerifierWritePrecomp</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *ctx, <a class="el" href="struct_verifier_precomp.html">VerifierPrecomp</a> *precomp)</td></tr>
<tr class="memdesc:ga92df4d00ea4ee59d7bfd35b23da03392"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes the pre-computed verifier settings. <a href="#ga92df4d00ea4ee59d7bfd35b23da03392">More...</a><br /></td></tr>
<tr class="separator:ga92df4d00ea4ee59d7bfd35b23da03392"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gafab08180a43b58ce2e1d56c4b070bb0e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e">EpidVerifierSetPrivRl</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="struct_priv_rl.html">PrivRl</a> const *priv_rl, size_t priv_rl_size)</td></tr>
+<tr class="memitem:gafab08180a43b58ce2e1d56c4b070bb0e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e">EpidVerifierSetPrivRl</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *ctx, <a class="el" href="struct_priv_rl.html">PrivRl</a> const *priv_rl, size_t priv_rl_size)</td></tr>
<tr class="memdesc:gafab08180a43b58ce2e1d56c4b070bb0e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the private key based revocation list. <a href="#gafab08180a43b58ce2e1d56c4b070bb0e">More...</a><br /></td></tr>
<tr class="separator:gafab08180a43b58ce2e1d56c4b070bb0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga4c7c9820409ee06f30bb8dc75fdd5dcf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf">EpidVerifierSetSigRl</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl, size_t sig_rl_size)</td></tr>
+<tr class="memitem:ga4c7c9820409ee06f30bb8dc75fdd5dcf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf">EpidVerifierSetSigRl</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *ctx, <a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl, size_t sig_rl_size)</td></tr>
<tr class="memdesc:ga4c7c9820409ee06f30bb8dc75fdd5dcf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the signature based revocation list. <a href="#ga4c7c9820409ee06f30bb8dc75fdd5dcf">More...</a><br /></td></tr>
<tr class="separator:ga4c7c9820409ee06f30bb8dc75fdd5dcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga1d41d6ef4dabbc30ec28452edd6baffb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">EpidVerifierSetGroupRl</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="struct_group_rl.html">GroupRl</a> const *grp_rl, size_t grp_rl_size)</td></tr>
+<tr class="memitem:ga1d41d6ef4dabbc30ec28452edd6baffb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">EpidVerifierSetGroupRl</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *ctx, <a class="el" href="struct_group_rl.html">GroupRl</a> const *grp_rl, size_t grp_rl_size)</td></tr>
<tr class="memdesc:ga1d41d6ef4dabbc30ec28452edd6baffb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the group based revocation list. <a href="#ga1d41d6ef4dabbc30ec28452edd6baffb">More...</a><br /></td></tr>
<tr class="separator:ga1d41d6ef4dabbc30ec28452edd6baffb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga0909703a0a4dfe080374d0d99077465a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a">EpidVerifierSetVerifierRl</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="struct_verifier_rl.html">VerifierRl</a> const *ver_rl, size_t ver_rl_size)</td></tr>
+<tr class="memitem:ga0909703a0a4dfe080374d0d99077465a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a">EpidVerifierSetVerifierRl</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *ctx, <a class="el" href="struct_verifier_rl.html">VerifierRl</a> const *ver_rl, size_t ver_rl_size)</td></tr>
<tr class="memdesc:ga0909703a0a4dfe080374d0d99077465a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the verifier revocation list. <a href="#ga0909703a0a4dfe080374d0d99077465a">More...</a><br /></td></tr>
<tr class="separator:ga0909703a0a4dfe080374d0d99077465a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga97b58b2382f24756b66a357f1e825c92"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92">EpidVerifierSetHashAlg</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg)</td></tr>
+<tr class="memitem:ga97b58b2382f24756b66a357f1e825c92"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92">EpidVerifierSetHashAlg</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *ctx, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg)</td></tr>
<tr class="memdesc:ga97b58b2382f24756b66a357f1e825c92"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the hash algorithm to be used by a verifier. <a href="#ga97b58b2382f24756b66a357f1e825c92">More...</a><br /></td></tr>
<tr class="separator:ga97b58b2382f24756b66a357f1e825c92"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga39b240a17f310894e9f5946c9a731798"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga39b240a17f310894e9f5946c9a731798">EpidVerify</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_epid_signature.html">EpidSignature</a> const *sig, size_t sig_len, void const *msg, size_t msg_len, void const *basename, size_t basename_len)</td></tr>
-<tr class="memdesc:ga39b240a17f310894e9f5946c9a731798"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies a signature and checks revocation status. <a href="#ga39b240a17f310894e9f5946c9a731798">More...</a><br /></td></tr>
-<tr class="separator:ga39b240a17f310894e9f5946c9a731798"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1c3810ef361da678a1f77823bd9c37a6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga1c3810ef361da678a1f77823bd9c37a6">EpidVerifierSetBasename</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *ctx, void const *basename, size_t basename_len)</td></tr>
+<tr class="memdesc:ga1c3810ef361da678a1f77823bd9c37a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the basename to be used by a verifier. <a href="#ga1c3810ef361da678a1f77823bd9c37a6">More...</a><br /></td></tr>
+<tr class="separator:ga1c3810ef361da678a1f77823bd9c37a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae3f9c37628e18b880d8bbee3e7f55064"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gae3f9c37628e18b880d8bbee3e7f55064">EpidVerify</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *ctx, <a class="el" href="struct_epid_signature.html">EpidSignature</a> const *sig, size_t sig_len, void const *msg, size_t msg_len)</td></tr>
+<tr class="memdesc:gae3f9c37628e18b880d8bbee3e7f55064"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies a signature and checks revocation status. <a href="#gae3f9c37628e18b880d8bbee3e7f55064">More...</a><br /></td></tr>
+<tr class="separator:gae3f9c37628e18b880d8bbee3e7f55064"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae44bd8acbc1e7205aeedff0c7e2632a8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gae44bd8acbc1e7205aeedff0c7e2632a8">EpidAreSigsLinked</a> (<a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig1, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig2)</td></tr>
<tr class="memdesc:gae44bd8acbc1e7205aeedff0c7e2632a8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if two signatures are linked. <a href="#gae44bd8acbc1e7205aeedff0c7e2632a8">More...</a><br /></td></tr>
<tr class="separator:gae44bd8acbc1e7205aeedff0c7e2632a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga974b92a62e8b65ea75cf802e8cc6bb6a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a">EpidVerifyBasicSig</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, void const *msg, size_t msg_len, void const *basename, size_t basename_len)</td></tr>
-<tr class="memdesc:ga974b92a62e8b65ea75cf802e8cc6bb6a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies a member signature without revocation checks. <a href="#ga974b92a62e8b65ea75cf802e8cc6bb6a">More...</a><br /></td></tr>
-<tr class="separator:ga974b92a62e8b65ea75cf802e8cc6bb6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gac6e2fab59e3af8a33a74a5b201642700"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700">EpidNrVerify</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, void const *msg, size_t msg_len, <a class="el" href="struct_sig_rl_entry.html">SigRlEntry</a> const *sigrl_entry, <a class="el" href="struct_nr_proof.html">NrProof</a> const *proof)</td></tr>
+<tr class="memitem:gac3b1f1a2bdba8eeeebbf1e0c8c00862e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e">EpidVerifyBasicSig</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, void const *msg, size_t msg_len)</td></tr>
+<tr class="memdesc:gac3b1f1a2bdba8eeeebbf1e0c8c00862e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies a member signature without revocation checks. <a href="#gac3b1f1a2bdba8eeeebbf1e0c8c00862e">More...</a><br /></td></tr>
+<tr class="separator:gac3b1f1a2bdba8eeeebbf1e0c8c00862e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac6e2fab59e3af8a33a74a5b201642700"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700">EpidNrVerify</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, void const *msg, size_t msg_len, <a class="el" href="struct_sig_rl_entry.html">SigRlEntry</a> const *sigrl_entry, <a class="el" href="struct_nr_proof.html">NrProof</a> const *proof)</td></tr>
<tr class="memdesc:gac6e2fab59e3af8a33a74a5b201642700"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies the non-revoked proof for a single signature based revocation list entry. <a href="#gac6e2fab59e3af8a33a74a5b201642700">More...</a><br /></td></tr>
<tr class="separator:gac6e2fab59e3af8a33a74a5b201642700"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gaeb05e6faea6f09c0665b13adc6e7ddea"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea">EpidCheckPrivRlEntry</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, <a class="el" href="struct_fp_elem_str.html">FpElemStr</a> const *f)</td></tr>
+<tr class="memitem:gaeb05e6faea6f09c0665b13adc6e7ddea"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea">EpidCheckPrivRlEntry</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, <a class="el" href="struct_fp_elem_str.html">FpElemStr</a> const *f)</td></tr>
<tr class="memdesc:gaeb05e6faea6f09c0665b13adc6e7ddea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies a signature has not been revoked in the private key based revocation list. <a href="#gaeb05e6faea6f09c0665b13adc6e7ddea">More...</a><br /></td></tr>
<tr class="separator:gaeb05e6faea6f09c0665b13adc6e7ddea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2a75c7d5775e852a7b6e24178dd4054f"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga2a75c7d5775e852a7b6e24178dd4054f">EpidGetVerifierRlSize</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *ctx)</td></tr>
+<tr class="memdesc:ga2a75c7d5775e852a7b6e24178dd4054f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of bytes required to serialize the verifier blacklist. <a href="#ga2a75c7d5775e852a7b6e24178dd4054f">More...</a><br /></td></tr>
+<tr class="separator:ga2a75c7d5775e852a7b6e24178dd4054f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac857bff47e7d80363eac15285471fe81"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gac857bff47e7d80363eac15285471fe81">EpidWriteVerifierRl</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *ctx, <a class="el" href="struct_verifier_rl.html">VerifierRl</a> *ver_rl, size_t ver_rl_size)</td></tr>
+<tr class="memdesc:gac857bff47e7d80363eac15285471fe81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes the verifier blacklist to a buffer. <a href="#gac857bff47e7d80363eac15285471fe81">More...</a><br /></td></tr>
+<tr class="separator:gac857bff47e7d80363eac15285471fe81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8eaeb9f4a34e9e37ccdf342919f38c69"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga8eaeb9f4a34e9e37ccdf342919f38c69">EpidBlacklistSig</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *ctx, <a class="el" href="struct_epid_signature.html">EpidSignature</a> const *sig, size_t sig_len, void const *msg, size_t msg_len)</td></tr>
+<tr class="memdesc:ga8eaeb9f4a34e9e37ccdf342919f38c69"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds a valid name-based signature to the verifier blacklist. <a href="#ga8eaeb9f4a34e9e37ccdf342919f38c69">More...</a><br /></td></tr>
+<tr class="separator:ga8eaeb9f4a34e9e37ccdf342919f38c69"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Verifier functionality. </p>
-<p>Defines the APIs needed by Intel(R) EPID verifiers. Each verifier context (<a class="el" href="struct_verifier_ctx.html" title="Verifier context definition. ">VerifierCtx</a>) represents a verifier for a single group. </p>
+<p>Defines the APIs needed by Intel(R) EPID verifiers. Each verifier context (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c" title="Internal context of verifier. ">VerifierCtx</a>) represents a verifier for a single group. </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gae44bd8acbc1e7205aeedff0c7e2632a8"></a>
<div class="memitem">
@@ -161,12 +188,75 @@ Functions</h2></td></tr>
</table>
</dd>
</dl>
-<dl class="section note"><dt>Note</dt><dd>The input signatures should be verified using <a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig()</a> before invocation. Behavior is undefined if either of the signatures cannot be verified.</dd></dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig</a> </dd>
+<dl class="section note"><dt>Note</dt><dd>The input signatures should be verified using <a class="el" href="group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig()</a> before invocation. Behavior is undefined if either of the signatures cannot be verified.</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig</a> </dd>
<dd>
<a class="el" href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa" title="Creates a basic signature for use in constrained environment. ">EpidSignBasic</a> </dd>
<dd>
-<a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640" title="Writes a Intel(R) EPID signature. ">EpidSign</a> </dd></dl>
+<a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640" title="Writes an Intel(R) EPID signature. ">EpidSign</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga8eaeb9f4a34e9e37ccdf342919f38c69"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidBlacklistSig </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *&#160;</td>
+ <td class="paramname"><em>ctx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_epid_signature.html">EpidSignature</a> const *&#160;</td>
+ <td class="paramname"><em>sig</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>sig_len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void const *&#160;</td>
+ <td class="paramname"><em>msg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>msg_len</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Adds a valid name-based signature to the verifier blacklist. </p>
+<p>If the signature is not valid it will not be added to the blacklist.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ctx</td><td>The verifier context. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">sig</td><td>The name-based signature to revoke. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">sig_len</td><td>The size of sig in bytes. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">msg</td><td>The message that was signed. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">msg_len</td><td>The size of msg in bytes.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a> </dd>
+<dd>
+<a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a" title="Sets the verifier revocation list. ">EpidVerifierSetVerifierRl</a> </dd>
+<dd>
+<a class="el" href="group___epid_verifier_module.html#gac857bff47e7d80363eac15285471fe81" title="Serializes the verifier blacklist to a buffer. ">EpidWriteVerifierRl</a> </dd></dl>
</div>
</div>
@@ -177,7 +267,7 @@ Functions</h2></td></tr>
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidCheckPrivRlEntry </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -210,9 +300,9 @@ Functions</h2></td></tr>
</table>
</dd>
</dl>
-<dl class="section note"><dt>Note</dt><dd>Sig should be verified using <a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig()</a> before invocation. Behavior is undefined if sig cannot be verified.</dd>
+<dl class="section note"><dt>Note</dt><dd>Sig should be verified using <a class="el" href="group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig()</a> before invocation. Behavior is undefined if sig cannot be verified.</dd>
<dd>
-This function should be used in conjunction with <a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700" title="Verifies the non-revoked proof for a single signature based revocation list entry. ">EpidNrVerify()</a> and <a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig()</a>.</dd>
+This function should be used in conjunction with <a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700" title="Verifies the non-revoked proof for a single signature based revocation list entry. ">EpidNrVerify()</a> and <a class="el" href="group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig()</a>.</dd>
<dd>
If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the verify should be considered to have failed.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a> </dd></dl>
@@ -220,7 +310,40 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<dd>
<a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700" title="Verifies the non-revoked proof for a single signature based revocation list entry. ">EpidNrVerify</a> </dd>
<dd>
-<a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig</a> </dd></dl>
+<a class="el" href="group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga2a75c7d5775e852a7b6e24178dd4054f"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">size_t EpidGetVerifierRlSize </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *&#160;</td>
+ <td class="paramname"><em>ctx</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the number of bytes required to serialize the verifier blacklist. </p>
+<p>Use this function to determine the buffer size required by <a class="el" href="group___epid_verifier_module.html#gac857bff47e7d80363eac15285471fe81" title="Serializes the verifier blacklist to a buffer. ">EpidWriteVerifierRl</a>.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ctx</td><td>The verifier context.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>Size in bytes required to serialize the verifier blacklist</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a> </dd>
+<dd>
+<a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a" title="Sets the verifier revocation list. ">EpidVerifierSetVerifierRl</a> </dd>
+<dd>
+<a class="el" href="group___epid_verifier_module.html#ga8eaeb9f4a34e9e37ccdf342919f38c69" title="Adds a valid name-based signature to the verifier blacklist. ">EpidBlacklistSig</a> </dd>
+<dd>
+<a class="el" href="group___epid_verifier_module.html#gac857bff47e7d80363eac15285471fe81" title="Serializes the verifier blacklist to a buffer. ">EpidWriteVerifierRl</a> </dd></dl>
</div>
</div>
@@ -231,7 +354,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidNrVerify </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -286,14 +409,14 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
-<dl class="section note"><dt>Note</dt><dd>Sig should be verified using <a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig()</a> before invocation. Behavior is undefined if sig cannot be verified.</dd>
+<dl class="section note"><dt>Note</dt><dd>Sig should be verified using <a class="el" href="group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig()</a> before invocation. Behavior is undefined if sig cannot be verified.</dd>
<dd>
-This function should be used in conjunction with <a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig()</a> and <a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea" title="Verifies a signature has not been revoked in the private key based revocation list. ">EpidCheckPrivRlEntry()</a>.</dd>
+This function should be used in conjunction with <a class="el" href="group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig()</a> and <a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea" title="Verifies a signature has not been revoked in the private key based revocation list. ">EpidCheckPrivRlEntry()</a>.</dd>
<dd>
If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a>, the verification should be considered to have failed.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a> </dd>
<dd>
-<a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig</a> </dd>
+<a class="el" href="group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e" title="Verifies a member signature without revocation checks. ">EpidVerifyBasicSig</a> </dd>
<dd>
<a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea" title="Verifies a signature has not been revoked in the private key based revocation list. ">EpidCheckPrivRlEntry</a> </dd></dl>
@@ -318,7 +441,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> **&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> **&#160;</td>
<td class="paramname"><em>ctx</em>&#160;</td>
</tr>
<tr>
@@ -346,8 +469,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12" title="Deletes an existing verifier context. ">EpidVerifierDelete</a> </dd>
<dd>
<a class="el" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392" title="Serializes the pre-computed verifier settings. ">EpidVerifierWritePrecomp</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#a12">verifysig.c</a>.</dd>
-</dl>
+
</div>
</div>
<a class="anchor" id="ga6707e691f4b3916f9c684d5bbd463d12"></a>
@@ -357,7 +479,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr>
<td class="memname">void EpidVerifierDelete </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> **&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> **&#160;</td>
<td class="paramname"><em>ctx</em></td><td>)</td>
<td></td>
</tr>
@@ -374,8 +496,52 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
</dd>
</dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#a23">verifysig.c</a>.</dd>
+
+</div>
+</div>
+<a class="anchor" id="ga1c3810ef361da678a1f77823bd9c37a6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidVerifierSetBasename </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *&#160;</td>
+ <td class="paramname"><em>ctx</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void const *&#160;</td>
+ <td class="paramname"><em>basename</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>basename_len</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Sets the basename to be used by a verifier. </p>
+<dl class="section note"><dt>Note</dt><dd>A successful call to this function will clear the current verifier blacklist.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>The verifier context. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">basename</td><td>The basename. Pass NULL for random base. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">basename_len</td><td>Number of bytes in basename buffer. Must be 0 if basename is NULL.</td></tr>
+ </table>
+ </dd>
</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a> </dd></dl>
+
</div>
</div>
<a class="anchor" id="ga1d41d6ef4dabbc30ec28452edd6baffb"></a>
@@ -385,7 +551,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidVerifierSetGroupRl </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -409,7 +575,7 @@ If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c
</div><div class="memdoc">
<p>Sets the group based revocation list. </p>
-<p>The caller is responsible for insuring 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.</p>
+<p>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.</p>
<dl class="section attention"><dt>Attention</dt><dd>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.</dd>
<dd>
It is the responsibility of the caller to free the memory pointed to by grp_rl after the verifier is no longer using it.</dd></dl>
@@ -424,8 +590,7 @@ It is the responsibility of the caller to free the memory pointed to by grp_rl a
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
<dl class="section note"><dt>Note</dt><dd>If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the group based revocation list pointed to by the verifier is undefined.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#a20">verifysig.c</a>.</dd>
-</dl>
+
</div>
</div>
<a class="anchor" id="ga97b58b2382f24756b66a357f1e825c92"></a>
@@ -435,7 +600,7 @@ It is the responsibility of the caller to free the memory pointed to by grp_rl a
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidVerifierSetHashAlg </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -465,8 +630,7 @@ It is the responsibility of the caller to free the memory pointed to by grp_rl a
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a> </dd>
<dd>
<a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890" title="Recognized hash algorithms. ">HashAlg</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#a14">verifysig.c</a>.</dd>
-</dl>
+
</div>
</div>
<a class="anchor" id="gafab08180a43b58ce2e1d56c4b070bb0e"></a>
@@ -476,7 +640,7 @@ It is the responsibility of the caller to free the memory pointed to by grp_rl a
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidVerifierSetPrivRl </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -500,7 +664,7 @@ It is the responsibility of the caller to free the memory pointed to by grp_rl a
</div><div class="memdoc">
<p>Sets the private key based revocation list. </p>
-<p>The caller is responsible for insuring 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.</p>
+<p>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.</p>
<dl class="section attention"><dt>Attention</dt><dd>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.</dd>
<dd>
It is the responsibility of the caller to free the memory pointed to by priv_rl after the verifier is no longer using it.</dd></dl>
@@ -515,8 +679,7 @@ It is the responsibility of the caller to free the memory pointed to by priv_rl
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
<dl class="section note"><dt>Note</dt><dd>If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the private key based revocation list pointed to by the verifier is undefined.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#a16">verifysig.c</a>.</dd>
-</dl>
+
</div>
</div>
<a class="anchor" id="ga4c7c9820409ee06f30bb8dc75fdd5dcf"></a>
@@ -526,7 +689,7 @@ It is the responsibility of the caller to free the memory pointed to by priv_rl
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidVerifierSetSigRl </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -550,7 +713,7 @@ It is the responsibility of the caller to free the memory pointed to by priv_rl
</div><div class="memdoc">
<p>Sets the signature based revocation list. </p>
-<p>The caller is responsible for insuring 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.</p>
+<p>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.</p>
<dl class="section attention"><dt>Attention</dt><dd>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.</dd>
<dd>
It is the responsibility of the caller to free the memory pointed to by sig_rl after the verifier is no longer using it.</dd></dl>
@@ -565,8 +728,7 @@ It is the responsibility of the caller to free the memory pointed to by sig_rl a
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
<dl class="section note"><dt>Note</dt><dd>If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the signature based revocation list pointed to by the verifier is undefined.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#a18">verifysig.c</a>.</dd>
-</dl>
+
</div>
</div>
<a class="anchor" id="ga0909703a0a4dfe080374d0d99077465a"></a>
@@ -576,7 +738,7 @@ It is the responsibility of the caller to free the memory pointed to by sig_rl a
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidVerifierSetVerifierRl </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -600,10 +762,8 @@ It is the responsibility of the caller to free the memory pointed to by sig_rl a
</div><div class="memdoc">
<p>Sets the verifier revocation list. </p>
-<p>The caller is responsible for insuring 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.</p>
-<dl class="section attention"><dt>Attention</dt><dd>The memory pointed to by ver_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.</dd>
-<dd>
-It is the responsibility of the caller to free the memory pointed to by ver_rl after the verifier is no longer using it.</dd></dl>
+<p>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.</p>
+<p>Once <a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a" title="Sets the verifier revocation list. ">EpidVerifierSetVerifierRl</a> returns, callers are free to release the memory pointed to by ver_rl.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in,out]</td><td class="paramname">ctx</td><td>The verifier context. </td></tr>
@@ -614,9 +774,12 @@ It is the responsibility of the caller to free the memory pointed to by ver_rl a
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
<dl class="section note"><dt>Note</dt><dd>If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the verifier revocation list pointed to by the verifier is undefined.</dd></dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#a21">verifysig.c</a>.</dd>
-</dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a> </dd>
+<dd>
+<a class="el" href="group___epid_verifier_module.html#ga8eaeb9f4a34e9e37ccdf342919f38c69" title="Adds a valid name-based signature to the verifier blacklist. ">EpidBlacklistSig</a> </dd>
+<dd>
+<a class="el" href="group___epid_verifier_module.html#gac857bff47e7d80363eac15285471fe81" title="Serializes the verifier blacklist to a buffer. ">EpidWriteVerifierRl</a> </dd></dl>
+
</div>
</div>
<a class="anchor" id="ga92df4d00ea4ee59d7bfd35b23da03392"></a>
@@ -626,7 +789,7 @@ It is the responsibility of the caller to free the memory pointed to by ver_rl a
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidVerifierWritePrecomp </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -653,18 +816,17 @@ It is the responsibility of the caller to free the memory pointed to by ver_rl a
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
<dl class="section note"><dt>Note</dt><dd>If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the content of precomp is undefined. </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#a13">verifysig.c</a>.</dd>
-</dl>
+
</div>
</div>
-<a class="anchor" id="ga39b240a17f310894e9f5946c9a731798"></a>
+<a class="anchor" id="gae3f9c37628e18b880d8bbee3e7f55064"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidVerify </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -689,19 +851,7 @@ It is the responsibility of the caller to free the memory pointed to by ver_rl a
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>msg_len</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">void const *&#160;</td>
- <td class="paramname"><em>basename</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>basename_len</em>&#160;</td>
+ <td class="paramname"><em>msg_len</em>&#160;</td>
</tr>
<tr>
<td></td>
@@ -718,9 +868,7 @@ It is the responsibility of the caller to free the memory pointed to by ver_rl a
<tr><td class="paramdir">[in]</td><td class="paramname">sig</td><td>The signature. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">sig_len</td><td>The size of sig in bytes. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">msg</td><td>The message that was signed. </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">msg_len</td><td>The size of msg in bytes. </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">basename</td><td>The basename. Pass NULL if not specified </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">basename_len</td><td>Number of bytes in basename buffer. Must be 0 if basename is NULL.</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">msg_len</td><td>The size of msg in bytes.</td></tr>
</table>
</dd>
</dl>
@@ -729,10 +877,10 @@ It is the responsibility of the caller to free the memory pointed to by ver_rl a
<table class="retval">
<tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab45ad60085d03c03ea30b40a0519897e" title="Signature is valid. ">kEpidSigValid</a></td><td>Signature validated successfully </td></tr>
<tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8" title="Signature is invalid. ">kEpidSigInvalid</a></td><td>Signature is invalid </td></tr>
- <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a2b38f44424cecd7b432194a2012dc9c7" title="Signature revoked in GroupRl. ">kEpidSigRevokedinGroupRl</a></td><td>Signature revoked in <a class="el" href="struct_group_rl.html" title="group revocation list ">GroupRl</a> </td></tr>
- <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a780a20821863553b88ca617a6fc0f718" title="Signature revoked in PrivRl. ">kEpidSigRevokedinPrivRl</a></td><td>Signature revoked in <a class="el" href="struct_priv_rl.html" title="private-key based revocation list. ">PrivRl</a> </td></tr>
- <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aff83186b61d48f9fee5f691c5b219bc1" title="Signature revoked in SigRl. ">kEpidSigRevokedinSigRl</a></td><td>Signature revoked in <a class="el" href="struct_sig_rl.html" title="signature based revocation list ">SigRl</a> </td></tr>
- <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360addbba767bb884b4459a567056b4d3f86" title="Signature revoked in VerifierRl. ">kEpidSigRevokedinVerifierRl</a></td><td>Signature revoked in <a class="el" href="struct_verifier_rl.html">VerifierRl</a></td></tr>
+ <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aedd43fb4043bef3b515fc23f1d9a5fe5" title="Signature revoked in GroupRl. ">kEpidSigRevokedInGroupRl</a></td><td>Signature revoked in <a class="el" href="struct_group_rl.html" title="group revocation list ">GroupRl</a> </td></tr>
+ <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1dc7b7e6ff97c7ed9ff4191d76ebd6e1" title="Signature revoked in PrivRl. ">kEpidSigRevokedInPrivRl</a></td><td>Signature revoked in <a class="el" href="struct_priv_rl.html" title="private-key based revocation list. ">PrivRl</a> </td></tr>
+ <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a43c658cbf0d156850d71ce3f8efd461c" title="Signature revoked in SigRl. ">kEpidSigRevokedInSigRl</a></td><td>Signature revoked in <a class="el" href="struct_sig_rl.html" title="signature based revocation list ">SigRl</a> </td></tr>
+ <tr><td class="paramname"><a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a486e052baa99c6c25ae5d5cc710de298" title="Signature revoked in VerifierRl. ">kEpidSigRevokedInVerifierRl</a></td><td>Signature revoked in <a class="el" href="struct_verifier_rl.html">VerifierRl</a></td></tr>
</table>
</dd>
</dl>
@@ -741,19 +889,18 @@ It is the responsibility of the caller to free the memory pointed to by ver_rl a
<dd>
<a class="el" href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa" title="Creates a basic signature for use in constrained environment. ">EpidSignBasic</a> </dd>
<dd>
-<a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640" title="Writes a Intel(R) EPID signature. ">EpidSign</a> </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#a22">verifysig.c</a>.</dd>
-</dl>
+<a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640" title="Writes an Intel(R) EPID signature. ">EpidSign</a> </dd></dl>
+
</div>
</div>
-<a class="anchor" id="ga974b92a62e8b65ea75cf802e8cc6bb6a"></a>
+<a class="anchor" id="gac3b1f1a2bdba8eeeebbf1e0c8c00862e"></a>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidVerifyBasicSig </td>
<td>(</td>
- <td class="paramtype"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *&#160;</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
@@ -772,19 +919,60 @@ It is the responsibility of the caller to free the memory pointed to by ver_rl a
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>msg_len</em>, </td>
+ <td class="paramname"><em>msg_len</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Verifies a member signature without revocation checks. </p>
+<p>Used in constrained environments where, due to limited memory, it may not be possible to process through a large and potentially unbounded revocation list.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ctx</td><td>The verifier context. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">sig</td><td>The basic signature. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">msg</td><td>The message that was signed. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">msg_len</td><td>The size of msg in bytes.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function should be used in conjunction with <a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700" title="Verifies the non-revoked proof for a single signature based revocation list entry. ">EpidNrVerify()</a> and <a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea" title="Verifies a signature has not been revoked in the private key based revocation list. ">EpidCheckPrivRlEntry()</a>.</dd>
+<dd>
+If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the verify should be considered to have failed.</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a> </dd>
+<dd>
+<a class="el" href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa" title="Creates a basic signature for use in constrained environment. ">EpidSignBasic</a> </dd>
+<dd>
+<a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640" title="Writes an Intel(R) EPID signature. ">EpidSign</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gac857bff47e7d80363eac15285471fe81"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidWriteVerifierRl </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *&#160;</td>
+ <td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
- <td class="paramtype">void const *&#160;</td>
- <td class="paramname"><em>basename</em>, </td>
+ <td class="paramtype"><a class="el" href="struct_verifier_rl.html">VerifierRl</a> *&#160;</td>
+ <td class="paramname"><em>ver_rl</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
- <td class="paramname"><em>basename_len</em>&#160;</td>
+ <td class="paramname"><em>ver_rl_size</em>&#160;</td>
</tr>
<tr>
<td></td>
@@ -794,28 +982,25 @@ It is the responsibility of the caller to free the memory pointed to by ver_rl a
</table>
</div><div class="memdoc">
-<p>Verifies a member signature without revocation checks. </p>
-<p>Used in constrained environments where, due to limited memory, it may not be possible to process through a large and potentially unbounded revocation list.</p>
+<p>Serializes the verifier blacklist to a buffer. </p>
+<p>If the current blacklist is empty or not set a valid empty verifier blacklist will be serialized.</p>
+<p>Use <a class="el" href="group___epid_verifier_module.html#ga2a75c7d5775e852a7b6e24178dd4054f" title="Returns the number of bytes required to serialize the verifier blacklist. ">EpidGetVerifierRlSize</a> to determine the buffer size required to serialize the verifier blacklist.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">ctx</td><td>The verifier context. </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">sig</td><td>The basic signature. </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">msg</td><td>The message that was signed. </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">msg_len</td><td>The size of msg in bytes. </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">basename</td><td>The basename. Pass NULL if not specified </td></tr>
- <tr><td class="paramdir">[in]</td><td class="paramname">basename_len</td><td>Number of bytes in basename buffer. Must be 0 if basename is NULL.</td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">ver_rl</td><td>An existing buffer in which to write the verifier revocation list. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">ver_rl_size</td><td>The size of the caller allocated output buffer in bytes.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function should be used in conjunction with <a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700" title="Verifies the non-revoked proof for a single signature based revocation list entry. ">EpidNrVerify()</a> and <a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea" title="Verifies a signature has not been revoked in the private key based revocation list. ">EpidCheckPrivRlEntry()</a>.</dd>
-<dd>
-If the result is not <a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9" title="no error ">kEpidNoErr</a> the verify should be considered to have failed.</dd></dl>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70" title="Creates a new verifier context. ">EpidVerifierCreate</a> </dd>
<dd>
-<a class="el" href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa" title="Creates a basic signature for use in constrained environment. ">EpidSignBasic</a> </dd>
+<a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a" title="Sets the verifier revocation list. ">EpidVerifierSetVerifierRl</a> </dd>
+<dd>
+<a class="el" href="group___epid_verifier_module.html#ga8eaeb9f4a34e9e37ccdf342919f38c69" title="Adds a valid name-based signature to the verifier blacklist. ">EpidBlacklistSig</a> </dd>
<dd>
-<a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640" title="Writes a Intel(R) EPID signature. ">EpidSign</a> </dd></dl>
+<a class="el" href="group___epid_verifier_module.html#ga2a75c7d5775e852a7b6e24178dd4054f" title="Returns the number of bytes required to serialize the verifier blacklist. ">EpidGetVerifierRlSize</a> </dd></dl>
</div>
</div>
diff --git a/doc/html/group___epid_verifier_module.js b/doc/html/group___epid_verifier_module.js
index cabf2b5..b93f822 100644
--- a/doc/html/group___epid_verifier_module.js
+++ b/doc/html/group___epid_verifier_module.js
@@ -1,22 +1,29 @@
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 ]
+ [ "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#ga39b240a17f310894e9f5946c9a731798", null ],
- [ "EpidVerifyBasicSig", "group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a", 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/doc/html/group___error_codes.html b/doc/html/group___error_codes.html
index 557e3e7..74b35b3 100644
--- a/doc/html/group___error_codes.html
+++ b/doc/html/group___error_codes.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -74,11 +74,11 @@ Enumerations</h2></td></tr>
&#160;&#160;<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> = 0,
<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab45ad60085d03c03ea30b40a0519897e">kEpidSigValid</a> = 0,
<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8">kEpidSigInvalid</a> = 1,
-<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a2b38f44424cecd7b432194a2012dc9c7">kEpidSigRevokedinGroupRl</a> = 2,
+<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aedd43fb4043bef3b515fc23f1d9a5fe5">kEpidSigRevokedInGroupRl</a> = 2,
<br />
-&#160;&#160;<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a780a20821863553b88ca617a6fc0f718">kEpidSigRevokedinPrivRl</a> = 3,
-<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aff83186b61d48f9fee5f691c5b219bc1">kEpidSigRevokedinSigRl</a> = 4,
-<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360addbba767bb884b4459a567056b4d3f86">kEpidSigRevokedinVerifierRl</a> = 5,
+&#160;&#160;<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1dc7b7e6ff97c7ed9ff4191d76ebd6e1">kEpidSigRevokedInPrivRl</a> = 3,
+<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a43c658cbf0d156850d71ce3f8efd461c">kEpidSigRevokedInSigRl</a> = 4,
+<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a486e052baa99c6c25ae5d5cc710de298">kEpidSigRevokedInVerifierRl</a> = 5,
<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e">kEpidErr</a> = -999,
<br />
&#160;&#160;<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a5252da1ff519a098446723e9edd30cc7">kEpidNotImpl</a>,
@@ -92,7 +92,9 @@ Enumerations</h2></td></tr>
<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad4d4ff24a7ef2cd7a50b8082265e9ff4">kEpidHashAlgorithmNotSupported</a>,
<br />
&#160;&#160;<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a61234ad9610406da6bf7977afd72a357">kEpidRandMaxIterErr</a>,
-<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a3706f895a660260033b5b91890516c0f">kEpidDuplicateErr</a>
+<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a3706f895a660260033b5b91890516c0f">kEpidDuplicateErr</a>,
+<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a94ae9c9b9337afd2fefd3b4f9c3160df">kEpidInconsistentBasenameSetErr</a>,
+<a class="el" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab2768a1a5c4374cb1ac6175c09c73129">kEpidMathQuadraticNonResidueError</a>
<br />
}<tr class="memdesc:gafdb27c77c2c4b32c807e326a8a0da360"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return status for SDK functions. <a href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">More...</a><br /></td></tr>
</td></tr>
@@ -134,16 +136,16 @@ Functions</h2></td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8"></a>kEpidSigInvalid&#160;</td><td class="fielddoc">
<p>Signature is invalid. </p>
</td></tr>
-<tr><td class="fieldname"><a class="anchor" id="ggafdb27c77c2c4b32c807e326a8a0da360a2b38f44424cecd7b432194a2012dc9c7"></a>kEpidSigRevokedinGroupRl&#160;</td><td class="fielddoc">
+<tr><td class="fieldname"><a class="anchor" id="ggafdb27c77c2c4b32c807e326a8a0da360aedd43fb4043bef3b515fc23f1d9a5fe5"></a>kEpidSigRevokedInGroupRl&#160;</td><td class="fielddoc">
<p>Signature revoked in <a class="el" href="struct_group_rl.html" title="group revocation list ">GroupRl</a>. </p>
</td></tr>
-<tr><td class="fieldname"><a class="anchor" id="ggafdb27c77c2c4b32c807e326a8a0da360a780a20821863553b88ca617a6fc0f718"></a>kEpidSigRevokedinPrivRl&#160;</td><td class="fielddoc">
+<tr><td class="fieldname"><a class="anchor" id="ggafdb27c77c2c4b32c807e326a8a0da360a1dc7b7e6ff97c7ed9ff4191d76ebd6e1"></a>kEpidSigRevokedInPrivRl&#160;</td><td class="fielddoc">
<p>Signature revoked in <a class="el" href="struct_priv_rl.html" title="private-key based revocation list. ">PrivRl</a>. </p>
</td></tr>
-<tr><td class="fieldname"><a class="anchor" id="ggafdb27c77c2c4b32c807e326a8a0da360aff83186b61d48f9fee5f691c5b219bc1"></a>kEpidSigRevokedinSigRl&#160;</td><td class="fielddoc">
+<tr><td class="fieldname"><a class="anchor" id="ggafdb27c77c2c4b32c807e326a8a0da360a43c658cbf0d156850d71ce3f8efd461c"></a>kEpidSigRevokedInSigRl&#160;</td><td class="fielddoc">
<p>Signature revoked in <a class="el" href="struct_sig_rl.html" title="signature based revocation list ">SigRl</a>. </p>
</td></tr>
-<tr><td class="fieldname"><a class="anchor" id="ggafdb27c77c2c4b32c807e326a8a0da360addbba767bb884b4459a567056b4d3f86"></a>kEpidSigRevokedinVerifierRl&#160;</td><td class="fielddoc">
+<tr><td class="fieldname"><a class="anchor" id="ggafdb27c77c2c4b32c807e326a8a0da360a486e052baa99c6c25ae5d5cc710de298"></a>kEpidSigRevokedInVerifierRl&#160;</td><td class="fielddoc">
<p>Signature revoked in <a class="el" href="struct_verifier_rl.html">VerifierRl</a>. </p>
</td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e"></a>kEpidErr&#160;</td><td class="fielddoc">
@@ -179,9 +181,14 @@ Functions</h2></td></tr>
<tr><td class="fieldname"><a class="anchor" id="ggafdb27c77c2c4b32c807e326a8a0da360a3706f895a660260033b5b91890516c0f"></a>kEpidDuplicateErr&#160;</td><td class="fielddoc">
<p>argument would add duplicate entry </p>
</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="ggafdb27c77c2c4b32c807e326a8a0da360a94ae9c9b9337afd2fefd3b4f9c3160df"></a>kEpidInconsistentBasenameSetErr&#160;</td><td class="fielddoc">
+<p>set basename conflicts with arguments </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="ggafdb27c77c2c4b32c807e326a8a0da360ab2768a1a5c4374cb1ac6175c09c73129"></a>kEpidMathQuadraticNonResidueError&#160;</td><td class="fielddoc">
+<p>quadratic Non-Residue Error </p>
+</td></tr>
</table>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#a24">verifysig.c</a>.</dd>
-</dl>
+
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
diff --git a/doc/html/group___error_codes.js b/doc/html/group___error_codes.js
index 6121a1d..5f02463 100644
--- a/doc/html/group___error_codes.js
+++ b/doc/html/group___error_codes.js
@@ -4,10 +4,10 @@ var group___error_codes =
[ "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#ggafdb27c77c2c4b32c807e326a8a0da360a2b38f44424cecd7b432194a2012dc9c7", null ],
- [ "kEpidSigRevokedinPrivRl", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a780a20821863553b88ca617a6fc0f718", null ],
- [ "kEpidSigRevokedinSigRl", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aff83186b61d48f9fee5f691c5b219bc1", null ],
- [ "kEpidSigRevokedinVerifierRl", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360addbba767bb884b4459a567056b4d3f86", 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 ],
@@ -18,7 +18,9 @@ var group___error_codes =
[ "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 ]
+ [ "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/doc/html/group___file_parser.html b/doc/html/group___file_parser.html
index 70cd3af..e6445ef 100644
--- a/doc/html/group___file_parser.html
+++ b/doc/html/group___file_parser.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -58,6 +58,7 @@ $(document).ready(function(){initNavTree('group___file_parser.html','');});
<div id="doc-content">
<div class="header">
<div class="summary">
+<a href="#groups">Modules</a> &#124;
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> &#124;
@@ -70,6 +71,12 @@ $(document).ready(function(){initNavTree('group___file_parser.html','');});
<p>Parser for issuer material.
<a href="#details">More...</a></p>
<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group___epid11_file_parser_module"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_file_parser_module.html">EPID 1.1 support</a></td></tr>
+<tr class="memdesc:group___epid11_file_parser_module"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parser for 1.1 issuer material. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid_file_header.html">EpidFileHeader</a></td></tr>
@@ -81,6 +88,12 @@ Data Structures</h2></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
+<tr class="memitem:ga1562efc7c1891875d6b2b9180d65de9d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#ga1562efc7c1891875d6b2b9180d65de9d">EpidVersion</a> { <a class="el" href="group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da5f270e2e8c2412bc07de293023f425cc">kEpid1x</a>,
+<a class="el" href="group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da6af0ee9d9689f1d4325bdd0beb8a89e2">kEpid2x</a>,
+<a class="el" href="group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da8bbd27765997dd10f1c0378dbecef01d">kNumEpidVersions</a>
+ }<tr class="memdesc:ga1562efc7c1891875d6b2b9180d65de9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Recognized Intel(R) EPID versions. <a href="group___file_parser.html#ga1562efc7c1891875d6b2b9180d65de9d">More...</a><br /></td></tr>
+</td></tr>
+<tr class="separator:ga1562efc7c1891875d6b2b9180d65de9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9a33be7edc6b4c7a867fb07bd2bddecb"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#ga9a33be7edc6b4c7a867fb07bd2bddecb">EpidFileType</a> { <br />
&#160;&#160;<a class="el" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac24554caafe2db01e2daed413188cd92">kIssuingCaPubKeyFile</a>,
<a class="el" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba1f8d8c4b253403a35c51e05d34a7ca1e">kGroupPubKeyFile</a>,
@@ -100,6 +113,9 @@ Enumerations</h2></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
+<tr class="memitem:ga8e38d1102eb1dd9b5af2e2f79236da55"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#ga8e38d1102eb1dd9b5af2e2f79236da55">EpidParseFileHeader</a> (void const *buf, size_t len, <a class="el" href="group___file_parser.html#ga1562efc7c1891875d6b2b9180d65de9d">EpidVersion</a> *epid_version, <a class="el" href="group___file_parser.html#ga9a33be7edc6b4c7a867fb07bd2bddecb">EpidFileType</a> *file_type)</td></tr>
+<tr class="memdesc:ga8e38d1102eb1dd9b5af2e2f79236da55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts Intel(R) EPID Binary Output File header information. <a href="#ga8e38d1102eb1dd9b5af2e2f79236da55">More...</a><br /></td></tr>
+<tr class="separator:ga8e38d1102eb1dd9b5af2e2f79236da55"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga43fdbc1bf2edd3695d21cb457365afbb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">EpidParseGroupPubKeyFile</a> (void const *buf, size_t len, <a class="el" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> const *cert, <a class="el" href="struct_group_pub_key.html">GroupPubKey</a> *pubkey)</td></tr>
<tr class="memdesc:ga43fdbc1bf2edd3695d21cb457365afbb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extracts group public key from buffer in issuer binary format. <a href="#ga43fdbc1bf2edd3695d21cb457365afbb">More...</a><br /></td></tr>
<tr class="separator:ga43fdbc1bf2edd3695d21cb457365afbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -115,6 +131,10 @@ Functions</h2></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
Variables</h2></td></tr>
+<tr class="memitem:gaae808987ce82188dff42baa4e43cab82"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaae808987ce82188dff42baa4e43cab82"></a>
+const <a class="el" href="struct_oct_str16.html">OctStr16</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#gaae808987ce82188dff42baa4e43cab82">kEpidVersionCode</a> [<a class="el" href="group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da8bbd27765997dd10f1c0378dbecef01d">kNumEpidVersions</a>]</td></tr>
+<tr class="memdesc:gaae808987ce82188dff42baa4e43cab82"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of issuer material Intel(R) EPID versions. <br /></td></tr>
+<tr class="separator:gaae808987ce82188dff42baa4e43cab82"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3770c39a0546c79447c9d4159d794c33"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3770c39a0546c79447c9d4159d794c33"></a>
const <a class="el" href="struct_oct_str16.html">OctStr16</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33">kEpidFileTypeCode</a> [<a class="el" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac6d742ea3dd3b17f6d763970ac84b811">kNumFileTypes</a>]</td></tr>
<tr class="memdesc:ga3770c39a0546c79447c9d4159d794c33"><td class="mdescLeft">&#160;</td><td class="mdescRight">Encoding of issuer material file types. <br /></td></tr>
@@ -167,7 +187,82 @@ const <a class="el" href="struct_oct_str16.html">OctStr16</a>&#160;</td><td clas
</div>
</div>
+<a class="anchor" id="ga1562efc7c1891875d6b2b9180d65de9d"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="group___file_parser.html#ga1562efc7c1891875d6b2b9180d65de9d">EpidVersion</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Recognized Intel(R) EPID versions. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a class="anchor" id="gga1562efc7c1891875d6b2b9180d65de9da5f270e2e8c2412bc07de293023f425cc"></a>kEpid1x&#160;</td><td class="fielddoc">
+<p>Intel(R) EPID version 1.x. </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="gga1562efc7c1891875d6b2b9180d65de9da6af0ee9d9689f1d4325bdd0beb8a89e2"></a>kEpid2x&#160;</td><td class="fielddoc">
+<p>Intel(R) EPID version 2.x. </p>
+</td></tr>
+<tr><td class="fieldname"><a class="anchor" id="gga1562efc7c1891875d6b2b9180d65de9da8bbd27765997dd10f1c0378dbecef01d"></a>kNumEpidVersions&#160;</td><td class="fielddoc">
+<p>Maximum number of EPID versions. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
<h2 class="groupheader">Function Documentation</h2>
+<a class="anchor" id="ga8e38d1102eb1dd9b5af2e2f79236da55"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidParseFileHeader </td>
+ <td>(</td>
+ <td class="paramtype">void const *&#160;</td>
+ <td class="paramname"><em>buf</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>len</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___file_parser.html#ga1562efc7c1891875d6b2b9180d65de9d">EpidVersion</a> *&#160;</td>
+ <td class="paramname"><em>epid_version</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___file_parser.html#ga9a33be7edc6b4c7a867fb07bd2bddecb">EpidFileType</a> *&#160;</td>
+ <td class="paramname"><em>file_type</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Extracts Intel(R) EPID Binary Output File header information. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">buf</td><td>Pointer to buffer containing Intel(R) EPID Binary Output File to parse.</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>The size of buf in bytes.</td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">epid_version</td><td>The extracted EPID version or kNumEpidVersions if EPID version is unknown. Pass NULL to not extract.</td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">file_type</td><td>The extracted EPID file type or kNumFileTypes if file type is unknown. Pass NULL to not extract.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a> </dd></dl>
+
+</div>
+</div>
<a class="anchor" id="ga43fdbc1bf2edd3695d21cb457365afbb"></a>
<div class="memitem">
<div class="memproto">
diff --git a/doc/html/group___file_parser.js b/doc/html/group___file_parser.js
index 0d7346c..3694cba 100644
--- a/doc/html/group___file_parser.js
+++ b/doc/html/group___file_parser.js
@@ -1,5 +1,6 @@
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 ]
@@ -26,9 +27,16 @@ var group___file_parser =
[ "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 ]
+ [ "kEpidFileTypeCode", "group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33", null ],
+ [ "kEpidVersionCode", "group___file_parser.html#gaae808987ce82188dff42baa4e43cab82", null ]
]; \ No newline at end of file
diff --git a/doc/html/group___finite_field_primitives.html b/doc/html/group___finite_field_primitives.html
index 1c40c12..4d20c6c 100644
--- a/doc/html/group___finite_field_primitives.html
+++ b/doc/html/group___finite_field_primitives.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -87,6 +87,9 @@ Functions</h2></td></tr>
<tr class="memitem:ga83041e3be9984a4bd8f1021934bfa3a2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2">NewFiniteFieldViaBinomalExtension</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> const *ground_field, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *ground_element, int degree, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> **ff)</td></tr>
<tr class="memdesc:ga83041e3be9984a4bd8f1021934bfa3a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new finite field using binomial extension. <a href="#ga83041e3be9984a4bd8f1021934bfa3a2">More...</a><br /></td></tr>
<tr class="separator:ga83041e3be9984a4bd8f1021934bfa3a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae69af62a03179718cac81b004549c598"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#gae69af62a03179718cac81b004549c598">NewFiniteFieldViaPolynomialExtension</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> const *ground_field, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const *irr_polynomial, int degree, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> **ff)</td></tr>
+<tr class="memdesc:gae69af62a03179718cac81b004549c598"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new finite field using polynomial extension. <a href="#gae69af62a03179718cac81b004549c598">More...</a><br /></td></tr>
+<tr class="separator:gae69af62a03179718cac81b004549c598"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gacbdd2871ecf93dadaac9d2c5b16e1e5f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f">DeleteFiniteField</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> **ff)</td></tr>
<tr class="memdesc:gacbdd2871ecf93dadaac9d2c5b16e1e5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees a previously allocated FiniteField. <a href="#gacbdd2871ecf93dadaac9d2c5b16e1e5f">More...</a><br /></td></tr>
<tr class="separator:gacbdd2871ecf93dadaac9d2c5b16e1e5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -99,6 +102,9 @@ Functions</h2></td></tr>
<tr class="memitem:ga884d9e1baadf29a410244a735853e3c7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga884d9e1baadf29a410244a735853e3c7">ReadFfElement</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, void const *ff_elem_str, size_t strlen, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *ff_elem)</td></tr>
<tr class="memdesc:ga884d9e1baadf29a410244a735853e3c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deserializes a FfElement from a string. <a href="#ga884d9e1baadf29a410244a735853e3c7">More...</a><br /></td></tr>
<tr class="separator:ga884d9e1baadf29a410244a735853e3c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga90b2c192708973b54b7a3e82b34536ed"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga90b2c192708973b54b7a3e82b34536ed">InitFfElementFromBn</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *bn, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *ff_elem)</td></tr>
+<tr class="memdesc:ga90b2c192708973b54b7a3e82b34536ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializes an existing FfElement from a BigNum. <a href="#ga90b2c192708973b54b7a3e82b34536ed">More...</a><br /></td></tr>
+<tr class="separator:ga90b2c192708973b54b7a3e82b34536ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga678694636708463b078d842d5c58a900"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900">WriteFfElement</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *ff_elem, void *ff_elem_str, size_t strlen)</td></tr>
<tr class="memdesc:ga678694636708463b078d842d5c58a900"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes a finite field element to a string. <a href="#ga678694636708463b078d842d5c58a900">More...</a><br /></td></tr>
<tr class="separator:ga678694636708463b078d842d5c58a900"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -111,6 +117,9 @@ Functions</h2></td></tr>
<tr class="memitem:ga1a6e6d3c2319bb24eae8670b021e223b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b">FfAdd</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *b, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
<tr class="memdesc:ga1a6e6d3c2319bb24eae8670b021e223b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds two finite field elements. <a href="#ga1a6e6d3c2319bb24eae8670b021e223b">More...</a><br /></td></tr>
<tr class="separator:ga1a6e6d3c2319bb24eae8670b021e223b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga59d20610f245ff4bc3a17b7bfe289991"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga59d20610f245ff4bc3a17b7bfe289991">FfSub</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *b, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
+<tr class="memdesc:ga59d20610f245ff4bc3a17b7bfe289991"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subtracts two finite field elements. <a href="#ga59d20610f245ff4bc3a17b7bfe289991">More...</a><br /></td></tr>
+<tr class="separator:ga59d20610f245ff4bc3a17b7bfe289991"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4613a75bd001a974b3e3e494c3a112a5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5">FfMul</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *b, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
<tr class="memdesc:ga4613a75bd001a974b3e3e494c3a112a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multiplies two finite field elements. <a href="#ga4613a75bd001a974b3e3e494c3a112a5">More...</a><br /></td></tr>
<tr class="separator:ga4613a75bd001a974b3e3e494c3a112a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -123,6 +132,9 @@ Functions</h2></td></tr>
<tr class="memitem:ga84d21decc1c957bcf6e98e1492eb2ac3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga84d21decc1c957bcf6e98e1492eb2ac3">FfMultiExp</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const **a, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const **b, size_t m, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
<tr class="memdesc:ga84d21decc1c957bcf6e98e1492eb2ac3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multi-exponentiates finite field elements. <a href="#ga84d21decc1c957bcf6e98e1492eb2ac3">More...</a><br /></td></tr>
<tr class="separator:ga84d21decc1c957bcf6e98e1492eb2ac3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1ef46fc83f9c11263a2aa1ec906c9144"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga1ef46fc83f9c11263a2aa1ec906c9144">FfMultiExpBn</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const **a, <a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const **b, size_t m, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
+<tr class="memdesc:ga1ef46fc83f9c11263a2aa1ec906c9144"><td class="mdescLeft">&#160;</td><td class="mdescRight">Multi-exponentiates finite field elements. <a href="#ga1ef46fc83f9c11263a2aa1ec906c9144">More...</a><br /></td></tr>
+<tr class="separator:ga1ef46fc83f9c11263a2aa1ec906c9144"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0d0c31a22bbfb665a16b2d25b0cd2634"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634">FfSscmMultiExp</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const **a, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const **b, size_t m, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
<tr class="memdesc:ga0d0c31a22bbfb665a16b2d25b0cd2634"><td class="mdescLeft">&#160;</td><td class="mdescRight">Software side-channel mitigated implementation of FfMultiExp. <a href="#ga0d0c31a22bbfb665a16b2d25b0cd2634">More...</a><br /></td></tr>
<tr class="separator:ga0d0c31a22bbfb665a16b2d25b0cd2634"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -135,10 +147,13 @@ Functions</h2></td></tr>
<tr class="memitem:ga6622db072782fd9e53b4d59dd3dbd8e8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga6622db072782fd9e53b4d59dd3dbd8e8">FfGetRandom</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const *low_bound, <a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a> rnd_func, void *rnd_param, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
<tr class="memdesc:ga6622db072782fd9e53b4d59dd3dbd8e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generate random finite field element. <a href="#ga6622db072782fd9e53b4d59dd3dbd8e8">More...</a><br /></td></tr>
<tr class="separator:ga6622db072782fd9e53b4d59dd3dbd8e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga39892fe2ab431e166dbbcf57756660f6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___finite_field_primitives.html#ga39892fe2ab431e166dbbcf57756660f6">FfSqrt</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *a, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *r)</td></tr>
+<tr class="memdesc:ga39892fe2ab431e166dbbcf57756660f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds a square root of a finite field element. <a href="#ga39892fe2ab431e166dbbcf57756660f6">More...</a><br /></td></tr>
+<tr class="separator:ga39892fe2ab431e166dbbcf57756660f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Finite field operations. </p>
-<p>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.</p>
+<p>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.</p>
<p>A simple example of a finite field is all integers from zero that are less than a given value.</p>
<p>The elements (<a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa" title="An element in a finite field. ">FfElement</a>) of a finite field can be used in a variety of simple mathematical operations that result in elements of the same field. </p>
<h2 class="groupheader">Function Documentation</h2>
@@ -234,8 +249,8 @@ Functions</h2></td></tr>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">ff</td><td>The finite field. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">a</td><td>The left hand parameter. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">b</td><td>The right hand parameter. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">a</td><td>The first operand to be added. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">b</td><td>The second operand to be added. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">r</td><td>The result of adding a and b.</td></tr>
</table>
</dd>
@@ -608,8 +623,8 @@ Functions</h2></td></tr>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">ff</td><td>The finite field. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">a</td><td>The left hand parameter. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">b</td><td>The right hand parameter. If ff is an extension field of a field F then this parameter may be an element of either ff or F. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">a</td><td>The first operand to be multplied. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">b</td><td>The 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. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">r</td><td>The result of multiplying a and b.</td></tr>
</table>
</dd>
@@ -682,6 +697,67 @@ Functions</h2></td></tr>
</div>
</div>
+<a class="anchor" id="ga1ef46fc83f9c11263a2aa1ec906c9144"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> FfMultiExpBn </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *&#160;</td>
+ <td class="paramname"><em>ff</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const **&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const **&#160;</td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">size_t&#160;</td>
+ <td class="paramname"><em>m</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td>
+ <td class="paramname"><em>r</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Multi-exponentiates finite field elements. </p>
+<p>Calculates FfExp(p[0],b[0]) * ... * FfExp(p[m-1],b[m-1]) for m &gt; 1</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ff</td><td>The finite field in which to perform the operation </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The bases. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">b</td><td>The powers. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">m</td><td>Number of entries in a and b. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">r</td><td>The result of raising each a to the corresponding power b and multiplying the results.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___finite_field_primitives.html#ga7d99fdc5e4573668a5744e49df7ab67c" title="Creates new finite field. ">NewFiniteField</a> </dd>
+<dd>
+<a class="el" href="group___finite_field_primitives.html#gacc54f315ede2dbeb8c5990c024a0de6c" title="Creates a new finite field element. ">NewFfElement</a> </dd></dl>
+
+</div>
+</div>
<a class="anchor" id="gae7a8c7503b6fc7a41bcaab4d45ca37b2"></a>
<div class="memitem">
<div class="memproto">
@@ -728,6 +804,59 @@ Functions</h2></td></tr>
</div>
</div>
+<a class="anchor" id="ga39892fe2ab431e166dbbcf57756660f6"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> FfSqrt </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *&#160;</td>
+ <td class="paramname"><em>ff</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td>
+ <td class="paramname"><em>r</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Finds a square root of a finite field element. </p>
+<p>This function calculates the square root by the method of false position.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ff</td><td>The finite field in which to perform the operation </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">a</td><td>The bases. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">r</td><td>The result of raising each a to the corresponding power b and multiplying the results.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="retval"><dt>Return values</dt><dd>
+ <table class="retval">
+ <tr><td class="paramname">kEpidMathQuadraticNonResidueError</td><td>No square root could be found. </td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___finite_field_primitives.html#ga7d99fdc5e4573668a5744e49df7ab67c" title="Creates new finite field. ">NewFiniteField</a> </dd>
+<dd>
+<a class="el" href="group___finite_field_primitives.html#gacc54f315ede2dbeb8c5990c024a0de6c" title="Creates a new finite field element. ">NewFfElement</a> </dd></dl>
+
+</div>
+</div>
<a class="anchor" id="ga0d0c31a22bbfb665a16b2d25b0cd2634"></a>
<div class="memitem">
<div class="memproto">
@@ -790,6 +919,103 @@ Functions</h2></td></tr>
</div>
</div>
+<a class="anchor" id="ga59d20610f245ff4bc3a17b7bfe289991"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> FfSub </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *&#160;</td>
+ <td class="paramname"><em>ff</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *&#160;</td>
+ <td class="paramname"><em>a</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *&#160;</td>
+ <td class="paramname"><em>b</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td>
+ <td class="paramname"><em>r</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Subtracts two finite field elements. </p>
+<dl class="section note"><dt>Note</dt><dd>Only needed for Intel(R) EPID 1.1 verification.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ff</td><td>The finite field. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">a</td><td>The first operand to use in subtraction. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">b</td><td>The second operand to use in subtraction. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">r</td><td>The result of subtracting a and b.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="ga90b2c192708973b54b7a3e82b34536ed"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> InitFfElementFromBn </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *&#160;</td>
+ <td class="paramname"><em>ff</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *&#160;</td>
+ <td class="paramname"><em>bn</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td>
+ <td class="paramname"><em>ff_elem</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Initializes an existing FfElement from a BigNum. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ff</td><td>The finite field. Must be a Prime Field. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">bn</td><td>The value to read. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">ff_elem</td><td>The target FfElement.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___finite_field_primitives.html#gacc54f315ede2dbeb8c5990c024a0de6c" title="Creates a new finite field element. ">NewFfElement</a> </dd>
+<dd>
+<a class="el" href="group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900" title="Serializes a finite field element to a string. ">WriteFfElement</a> </dd></dl>
+
+</div>
+</div>
<a class="anchor" id="gacc54f315ede2dbeb8c5990c024a0de6c"></a>
<div class="memitem">
<div class="memproto">
@@ -860,8 +1086,8 @@ Functions</h2></td></tr>
<p>Use <a class="el" href="group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f" title="Frees a previously allocated FiniteField. ">DeleteFiniteField()</a> to free memory.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">prime</td><td>The order of finite field. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">ff</td><td>The Newly constructed finite field.</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">prime</td><td>The order of the finite field. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">ff</td><td>The newly constructed finite field.</td></tr>
</table>
</dd>
</dl>
@@ -914,7 +1140,61 @@ Functions</h2></td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">ground_field</td><td>The ground field. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">ground_element</td><td>The low-order term of the extension. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">degree</td><td>The degree of the extension. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">ff</td><td>The Newly constructed finite field.</td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">ff</td><td>The newly constructed finite field.</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a></dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f" title="Frees a previously allocated FiniteField. ">DeleteFiniteField</a> </dd></dl>
+
+</div>
+</div>
+<a class="anchor" id="gae69af62a03179718cac81b004549c598"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> NewFiniteFieldViaPolynomialExtension </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> const *&#160;</td>
+ <td class="paramname"><em>ground_field</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="struct_big_num_str.html">BigNumStr</a> const *&#160;</td>
+ <td class="paramname"><em>irr_polynomial</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>degree</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> **&#160;</td>
+ <td class="paramname"><em>ff</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a new finite field using polynomial extension. </p>
+<p>Allocates memory and creates a finite field using polynomial extension.</p>
+<p>Use <a class="el" href="group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f" title="Frees a previously allocated FiniteField. ">DeleteFiniteField()</a> to free memory.</p>
+<dl class="section note"><dt>Note</dt><dd>Only needed for Intel(R) EPID 1.1 verification.</dd></dl>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramdir">[in]</td><td class="paramname">ground_field</td><td>The ground field. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">irr_polynomial</td><td>Array with coefficients of the irreducible polynomial. Number of elements must be equal to the degree of the extension. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">degree</td><td>The degree of the extension. </td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">ff</td><td>The newly constructed finite field.</td></tr>
</table>
</dd>
</dl>
@@ -962,10 +1242,10 @@ Functions</h2></td></tr>
<p>Deserializes a FfElement from a string. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">ff</td><td>The the finite field. </td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">ff</td><td>The finite field. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">ff_elem_str</td><td>The serialized value. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">strlen</td><td>The size of ff_elem_str in bytes. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">ff_elem</td><td>the target FfElement.</td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">ff_elem</td><td>The target FfElement.</td></tr>
</table>
</dd>
</dl>
diff --git a/doc/html/group___finite_field_primitives.js b/doc/html/group___finite_field_primitives.js
index 462a90c..5d2ad45 100644
--- a/doc/html/group___finite_field_primitives.js
+++ b/doc/html/group___finite_field_primitives.js
@@ -13,11 +13,16 @@ var group___finite_field_primitives =
[ "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/doc/html/group___hash_primitives.html b/doc/html/group___hash_primitives.html
index 3125c01..4a31fcb 100644
--- a/doc/html/group___hash_primitives.html
+++ b/doc/html/group___hash_primitives.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/group___pairing_primitives.html b/doc/html/group___pairing_primitives.html
index 6b31f61..0ca3e2a 100644
--- a/doc/html/group___pairing_primitives.html
+++ b/doc/html/group___pairing_primitives.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -58,6 +58,7 @@ $(document).ready(function(){initNavTree('group___pairing_primitives.html','');}
<div id="doc-content">
<div class="header">
<div class="summary">
+<a href="#groups">Modules</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
@@ -68,6 +69,12 @@ $(document).ready(function(){initNavTree('group___pairing_primitives.html','');}
<p>Pairing operations.
<a href="#details">More...</a></p>
<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="groups"></a>
+Modules</h2></td></tr>
+<tr class="memitem:group___epid11_pairing_primitives"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_pairing_primitives.html">EPID 1.1 specific pairing</a></td></tr>
+<tr class="memdesc:group___epid11_pairing_primitives"><td class="mdescLeft">&#160;</td><td class="mdescRight">EPID 1.1 pairing operations. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga3f1fa61d25487f96dfb0ffef4ad35607"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3f1fa61d25487f96dfb0ffef4ad35607"></a>
@@ -78,7 +85,7 @@ typedef struct <a class="el" href="group___pairing_primitives.html#ga3f1fa61d254
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga29f79a645871830754d396b9b4a2a0cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc">NewPairingState</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> const *ga, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> const *gb, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const *t, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> neg, <a class="el" href="group___pairing_primitives.html#ga3f1fa61d25487f96dfb0ffef4ad35607">PairingState</a> **ps)</td></tr>
-<tr class="memdesc:ga29f79a645871830754d396b9b4a2a0cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a new Pairing State. <a href="#ga29f79a645871830754d396b9b4a2a0cc">More...</a><br /></td></tr>
+<tr class="memdesc:ga29f79a645871830754d396b9b4a2a0cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a new pairing state. <a href="#ga29f79a645871830754d396b9b4a2a0cc">More...</a><br /></td></tr>
<tr class="separator:ga29f79a645871830754d396b9b4a2a0cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad54aebdc331d39b73000fdca9e04f94d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d">DeletePairingState</a> (<a class="el" href="group___pairing_primitives.html#ga3f1fa61d25487f96dfb0ffef4ad35607">PairingState</a> **ps)</td></tr>
<tr class="memdesc:gad54aebdc331d39b73000fdca9e04f94d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees a previously allocated by PairingState. <a href="#gad54aebdc331d39b73000fdca9e04f94d">More...</a><br /></td></tr>
@@ -89,7 +96,7 @@ Functions</h2></td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>Pairing operations. </p>
-<p>Provides APIs for defining and using a pairing relationship between two Elliptic Curve Groups. </p>
+<p>Provides APIs for defining and using a pairing relationship between two elliptic curve groups. </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gad54aebdc331d39b73000fdca9e04f94d"></a>
<div class="memitem">
@@ -109,11 +116,11 @@ Functions</h2></td></tr>
<p>Frees memory pointed to by pairing state. Nulls the pointer.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">ps</td><td>The Pairing state. Can be NULL.</td></tr>
+ <tr><td class="paramdir">[in]</td><td class="paramname">ps</td><td>The pairing state. Can be NULL.</td></tr>
</table>
</dd>
</dl>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc" title="Constructs a new Pairing State. ">NewPairingState</a> </dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc" title="Constructs a new pairing state. ">NewPairingState</a> </dd></dl>
</div>
</div>
@@ -165,8 +172,8 @@ Functions</h2></td></tr>
</table>
</div><div class="memdoc">
-<p>Constructs a new Pairing State. </p>
-<p>Allocates memory and creates a new Pairing State for Optimal Ate Pairing.</p>
+<p>Constructs a new pairing state. </p>
+<p>Allocates memory and creates a new pairing state for Optimal Ate Pairing.</p>
<p>Use <a class="el" href="group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d" title="Frees a previously allocated by PairingState. ">DeletePairingState()</a> to free memory.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
@@ -175,7 +182,7 @@ Functions</h2></td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">ff</td><td>The result finite field. Must be a Fq12 field. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">t</td><td>A positive integer such that 6(t^2) == q - p, where p and q are parameters of G1. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">neg</td><td>Select the alternate "negate" processing path for Optimal Ate Pairing. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">ps</td><td>Newly constructed Pairing State.</td></tr>
+ <tr><td class="paramdir">[out]</td><td class="paramname">ps</td><td>Newly constructed pairing state.</td></tr>
</table>
</dd>
</dl>
diff --git a/doc/html/group___pairing_primitives.js b/doc/html/group___pairing_primitives.js
index 4f76120..a594ea7 100644
--- a/doc/html/group___pairing_primitives.js
+++ b/doc/html/group___pairing_primitives.js
@@ -1,5 +1,6 @@
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 ],
diff --git a/doc/html/grouppubkey_8c.html b/doc/html/grouppubkey_8c.html
deleted file mode 100644
index 009cf42..0000000
--- a/doc/html/grouppubkey_8c.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/grouppubkey.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('grouppubkey_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">grouppubkey.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Group public key implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="grouppubkey_8h.html">epid/common/grouppubkey.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga20a575d3d538b0bac654fd57f20e2b30"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga20a575d3d538b0bac654fd57f20e2b30">CreateGroupPubKey</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key_str, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *G1, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *G2, <a class="el" href="struct_group_pub_key__.html">GroupPubKey_</a> **pub_key)</td></tr>
-<tr class="memdesc:ga20a575d3d538b0bac654fd57f20e2b30"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs internal representation of <a class="el" href="struct_group_pub_key.html" title="Intel(R) EPID 2.0 group public key. ">GroupPubKey</a>. <a href="group___epid_common.html#ga20a575d3d538b0bac654fd57f20e2b30">More...</a><br /></td></tr>
-<tr class="separator:ga20a575d3d538b0bac654fd57f20e2b30"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga07c9b47d326ee784aecb78195adffb8b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga07c9b47d326ee784aecb78195adffb8b">DeleteGroupPubKey</a> (<a class="el" href="struct_group_pub_key__.html">GroupPubKey_</a> **pub_key)</td></tr>
-<tr class="memdesc:ga07c9b47d326ee784aecb78195adffb8b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deallocates storage for internal representation of <a class="el" href="struct_group_pub_key.html" title="Intel(R) EPID 2.0 group public key. ">GroupPubKey</a>. <a href="group___epid_common.html#ga07c9b47d326ee784aecb78195adffb8b">More...</a><br /></td></tr>
-<tr class="separator:ga07c9b47d326ee784aecb78195adffb8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Group public key implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="grouppubkey_8c.html">grouppubkey.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/grouppubkey_8h.html b/doc/html/grouppubkey_8h.html
deleted file mode 100644
index a179e82..0000000
--- a/doc/html/grouppubkey_8h.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/grouppubkey.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('grouppubkey_8h.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">grouppubkey.h File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Group public key interface.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="errors_8h.html">epid/common/errors.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="ecgroup_8h.html">epid/common/math/ecgroup.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="types_8h.html">epid/common/types.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_group_pub_key__.html">GroupPubKey_</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal representation of <a class="el" href="struct_group_pub_key.html" title="Intel(R) EPID 2.0 group public key. ">GroupPubKey</a>. <a href="struct_group_pub_key__.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga20a575d3d538b0bac654fd57f20e2b30"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga20a575d3d538b0bac654fd57f20e2b30">CreateGroupPubKey</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key_str, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *G1, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *G2, <a class="el" href="struct_group_pub_key__.html">GroupPubKey_</a> **pub_key)</td></tr>
-<tr class="memdesc:ga20a575d3d538b0bac654fd57f20e2b30"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs internal representation of <a class="el" href="struct_group_pub_key.html" title="Intel(R) EPID 2.0 group public key. ">GroupPubKey</a>. <a href="group___epid_common.html#ga20a575d3d538b0bac654fd57f20e2b30">More...</a><br /></td></tr>
-<tr class="separator:ga20a575d3d538b0bac654fd57f20e2b30"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga07c9b47d326ee784aecb78195adffb8b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga07c9b47d326ee784aecb78195adffb8b">DeleteGroupPubKey</a> (<a class="el" href="struct_group_pub_key__.html">GroupPubKey_</a> **pub_key)</td></tr>
-<tr class="memdesc:ga07c9b47d326ee784aecb78195adffb8b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deallocates storage for internal representation of <a class="el" href="struct_group_pub_key.html" title="Intel(R) EPID 2.0 group public key. ">GroupPubKey</a>. <a href="group___epid_common.html#ga07c9b47d326ee784aecb78195adffb8b">More...</a><br /></td></tr>
-<tr class="separator:ga07c9b47d326ee784aecb78195adffb8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Group public key interface. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="grouppubkey_8h.html">grouppubkey.h</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/hash_8h.html b/doc/html/hash_8h.html
index fb3b6f6..1e6252a 100644
--- a/doc/html/hash_8h.html
+++ b/doc/html/hash_8h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/implementation__notes_8dox.html b/doc/html/implementation__notes_8dox.html
index be407ab..a07d4bc 100644
--- a/doc/html/implementation__notes_8dox.html
+++ b/doc/html/implementation__notes_8dox.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/index.html b/doc/html/index.html
index 3a81885..7b34b80 100644
--- a/doc/html/index.html
+++ b/doc/html/index.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/issuer__material_8dox.html b/doc/html/issuer__material_8dox.html
index b8c9918..5a3a47e 100644
--- a/doc/html/issuer__material_8dox.html
+++ b/doc/html/issuer__material_8dox.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/legal__information_8dox.html b/doc/html/legal__information_8dox.html
index fbeb230..4f06dfe 100644
--- a/doc/html/legal__information_8dox.html
+++ b/doc/html/legal__information_8dox.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/mainpage_8dox.html b/doc/html/mainpage_8dox.html
index 3bd47aa..7166462 100644
--- a/doc/html/mainpage_8dox.html
+++ b/doc/html/mainpage_8dox.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/member_2api_8h.html b/doc/html/member_2api_8h.html
index 526a5ca..1c1518c 100644
--- a/doc/html/member_2api_8h.html
+++ b/doc/html/member_2api_8h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -59,6 +59,7 @@ $(document).ready(function(){initNavTree('member_2api_8h.html','');});
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">api.h File Reference</div> </div>
@@ -82,45 +83,52 @@ Data Structures</h2></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pre-computed signature. <a href="struct_pre_computed_signature.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gadfb10d5dfdadb0694792c7b06718e817"><td class="memItemLeft" align="right" valign="top">
+typedef struct <a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a></td></tr>
+<tr class="memdesc:gadfb10d5dfdadb0694792c7b06718e817"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal context of member. <br /></td></tr>
+<tr class="separator:gadfb10d5dfdadb0694792c7b06718e817"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
-<tr class="memitem:ga561c4d544a78ee1bf59c3f4f919aa7bb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb">EpidMemberCreate</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_priv_key.html">PrivKey</a> const *priv_key, <a class="el" href="struct_member_precomp.html">MemberPrecomp</a> const *precomp, <a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a> rnd_func, void *rnd_param, <a class="el" href="struct_member_ctx.html">MemberCtx</a> **ctx)</td></tr>
+<tr class="memitem:ga561c4d544a78ee1bf59c3f4f919aa7bb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb">EpidMemberCreate</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_priv_key.html">PrivKey</a> const *priv_key, <a class="el" href="struct_member_precomp.html">MemberPrecomp</a> const *precomp, <a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a> rnd_func, void *rnd_param, <a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> **ctx)</td></tr>
<tr class="memdesc:ga561c4d544a78ee1bf59c3f4f919aa7bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new member context. <a href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb">More...</a><br /></td></tr>
<tr class="separator:ga561c4d544a78ee1bf59c3f4f919aa7bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga3824589c683c5e0e59d483462fce65d6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">EpidMemberDelete</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> **ctx)</td></tr>
+<tr class="memitem:ga3824589c683c5e0e59d483462fce65d6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">EpidMemberDelete</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> **ctx)</td></tr>
<tr class="memdesc:ga3824589c683c5e0e59d483462fce65d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deletes an existing member context. <a href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">More...</a><br /></td></tr>
<tr class="separator:ga3824589c683c5e0e59d483462fce65d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga5c35798d62cf81c4ca62b22c38809721"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">EpidMemberWritePrecomp</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx, <a class="el" href="struct_member_precomp.html">MemberPrecomp</a> *precomp)</td></tr>
+<tr class="memitem:ga5c35798d62cf81c4ca62b22c38809721"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">EpidMemberWritePrecomp</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *ctx, <a class="el" href="struct_member_precomp.html">MemberPrecomp</a> *precomp)</td></tr>
<tr class="memdesc:ga5c35798d62cf81c4ca62b22c38809721"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes the pre-computed member settings. <a href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">More...</a><br /></td></tr>
<tr class="separator:ga5c35798d62cf81c4ca62b22c38809721"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga9998eb454838ff5d232ff22ecbab31bf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf">EpidMemberSetHashAlg</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> *ctx, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg)</td></tr>
+<tr class="memitem:ga9998eb454838ff5d232ff22ecbab31bf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf">EpidMemberSetHashAlg</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> *ctx, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg)</td></tr>
<tr class="memdesc:ga9998eb454838ff5d232ff22ecbab31bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the hash algorithm to be used by a member. <a href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf">More...</a><br /></td></tr>
<tr class="separator:ga9998eb454838ff5d232ff22ecbab31bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga76e535722467af7c16809b5b521e0000"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000">EpidGetSigSize</a> (<a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl)</td></tr>
-<tr class="memdesc:ga76e535722467af7c16809b5b521e0000"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the size in bytes required for a Intel(R) EPID signature. <a href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000">More...</a><br /></td></tr>
+<tr class="memdesc:ga76e535722467af7c16809b5b521e0000"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes the size in bytes required for an Intel(R) EPID signature. <a href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000">More...</a><br /></td></tr>
<tr class="separator:ga76e535722467af7c16809b5b521e0000"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga759155a719254f734157722716dac640"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640">EpidSign</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, void const *basename, size_t basename_len, <a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl, size_t sig_rl_size, <a class="el" href="struct_epid_signature.html">EpidSignature</a> *sig, size_t sig_len)</td></tr>
-<tr class="memdesc:ga759155a719254f734157722716dac640"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes a Intel(R) EPID signature. <a href="group___epid_member_module.html#ga759155a719254f734157722716dac640">More...</a><br /></td></tr>
+<tr class="memitem:ga759155a719254f734157722716dac640"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640">EpidSign</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, void const *basename, size_t basename_len, <a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl, size_t sig_rl_size, <a class="el" href="struct_epid_signature.html">EpidSignature</a> *sig, size_t sig_len)</td></tr>
+<tr class="memdesc:ga759155a719254f734157722716dac640"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes an Intel(R) EPID signature. <a href="group___epid_member_module.html#ga759155a719254f734157722716dac640">More...</a><br /></td></tr>
<tr class="separator:ga759155a719254f734157722716dac640"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gad92d3c3266ae1833ffb1dba9ad76035d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d">EpidRegisterBaseName</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> *ctx, void const *basename, size_t basename_len)</td></tr>
+<tr class="memitem:gad92d3c3266ae1833ffb1dba9ad76035d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d">EpidRegisterBaseName</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> *ctx, void const *basename, size_t basename_len)</td></tr>
<tr class="memdesc:gad92d3c3266ae1833ffb1dba9ad76035d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Registers a basename with a member. <a href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d">More...</a><br /></td></tr>
<tr class="separator:gad92d3c3266ae1833ffb1dba9ad76035d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gad2e3de5c6ce641a318f8a46b61e75236"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236">EpidAddPreSigs</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> *ctx, size_t number_presigs, <a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a> *presigs)</td></tr>
+<tr class="memitem:gad2e3de5c6ce641a318f8a46b61e75236"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236">EpidAddPreSigs</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> *ctx, size_t number_presigs, <a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a> *presigs)</td></tr>
<tr class="memdesc:gad2e3de5c6ce641a318f8a46b61e75236"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extends the member's pool of pre-computed signatures. <a href="group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236">More...</a><br /></td></tr>
<tr class="separator:gad2e3de5c6ce641a318f8a46b61e75236"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gad78ca056dfea2565bbacd5734d9dc075"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075">EpidGetNumPreSigs</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx)</td></tr>
+<tr class="memitem:gad78ca056dfea2565bbacd5734d9dc075"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075">EpidGetNumPreSigs</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *ctx)</td></tr>
<tr class="memdesc:gad78ca056dfea2565bbacd5734d9dc075"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the number of pre-computed signatures in the member's pool. <a href="group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075">More...</a><br /></td></tr>
<tr class="separator:gad78ca056dfea2565bbacd5734d9dc075"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga9e12c7cec8d0c4e07b12c0e26a278c9d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d">EpidWritePreSigs</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> *ctx, <a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a> *presigs, size_t number_presigs)</td></tr>
+<tr class="memitem:ga9e12c7cec8d0c4e07b12c0e26a278c9d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d">EpidWritePreSigs</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> *ctx, <a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a> *presigs, size_t number_presigs)</td></tr>
<tr class="memdesc:ga9e12c7cec8d0c4e07b12c0e26a278c9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes pre-computed signatures from the member's pool. <a href="group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d">More...</a><br /></td></tr>
<tr class="separator:ga9e12c7cec8d0c4e07b12c0e26a278c9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga13dd0d72be9babf8194d472d7712a361"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga13dd0d72be9babf8194d472d7712a361">EpidRequestJoin</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="group___epid_types.html#ga55eb2193045bde31af3f551565126042">IssuerNonce</a> const *ni, <a class="el" href="struct_fp_elem_str.html">FpElemStr</a> const *f, <a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a> rnd_func, void *rnd_param, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg, <a class="el" href="struct_join_request.html">JoinRequest</a> *join_request)</td></tr>
<tr class="memdesc:ga13dd0d72be9babf8194d472d7712a361"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a request to join a group. <a href="group___epid_member_module.html#ga13dd0d72be9babf8194d472d7712a361">More...</a><br /></td></tr>
<tr class="separator:ga13dd0d72be9babf8194d472d7712a361"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gae04a250d5981fcf9bd6f9f57e0468faa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa">EpidSignBasic</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, void const *basename, size_t basename_len, <a class="el" href="struct_basic_signature.html">BasicSignature</a> *sig)</td></tr>
+<tr class="memitem:gae04a250d5981fcf9bd6f9f57e0468faa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa">EpidSignBasic</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, void const *basename, size_t basename_len, <a class="el" href="struct_basic_signature.html">BasicSignature</a> *sig)</td></tr>
<tr class="memdesc:gae04a250d5981fcf9bd6f9f57e0468faa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a basic signature for use in constrained environment. <a href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa">More...</a><br /></td></tr>
<tr class="separator:gae04a250d5981fcf9bd6f9f57e0468faa"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gac8e2c6c1fead8030785a40427905a2cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc">EpidNrProve</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, <a class="el" href="struct_sig_rl_entry.html">SigRlEntry</a> const *sigrl_entry, <a class="el" href="struct_nr_proof.html">NrProof</a> *proof)</td></tr>
+<tr class="memitem:gac8e2c6c1fead8030785a40427905a2cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc">EpidNrProve</a> (<a class="el" href="group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, <a class="el" href="struct_sig_rl_entry.html">SigRlEntry</a> const *sigrl_entry, <a class="el" href="struct_nr_proof.html">NrProof</a> *proof)</td></tr>
<tr class="memdesc:gac8e2c6c1fead8030785a40427905a2cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates a non-revoked proof for a single signature based revocation list entry. <a href="group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc">More...</a><br /></td></tr>
<tr class="separator:gac8e2c6c1fead8030785a40427905a2cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8e3f201d1e9dc668659e08a3bdf543b6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga8e3f201d1e9dc668659e08a3bdf543b6">EpidIsPrivKeyInGroup</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_priv_key.html">PrivKey</a> const *priv_key)</td></tr>
diff --git a/doc/html/member_2context_8c.html b/doc/html/member_2context_8c.html
deleted file mode 100644
index 459e8ac..0000000
--- a/doc/html/member_2context_8c.html
+++ /dev/null
@@ -1,129 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/member/context.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('member_2context_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">context.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Member context implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;string.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="member_2api_8h.html">epid/member/api.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="member_2context_8h.html">epid/member/context.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="privkey_8h.html">epid/member/privkey.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga561c4d544a78ee1bf59c3f4f919aa7bb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb">EpidMemberCreate</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_priv_key.html">PrivKey</a> const *priv_key, <a class="el" href="struct_member_precomp.html">MemberPrecomp</a> const *precomp, <a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a> rnd_func, void *rnd_param, <a class="el" href="struct_member_ctx.html">MemberCtx</a> **ctx)</td></tr>
-<tr class="memdesc:ga561c4d544a78ee1bf59c3f4f919aa7bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new member context. <a href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb">More...</a><br /></td></tr>
-<tr class="separator:ga561c4d544a78ee1bf59c3f4f919aa7bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga3824589c683c5e0e59d483462fce65d6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">EpidMemberDelete</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> **ctx)</td></tr>
-<tr class="memdesc:ga3824589c683c5e0e59d483462fce65d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deletes an existing member context. <a href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">More...</a><br /></td></tr>
-<tr class="separator:ga3824589c683c5e0e59d483462fce65d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga5c35798d62cf81c4ca62b22c38809721"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">EpidMemberWritePrecomp</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx, <a class="el" href="struct_member_precomp.html">MemberPrecomp</a> *precomp)</td></tr>
-<tr class="memdesc:ga5c35798d62cf81c4ca62b22c38809721"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes the pre-computed member settings. <a href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">More...</a><br /></td></tr>
-<tr class="separator:ga5c35798d62cf81c4ca62b22c38809721"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga9998eb454838ff5d232ff22ecbab31bf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf">EpidMemberSetHashAlg</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> *ctx, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg)</td></tr>
-<tr class="memdesc:ga9998eb454838ff5d232ff22ecbab31bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the hash algorithm to be used by a member. <a href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf">More...</a><br /></td></tr>
-<tr class="separator:ga9998eb454838ff5d232ff22ecbab31bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gad92d3c3266ae1833ffb1dba9ad76035d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d">EpidRegisterBaseName</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> *ctx, void const *basename, size_t basename_len)</td></tr>
-<tr class="memdesc:gad92d3c3266ae1833ffb1dba9ad76035d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Registers a basename with a member. <a href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d">More...</a><br /></td></tr>
-<tr class="separator:gad92d3c3266ae1833ffb1dba9ad76035d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5f956a682bdde4ea1459e01beae0e9f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f956a682bdde4ea1459e01beae0e9f0"></a>
-void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="member_2context_8c.html#a5f956a682bdde4ea1459e01beae0e9f0">DeleteBasenames</a> (<a class="el" href="struct_allowed_basename.html">AllowedBasename</a> **rootnode)</td></tr>
-<tr class="memdesc:a5f956a682bdde4ea1459e01beae0e9f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete base name list. <br /></td></tr>
-<tr class="separator:a5f956a682bdde4ea1459e01beae0e9f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9ef563fb256bbdd0a08358fbfa0bde10"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ef563fb256bbdd0a08358fbfa0bde10"></a>
-<a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="member_2context_8c.html#a9ef563fb256bbdd0a08358fbfa0bde10">AddBasename</a> (<a class="el" href="struct_allowed_basename.html">AllowedBasename</a> **rootnode, void const *basename, size_t length)</td></tr>
-<tr class="memdesc:a9ef563fb256bbdd0a08358fbfa0bde10"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add new base name to list. <br /></td></tr>
-<tr class="separator:a9ef563fb256bbdd0a08358fbfa0bde10"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a15f1294cb5004433360eb6d1ab0b3322"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15f1294cb5004433360eb6d1ab0b3322"></a>
-<a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="member_2context_8c.html#a15f1294cb5004433360eb6d1ab0b3322">ContainsBasename</a> (<a class="el" href="struct_allowed_basename.html">AllowedBasename</a> const *rootnode, void const *basename, size_t length)</td></tr>
-<tr class="memdesc:a15f1294cb5004433360eb6d1ab0b3322"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if given base name exist in the list. <br /></td></tr>
-<tr class="separator:a15f1294cb5004433360eb6d1ab0b3322"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gad2e3de5c6ce641a318f8a46b61e75236"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236">EpidAddPreSigs</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> *ctx, size_t number_presigs, <a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a> *presigs)</td></tr>
-<tr class="memdesc:gad2e3de5c6ce641a318f8a46b61e75236"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extends the member's pool of pre-computed signatures. <a href="group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236">More...</a><br /></td></tr>
-<tr class="separator:gad2e3de5c6ce641a318f8a46b61e75236"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gad78ca056dfea2565bbacd5734d9dc075"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075">EpidGetNumPreSigs</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx)</td></tr>
-<tr class="memdesc:gad78ca056dfea2565bbacd5734d9dc075"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the number of pre-computed signatures in the member's pool. <a href="group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075">More...</a><br /></td></tr>
-<tr class="separator:gad78ca056dfea2565bbacd5734d9dc075"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga9e12c7cec8d0c4e07b12c0e26a278c9d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d">EpidWritePreSigs</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> *ctx, <a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a> *presigs, size_t number_presigs)</td></tr>
-<tr class="memdesc:ga9e12c7cec8d0c4e07b12c0e26a278c9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes pre-computed signatures from the member's pool. <a href="group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d">More...</a><br /></td></tr>
-<tr class="separator:ga9e12c7cec8d0c4e07b12c0e26a278c9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Member context implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_512d3e62841a8535b716ec4cf8b9e950.html">member</a></li><li class="navelem"><a class="el" href="member_2context_8c.html">context.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/member_2context_8h.html b/doc/html/member_2context_8h.html
deleted file mode 100644
index 1c70de2..0000000
--- a/doc/html/member_2context_8h.html
+++ /dev/null
@@ -1,159 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/member/context.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('member_2context_8h.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">context.h File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Member context interface.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;stddef.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="member_2api_8h.html">epid/member/api.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="errors_8h.html">epid/common/errors.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="epid2params_8h.html">epid/common/epid2params.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="grouppubkey_8h.html">epid/common/grouppubkey.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="stack_8h.html">epid/common/stack.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="commitment_8h.html">epid/common/commitment.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="privkey_8h.html">epid/member/privkey.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_allowed_basename.html">AllowedBasename</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal implementation of base name. <a href="struct_allowed_basename.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_member_ctx.html">MemberCtx</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Member context definition. <a href="struct_member_ctx.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a5f956a682bdde4ea1459e01beae0e9f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f956a682bdde4ea1459e01beae0e9f0"></a>
-void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="member_2context_8h.html#a5f956a682bdde4ea1459e01beae0e9f0">DeleteBasenames</a> (<a class="el" href="struct_allowed_basename.html">AllowedBasename</a> **rootnode)</td></tr>
-<tr class="memdesc:a5f956a682bdde4ea1459e01beae0e9f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Delete base name list. <br /></td></tr>
-<tr class="separator:a5f956a682bdde4ea1459e01beae0e9f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9ef563fb256bbdd0a08358fbfa0bde10"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ef563fb256bbdd0a08358fbfa0bde10"></a>
-<a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="member_2context_8h.html#a9ef563fb256bbdd0a08358fbfa0bde10">AddBasename</a> (<a class="el" href="struct_allowed_basename.html">AllowedBasename</a> **rootnode, void const *basename, size_t length)</td></tr>
-<tr class="memdesc:a9ef563fb256bbdd0a08358fbfa0bde10"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add new base name to list. <br /></td></tr>
-<tr class="separator:a9ef563fb256bbdd0a08358fbfa0bde10"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a15f1294cb5004433360eb6d1ab0b3322"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15f1294cb5004433360eb6d1ab0b3322"></a>
-<a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="member_2context_8h.html#a15f1294cb5004433360eb6d1ab0b3322">ContainsBasename</a> (<a class="el" href="struct_allowed_basename.html">AllowedBasename</a> const *rootnode, void const *basename, size_t length)</td></tr>
-<tr class="memdesc:a15f1294cb5004433360eb6d1ab0b3322"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if given base name exist in the list. <br /></td></tr>
-<tr class="separator:a15f1294cb5004433360eb6d1ab0b3322"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0423e8400abd2171062e4c42b90b8145"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="member_2context_8h.html#a0423e8400abd2171062e4c42b90b8145">EpidComputePreSig</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx, <a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a> *precompsig)</td></tr>
-<tr class="memdesc:a0423e8400abd2171062e4c42b90b8145"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs Pre-computation that can be used to speed up signing. <a href="#a0423e8400abd2171062e4c42b90b8145">More...</a><br /></td></tr>
-<tr class="separator:a0423e8400abd2171062e4c42b90b8145"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Member context interface. </p>
-</div><h2 class="groupheader">Function Documentation</h2>
-<a class="anchor" id="a0423e8400abd2171062e4c42b90b8145"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidComputePreSig </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_member_ctx.html">MemberCtx</a> const *&#160;</td>
- <td class="paramname"><em>ctx</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a> *&#160;</td>
- <td class="paramname"><em>precompsig</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Performs Pre-computation that can be used to speed up signing. </p>
-<dl class="section warning"><dt>Warning</dt><dd>Do not re-use the same pre-computed signature to generate more than one signature. If a pre-computed signature is used for computing two signatures, an attacker could learn the Intel(R) EPID private key.</dd></dl>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">ctx</td><td>The member context. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">precompsig</td><td>The pre-computed signature.</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a> </dd></dl>
-
-</div>
-</div>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_512d3e62841a8535b716ec4cf8b9e950.html">member</a></li><li class="navelem"><a class="el" href="member_2context_8h.html">context.h</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/memory_8c.html b/doc/html/memory_8c.html
deleted file mode 100644
index 03d3673..0000000
--- a/doc/html/memory_8c.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/memory.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('memory_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">memory.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Memory access implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &lt;string.h&gt;</code><br />
-<code>#include &lt;stdint.h&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:ad810bebef54644d4ea2fb181581aa0f9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad810bebef54644d4ea2fb181581aa0f9"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#ad810bebef54644d4ea2fb181581aa0f9">RSIZE_MAX</a>&#160;&#160;&#160;((SIZE_MAX) &gt;&gt; 1)</td></tr>
-<tr class="memdesc:ad810bebef54644d4ea2fb181581aa0f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Maximum size of the destination buffer. <br /></td></tr>
-<tr class="separator:ad810bebef54644d4ea2fb181581aa0f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3acffbd305ee72dcd4593c0d8af64a4f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3acffbd305ee72dcd4593c0d8af64a4f"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="memory_8c.html#a3acffbd305ee72dcd4593c0d8af64a4f">MIN</a>(a, b)&#160;&#160;&#160;((a) &lt; (b) ? (a) : (b))</td></tr>
-<tr class="memdesc:a3acffbd305ee72dcd4593c0d8af64a4f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Evaluate to minimum of two values. <br /></td></tr>
-<tr class="separator:a3acffbd305ee72dcd4593c0d8af64a4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga4856121ac4bce4161a015a8a2b4f5b1c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga4856121ac4bce4161a015a8a2b4f5b1c">memcpy_S</a> (void *dest, size_t destsz, void const *src, size_t count)</td></tr>
-<tr class="memdesc:ga4856121ac4bce4161a015a8a2b4f5b1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies count of character from dest to src. <a href="group___epid_common.html#ga4856121ac4bce4161a015a8a2b4f5b1c">More...</a><br /></td></tr>
-<tr class="separator:ga4856121ac4bce4161a015a8a2b4f5b1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gad471f600f6032f432b99432fda97a070"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gad471f600f6032f432b99432fda97a070">EpidZeroMemory</a> (void *ptr, size_t size)</td></tr>
-<tr class="memdesc:gad471f600f6032f432b99432fda97a070"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clear information stored in block of memory pointer to by ptr. <a href="group___epid_common.html#gad471f600f6032f432b99432fda97a070">More...</a><br /></td></tr>
-<tr class="separator:gad471f600f6032f432b99432fda97a070"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gada170fd890504b013139f4a33033ae4b"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gada170fd890504b013139f4a33033ae4b">EpidAlloc</a> (size_t size)</td></tr>
-<tr class="memdesc:gada170fd890504b013139f4a33033ae4b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates memory of size bytes. <a href="group___epid_common.html#gada170fd890504b013139f4a33033ae4b">More...</a><br /></td></tr>
-<tr class="separator:gada170fd890504b013139f4a33033ae4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga6911838728d546e4a51d7bcb8404525c"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga6911838728d546e4a51d7bcb8404525c">EpidRealloc</a> (void *ptr, size_t new_size)</td></tr>
-<tr class="memdesc:ga6911838728d546e4a51d7bcb8404525c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reallocates memory allocated by EpidAlloc. <a href="group___epid_common.html#ga6911838728d546e4a51d7bcb8404525c">More...</a><br /></td></tr>
-<tr class="separator:ga6911838728d546e4a51d7bcb8404525c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gaeae76709e6bfc80c9d79ec4943ccc1ac"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gaeae76709e6bfc80c9d79ec4943ccc1ac">EpidFree</a> (void *ptr)</td></tr>
-<tr class="memdesc:gaeae76709e6bfc80c9d79ec4943ccc1ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees memory allocated by EpidAlloc. <a href="group___epid_common.html#gaeae76709e6bfc80c9d79ec4943ccc1ac">More...</a><br /></td></tr>
-<tr class="separator:gaeae76709e6bfc80c9d79ec4943ccc1ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Memory access implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="memory_8c.html">memory.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/memory_8h.html b/doc/html/memory_8h.html
deleted file mode 100644
index 067e303..0000000
--- a/doc/html/memory_8h.html
+++ /dev/null
@@ -1,124 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/memory.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('memory_8h.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">memory.h File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Memory access interface.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;stdlib.h&gt;</code><br />
-<code>#include &lt;string.h&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:gab1587898f15de1b51cd5e799a43465ff"><td class="memItemLeft" align="right" valign="top">
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gab1587898f15de1b51cd5e799a43465ff">EPID_ENABLE_EPID_ZERO_MEMORY_ON_FREE</a></td></tr>
-<tr class="memdesc:gab1587898f15de1b51cd5e799a43465ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">When enabled secrets are wiped out from the memory by EpidFree. <br /></td></tr>
-<tr class="separator:gab1587898f15de1b51cd5e799a43465ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga38fad13430eba25f9f9b05e35ecd22f8"><td class="memItemLeft" align="right" valign="top">
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga38fad13430eba25f9f9b05e35ecd22f8">SAFE_ALLOC</a>(size)&#160;&#160;&#160;<a class="el" href="group___epid_common.html#gada170fd890504b013139f4a33033ae4b">EpidAlloc</a>(size);</td></tr>
-<tr class="memdesc:ga38fad13430eba25f9f9b05e35ecd22f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates zero initalized block of memory. <br /></td></tr>
-<tr class="separator:ga38fad13430eba25f9f9b05e35ecd22f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga2ca3c202ee727774d55890e568621842"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga2ca3c202ee727774d55890e568621842">SAFE_FREE</a>(ptr) </td></tr>
-<tr class="memdesc:ga2ca3c202ee727774d55890e568621842"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deallocates space allocated by <a class="el" href="group___epid_common.html#ga38fad13430eba25f9f9b05e35ecd22f8" title="Allocates zero initalized block of memory. ">SAFE_ALLOC()</a> and nulls pointer. <a href="group___epid_common.html#ga2ca3c202ee727774d55890e568621842">More...</a><br /></td></tr>
-<tr class="separator:ga2ca3c202ee727774d55890e568621842"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga41c113e15b695291199c27fac4bd53fa"><td class="memItemLeft" align="right" valign="top">
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga41c113e15b695291199c27fac4bd53fa">SAFE_REALLOC</a>(ptr, size)&#160;&#160;&#160;<a class="el" href="group___epid_common.html#ga6911838728d546e4a51d7bcb8404525c">EpidRealloc</a>((ptr), (size))</td></tr>
-<tr class="memdesc:ga41c113e15b695291199c27fac4bd53fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Changes the size of the memory block pointed to by ptr. <br /></td></tr>
-<tr class="separator:ga41c113e15b695291199c27fac4bd53fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:gad471f600f6032f432b99432fda97a070"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gad471f600f6032f432b99432fda97a070">EpidZeroMemory</a> (void *ptr, size_t size)</td></tr>
-<tr class="memdesc:gad471f600f6032f432b99432fda97a070"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clear information stored in block of memory pointer to by ptr. <a href="group___epid_common.html#gad471f600f6032f432b99432fda97a070">More...</a><br /></td></tr>
-<tr class="separator:gad471f600f6032f432b99432fda97a070"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gada170fd890504b013139f4a33033ae4b"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gada170fd890504b013139f4a33033ae4b">EpidAlloc</a> (size_t size)</td></tr>
-<tr class="memdesc:gada170fd890504b013139f4a33033ae4b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates memory of size bytes. <a href="group___epid_common.html#gada170fd890504b013139f4a33033ae4b">More...</a><br /></td></tr>
-<tr class="separator:gada170fd890504b013139f4a33033ae4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga6911838728d546e4a51d7bcb8404525c"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga6911838728d546e4a51d7bcb8404525c">EpidRealloc</a> (void *ptr, size_t new_size)</td></tr>
-<tr class="memdesc:ga6911838728d546e4a51d7bcb8404525c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reallocates memory allocated by EpidAlloc. <a href="group___epid_common.html#ga6911838728d546e4a51d7bcb8404525c">More...</a><br /></td></tr>
-<tr class="separator:ga6911838728d546e4a51d7bcb8404525c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gaeae76709e6bfc80c9d79ec4943ccc1ac"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gaeae76709e6bfc80c9d79ec4943ccc1ac">EpidFree</a> (void *ptr)</td></tr>
-<tr class="memdesc:gaeae76709e6bfc80c9d79ec4943ccc1ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees memory allocated by EpidAlloc. <a href="group___epid_common.html#gaeae76709e6bfc80c9d79ec4943ccc1ac">More...</a><br /></td></tr>
-<tr class="separator:gaeae76709e6bfc80c9d79ec4943ccc1ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga4856121ac4bce4161a015a8a2b4f5b1c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga4856121ac4bce4161a015a8a2b4f5b1c">memcpy_S</a> (void *dest, size_t destsz, void const *src, size_t count)</td></tr>
-<tr class="memdesc:ga4856121ac4bce4161a015a8a2b4f5b1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies bytes between buffers with security ehancements. <a href="group___epid_common.html#ga4856121ac4bce4161a015a8a2b4f5b1c">More...</a><br /></td></tr>
-<tr class="separator:ga4856121ac4bce4161a015a8a2b4f5b1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Memory access interface. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="memory_8h.html">memory.h</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/modules.html b/doc/html/modules.html
index 659d7d1..83d7a36 100644
--- a/doc/html/modules.html
+++ b/doc/html/modules.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -62,7 +62,7 @@ $(document).ready(function(){initNavTree('modules.html','');});
</div><!--header-->
<div class="contents">
<div class="textblock">Here is a list of all modules:</div><div class="directory">
-<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span>]</div><table class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span><span onclick="javascript:toggleLevel(5);">5</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><a class="el" href="group___epid_module.html" target="_self">epid</a></td><td class="desc">Core Intel&reg; EPID functionality </td></tr>
<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><a class="el" href="group___epid_common.html" target="_self">common</a></td><td class="desc">Common code shared between core sub-components </td></tr>
<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_')">&#9660;</span><a class="el" href="group___epid_math.html" target="_self">math</a></td><td class="desc">Math Primitives and Group Operations </td></tr>
@@ -71,13 +71,17 @@ $(document).ready(function(){initNavTree('modules.html','');});
<tr id="row_0_0_0_2_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a class="el" href="group___ec_group_primitives.html" target="_self">ecgroup</a></td><td class="desc">Elliptic curve group operations </td></tr>
<tr id="row_0_0_0_3_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a class="el" href="group___finite_field_primitives.html" target="_self">finitefield</a></td><td class="desc">Finite field operations </td></tr>
<tr id="row_0_0_0_4_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a class="el" href="group___hash_primitives.html" target="_self">hash</a></td><td class="desc">Hash primitives </td></tr>
-<tr id="row_0_0_0_5_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a class="el" href="group___pairing_primitives.html" target="_self">pairing</a></td><td class="desc">Pairing operations </td></tr>
-<tr id="row_0_0_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group___error_codes.html" target="_self">errors</a></td><td class="desc">Error reporting interface </td></tr>
-<tr id="row_0_0_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group___file_parser.html" target="_self">fileparser</a></td><td class="desc">Parser for issuer material </td></tr>
+<tr id="row_0_0_0_5_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_0_0_0_5_" class="arrow" onclick="toggleFolder('0_0_0_5_')">&#9660;</span><a class="el" href="group___pairing_primitives.html" target="_self">pairing</a></td><td class="desc">Pairing operations </td></tr>
+<tr id="row_0_0_0_5_0_"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><a class="el" href="group___epid11_pairing_primitives.html" target="_self">EPID 1.1 specific pairing</a></td><td class="desc">EPID 1.1 pairing operations </td></tr>
+<tr id="row_0_0_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group___error_codes.html" target="_self">errors</a></td><td class="desc">Error reporting interface </td></tr>
+<tr id="row_0_0_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_2_" class="arrow" onclick="toggleFolder('0_0_2_')">&#9660;</span><a class="el" href="group___file_parser.html" target="_self">fileparser</a></td><td class="desc">Parser for issuer material </td></tr>
+<tr id="row_0_0_2_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a class="el" href="group___epid11_file_parser_module.html" target="_self">EPID 1.1 support</a></td><td class="desc">Parser for 1.1 issuer material </td></tr>
<tr id="row_0_0_3_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group___epid_print.html" target="_self">print_utils</a></td><td class="desc">Debug print routines </td></tr>
-<tr id="row_0_0_4_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group___epid_types.html" target="_self">types</a></td><td class="desc">SDK data types </td></tr>
-<tr id="row_0_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group___epid_member_module.html" target="_self">member</a></td><td class="desc">Member functionality </td></tr>
-<tr id="row_0_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group___epid_verifier_module.html" target="_self">verifier</a></td><td class="desc">Verifier functionality </td></tr>
+<tr id="row_0_0_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_4_" class="arrow" onclick="toggleFolder('0_0_4_')">&#9660;</span><a class="el" href="group___epid_types.html" target="_self">types</a></td><td class="desc">SDK data types </td></tr>
+<tr id="row_0_0_4_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a class="el" href="group___epid11_types.html" target="_self">EPID 1.1 specific types</a></td><td class="desc">Intel(R) EPID 1.1 specific data types </td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="group___epid_member_module.html" target="_self">member</a></td><td class="desc">Member functionality </td></tr>
+<tr id="row_0_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_2_" class="arrow" onclick="toggleFolder('0_2_')">&#9660;</span><a class="el" href="group___epid_verifier_module.html" target="_self">verifier</a></td><td class="desc">Verifier functionality </td></tr>
+<tr id="row_0_2_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a class="el" href="group___epid11_verifier_module.html" target="_self">EPID 1.1 support</a></td><td class="desc">Intel(R) EPID 1.1 Verifier functionality </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
diff --git a/doc/html/navtreedata.js b/doc/html/navtreedata.js
index 46721cf..7609149 100644
--- a/doc/html/navtreedata.js
+++ b/doc/html/navtreedata.js
@@ -26,9 +26,11 @@ var NAVTREE =
[ "Install Layout", "SdkOverview.html#SdkOverview_Files_InstallLayout", null ]
] ]
] ],
- [ "Building From Source", "BuildingSdk.html", [
+ [ "Building from Source", "BuildingSdk.html", [
[ "Prerequisites", "BuildingSdk.html#BuildingSdk_Prerequisites", null ],
- [ "Building", "BuildingSdk.html#BuildingSdk_Building", null ],
+ [ "Building SDK with SCons", "BuildingSdk.html#BuildingSdk_Building_SCons", null ],
+ [ "Alternate Makefile/Autoconf Based Build Approach", "BuildingSdk.html#BuildingSdk_Building_Makefile", null ],
+ [ "Improving Performance with Commercial IPP", "BuildingSdk.html#BuildingSdk_CommercialIpp", null ],
[ "Example Programs", "BuildingSdk.html#BuildingSdk_Examples", null ],
[ "Building with Other Build Systems", "BuildingSdk.html#BuildingSdk_PortingBuildSystem", null ]
] ],
@@ -45,10 +47,47 @@ var NAVTREE =
] ],
[ "Sample Issuer Material", "IssuerMaterial.html", [
[ "Sample Groups", "IssuerMaterial.html#IssuerMaterial_Groups", [
- [ "groupa", "IssuerMaterial.html#IssuerMaterial_Groups_groupa", null ],
- [ "groupb", "IssuerMaterial.html#IssuerMaterial_Groups_groupb", null ]
+ [ "Sample Group A", "IssuerMaterial.html#IssuerMaterial_Groups_groupa", null ],
+ [ "Sample Group B", "IssuerMaterial.html#IssuerMaterial_Groups_groupb", null ]
] ],
- [ "Group Based Revocation Lists", "IssuerMaterial.html#IssuerMaterial_GroupRls", null ]
+ [ "Group Based Revocation Lists", "IssuerMaterial.html#IssuerMaterial_GroupRls", null ],
+ [ "Compressed Member Private Key", "IssuerMaterial.html#IssuerMaterial_CmpGroups", [
+ [ "Compressed Sample Group A", "IssuerMaterial.html#IssuerMaterial_CmpGroups_groupa", null ],
+ [ "Compressed Sample Group B", "IssuerMaterial.html#IssuerMaterial_CmpGroups_groupb", null ]
+ ] ],
+ [ "Compressed Group Based Revocation Lists", "IssuerMaterial.html#IssuerMaterial_CmpGroupRls", null ]
+ ] ],
+ [ "If You Choose iKGF as Your Issuer", "ChoosingiKGF.html", [
+ [ "Tools for Creating Revocation Requests", "ChoosingiKGF.html#RevocationTools", [
+ [ "Requesting Group Revocation", "ChoosingiKGF.html#RevocationTools_revokegrp", null ],
+ [ "Requesting Private Key Revocation", "ChoosingiKGF.html#RevocationTools_revokekey", null ],
+ [ "Requesting Signature Revocation", "ChoosingiKGF.html#RevocationTools_revokesig", null ]
+ ] ],
+ [ "Tools for Extracting Keys from iKGF Files", "ChoosingiKGF.html#ExtractionTools", [
+ [ "Extracting Group Public Keys", "ChoosingiKGF.html#ExtractionTools_extractgrps", null ],
+ [ "Extracting Member Private Keys", "ChoosingiKGF.html#ExtractionTools_extractkeys", null ]
+ ] ]
+ ] ],
+ [ "In-Depth Explanation of Revocation", "Revocation.html", [
+ [ "Revocation Hierarchy", "Revocation.html#revocation_hierarchy", null ],
+ [ "Revocation List Versions", "Revocation.html#revocation_versions", null ],
+ [ "Group Based Revocation", "Revocation.html#group_revocation", [
+ [ "Reasons the Issuer Might Revoke a Group", "Revocation.html#group_revocation_reasons", null ]
+ ] ],
+ [ "Private Key Based Revocation", "Revocation.html#private_key_revocation", [
+ [ "Reasons the Issuer Might Revoke a Member Private Key", "Revocation.html#private_key_revocation_reasons", null ]
+ ] ],
+ [ "Signature Based Revocation", "Revocation.html#signature_revocation", [
+ [ "Signing with Non-Revoked Proofs", "Revocation.html#revoked_proofs", null ],
+ [ "Reasons the Issuer Might Revoke an Intel® EPID Signature", "Revocation.html#signature_revocation_reasons", null ]
+ ] ],
+ [ "Verifier Blacklist Revocation", "Revocation.html#verifier_blacklist", [
+ [ "Reasons the Verifier Might Revoke an Intel® EPID Signature", "Revocation.html#verifier_blacklist_reasons", null ]
+ ] ]
+ ] ],
+ [ "In-Depth Explanation of Basenames", "Basenames.html", [
+ [ "Random Base Signatures", "Basenames.html#random_base", null ],
+ [ "Name Based Signatures", "Basenames.html#name_based", null ]
] ],
[ "Implementation Notes", "ImplementationNotes.html", [
[ "Random Number Generation", "ImplementationNotes.html#ImplementationNotes_Prng", null ],
@@ -58,6 +97,7 @@ var NAVTREE =
[ "Flexible Arrays", "ImplementationNotes.html#ImplementationNotes_FlexibleArrays", null ]
] ],
[ "Glossary", "Glossary.html", [
+ [ "CA public key", "Glossary.html#Issuing_CA", null ],
[ "DAA", "Glossary.html#Glossary_Daa", null ],
[ "Elliptic curve", "Glossary.html#Glossary_EllipticCurve", null ],
[ "Elliptic curve point", "Glossary.html#Glossary_EllipticCurvePoint", null ],
@@ -76,15 +116,21 @@ var NAVTREE =
[ "Revocation, revocation lists", "Glossary.html#Glossary_Revocation", null ],
[ "Verifier", "Glossary.html#Glossary_Verifier", null ]
] ],
- [ "API Reference", "modules.html", "modules" ],
- [ "Examples", "examples.html", "examples" ]
+ [ "Guide to Installing Build Tools", "BuildToolsInstallation.html", [
+ [ "Installing Python", "BuildToolsInstallation.html#build_tools_windows_python", null ],
+ [ "Installing SCons", "BuildToolsInstallation.html#build_tools_windows_scons", null ],
+ [ "Installing Parts", "BuildToolsInstallation.html#build_tools_windows_parts", null ]
+ ] ],
+ [ "Walkthroughs of Examples Showing API Usage", "Examples.html", "Examples" ],
+ [ "API Reference", "modules.html", "modules" ]
] ]
];
var NAVTREEINDEX =
[
-"BuildingSdk.html",
-"index.html"
+"Basenames.html",
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9",
+"struct_oct_str32.html#a5588a7e70f3d73f6ce58b567a9f5c5c8"
];
var SYNCONMSG = 'click to disable panel synchronisation';
diff --git a/doc/html/navtreeindex0.js b/doc/html/navtreeindex0.js
index d21c810..cf27e56 100644
--- a/doc/html/navtreeindex0.js
+++ b/doc/html/navtreeindex0.js
@@ -1,11 +1,28 @@
var NAVTREEINDEX0 =
{
+"Basenames.html":[11],
+"Basenames.html#name_based":[11,1],
+"Basenames.html#random_base":[11,0],
+"BuildToolsInstallation.html":[14],
+"BuildToolsInstallation.html#build_tools_windows_parts":[14,2],
+"BuildToolsInstallation.html#build_tools_windows_python":[14,0],
+"BuildToolsInstallation.html#build_tools_windows_scons":[14,1],
"BuildingSdk.html":[6],
-"BuildingSdk.html#BuildingSdk_Building":[6,1],
-"BuildingSdk.html#BuildingSdk_Examples":[6,2],
-"BuildingSdk.html#BuildingSdk_PortingBuildSystem":[6,3],
+"BuildingSdk.html#BuildingSdk_Building_Makefile":[6,2],
+"BuildingSdk.html#BuildingSdk_Building_SCons":[6,1],
+"BuildingSdk.html#BuildingSdk_CommercialIpp":[6,3],
+"BuildingSdk.html#BuildingSdk_Examples":[6,4],
+"BuildingSdk.html#BuildingSdk_PortingBuildSystem":[6,5],
"BuildingSdk.html#BuildingSdk_Prerequisites":[6,0],
"ChangeLog.html":[3],
+"ChoosingiKGF.html":[9],
+"ChoosingiKGF.html#ExtractionTools":[9,1],
+"ChoosingiKGF.html#ExtractionTools_extractgrps":[9,1,0],
+"ChoosingiKGF.html#ExtractionTools_extractkeys":[9,1,1],
+"ChoosingiKGF.html#RevocationTools":[9,0],
+"ChoosingiKGF.html#RevocationTools_revokegrp":[9,0,0],
+"ChoosingiKGF.html#RevocationTools_revokekey":[9,0,1],
+"ChoosingiKGF.html#RevocationTools_revokesig":[9,0,2],
"EpidOverview.html":[4],
"EpidOverview.html#EpidOverview_Entity_interaction":[4,3],
"EpidOverview.html#EpidOverview_Group_public_key":[4,2,0],
@@ -17,36 +34,54 @@ var NAVTREEINDEX0 =
"EpidOverview.html#EpidOverview_Members":[4,0,1],
"EpidOverview.html#EpidOverview_Roles":[4,0],
"EpidOverview.html#EpidOverview_Verifiers":[4,0,2],
-"Glossary.html":[10],
-"Glossary.html#Glossary_Daa":[10,0],
-"Glossary.html#Glossary_EllipticCurve":[10,1],
-"Glossary.html#Glossary_EllipticCurvePoint":[10,2],
-"Glossary.html#Glossary_Epid":[10,6],
-"Glossary.html#Glossary_EpidSignature":[10,7],
-"Glossary.html#Glossary_Group":[10,3],
-"Glossary.html#Glossary_GroupPublicKey":[10,5],
-"Glossary.html#Glossary_Group_certificate":[10,4],
-"Glossary.html#Glossary_Issuer":[10,8],
-"Glossary.html#Glossary_IssuingPrivateKey":[10,9],
-"Glossary.html#Glossary_Member":[10,10],
-"Glossary.html#Glossary_MemberPrivateKey":[10,12],
-"Glossary.html#Glossary_NameBasedSignature":[10,11],
-"Glossary.html#Glossary_NonRevokedProof":[10,13],
-"Glossary.html#Glossary_Pairing":[10,14],
-"Glossary.html#Glossary_Revocation":[10,15],
-"Glossary.html#Glossary_Verifier":[10,16],
-"ImplementationNotes.html":[9],
-"ImplementationNotes.html#ImplementationNotes_FlexibleArrays":[9,4],
-"ImplementationNotes.html#ImplementationNotes_MathPrimitives":[9,2],
-"ImplementationNotes.html#ImplementationNotes_Prng":[9,0],
-"ImplementationNotes.html#ImplementationNotes_ProtectingSecrets":[9,1],
-"ImplementationNotes.html#ImplementationNotes_SerializedTypes":[9,3],
+"Examples.html":[15],
+"Glossary.html":[13],
+"Glossary.html#Glossary_Daa":[13,1],
+"Glossary.html#Glossary_EllipticCurve":[13,2],
+"Glossary.html#Glossary_EllipticCurvePoint":[13,3],
+"Glossary.html#Glossary_Epid":[13,7],
+"Glossary.html#Glossary_EpidSignature":[13,8],
+"Glossary.html#Glossary_Group":[13,4],
+"Glossary.html#Glossary_GroupPublicKey":[13,6],
+"Glossary.html#Glossary_Group_certificate":[13,5],
+"Glossary.html#Glossary_Issuer":[13,9],
+"Glossary.html#Glossary_IssuingPrivateKey":[13,10],
+"Glossary.html#Glossary_Member":[13,11],
+"Glossary.html#Glossary_MemberPrivateKey":[13,13],
+"Glossary.html#Glossary_NameBasedSignature":[13,12],
+"Glossary.html#Glossary_NonRevokedProof":[13,14],
+"Glossary.html#Glossary_Pairing":[13,15],
+"Glossary.html#Glossary_Revocation":[13,16],
+"Glossary.html#Glossary_Verifier":[13,17],
+"Glossary.html#Issuing_CA":[13,0],
+"ImplementationNotes.html":[12],
+"ImplementationNotes.html#ImplementationNotes_FlexibleArrays":[12,4],
+"ImplementationNotes.html#ImplementationNotes_MathPrimitives":[12,2],
+"ImplementationNotes.html#ImplementationNotes_Prng":[12,0],
+"ImplementationNotes.html#ImplementationNotes_ProtectingSecrets":[12,1],
+"ImplementationNotes.html#ImplementationNotes_SerializedTypes":[12,3],
"IssuerMaterial.html":[8],
+"IssuerMaterial.html#IssuerMaterial_CmpGroupRls":[8,3],
+"IssuerMaterial.html#IssuerMaterial_CmpGroups":[8,2],
+"IssuerMaterial.html#IssuerMaterial_CmpGroups_groupa":[8,2,0],
+"IssuerMaterial.html#IssuerMaterial_CmpGroups_groupb":[8,2,1],
"IssuerMaterial.html#IssuerMaterial_GroupRls":[8,1],
"IssuerMaterial.html#IssuerMaterial_Groups":[8,0],
"IssuerMaterial.html#IssuerMaterial_Groups_groupa":[8,0,0],
"IssuerMaterial.html#IssuerMaterial_Groups_groupb":[8,0,1],
"LegalInformation.html":[2],
+"Revocation.html":[10],
+"Revocation.html#group_revocation":[10,2],
+"Revocation.html#group_revocation_reasons":[10,2,0],
+"Revocation.html#private_key_revocation":[10,3],
+"Revocation.html#private_key_revocation_reasons":[10,3,0],
+"Revocation.html#revocation_hierarchy":[10,0],
+"Revocation.html#revocation_versions":[10,1],
+"Revocation.html#revoked_proofs":[10,4,0],
+"Revocation.html#signature_revocation":[10,4],
+"Revocation.html#signature_revocation_reasons":[10,4,1],
+"Revocation.html#verifier_blacklist":[10,5],
+"Revocation.html#verifier_blacklist_reasons":[10,5,0],
"SdkOverview.html":[5],
"SdkOverview.html#SdkOverview_Components":[5,0],
"SdkOverview.html#SdkOverview_Files":[5,1],
@@ -61,193 +96,158 @@ var NAVTREEINDEX0 =
"SignVerifyTutorial.html#SignVerifyTutorial_Signmmsg":[7,0],
"SignVerifyTutorial.html#SignVerifyTutorial_VerificationFailures":[7,3],
"SignVerifyTutorial.html#SignVerifyTutorial_Verifysig":[7,1],
-"examples.html":[12],
-"group___big_num_primitives.html":[11,0,0,0,0],
-"group___big_num_primitives.html#ga03c89b8b8dd87de2c0f4b5822145d317":[11,0,0,0,0,3],
-"group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718":[11,0,0,0,0,0],
-"group___big_num_primitives.html#ga2d17600068b1d94000635c6644258a03":[11,0,0,0,0,5],
-"group___big_num_primitives.html#ga47f356d816bcb5742ba6d78000861328":[11,0,0,0,0,8],
-"group___big_num_primitives.html#ga7dd6038987210d10bf843602fef0c929":[11,0,0,0,0,2],
-"group___big_num_primitives.html#ga808cf477b70ed06358b11756bfe36024":[11,0,0,0,0,7],
-"group___big_num_primitives.html#gacbec9669ab0fe768e2be74dcaca397ea":[11,0,0,0,0,4],
-"group___big_num_primitives.html#gad5f6f262bfd780fed3678bcee16f0aed":[11,0,0,0,0,6],
-"group___big_num_primitives.html#gae70fd9b3026f0ab3c7e9601d0a3186b8":[11,0,0,0,0,1],
-"group___ec_group_primitives.html":[11,0,0,0,2],
-"group___ec_group_primitives.html#ga01bf8d6fa60a2e445490966b3a06c270":[11,0,0,0,2,4],
-"group___ec_group_primitives.html#ga0b6d7a3398251e9352fb29ef4abef466":[11,0,0,0,2,8],
-"group___ec_group_primitives.html#ga25c9013cc76907d73765eb7a96aa8c96":[11,0,0,0,2,12],
-"group___ec_group_primitives.html#ga2d433f567fa2419465a49604f4da21ad":[11,0,0,0,2,18],
-"group___ec_group_primitives.html#ga3f96c43d14d24de0f7a5e214aef64196":[11,0,0,0,2,5],
-"group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4":[11,0,0,0,2,15],
-"group___ec_group_primitives.html#ga4bb7d6691ffbb6e947c1068453e27fbd":[11,0,0,0,2,19],
-"group___ec_group_primitives.html#ga4d0f32aede3066eae500241b387bd970":[11,0,0,0,2,7],
-"group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb":[11,0,0,0,2,17],
-"group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa":[11,0,0,0,2,1],
-"group___ec_group_primitives.html#ga8a6114a48214a327d4ec04fd25e5940e":[11,0,0,0,2,11],
-"group___ec_group_primitives.html#ga8cb086d792bffb79b3ca07e6ca4ce0e7":[11,0,0,0,2,3],
-"group___ec_group_primitives.html#ga9cf15b34bc4ff12e58b169dd989d8210":[11,0,0,0,2,10],
-"group___ec_group_primitives.html#gab7af276256c27610eda85ff432b846ea":[11,0,0,0,2,2],
-"group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159":[11,0,0,0,2,0],
-"group___ec_group_primitives.html#gad3b3c63c48fa24e8dea07837b05bc061":[11,0,0,0,2,9],
-"group___ec_group_primitives.html#gadc22ee07864a7ee681a881029b69d76a":[11,0,0,0,2,6],
-"group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4":[11,0,0,0,2,13],
-"group___ec_group_primitives.html#gaf3b6a548aa6f0d4f028a14feca251f57":[11,0,0,0,2,14],
-"group___ec_group_primitives.html#gaf4e23677dd378ef2e0cf55df79cbdb62":[11,0,0,0,2,16],
-"group___ecdsa_primitives.html":[11,0,0,0,1],
-"group___ecdsa_primitives.html#ga67091ecae643c1b8a0b0a4946eda7afe":[11,0,0,0,1,0],
-"group___ecdsa_primitives.html#gaab68de7291db6e42a01e99c2fa40057f":[11,0,0,0,1,1],
-"group___epid_common.html":[11,0,0],
-"group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58":[11,0,0,19],
-"group___epid_common.html#ga07c9b47d326ee784aecb78195adffb8b":[11,0,0,21],
-"group___epid_common.html#ga0b4dedb867504e0148aa0e1fdf642b2b":[11,0,0,34],
-"group___epid_common.html#ga20a575d3d538b0bac654fd57f20e2b30":[11,0,0,17],
-"group___epid_common.html#ga23ec3f6c8b89eb63e04d2b1ec6fd2696":[11,0,0,28],
-"group___epid_common.html#ga23f8ea0f7529e8e7a81bd88e607dda01":[11,0,0,15],
-"group___epid_common.html#ga29a7e07cd5181e738f98fc026979efca":[11,0,0,10],
-"group___epid_common.html#ga2ca3c202ee727774d55890e568621842":[11,0,0,12],
-"group___epid_common.html#ga2d54f4f222e965222024113c0420602d":[11,0,0,31],
-"group___epid_common.html#ga3335a4754825c54840263aa4b2a9bf67":[11,0,0,23],
-"group___epid_common.html#ga38fad13430eba25f9f9b05e35ecd22f8":[11,0,0,11],
-"group___epid_common.html#ga3f3c3b965dd714179cbc2f8d96678ee0":[11,0,0,30],
-"group___epid_common.html#ga41c113e15b695291199c27fac4bd53fa":[11,0,0,13],
-"group___epid_common.html#ga4856121ac4bce4161a015a8a2b4f5b1c":[11,0,0,29],
-"group___epid_common.html#ga53db100214e65e362fa426508a240d12":[11,0,0,22],
-"group___epid_common.html#ga5c396a5ac8a0e5ec1e02330c53420dce":[11,0,0,16],
-"group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c":[11,0,0,14],
-"group___epid_common.html#ga6911838728d546e4a51d7bcb8404525c":[11,0,0,26],
-"group___epid_common.html#ga8cdde2b366f4473f0a6965bcfea5b6a6":[11,0,0,33],
-"group___epid_common.html#gab1587898f15de1b51cd5e799a43465ff":[11,0,0,9],
-"group___epid_common.html#gab34066dc882ad63362c43c0790973fdc":[11,0,0,32],
-"group___epid_common.html#gac22664b5f7df5cd4da1bd7b1b1e7912f":[11,0,0,20],
-"group___epid_common.html#gad471f600f6032f432b99432fda97a070":[11,0,0,27],
-"group___epid_common.html#gada170fd890504b013139f4a33033ae4b":[11,0,0,24],
-"group___epid_common.html#gae51985a0e811f4bbb2d70b62e35b881e":[11,0,0,18],
-"group___epid_common.html#gaeae76709e6bfc80c9d79ec4943ccc1ac":[11,0,0,25],
-"group___epid_math.html":[11,0,0,0],
-"group___epid_member_module.html":[11,0,1],
-"group___epid_member_module.html#ga13dd0d72be9babf8194d472d7712a361":[11,0,1,13],
-"group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6":[11,0,1,8],
-"group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb":[11,0,1,7],
-"group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721":[11,0,1,10],
-"group___epid_member_module.html#ga759155a719254f734157722716dac640":[11,0,1,14],
-"group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000":[11,0,1,5],
-"group___epid_member_module.html#ga8e3f201d1e9dc668659e08a3bdf543b6":[11,0,1,6],
-"group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf":[11,0,1,9],
-"group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d":[11,0,1,16],
-"group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc":[11,0,1,11],
-"group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236":[11,0,1,2],
-"group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075":[11,0,1,4],
-"group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d":[11,0,1,12],
-"group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa":[11,0,1,15],
-"group___epid_member_module.html#gaf8cd05388f017486f14da2ee48d067ef":[11,0,1,3],
-"group___epid_module.html":[11,0],
-"group___epid_print.html":[11,0,0,3],
-"group___epid_print.html#ga0d6377d9c1651d0101ec6b61feaa78ca":[11,0,0,3,3],
-"group___epid_print.html#ga138cd388247a58680d4701d59d6976d2":[11,0,0,3,12],
-"group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83":[11,0,0,3,0],
-"group___epid_print.html#ga3f2961ef6b4c44a6205d422d8a293476":[11,0,0,3,8],
-"group___epid_print.html#ga45a933b44fc1dfe926e3af89c198070a":[11,0,0,3,1],
-"group___epid_print.html#ga5f249c594ed12e4a9b11b7bc101da85d":[11,0,0,3,2],
-"group___epid_print.html#ga6c9fea48fa0477f4a98abb50f891a5e4":[11,0,0,3,9],
-"group___epid_print.html#ga87168a3ce5306f9839b8e8d6c9a5f84f":[11,0,0,3,10],
-"group___epid_print.html#ga883a834ab1703365bb0bca4abd3104de":[11,0,0,3,7],
-"group___epid_print.html#gaa3b1cbbfc6f78562658953113e5798cf":[11,0,0,3,4],
-"group___epid_print.html#gab76a4cf0385dc4a76bb56ee9f0e3e87a":[11,0,0,3,11],
-"group___epid_print.html#gae553c3a156a0e4968b89635ab0757580":[11,0,0,3,5],
-"group___epid_print.html#gaf185fe3df270cd8b4a2969bf3cfc5d5f":[11,0,0,3,6],
-"group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ae2d5345c14f57fc992a613003c3c443d":[11,0,0,3,0,1],
-"group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83aeb475b793d8d357087d7fcc74702ffae":[11,0,0,3,0,0],
-"group___epid_types.html":[11,0,0,4],
-"group___epid_types.html#ga54bd22670f2e348593db7ab631131d10":[11,0,0,4,36],
-"group___epid_types.html#ga55eb2193045bde31af3f551565126042":[11,0,0,4,35],
-"group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890":[11,0,0,4,38],
-"group___epid_types.html#ga888541b8148df69c634a92c64ed51317":[11,0,0,4,37],
-"group___epid_types.html#gada666b48d0cbc301985405fde896f1de":[11,0,0,4,34],
-"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a0f4dde6e82b84f5769873f6704fcd290":[11,0,0,4,38,1],
-"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a4fa16d3867498f5e2f8ae5c94b0fab85":[11,0,0,4,38,4],
-"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a90d21c8885ab138f7cf91f253dd6ef86":[11,0,0,4,38,5],
-"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a9746b5049a62bca2f7b844925e6136ba":[11,0,0,4,38,3],
-"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890ade8e74cf7910b3a71fe902a40abf7eee":[11,0,0,4,38,6],
-"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890aefb89989305b5c34120b0f18ee8e2c5d":[11,0,0,4,38,0],
-"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890afb78d98f37fecc53dd1637d94c5c0055":[11,0,0,4,38,2],
-"group___epid_verifier_module.html":[11,0,2],
-"group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a":[11,0,2,10],
-"group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70":[11,0,2,4],
-"group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb":[11,0,2,6],
-"group___epid_verifier_module.html#ga39b240a17f310894e9f5946c9a731798":[11,0,2,12],
-"group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf":[11,0,2,9],
-"group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12":[11,0,2,5],
-"group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392":[11,0,2,11],
-"group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a":[11,0,2,13],
-"group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92":[11,0,2,7],
-"group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700":[11,0,2,3],
-"group___epid_verifier_module.html#gae44bd8acbc1e7205aeedff0c7e2632a8":[11,0,2,1],
-"group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea":[11,0,2,2],
-"group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e":[11,0,2,8],
-"group___error_codes.html":[11,0,0,1],
-"group___error_codes.html#ga59e8680ce52509302fd58a987e45004d":[11,0,0,1,1],
-"group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360":[11,0,0,1,0],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a11a4d2f1c37064eb663de08dc57bcda8":[11,0,0,1,0,11],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6":[11,0,0,1,0,12],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a2b38f44424cecd7b432194a2012dc9c7":[11,0,0,1,0,3],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a3706f895a660260033b5b91890516c0f":[11,0,0,1,0,17],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a5252da1ff519a098446723e9edd30cc7":[11,0,0,1,0,8],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a61234ad9610406da6bf7977afd72a357":[11,0,0,1,0,16],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a780a20821863553b88ca617a6fc0f718":[11,0,0,1,0,4],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a83a867b4f71ee13edbfca2f1b72abbec":[11,0,0,1,0,14],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a893cd0d417b139bb376d09c93695c3f3":[11,0,0,1,0,13],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9":[11,0,0,1,0,0],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e":[11,0,0,1,0,7],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab45ad60085d03c03ea30b40a0519897e":[11,0,0,1,0,1],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab7dfec784192a827a91a4b8a6054d01c":[11,0,0,1,0,10],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf":[11,0,0,1,0,9],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad4d4ff24a7ef2cd7a50b8082265e9ff4":[11,0,0,1,0,15],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360addbba767bb884b4459a567056b4d3f86":[11,0,0,1,0,6],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8":[11,0,0,1,0,2],
-"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aff83186b61d48f9fee5f691c5b219bc1":[11,0,0,1,0,5],
-"group___file_parser.html":[11,0,0,2],
-"group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f":[11,0,0,2,6],
-"group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33":[11,0,0,2,7],
-"group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb":[11,0,0,2,3],
-"group___file_parser.html#ga9a33be7edc6b4c7a867fb07bd2bddecb":[11,0,0,2,2],
-"group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f":[11,0,0,2,4],
-"group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e":[11,0,0,2,5],
-"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba1f8d8c4b253403a35c51e05d34a7ca1e":[11,0,0,2,2,1],
-"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba692b4141bff8225bee6000750b0da322":[11,0,0,2,2,2],
-"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba8aead4b6aab87a1efb2d7e8c77a9b710":[11,0,0,2,2,3],
-"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba8e5247daee3999540e6cb24d4c2b3770":[11,0,0,2,2,4],
-"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbab772fa1e3f221af125ffb34b86b3f24c":[11,0,0,2,2,7],
-"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac24554caafe2db01e2daed413188cd92":[11,0,0,2,2,0],
-"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac52e5fe24a12424316f655b9b7c62600":[11,0,0,2,2,6],
-"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac6d742ea3dd3b17f6d763970ac84b811":[11,0,0,2,2,8],
-"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac708ba9e56eaeac0f1256457cbd45911":[11,0,0,2,2,5],
-"group___finite_field_primitives.html":[11,0,0,0,3],
-"group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634":[11,0,0,0,3,14],
-"group___finite_field_primitives.html#ga18a952cebb4a1274c73e6cb0c19e8aea":[11,0,0,0,3,7],
-"group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b":[11,0,0,0,3,4],
-"group___finite_field_primitives.html#ga1bad3c6945d1d709fceb07a1dd03000e":[11,0,0,0,3,2],
-"group___finite_field_primitives.html#ga20d9140e5670d679ef8183d9b5115f53":[11,0,0,0,3,10],
-"group___finite_field_primitives.html#ga26069d035d0f6ade33af2b5d5c14949a":[11,0,0,0,3,8],
-"group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5":[11,0,0,0,3,11],
-"group___finite_field_primitives.html#ga6622db072782fd9e53b4d59dd3dbd8e8":[11,0,0,0,3,6],
-"group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900":[11,0,0,0,3,19],
-"group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa":[11,0,0,0,3,0],
-"group___finite_field_primitives.html#ga7d99fdc5e4573668a5744e49df7ab67c":[11,0,0,0,3,16],
-"group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2":[11,0,0,0,3,17],
-"group___finite_field_primitives.html#ga84d21decc1c957bcf6e98e1492eb2ac3":[11,0,0,0,3,12],
-"group___finite_field_primitives.html#ga884d9e1baadf29a410244a735853e3c7":[11,0,0,0,3,18],
-"group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e":[11,0,0,0,3,1],
-"group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f":[11,0,0,0,3,3],
-"group___finite_field_primitives.html#gacc54f315ede2dbeb8c5990c024a0de6c":[11,0,0,0,3,15],
-"group___finite_field_primitives.html#gae7a8c7503b6fc7a41bcaab4d45ca37b2":[11,0,0,0,3,13],
-"group___finite_field_primitives.html#gaed2acb8583e9c9f6b49fdb660c672625":[11,0,0,0,3,9],
-"group___finite_field_primitives.html#gaf0ddbc1bad048d67771cba119eb44a6c":[11,0,0,0,3,5],
-"group___hash_primitives.html":[11,0,0,0,4],
-"group___hash_primitives.html#ga86d62aac9efd7445acee311b41846c6c":[11,0,0,0,4,1],
-"group___pairing_primitives.html":[11,0,0,0,5],
-"group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc":[11,0,0,0,5,2],
-"group___pairing_primitives.html#ga3f1fa61d25487f96dfb0ffef4ad35607":[11,0,0,0,5,0],
-"group___pairing_primitives.html#ga5dd07d13536e27c37eaeee285297066c":[11,0,0,0,5,3],
-"group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d":[11,0,0,0,5,1],
-"index.html":[]
+"SignmsgWalkthru.html":[15,0],
+"VerifysigWalkthru.html":[15,1],
+"group___big_num_primitives.html":[16,0,0,0,0],
+"group___big_num_primitives.html#ga03c89b8b8dd87de2c0f4b5822145d317":[16,0,0,0,0,6],
+"group___big_num_primitives.html#ga166134085464b0df2c8efcfccf8ec573":[16,0,0,0,0,2],
+"group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718":[16,0,0,0,0,0],
+"group___big_num_primitives.html#ga2d17600068b1d94000635c6644258a03":[16,0,0,0,0,9],
+"group___big_num_primitives.html#ga79d86c872fe8da0f217e3ba069f98d38":[16,0,0,0,0,12],
+"group___big_num_primitives.html#ga7dd6038987210d10bf843602fef0c929":[16,0,0,0,0,5],
+"group___big_num_primitives.html#ga808cf477b70ed06358b11756bfe36024":[16,0,0,0,0,11],
+"group___big_num_primitives.html#gacbec9669ab0fe768e2be74dcaca397ea":[16,0,0,0,0,8],
+"group___big_num_primitives.html#gacde6564a814617a96985b379be0dfabb":[16,0,0,0,0,4],
+"group___big_num_primitives.html#gad5f6f262bfd780fed3678bcee16f0aed":[16,0,0,0,0,10],
+"group___big_num_primitives.html#gae70fd9b3026f0ab3c7e9601d0a3186b8":[16,0,0,0,0,1],
+"group___big_num_primitives.html#gaf0366e47226563b17fcbc8e3ed766084":[16,0,0,0,0,3],
+"group___big_num_primitives.html#gafd64b66fc85dab0005f4a1bb67bdf7b4":[16,0,0,0,0,7],
+"group___ec_group_primitives.html":[16,0,0,0,2],
+"group___ec_group_primitives.html#ga01bf8d6fa60a2e445490966b3a06c270":[16,0,0,0,2,4],
+"group___ec_group_primitives.html#ga0b6d7a3398251e9352fb29ef4abef466":[16,0,0,0,2,8],
+"group___ec_group_primitives.html#ga25c9013cc76907d73765eb7a96aa8c96":[16,0,0,0,2,12],
+"group___ec_group_primitives.html#ga2d433f567fa2419465a49604f4da21ad":[16,0,0,0,2,20],
+"group___ec_group_primitives.html#ga3f96c43d14d24de0f7a5e214aef64196":[16,0,0,0,2,5],
+"group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4":[16,0,0,0,2,16],
+"group___ec_group_primitives.html#ga4bb7d6691ffbb6e947c1068453e27fbd":[16,0,0,0,2,21],
+"group___ec_group_primitives.html#ga4d0f32aede3066eae500241b387bd970":[16,0,0,0,2,7],
+"group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb":[16,0,0,0,2,19],
+"group___ec_group_primitives.html#ga76d24378455eb96a3257fe8045c0993a":[16,0,0,0,2,14],
+"group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa":[16,0,0,0,2,1],
+"group___ec_group_primitives.html#ga8a6114a48214a327d4ec04fd25e5940e":[16,0,0,0,2,11],
+"group___ec_group_primitives.html#ga8cb086d792bffb79b3ca07e6ca4ce0e7":[16,0,0,0,2,3],
+"group___ec_group_primitives.html#ga9cf15b34bc4ff12e58b169dd989d8210":[16,0,0,0,2,10],
+"group___ec_group_primitives.html#gab7af276256c27610eda85ff432b846ea":[16,0,0,0,2,2],
+"group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159":[16,0,0,0,2,0],
+"group___ec_group_primitives.html#gad3b3c63c48fa24e8dea07837b05bc061":[16,0,0,0,2,9],
+"group___ec_group_primitives.html#gadc22ee07864a7ee681a881029b69d76a":[16,0,0,0,2,6],
+"group___ec_group_primitives.html#gadf83fa559585375faad9a8b1559249bc":[16,0,0,0,2,17],
+"group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4":[16,0,0,0,2,13],
+"group___ec_group_primitives.html#gaf3b6a548aa6f0d4f028a14feca251f57":[16,0,0,0,2,15],
+"group___ec_group_primitives.html#gaf4e23677dd378ef2e0cf55df79cbdb62":[16,0,0,0,2,18],
+"group___ecdsa_primitives.html":[16,0,0,0,1],
+"group___ecdsa_primitives.html#ga67091ecae643c1b8a0b0a4946eda7afe":[16,0,0,0,1,0],
+"group___ecdsa_primitives.html#gaab68de7291db6e42a01e99c2fa40057f":[16,0,0,0,1,1],
+"group___epid11_file_parser_module.html":[16,0,0,2,0],
+"group___epid11_file_parser_module.html#ga1f92d1cb6bd7d9815711fde515b40a4c":[16,0,0,2,0,0],
+"group___epid11_file_parser_module.html#gac3f6daaa5333627d4efe5438c1fe8868":[16,0,0,2,0,3],
+"group___epid11_file_parser_module.html#gae28a844eb68828480b2a76fcb7d252a3":[16,0,0,2,0,1],
+"group___epid11_file_parser_module.html#gae682077d315c39ed298ef198fd738546":[16,0,0,2,0,2],
+"group___epid11_pairing_primitives.html":[16,0,0,0,5,0],
+"group___epid11_pairing_primitives.html#ga0ee658e26e9f933ba2ffbf2504dfae7e":[16,0,0,0,5,0,3],
+"group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b":[16,0,0,0,5,0,0],
+"group___epid11_pairing_primitives.html#gaa3457d6f85889bc714910252fd21c758":[16,0,0,0,5,0,1],
+"group___epid11_pairing_primitives.html#gaa4076dfe25e8e61ac6753333a322c059":[16,0,0,0,5,0,2],
+"group___epid11_types.html":[16,0,0,4,0],
+"group___epid11_types.html#ga7293cec8f937d6f5da42084403f978f1":[16,0,0,4,0,17],
+"group___epid11_types.html#gadff9c05d5b7751024152b40dda545545":[16,0,0,4,0,15],
+"group___epid11_types.html#gaf1f4f1d6f001895abe548cfb33611c23":[16,0,0,4,0,16],
+"group___epid11_verifier_module.html":[16,0,2,0],
+"group___epid11_verifier_module.html#ga0b79c79d09e3551158e1c38c7c335929":[16,0,2,0,3],
+"group___epid11_verifier_module.html#ga0cb6d30df527ee0d8f0a1b68d2b7c0c0":[16,0,2,0,7],
+"group___epid11_verifier_module.html#ga241520cb925e5be89893a2037451cf1c":[16,0,2,0,11],
+"group___epid11_verifier_module.html#ga3a2e320d7de6156b2ce9d73e9cdce813":[16,0,2,0,4],
+"group___epid11_verifier_module.html#ga63cae8d5abcf4d7e3af4157de18998f1":[16,0,2,0,6],
+"group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070":[16,0,2,0,13],
+"group___epid11_verifier_module.html#ga809c777908b2f9d029062d9424cb5f65":[16,0,2,0,8],
+"group___epid11_verifier_module.html#gab0b6560b226a37321f5ca5d4fb55eba7":[16,0,2,0,2],
+"group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702":[16,0,2,0,1],
+"group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8":[16,0,2,0,5],
+"group___epid11_verifier_module.html#gafe5ad6bde38ad0c3e0a9960975fd5216":[16,0,2,0,12],
+"group___epid11_verifier_module.html#gaff5a014b0334be7e8583f0f99cb5e9b8":[16,0,2,0,10],
+"group___epid11_verifier_module.html#gaffbe6ac2bc7236ad65126a17ebdceb14":[16,0,2,0,9],
+"group___epid_common.html":[16,0,0],
+"group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c":[16,0,0,5],
+"group___epid_math.html":[16,0,0,0],
+"group___epid_member_module.html":[16,0,1],
+"group___epid_member_module.html#ga13dd0d72be9babf8194d472d7712a361":[16,0,1,14],
+"group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6":[16,0,1,9],
+"group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb":[16,0,1,8],
+"group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721":[16,0,1,11],
+"group___epid_member_module.html#ga759155a719254f734157722716dac640":[16,0,1,15],
+"group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000":[16,0,1,6],
+"group___epid_member_module.html#ga8e3f201d1e9dc668659e08a3bdf543b6":[16,0,1,7],
+"group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf":[16,0,1,10],
+"group___epid_member_module.html#ga9e12c7cec8d0c4e07b12c0e26a278c9d":[16,0,1,17],
+"group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc":[16,0,1,12],
+"group___epid_member_module.html#gad2e3de5c6ce641a318f8a46b61e75236":[16,0,1,3],
+"group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075":[16,0,1,5],
+"group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d":[16,0,1,13],
+"group___epid_member_module.html#gadfb10d5dfdadb0694792c7b06718e817":[16,0,1,2],
+"group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa":[16,0,1,16],
+"group___epid_member_module.html#gaf8cd05388f017486f14da2ee48d067ef":[16,0,1,4],
+"group___epid_module.html":[16,0],
+"group___epid_print.html":[16,0,0,3],
+"group___epid_print.html#ga0d6377d9c1651d0101ec6b61feaa78ca":[16,0,0,3,3],
+"group___epid_print.html#ga138cd388247a58680d4701d59d6976d2":[16,0,0,3,12],
+"group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83":[16,0,0,3,0],
+"group___epid_print.html#ga3f2961ef6b4c44a6205d422d8a293476":[16,0,0,3,8],
+"group___epid_print.html#ga45a933b44fc1dfe926e3af89c198070a":[16,0,0,3,1],
+"group___epid_print.html#ga5f249c594ed12e4a9b11b7bc101da85d":[16,0,0,3,2],
+"group___epid_print.html#ga6c9fea48fa0477f4a98abb50f891a5e4":[16,0,0,3,9],
+"group___epid_print.html#ga87168a3ce5306f9839b8e8d6c9a5f84f":[16,0,0,3,10],
+"group___epid_print.html#ga883a834ab1703365bb0bca4abd3104de":[16,0,0,3,7],
+"group___epid_print.html#gaa3b1cbbfc6f78562658953113e5798cf":[16,0,0,3,4],
+"group___epid_print.html#gab76a4cf0385dc4a76bb56ee9f0e3e87a":[16,0,0,3,11],
+"group___epid_print.html#gae553c3a156a0e4968b89635ab0757580":[16,0,0,3,5],
+"group___epid_print.html#gaf185fe3df270cd8b4a2969bf3cfc5d5f":[16,0,0,3,6],
+"group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ade23610605d0ba7dd48db5060e28995a":[16,0,0,3,0,2],
+"group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ae2d5345c14f57fc992a613003c3c443d":[16,0,0,3,0,1],
+"group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83aeb475b793d8d357087d7fcc74702ffae":[16,0,0,3,0,0],
+"group___epid_types.html":[16,0,0,4],
+"group___epid_types.html#ga54bd22670f2e348593db7ab631131d10":[16,0,0,4,37],
+"group___epid_types.html#ga55eb2193045bde31af3f551565126042":[16,0,0,4,36],
+"group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890":[16,0,0,4,39],
+"group___epid_types.html#ga888541b8148df69c634a92c64ed51317":[16,0,0,4,38],
+"group___epid_types.html#gada666b48d0cbc301985405fde896f1de":[16,0,0,4,35],
+"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a0f4dde6e82b84f5769873f6704fcd290":[16,0,0,4,39,2],
+"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a4fa16d3867498f5e2f8ae5c94b0fab85":[16,0,0,4,39,5],
+"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a68b2137c7946583a99f0dac2286523eb":[16,0,0,4,39,0],
+"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a90d21c8885ab138f7cf91f253dd6ef86":[16,0,0,4,39,6],
+"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a9746b5049a62bca2f7b844925e6136ba":[16,0,0,4,39,4],
+"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890ade8e74cf7910b3a71fe902a40abf7eee":[16,0,0,4,39,7],
+"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890aefb89989305b5c34120b0f18ee8e2c5d":[16,0,0,4,39,1],
+"group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890afb78d98f37fecc53dd1637d94c5c0055":[16,0,0,4,39,3],
+"group___epid_verifier_module.html":[16,0,2],
+"group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a":[16,0,2,15],
+"group___epid_verifier_module.html#ga1c3810ef361da678a1f77823bd9c37a6":[16,0,2,10],
+"group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70":[16,0,2,8],
+"group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb":[16,0,2,11],
+"group___epid_verifier_module.html#ga2a75c7d5775e852a7b6e24178dd4054f":[16,0,2,6],
+"group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf":[16,0,2,14],
+"group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12":[16,0,2,9],
+"group___epid_verifier_module.html#ga8eaeb9f4a34e9e37ccdf342919f38c69":[16,0,2,4],
+"group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392":[16,0,2,16],
+"group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92":[16,0,2,12],
+"group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e":[16,0,2,18],
+"group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700":[16,0,2,7],
+"group___epid_verifier_module.html#gac857bff47e7d80363eac15285471fe81":[16,0,2,19],
+"group___epid_verifier_module.html#gae3f9c37628e18b880d8bbee3e7f55064":[16,0,2,17],
+"group___epid_verifier_module.html#gae44bd8acbc1e7205aeedff0c7e2632a8":[16,0,2,3],
+"group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea":[16,0,2,5],
+"group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c":[16,0,2,2],
+"group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e":[16,0,2,13],
+"group___error_codes.html":[16,0,0,1],
+"group___error_codes.html#ga59e8680ce52509302fd58a987e45004d":[16,0,0,1,1],
+"group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360":[16,0,0,1,0],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a11a4d2f1c37064eb663de08dc57bcda8":[16,0,0,1,0,11],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6":[16,0,0,1,0,12],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1dc7b7e6ff97c7ed9ff4191d76ebd6e1":[16,0,0,1,0,4],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a3706f895a660260033b5b91890516c0f":[16,0,0,1,0,17],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a43c658cbf0d156850d71ce3f8efd461c":[16,0,0,1,0,5],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a486e052baa99c6c25ae5d5cc710de298":[16,0,0,1,0,6],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a5252da1ff519a098446723e9edd30cc7":[16,0,0,1,0,8],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a61234ad9610406da6bf7977afd72a357":[16,0,0,1,0,16],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a83a867b4f71ee13edbfca2f1b72abbec":[16,0,0,1,0,14],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a893cd0d417b139bb376d09c93695c3f3":[16,0,0,1,0,13]
};
diff --git a/doc/html/navtreeindex1.js b/doc/html/navtreeindex1.js
index d04c87a..ad381c3 100644
--- a/doc/html/navtreeindex1.js
+++ b/doc/html/navtreeindex1.js
@@ -1,203 +1,253 @@
var NAVTREEINDEX1 =
{
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9":[16,0,0,1,0,0],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a94ae9c9b9337afd2fefd3b4f9c3160df":[16,0,0,1,0,18],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e":[16,0,0,1,0,7],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab2768a1a5c4374cb1ac6175c09c73129":[16,0,0,1,0,19],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab45ad60085d03c03ea30b40a0519897e":[16,0,0,1,0,1],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab7dfec784192a827a91a4b8a6054d01c":[16,0,0,1,0,10],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf":[16,0,0,1,0,9],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad4d4ff24a7ef2cd7a50b8082265e9ff4":[16,0,0,1,0,15],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aedd43fb4043bef3b515fc23f1d9a5fe5":[16,0,0,1,0,3],
+"group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8":[16,0,0,1,0,2],
+"group___file_parser.html":[16,0,0,2],
+"group___file_parser.html#ga1562efc7c1891875d6b2b9180d65de9d":[16,0,0,2,4],
+"group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f":[16,0,0,2,9],
+"group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33":[16,0,0,2,10],
+"group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb":[16,0,0,2,6],
+"group___file_parser.html#ga8e38d1102eb1dd9b5af2e2f79236da55":[16,0,0,2,5],
+"group___file_parser.html#ga9a33be7edc6b4c7a867fb07bd2bddecb":[16,0,0,2,3],
+"group___file_parser.html#gaae808987ce82188dff42baa4e43cab82":[16,0,0,2,11],
+"group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f":[16,0,0,2,7],
+"group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e":[16,0,0,2,8],
+"group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da5f270e2e8c2412bc07de293023f425cc":[16,0,0,2,4,0],
+"group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da6af0ee9d9689f1d4325bdd0beb8a89e2":[16,0,0,2,4,1],
+"group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da8bbd27765997dd10f1c0378dbecef01d":[16,0,0,2,4,2],
+"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba1f8d8c4b253403a35c51e05d34a7ca1e":[16,0,0,2,3,1],
+"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba692b4141bff8225bee6000750b0da322":[16,0,0,2,3,2],
+"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba8aead4b6aab87a1efb2d7e8c77a9b710":[16,0,0,2,3,3],
+"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba8e5247daee3999540e6cb24d4c2b3770":[16,0,0,2,3,4],
+"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbab772fa1e3f221af125ffb34b86b3f24c":[16,0,0,2,3,7],
+"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac24554caafe2db01e2daed413188cd92":[16,0,0,2,3,0],
+"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac52e5fe24a12424316f655b9b7c62600":[16,0,0,2,3,6],
+"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac6d742ea3dd3b17f6d763970ac84b811":[16,0,0,2,3,8],
+"group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac708ba9e56eaeac0f1256457cbd45911":[16,0,0,2,3,5],
+"group___finite_field_primitives.html":[16,0,0,0,3],
+"group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634":[16,0,0,0,3,16],
+"group___finite_field_primitives.html#ga18a952cebb4a1274c73e6cb0c19e8aea":[16,0,0,0,3,7],
+"group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b":[16,0,0,0,3,4],
+"group___finite_field_primitives.html#ga1bad3c6945d1d709fceb07a1dd03000e":[16,0,0,0,3,2],
+"group___finite_field_primitives.html#ga1ef46fc83f9c11263a2aa1ec906c9144":[16,0,0,0,3,13],
+"group___finite_field_primitives.html#ga20d9140e5670d679ef8183d9b5115f53":[16,0,0,0,3,10],
+"group___finite_field_primitives.html#ga26069d035d0f6ade33af2b5d5c14949a":[16,0,0,0,3,8],
+"group___finite_field_primitives.html#ga39892fe2ab431e166dbbcf57756660f6":[16,0,0,0,3,15],
+"group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5":[16,0,0,0,3,11],
+"group___finite_field_primitives.html#ga59d20610f245ff4bc3a17b7bfe289991":[16,0,0,0,3,17],
+"group___finite_field_primitives.html#ga6622db072782fd9e53b4d59dd3dbd8e8":[16,0,0,0,3,6],
+"group___finite_field_primitives.html#ga678694636708463b078d842d5c58a900":[16,0,0,0,3,24],
+"group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa":[16,0,0,0,3,0],
+"group___finite_field_primitives.html#ga7d99fdc5e4573668a5744e49df7ab67c":[16,0,0,0,3,20],
+"group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2":[16,0,0,0,3,21],
+"group___finite_field_primitives.html#ga84d21decc1c957bcf6e98e1492eb2ac3":[16,0,0,0,3,12],
+"group___finite_field_primitives.html#ga884d9e1baadf29a410244a735853e3c7":[16,0,0,0,3,23],
+"group___finite_field_primitives.html#ga90b2c192708973b54b7a3e82b34536ed":[16,0,0,0,3,18],
+"group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e":[16,0,0,0,3,1],
+"group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f":[16,0,0,0,3,3],
+"group___finite_field_primitives.html#gacc54f315ede2dbeb8c5990c024a0de6c":[16,0,0,0,3,19],
+"group___finite_field_primitives.html#gae69af62a03179718cac81b004549c598":[16,0,0,0,3,22],
+"group___finite_field_primitives.html#gae7a8c7503b6fc7a41bcaab4d45ca37b2":[16,0,0,0,3,14],
+"group___finite_field_primitives.html#gaed2acb8583e9c9f6b49fdb660c672625":[16,0,0,0,3,9],
+"group___finite_field_primitives.html#gaf0ddbc1bad048d67771cba119eb44a6c":[16,0,0,0,3,5],
+"group___hash_primitives.html":[16,0,0,0,4],
+"group___hash_primitives.html#ga86d62aac9efd7445acee311b41846c6c":[16,0,0,0,4,1],
+"group___pairing_primitives.html":[16,0,0,0,5],
+"group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc":[16,0,0,0,5,3],
+"group___pairing_primitives.html#ga3f1fa61d25487f96dfb0ffef4ad35607":[16,0,0,0,5,1],
+"group___pairing_primitives.html#ga5dd07d13536e27c37eaeee285297066c":[16,0,0,0,5,4],
+"group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d":[16,0,0,0,5,2],
+"index.html":[],
"index.html":[1],
-"modules.html":[11],
+"modules.html":[16],
"pages.html":[],
-"signmsg_8c-example.html":[12,0],
-"struct_basic_signature.html":[11,0,0,4,20],
-"struct_basic_signature.html#a0078cc83ecf6c7e31f96b7d44aa60e21":[11,0,0,4,20,2],
-"struct_basic_signature.html#a0e8ea6a2cd3af10e9b59d96d7d06bc69":[11,0,0,4,20,6],
-"struct_basic_signature.html#a4daa94db5068db3f10960f3dd178d603":[11,0,0,4,20,1],
-"struct_basic_signature.html#a69115a4776d15b48411dd6c3a76d0f3d":[11,0,0,4,20,3],
-"struct_basic_signature.html#a730f74d85cfb4fa4089d43c87b97a624":[11,0,0,4,20,7],
-"struct_basic_signature.html#a79d8dec8c5da176e497abf22e4c43adb":[11,0,0,4,20,5],
-"struct_basic_signature.html#a91daebc5b577688afeed2a7ee7913245":[11,0,0,4,20,4],
-"struct_basic_signature.html#ae90cb6af66b010ae39913f033c1e65ac":[11,0,0,4,20,0],
-"struct_big_num_str.html":[11,0,0,4,7],
-"struct_big_num_str.html#a442dcf33889b4f85c5b1228d2c8e6838":[11,0,0,4,7,0],
-"struct_commit_values.html":[11,0,0,5],
-"struct_commit_values.html#a00f7731d75085be08f171771c8f43d30":[11,0,0,5,7],
-"struct_commit_values.html#a22512a6efa7b7b0277b211be64f71c30":[11,0,0,5,1],
-"struct_commit_values.html#a42297d157420f0b554bce8a8cbe95c46":[11,0,0,5,3],
-"struct_commit_values.html#a49f073d0132a51020c0bfc819ec0d619":[11,0,0,5,5],
-"struct_commit_values.html#a4a93cb984bac3de47bb60511b382a074":[11,0,0,5,4],
-"struct_commit_values.html#ab2da47fe5c28b4202658c5ad3523ea1a":[11,0,0,5,9],
-"struct_commit_values.html#abc97167d51a8d0669da9a8d97353db4d":[11,0,0,5,0],
-"struct_commit_values.html#ac00af9d3eeb74543808a9e52e692f614":[11,0,0,5,10],
-"struct_commit_values.html#acb0d12e761fadb149924cdf21290b9bf":[11,0,0,5,8],
-"struct_commit_values.html#af5bf0f288e76f28ce54fe2df813881ef":[11,0,0,5,6],
-"struct_commit_values.html#af7022c18732bbee8c12328923a4a12a1":[11,0,0,5,2],
-"struct_compressed_priv_key.html":[11,0,0,4,17],
-"struct_compressed_priv_key.html#a0b0535f0567eb0e48f799d27991d0f66":[11,0,0,4,17,0],
-"struct_compressed_priv_key.html#a54b9af7699f517bbaef3d52d03e3fed8":[11,0,0,4,17,2],
-"struct_compressed_priv_key.html#ac6689899f1d9a6a8c5e4915563679840":[11,0,0,4,17,1],
-"struct_ecdsa_private_key.html":[11,0,0,4,33],
-"struct_ecdsa_private_key.html#a97efee9b4079f95d94a104f9a6d8c96d":[11,0,0,4,33,0],
-"struct_ecdsa_public_key.html":[11,0,0,4,32],
-"struct_ecdsa_public_key.html#a37c51614faf022eec491b4de8f3a13e1":[11,0,0,4,32,0],
-"struct_ecdsa_public_key.html#a4503c4613386cbc78add1dc245c99284":[11,0,0,4,32,1],
-"struct_ecdsa_signature.html":[11,0,0,4,31],
-"struct_ecdsa_signature.html#a2efd6bf37b12f35135bf325fa491b029":[11,0,0,4,31,1],
-"struct_ecdsa_signature.html#a64b623605a55a267a36df18f29142d0d":[11,0,0,4,31,0],
-"struct_epid2_params.html":[11,0,0,4,13],
-"struct_epid2_params.html#a023603228fed2854ddae2e228938940f":[11,0,0,4,13,6],
-"struct_epid2_params.html#a200a0cba1c9e4ad512bece23f2461a5f":[11,0,0,4,13,7],
-"struct_epid2_params.html#a2f868edb49be49f645101ef5ebbbc551":[11,0,0,4,13,0],
-"struct_epid2_params.html#a4c5195b4fa9393a07a121336202531ad":[11,0,0,4,13,2],
-"struct_epid2_params.html#a609b0aac17fca34fe39bee29676a9618":[11,0,0,4,13,3],
-"struct_epid2_params.html#ac0e0dad45b10927860cd5fa4f8101f08":[11,0,0,4,13,5],
-"struct_epid2_params.html#ac2d7507c6f58c3451beacacb91b52695":[11,0,0,4,13,1],
-"struct_epid2_params.html#ae1d8f5d6036a82064e91bc137b278e74":[11,0,0,4,13,8],
-"struct_epid2_params.html#af23f07fb0e1745c0ad14aceeaa946928":[11,0,0,4,13,4],
-"struct_epid2_params__.html":[11,0,0,6],
-"struct_epid2_params__.html#a1e50604a1739e48e8588d666d33d03ef":[11,0,0,6,9],
-"struct_epid2_params__.html#a20dcfa40dba6679f45f1b90a91791a5c":[11,0,0,6,6],
-"struct_epid2_params__.html#a337490f043e867b6c8d92180a9120541":[11,0,0,6,4],
-"struct_epid2_params__.html#a45d742532485af7f34d43606a3f96b5d":[11,0,0,6,0],
-"struct_epid2_params__.html#a4bca3d05a46b1325ac2490ebeb460543":[11,0,0,6,13],
-"struct_epid2_params__.html#a51a678f0f26804e0c6f3a4c55fcf6731":[11,0,0,6,14],
-"struct_epid2_params__.html#a6d56c3f4dff7e92a0738e7866208bf4d":[11,0,0,6,12],
-"struct_epid2_params__.html#a74aa52f336a194b20627f8a540196dd5":[11,0,0,6,11],
-"struct_epid2_params__.html#a9cd99a40a7427666ff4b940ed69f69a0":[11,0,0,6,1],
-"struct_epid2_params__.html#ac085cbd970d89fb382b621fb2884e420":[11,0,0,6,8],
-"struct_epid2_params__.html#ad90e9f295e28d3f93852e87e97640e76":[11,0,0,6,10],
-"struct_epid2_params__.html#ade20ba985bc9219832df78ee9d255ee5":[11,0,0,6,5],
-"struct_epid2_params__.html#ae15ab066b26bbf1be8772743d604c766":[11,0,0,6,7],
-"struct_epid2_params__.html#aebda3f9b5ed6f015adc992216bacf29f":[11,0,0,6,2],
-"struct_epid2_params__.html#af3e9afc48ec8274f15d10f5f991c0937":[11,0,0,6,3],
-"struct_epid_ca_certificate.html":[11,0,0,2,1],
-"struct_epid_ca_certificate.html#a280e0b0238cf45834c21849ab8a7e124":[11,0,0,2,1,1],
-"struct_epid_ca_certificate.html#a2811c1914ffae913820f13da914c8f01":[11,0,0,2,1,0],
-"struct_epid_ca_certificate.html#a2f8f09ae02919c379c38386668b47418":[11,0,0,2,1,6],
-"struct_epid_ca_certificate.html#a3a44e8050ca2f5085652b2b4e15b779c":[11,0,0,2,1,3],
-"struct_epid_ca_certificate.html#a4f77996f90ed7da1d0503c4236b2c9d1":[11,0,0,2,1,7],
-"struct_epid_ca_certificate.html#a9d2fc21f46cf9fc96e2ea557b70e5356":[11,0,0,2,1,4],
-"struct_epid_ca_certificate.html#ab9d4c318b1fc8d38d3ce53b29f2dfee2":[11,0,0,2,1,5],
-"struct_epid_ca_certificate.html#abd69cce8d5e3940787ee0d17f72184ab":[11,0,0,2,1,8],
-"struct_epid_ca_certificate.html#ac03cf7257c52ad14e3dd3201b930dd50":[11,0,0,2,1,2],
-"struct_epid_file_header.html":[11,0,0,2,0],
-"struct_epid_file_header.html#a35d43c51c1739940381e4898ca87b824":[11,0,0,2,0,0],
-"struct_epid_file_header.html#af5d48c739cc6c00c6e1ce35abf4f1473":[11,0,0,2,0,1],
-"struct_epid_signature.html":[11,0,0,4,22],
-"struct_epid_signature.html#a4155f3f4f1223fc4ae50c94f5305def1":[11,0,0,4,22,1],
-"struct_epid_signature.html#a62a6b0ffcd5f68dd3d2786a58fe43017":[11,0,0,4,22,0],
-"struct_epid_signature.html#a89d2e38223944310b6eeeadf6061a2dd":[11,0,0,4,22,2],
-"struct_epid_signature.html#ab0fe5f98bff737fcfbfe0b4d658e83f2":[11,0,0,4,22,3],
-"struct_fp_elem_str.html":[11,0,0,4,8],
-"struct_fp_elem_str.html#a5ddb96a5567750f2834335851c906c45":[11,0,0,4,8,0],
-"struct_fq12_elem_str.html":[11,0,0,4,30],
-"struct_fq12_elem_str.html#a0520947335aaf52de90af1dec5bdd112":[11,0,0,4,30,0],
-"struct_fq2_elem_str.html":[11,0,0,4,28],
-"struct_fq2_elem_str.html#ab1d253eb24ba30eaf516ac429daab915":[11,0,0,4,28,0],
-"struct_fq6_elem_str.html":[11,0,0,4,29],
-"struct_fq6_elem_str.html#a89d656e5c815b4a2382d11ef6932a7d2":[11,0,0,4,29,0],
-"struct_fq_elem_str.html":[11,0,0,4,9],
-"struct_fq_elem_str.html#aac1a876b51a8d2c6d1510e4df2fd3f14":[11,0,0,4,9,0],
-"struct_g1_elem_str.html":[11,0,0,4,10],
-"struct_g1_elem_str.html#a3b0e658d6e5697763ad9c633c11d4ec4":[11,0,0,4,10,0],
-"struct_g1_elem_str.html#a8f2455ca314e885ea180dadf84bf27c3":[11,0,0,4,10,1],
-"struct_g2_elem_str.html":[11,0,0,4,11],
-"struct_g2_elem_str.html#a145ec5b20a6f4f00b080e11c8680afc3":[11,0,0,4,11,0],
-"struct_g2_elem_str.html#a43141b2458aecceed8ee2748270f7908":[11,0,0,4,11,1],
-"struct_group_pub_key.html":[11,0,0,4,14],
-"struct_group_pub_key.html#a2a4320ec99fd1a15df412fbf2a8d49f1":[11,0,0,4,14,2],
-"struct_group_pub_key.html#a86be439104fb60b324784baf24a943f9":[11,0,0,4,14,3],
-"struct_group_pub_key.html#a8c22c758ea186f95e3bf4b2ef8451da5":[11,0,0,4,14,1],
-"struct_group_pub_key.html#ae8e77ab4d5eb3c8e566c24a64cce56ee":[11,0,0,4,14,0],
-"struct_group_pub_key__.html":[11,0,0,7],
-"struct_group_pub_key__.html#a2322bc1b42f85e0d01b50b15d064f840":[11,0,0,7,1],
-"struct_group_pub_key__.html#a4d1537e5bd834b6fc92eb2fd7c826329":[11,0,0,7,3],
-"struct_group_pub_key__.html#a4d95b831d9a66071092678547df921ae":[11,0,0,7,2],
-"struct_group_pub_key__.html#afd2192bfd1e24c09951d9c0200a74f95":[11,0,0,7,0],
-"struct_group_rl.html":[11,0,0,4,26],
-"struct_group_rl.html#a51022e172ab8b945efc69f1e63170107":[11,0,0,4,26,0],
-"struct_group_rl.html#a69c41d99cdfc5b6ece7442f466f7ec3f":[11,0,0,4,26,2],
-"struct_group_rl.html#a9067f01c63cdefbc8e23c3cf67a10172":[11,0,0,4,26,1],
-"struct_gt_elem_str.html":[11,0,0,4,12],
-"struct_gt_elem_str.html#aeaeb0e9e1c6efd378a475eb9a6c42132":[11,0,0,4,12,0],
-"struct_i_priv_key.html":[11,0,0,4,15],
-"struct_i_priv_key.html#a6d484175317aef09fb959c3ca55fc70a":[11,0,0,4,15,0],
-"struct_i_priv_key.html#ad400a4237b6d50855538fd40580eb1bb":[11,0,0,4,15,1],
-"struct_join_request.html":[11,0,0,4,19],
-"struct_join_request.html#a005651506fd4511e8a3537f6c3634532":[11,0,0,4,19,1],
-"struct_join_request.html#a55e30a274e83b808db6fbab5ae6c6cb8":[11,0,0,4,19,0],
-"struct_join_request.html#a73bf8989df5f90eb3d06e7a42ad74d1d":[11,0,0,4,19,2],
-"struct_member_precomp.html":[11,0,1,0],
-"struct_member_precomp.html#a4e7412969bed3964f813b093b948e7b4":[11,0,1,0,1],
-"struct_member_precomp.html#a55e5c4b25c8f0f426969a8d745260fe5":[11,0,1,0,0],
-"struct_member_precomp.html#a573551f6494e372f44fd3bdf5b02aeda":[11,0,1,0,3],
-"struct_member_precomp.html#a879d5a7b0c30088b23f6e5c5fc62f834":[11,0,1,0,2],
-"struct_membership_credential.html":[11,0,0,4,18],
-"struct_membership_credential.html#a2c5c0d22999d6917fea5ad6618883bcf":[11,0,0,4,18,2],
-"struct_membership_credential.html#a6d38ac3a9c5417833b8adb9b22bc9dc8":[11,0,0,4,18,0],
-"struct_membership_credential.html#afbff64ec55888c7e2a658eabb5e16671":[11,0,0,4,18,1],
-"struct_nr_proof.html":[11,0,0,4,21],
-"struct_nr_proof.html#a0de1aa69acf3d93da34cf4a613b359a1":[11,0,0,4,21,0],
-"struct_nr_proof.html#a717ec36a6c91acd01d9b642bb20fc178":[11,0,0,4,21,1],
-"struct_nr_proof.html#ace535065bbf96502b893ac677dc8dcd3":[11,0,0,4,21,3],
-"struct_nr_proof.html#ae2e9f22089793a4d44a0f7f5cdb78a0c":[11,0,0,4,21,2],
-"struct_oct_str128.html":[11,0,0,4,4],
-"struct_oct_str128.html#a7482aa9b0b580fdd50bd65419d52d4b9":[11,0,0,4,4,0],
-"struct_oct_str16.html":[11,0,0,4,1],
-"struct_oct_str16.html#a86ed6671693a3f60ec4ff7de2c1206c3":[11,0,0,4,1,0],
-"struct_oct_str256.html":[11,0,0,4,5],
-"struct_oct_str256.html#a359781bb84f5717a16094583a00ef14e":[11,0,0,4,5,0],
-"struct_oct_str32.html":[11,0,0,4,2],
-"struct_oct_str32.html#a5588a7e70f3d73f6ce58b567a9f5c5c8":[11,0,0,4,2,0],
-"struct_oct_str512.html":[11,0,0,4,6],
-"struct_oct_str512.html#abd4d1b97fe49321571da86de1aeac653":[11,0,0,4,6,0],
-"struct_oct_str64.html":[11,0,0,4,3],
-"struct_oct_str64.html#a0e107d78192a5ae0b48ed9e5c4eab0fc":[11,0,0,4,3,0],
-"struct_oct_str8.html":[11,0,0,4,0],
-"struct_oct_str8.html#a5e6c56fda48c88b419e621b464b03bef":[11,0,0,4,0,0],
-"struct_pre_computed_signature.html":[11,0,1,1],
-"struct_pre_computed_signature.html#a2a4eaffe2717bd9c8c360599612adbe6":[11,0,1,1,3],
-"struct_pre_computed_signature.html#a54462643b8a2b4f2741bf8d2e6909d11":[11,0,1,1,6],
-"struct_pre_computed_signature.html#a666710432d9d54ca896647a976892c4f":[11,0,1,1,2],
-"struct_pre_computed_signature.html#a6a1db672c609943fe7af84320dc68ba3":[11,0,1,1,7],
-"struct_pre_computed_signature.html#a72be597624957e3d668c95ff6f445f94":[11,0,1,1,4],
-"struct_pre_computed_signature.html#a73471643dc757115701833ca2e831a72":[11,0,1,1,10],
-"struct_pre_computed_signature.html#a79f06fb57842597372e00dd34c1a804a":[11,0,1,1,5],
-"struct_pre_computed_signature.html#a9cc2eb61572a1aca9e6bc3d5e6f4c1fe":[11,0,1,1,1],
-"struct_pre_computed_signature.html#ac244bd559a96812bcee7671abc299b66":[11,0,1,1,8],
-"struct_pre_computed_signature.html#acd0674d5b5e96244645e9abef7bdbddc":[11,0,1,1,9],
-"struct_pre_computed_signature.html#af23f3f9693857a33fe8564644612ea37":[11,0,1,1,0],
-"struct_priv_key.html":[11,0,0,4,16],
-"struct_priv_key.html#a266c7e369b8b868ef5755e9cd3c0c849":[11,0,0,4,16,0],
-"struct_priv_key.html#aa805f9e124f05bdb733c85cb93614cbd":[11,0,0,4,16,3],
-"struct_priv_key.html#ab416dcb4366427c24b44c2a02e4ae7c8":[11,0,0,4,16,2],
-"struct_priv_key.html#ad7ee0392a583edd2e287cf8c1f9066ba":[11,0,0,4,16,1],
-"struct_priv_key__.html":[11,0,0,8],
-"struct_priv_key__.html#a0892f451bb967dd7c99fe1d926d5056f":[11,0,0,8,2],
-"struct_priv_key__.html#a183eb6658baec9825313ab534608fa10":[11,0,0,8,1],
-"struct_priv_key__.html#a327d7192cbb6b5638e3f6f1c3d9d2d5b":[11,0,0,8,3],
-"struct_priv_key__.html#aaf02af1379a0801f49a3f8845e7a1b1f":[11,0,0,8,0],
-"struct_priv_rl.html":[11,0,0,4,23],
-"struct_priv_rl.html#a4c6b51cec760f7e81ca8635422ac6a50":[11,0,0,4,23,3],
-"struct_priv_rl.html#a60d73f9ef5fc81f117b3abadf8c18466":[11,0,0,4,23,0],
-"struct_priv_rl.html#a6da9639ec4061689d1c30a58e0befd14":[11,0,0,4,23,2],
-"struct_priv_rl.html#af7317529b8e55476bd06b66ed8131d64":[11,0,0,4,23,1],
-"struct_sha256_digest.html":[11,0,0,0,4,0],
-"struct_sha256_digest.html#a4b6462ddd3f89e4c40220ceb6b1c7f28":[11,0,0,0,4,0,0],
-"struct_sig_rl.html":[11,0,0,4,25],
-"struct_sig_rl.html#a12757d30fcccd310716433948e0b603e":[11,0,0,4,25,1],
-"struct_sig_rl.html#a9dfb6b508db9051f4dc480a51d702af2":[11,0,0,4,25,2],
-"struct_sig_rl.html#ac23a919993d99d24a5150302f1778102":[11,0,0,4,25,0],
-"struct_sig_rl.html#ac9d4c343c539dba799e1f42eb38b351f":[11,0,0,4,25,3],
-"struct_sig_rl_entry.html":[11,0,0,4,24],
-"struct_sig_rl_entry.html#a0dfeb058614e81878bfbf86ae3edac3c":[11,0,0,4,24,1],
-"struct_sig_rl_entry.html#ac6a47ff0d1b8ea1512e0ff14983ac5ce":[11,0,0,4,24,0],
-"struct_verifier_precomp.html":[11,0,2,0],
-"struct_verifier_precomp.html#a8caf79578e3c0baf91921460391103ca":[11,0,2,0,2],
-"struct_verifier_precomp.html#ab061d6cc07d1467eeb5bf25f3ea7e306":[11,0,2,0,3],
-"struct_verifier_precomp.html#ad1106376f12772942af0331eb74de6e5":[11,0,2,0,0],
-"struct_verifier_precomp.html#af8fd90f3a5a2be932a97dcd86099d5b2":[11,0,2,0,1],
-"struct_verifier_rl.html":[11,0,0,4,27],
-"struct_verifier_rl.html#a1e3f84b873bccc0c882aa6432c42d2f7":[11,0,0,4,27,3],
-"struct_verifier_rl.html#a5d9a9265fffa96fd5f9260543eb08c68":[11,0,0,4,27,0],
-"struct_verifier_rl.html#ab85c4666d16145ff16443e84468d2d7d":[11,0,0,4,27,1],
-"struct_verifier_rl.html#ac7d3dceab4772096bbbeb3fa735d18a9":[11,0,0,4,27,2],
-"struct_verifier_rl.html#afa44ab69ffff5a3508366aeb2131fdaa":[11,0,0,4,27,4],
-"user":[0],
-"verifysig_8c-example.html":[12,1]
+"struct_basic_signature.html":[16,0,0,4,21],
+"struct_basic_signature.html#a0078cc83ecf6c7e31f96b7d44aa60e21":[16,0,0,4,21,2],
+"struct_basic_signature.html#a0e8ea6a2cd3af10e9b59d96d7d06bc69":[16,0,0,4,21,6],
+"struct_basic_signature.html#a4daa94db5068db3f10960f3dd178d603":[16,0,0,4,21,1],
+"struct_basic_signature.html#a69115a4776d15b48411dd6c3a76d0f3d":[16,0,0,4,21,3],
+"struct_basic_signature.html#a730f74d85cfb4fa4089d43c87b97a624":[16,0,0,4,21,7],
+"struct_basic_signature.html#a79d8dec8c5da176e497abf22e4c43adb":[16,0,0,4,21,5],
+"struct_basic_signature.html#a91daebc5b577688afeed2a7ee7913245":[16,0,0,4,21,4],
+"struct_basic_signature.html#ae90cb6af66b010ae39913f033c1e65ac":[16,0,0,4,21,0],
+"struct_big_num_str.html":[16,0,0,4,8],
+"struct_big_num_str.html#a442dcf33889b4f85c5b1228d2c8e6838":[16,0,0,4,8,0],
+"struct_compressed_priv_key.html":[16,0,0,4,18],
+"struct_compressed_priv_key.html#a0b0535f0567eb0e48f799d27991d0f66":[16,0,0,4,18,0],
+"struct_compressed_priv_key.html#a54b9af7699f517bbaef3d52d03e3fed8":[16,0,0,4,18,2],
+"struct_compressed_priv_key.html#ac6689899f1d9a6a8c5e4915563679840":[16,0,0,4,18,1],
+"struct_ecdsa_private_key.html":[16,0,0,4,34],
+"struct_ecdsa_private_key.html#a97efee9b4079f95d94a104f9a6d8c96d":[16,0,0,4,34,0],
+"struct_ecdsa_public_key.html":[16,0,0,4,33],
+"struct_ecdsa_public_key.html#a37c51614faf022eec491b4de8f3a13e1":[16,0,0,4,33,0],
+"struct_ecdsa_public_key.html#a4503c4613386cbc78add1dc245c99284":[16,0,0,4,33,1],
+"struct_ecdsa_signature.html":[16,0,0,4,32],
+"struct_ecdsa_signature.html#a2efd6bf37b12f35135bf325fa491b029":[16,0,0,4,32,1],
+"struct_ecdsa_signature.html#a64b623605a55a267a36df18f29142d0d":[16,0,0,4,32,0],
+"struct_epid11_basic_signature.html":[16,0,0,4,0,8],
+"struct_epid11_basic_signature.html#a1a73fc922f69e2499643dd4c53d0d42d":[16,0,0,4,0,8,5],
+"struct_epid11_basic_signature.html#a267cf4e17d10584736b0c38f3668d822":[16,0,0,4,0,8,12],
+"struct_epid11_basic_signature.html#a2718346665210b7e26521bf4a15cb3bd":[16,0,0,4,0,8,9],
+"struct_epid11_basic_signature.html#a27fd7ae99d1ada652e21e7508a467c0b":[16,0,0,4,0,8,0],
+"struct_epid11_basic_signature.html#a29a700f3bec251600e18b2292081df4b":[16,0,0,4,0,8,6],
+"struct_epid11_basic_signature.html#a5882fcbfd272774e12e50a2d77f0b139":[16,0,0,4,0,8,2],
+"struct_epid11_basic_signature.html#a58b058a9c5119a240177acfade328b3b":[16,0,0,4,0,8,11],
+"struct_epid11_basic_signature.html#a911441845fc9b82d514133371b5ba87c":[16,0,0,4,0,8,10],
+"struct_epid11_basic_signature.html#a9cc6efcd3d7270022779bd16776168ed":[16,0,0,4,0,8,1],
+"struct_epid11_basic_signature.html#ae17b45194997a6fa13c6014a51ec711c":[16,0,0,4,0,8,8],
+"struct_epid11_basic_signature.html#aeb221cf52bc2b1a9bf6e0a9779bfd20f":[16,0,0,4,0,8,4],
+"struct_epid11_basic_signature.html#af18200712d2cf3ed3ccaee328e8a4e0f":[16,0,0,4,0,8,3],
+"struct_epid11_basic_signature.html#afe28bad6328f81e6f7af011cc96ac2e5":[16,0,0,4,0,8,7],
+"struct_epid11_g2_elem_str.html":[16,0,0,4,0,4],
+"struct_epid11_g2_elem_str.html#a9e8984e479bcbe8bd36c65e80c340032":[16,0,0,4,0,4,1],
+"struct_epid11_g2_elem_str.html#af28558484298f4f56377ededf57a4a04":[16,0,0,4,0,4,0],
+"struct_epid11_group_pub_key.html":[16,0,0,4,0,7],
+"struct_epid11_group_pub_key.html#a056c7138246e2bdcd47eaad501b756bb":[16,0,0,4,0,7,3],
+"struct_epid11_group_pub_key.html#a36f688472e2655052d485eac67d8c362":[16,0,0,4,0,7,1],
+"struct_epid11_group_pub_key.html#a964344b3c595bdd585bb9b5d9d0ea762":[16,0,0,4,0,7,0],
+"struct_epid11_group_pub_key.html#aa724e9d2f0cb6019c05547d76a13b72a":[16,0,0,4,0,7,2],
+"struct_epid11_group_rl.html":[16,0,0,4,0,14],
+"struct_epid11_group_rl.html#a35cb954f598d4006b0f047cde77010a5":[16,0,0,4,0,14,1],
+"struct_epid11_group_rl.html#a63afa9863e8dcb63ff884e6e4093c481":[16,0,0,4,0,14,2],
+"struct_epid11_group_rl.html#a97f165c59bc447e3ca3c2148a096710f":[16,0,0,4,0,14,0],
+"struct_epid11_gt_elem_str.html":[16,0,0,4,0,5],
+"struct_epid11_gt_elem_str.html#aed8dd86f1696c2f3537154fc904bf2b0":[16,0,0,4,0,5,0],
+"struct_epid11_nr_proof.html":[16,0,0,4,0,9],
+"struct_epid11_nr_proof.html#a1ad7fe6b32c09f2504ee49731c0ad145":[16,0,0,4,0,9,1],
+"struct_epid11_nr_proof.html#a2e5ee8dc25d296538dce935397a93d68":[16,0,0,4,0,9,0],
+"struct_epid11_nr_proof.html#a5ad9ba3bfac4eac37fd4a4e33ea65ddc":[16,0,0,4,0,9,3],
+"struct_epid11_nr_proof.html#aa8406e938b2f87bded9e374e93a8ee5d":[16,0,0,4,0,9,2],
+"struct_epid11_params.html":[16,0,0,4,0,6],
+"struct_epid11_params.html#a01381f84b2d747b6273e21c71c58a1b0":[16,0,0,4,0,6,0],
+"struct_epid11_params.html#a02bd6fa2ab256e3a07533e947ab0101e":[16,0,0,4,0,6,10],
+"struct_epid11_params.html#a0fe238db4ebc0225899dc2dac97d11c0":[16,0,0,4,0,6,9],
+"struct_epid11_params.html#a1c6bbc4e066449d9c329f88cb653ef7c":[16,0,0,4,0,6,6],
+"struct_epid11_params.html#a27b45ed7771a3024d1d059b4b4ff6eae":[16,0,0,4,0,6,2],
+"struct_epid11_params.html#a2aa4d8a2ebe0dfeb6d930fd7b39f9d1a":[16,0,0,4,0,6,11],
+"struct_epid11_params.html#a49462f35596d07a456a731d0690fdd83":[16,0,0,4,0,6,14],
+"struct_epid11_params.html#a77a8350b97a7afb584a46eb5b32f03bf":[16,0,0,4,0,6,12],
+"struct_epid11_params.html#a7eb9a1371d7187ae81bccfa8d5595033":[16,0,0,4,0,6,7],
+"struct_epid11_params.html#a835e70da717cd5b0c94e242a6418a287":[16,0,0,4,0,6,5],
+"struct_epid11_params.html#aacc39ebe0cc625321039ffb6be0b0e87":[16,0,0,4,0,6,4],
+"struct_epid11_params.html#aad03fd1cc3955bb8879535fa7298123f":[16,0,0,4,0,6,13],
+"struct_epid11_params.html#ade3f88ce73d7de656ec67d9fdb0719d7":[16,0,0,4,0,6,3],
+"struct_epid11_params.html#ae2d1dc635d9d7cba496c3d64fb6f9d5b":[16,0,0,4,0,6,8],
+"struct_epid11_params.html#ae8770bb921aac9214ff8c45c41dbb228":[16,0,0,4,0,6,1],
+"struct_epid11_params.html#af22cfcd6c7ec0e7e7369b79554b963bd":[16,0,0,4,0,6,15],
+"struct_epid11_priv_rl.html":[16,0,0,4,0,11],
+"struct_epid11_priv_rl.html#a2b3899f5a35bf64f860d6d91bccb03c8":[16,0,0,4,0,11,3],
+"struct_epid11_priv_rl.html#aa8945d81e30674b52a6d0900b64feb3c":[16,0,0,4,0,11,1],
+"struct_epid11_priv_rl.html#abbb75fee81aecb2dde7e2daab895ad3b":[16,0,0,4,0,11,0],
+"struct_epid11_priv_rl.html#ad95f880f40e2f40c723f5bdbd22ecfa2":[16,0,0,4,0,11,2],
+"struct_epid11_sig_rl.html":[16,0,0,4,0,13],
+"struct_epid11_sig_rl.html#a6473f8a98f76c9f82183041ea5ae17e3":[16,0,0,4,0,13,0],
+"struct_epid11_sig_rl.html#a8c654d43df132db7874f4c84c177dc12":[16,0,0,4,0,13,2],
+"struct_epid11_sig_rl.html#aa38674729293f4879ff94328dd3c59b1":[16,0,0,4,0,13,3],
+"struct_epid11_sig_rl.html#ad45b0e3e1be59649150dd34c104000ac":[16,0,0,4,0,13,1],
+"struct_epid11_sig_rl_entry.html":[16,0,0,4,0,12],
+"struct_epid11_sig_rl_entry.html#a5de66e1352eafe95774a0d76bac8f01a":[16,0,0,4,0,12,1],
+"struct_epid11_sig_rl_entry.html#abe47cfbd00684941f93a211417bedf0c":[16,0,0,4,0,12,0],
+"struct_epid11_signature.html":[16,0,0,4,0,10],
+"struct_epid11_signature.html#a43cb3ed13c862ff05a9292623ad57c5e":[16,0,0,4,0,10,1],
+"struct_epid11_signature.html#a48526e73f02ad3f1544c4c71c481f153":[16,0,0,4,0,10,3],
+"struct_epid11_signature.html#abf24a8df563ba3f535486d8dad7384f4":[16,0,0,4,0,10,2],
+"struct_epid11_signature.html#ad25c277223a5210063163ea554d08ad4":[16,0,0,4,0,10,0],
+"struct_epid11_verifier_precomp.html":[16,0,2,0,0],
+"struct_epid11_verifier_precomp.html#a03138e937f4488bdbc52ed473dc313da":[16,0,2,0,0,3],
+"struct_epid11_verifier_precomp.html#a0a980adb039089263ec59a995600ee91":[16,0,2,0,0,0],
+"struct_epid11_verifier_precomp.html#a14ebadf105aff085edb9a817a2d1db89":[16,0,2,0,0,2],
+"struct_epid11_verifier_precomp.html#ad0ff2a13c2c87460296900dde72a2f30":[16,0,2,0,0,1],
+"struct_epid2_params.html":[16,0,0,4,14],
+"struct_epid2_params.html#a023603228fed2854ddae2e228938940f":[16,0,0,4,14,6],
+"struct_epid2_params.html#a200a0cba1c9e4ad512bece23f2461a5f":[16,0,0,4,14,7],
+"struct_epid2_params.html#a2f868edb49be49f645101ef5ebbbc551":[16,0,0,4,14,0],
+"struct_epid2_params.html#a4c5195b4fa9393a07a121336202531ad":[16,0,0,4,14,2],
+"struct_epid2_params.html#a609b0aac17fca34fe39bee29676a9618":[16,0,0,4,14,3],
+"struct_epid2_params.html#ac0e0dad45b10927860cd5fa4f8101f08":[16,0,0,4,14,5],
+"struct_epid2_params.html#ac2d7507c6f58c3451beacacb91b52695":[16,0,0,4,14,1],
+"struct_epid2_params.html#ae1d8f5d6036a82064e91bc137b278e74":[16,0,0,4,14,8],
+"struct_epid2_params.html#af23f07fb0e1745c0ad14aceeaa946928":[16,0,0,4,14,4],
+"struct_epid_ca_certificate.html":[16,0,0,2,2],
+"struct_epid_ca_certificate.html#a280e0b0238cf45834c21849ab8a7e124":[16,0,0,2,2,1],
+"struct_epid_ca_certificate.html#a2811c1914ffae913820f13da914c8f01":[16,0,0,2,2,0],
+"struct_epid_ca_certificate.html#a2f8f09ae02919c379c38386668b47418":[16,0,0,2,2,6],
+"struct_epid_ca_certificate.html#a3a44e8050ca2f5085652b2b4e15b779c":[16,0,0,2,2,3],
+"struct_epid_ca_certificate.html#a4f77996f90ed7da1d0503c4236b2c9d1":[16,0,0,2,2,7],
+"struct_epid_ca_certificate.html#a9d2fc21f46cf9fc96e2ea557b70e5356":[16,0,0,2,2,4],
+"struct_epid_ca_certificate.html#ab9d4c318b1fc8d38d3ce53b29f2dfee2":[16,0,0,2,2,5],
+"struct_epid_ca_certificate.html#abd69cce8d5e3940787ee0d17f72184ab":[16,0,0,2,2,8],
+"struct_epid_ca_certificate.html#ac03cf7257c52ad14e3dd3201b930dd50":[16,0,0,2,2,2],
+"struct_epid_file_header.html":[16,0,0,2,1],
+"struct_epid_file_header.html#a35d43c51c1739940381e4898ca87b824":[16,0,0,2,1,0],
+"struct_epid_file_header.html#af5d48c739cc6c00c6e1ce35abf4f1473":[16,0,0,2,1,1],
+"struct_epid_signature.html":[16,0,0,4,23],
+"struct_epid_signature.html#a4155f3f4f1223fc4ae50c94f5305def1":[16,0,0,4,23,1],
+"struct_epid_signature.html#a62a6b0ffcd5f68dd3d2786a58fe43017":[16,0,0,4,23,0],
+"struct_epid_signature.html#a89d2e38223944310b6eeeadf6061a2dd":[16,0,0,4,23,2],
+"struct_epid_signature.html#ab0fe5f98bff737fcfbfe0b4d658e83f2":[16,0,0,4,23,3],
+"struct_fp_elem_str.html":[16,0,0,4,9],
+"struct_fp_elem_str.html#a5ddb96a5567750f2834335851c906c45":[16,0,0,4,9,0],
+"struct_fq12_elem_str.html":[16,0,0,4,31],
+"struct_fq12_elem_str.html#a0520947335aaf52de90af1dec5bdd112":[16,0,0,4,31,0],
+"struct_fq2_elem_str.html":[16,0,0,4,29],
+"struct_fq2_elem_str.html#ab1d253eb24ba30eaf516ac429daab915":[16,0,0,4,29,0],
+"struct_fq3_elem_str.html":[16,0,0,4,0,3],
+"struct_fq3_elem_str.html#af1be0a4d5c9c674d75bec34f95e3c731":[16,0,0,4,0,3,0],
+"struct_fq6_elem_str.html":[16,0,0,4,30],
+"struct_fq6_elem_str.html#a89d656e5c815b4a2382d11ef6932a7d2":[16,0,0,4,30,0],
+"struct_fq_elem_str.html":[16,0,0,4,10],
+"struct_fq_elem_str.html#aac1a876b51a8d2c6d1510e4df2fd3f14":[16,0,0,4,10,0],
+"struct_g1_elem_str.html":[16,0,0,4,11],
+"struct_g1_elem_str.html#a3b0e658d6e5697763ad9c633c11d4ec4":[16,0,0,4,11,0],
+"struct_g1_elem_str.html#a8f2455ca314e885ea180dadf84bf27c3":[16,0,0,4,11,1],
+"struct_g2_elem_str.html":[16,0,0,4,12],
+"struct_g2_elem_str.html#a145ec5b20a6f4f00b080e11c8680afc3":[16,0,0,4,12,0],
+"struct_g2_elem_str.html#a43141b2458aecceed8ee2748270f7908":[16,0,0,4,12,1],
+"struct_group_pub_key.html":[16,0,0,4,15],
+"struct_group_pub_key.html#a2a4320ec99fd1a15df412fbf2a8d49f1":[16,0,0,4,15,2],
+"struct_group_pub_key.html#a86be439104fb60b324784baf24a943f9":[16,0,0,4,15,3],
+"struct_group_pub_key.html#a8c22c758ea186f95e3bf4b2ef8451da5":[16,0,0,4,15,1],
+"struct_group_pub_key.html#ae8e77ab4d5eb3c8e566c24a64cce56ee":[16,0,0,4,15,0],
+"struct_group_rl.html":[16,0,0,4,27],
+"struct_group_rl.html#a51022e172ab8b945efc69f1e63170107":[16,0,0,4,27,0],
+"struct_group_rl.html#a69c41d99cdfc5b6ece7442f466f7ec3f":[16,0,0,4,27,2],
+"struct_group_rl.html#a9067f01c63cdefbc8e23c3cf67a10172":[16,0,0,4,27,1],
+"struct_gt_elem_str.html":[16,0,0,4,13],
+"struct_gt_elem_str.html#aeaeb0e9e1c6efd378a475eb9a6c42132":[16,0,0,4,13,0],
+"struct_i_priv_key.html":[16,0,0,4,16],
+"struct_i_priv_key.html#a6d484175317aef09fb959c3ca55fc70a":[16,0,0,4,16,0],
+"struct_i_priv_key.html#ad400a4237b6d50855538fd40580eb1bb":[16,0,0,4,16,1],
+"struct_join_request.html":[16,0,0,4,20],
+"struct_join_request.html#a005651506fd4511e8a3537f6c3634532":[16,0,0,4,20,1],
+"struct_join_request.html#a55e30a274e83b808db6fbab5ae6c6cb8":[16,0,0,4,20,0],
+"struct_join_request.html#a73bf8989df5f90eb3d06e7a42ad74d1d":[16,0,0,4,20,2],
+"struct_member_precomp.html":[16,0,1,0],
+"struct_member_precomp.html#a4e7412969bed3964f813b093b948e7b4":[16,0,1,0,1],
+"struct_member_precomp.html#a55e5c4b25c8f0f426969a8d745260fe5":[16,0,1,0,0],
+"struct_member_precomp.html#a573551f6494e372f44fd3bdf5b02aeda":[16,0,1,0,3],
+"struct_member_precomp.html#a879d5a7b0c30088b23f6e5c5fc62f834":[16,0,1,0,2],
+"struct_membership_credential.html":[16,0,0,4,19],
+"struct_membership_credential.html#a2c5c0d22999d6917fea5ad6618883bcf":[16,0,0,4,19,2],
+"struct_membership_credential.html#a6d38ac3a9c5417833b8adb9b22bc9dc8":[16,0,0,4,19,0],
+"struct_membership_credential.html#afbff64ec55888c7e2a658eabb5e16671":[16,0,0,4,19,1],
+"struct_nr_proof.html":[16,0,0,4,22],
+"struct_nr_proof.html#a0de1aa69acf3d93da34cf4a613b359a1":[16,0,0,4,22,0],
+"struct_nr_proof.html#a717ec36a6c91acd01d9b642bb20fc178":[16,0,0,4,22,1],
+"struct_nr_proof.html#ace535065bbf96502b893ac677dc8dcd3":[16,0,0,4,22,3],
+"struct_nr_proof.html#ae2e9f22089793a4d44a0f7f5cdb78a0c":[16,0,0,4,22,2],
+"struct_oct_str128.html":[16,0,0,4,5],
+"struct_oct_str128.html#a7482aa9b0b580fdd50bd65419d52d4b9":[16,0,0,4,5,0],
+"struct_oct_str16.html":[16,0,0,4,2],
+"struct_oct_str16.html#a86ed6671693a3f60ec4ff7de2c1206c3":[16,0,0,4,2,0],
+"struct_oct_str256.html":[16,0,0,4,6],
+"struct_oct_str256.html#a359781bb84f5717a16094583a00ef14e":[16,0,0,4,6,0],
+"struct_oct_str32.html":[16,0,0,4,3]
};
diff --git a/doc/html/navtreeindex2.js b/doc/html/navtreeindex2.js
new file mode 100644
index 0000000..e4d77a3
--- /dev/null
+++ b/doc/html/navtreeindex2.js
@@ -0,0 +1,61 @@
+var NAVTREEINDEX2 =
+{
+"struct_oct_str32.html#a5588a7e70f3d73f6ce58b567a9f5c5c8":[16,0,0,4,3,0],
+"struct_oct_str512.html":[16,0,0,4,7],
+"struct_oct_str512.html#abd4d1b97fe49321571da86de1aeac653":[16,0,0,4,7,0],
+"struct_oct_str600.html":[16,0,0,4,0,1],
+"struct_oct_str600.html#a06d53af92a06e1decc6062fd16c43a59":[16,0,0,4,0,1,0],
+"struct_oct_str64.html":[16,0,0,4,4],
+"struct_oct_str64.html#a0e107d78192a5ae0b48ed9e5c4eab0fc":[16,0,0,4,4,0],
+"struct_oct_str768.html":[16,0,0,4,0,2],
+"struct_oct_str768.html#ae45eea89259bd22e60a8d960063921cc":[16,0,0,4,0,2,0],
+"struct_oct_str8.html":[16,0,0,4,1],
+"struct_oct_str8.html#a5e6c56fda48c88b419e621b464b03bef":[16,0,0,4,1,0],
+"struct_oct_str80.html":[16,0,0,4,0,0],
+"struct_oct_str80.html#af80e2b81554109d9a41c5e771aceb8c9":[16,0,0,4,0,0,0],
+"struct_pre_computed_signature.html":[16,0,1,1],
+"struct_pre_computed_signature.html#a2a4eaffe2717bd9c8c360599612adbe6":[16,0,1,1,3],
+"struct_pre_computed_signature.html#a54462643b8a2b4f2741bf8d2e6909d11":[16,0,1,1,6],
+"struct_pre_computed_signature.html#a666710432d9d54ca896647a976892c4f":[16,0,1,1,2],
+"struct_pre_computed_signature.html#a6a1db672c609943fe7af84320dc68ba3":[16,0,1,1,7],
+"struct_pre_computed_signature.html#a72be597624957e3d668c95ff6f445f94":[16,0,1,1,4],
+"struct_pre_computed_signature.html#a73471643dc757115701833ca2e831a72":[16,0,1,1,10],
+"struct_pre_computed_signature.html#a79f06fb57842597372e00dd34c1a804a":[16,0,1,1,5],
+"struct_pre_computed_signature.html#a9cc2eb61572a1aca9e6bc3d5e6f4c1fe":[16,0,1,1,1],
+"struct_pre_computed_signature.html#ac244bd559a96812bcee7671abc299b66":[16,0,1,1,8],
+"struct_pre_computed_signature.html#acd0674d5b5e96244645e9abef7bdbddc":[16,0,1,1,9],
+"struct_pre_computed_signature.html#af23f3f9693857a33fe8564644612ea37":[16,0,1,1,0],
+"struct_priv_key.html":[16,0,0,4,17],
+"struct_priv_key.html#a266c7e369b8b868ef5755e9cd3c0c849":[16,0,0,4,17,0],
+"struct_priv_key.html#aa805f9e124f05bdb733c85cb93614cbd":[16,0,0,4,17,3],
+"struct_priv_key.html#ab416dcb4366427c24b44c2a02e4ae7c8":[16,0,0,4,17,2],
+"struct_priv_key.html#ad7ee0392a583edd2e287cf8c1f9066ba":[16,0,0,4,17,1],
+"struct_priv_rl.html":[16,0,0,4,24],
+"struct_priv_rl.html#a4c6b51cec760f7e81ca8635422ac6a50":[16,0,0,4,24,3],
+"struct_priv_rl.html#a60d73f9ef5fc81f117b3abadf8c18466":[16,0,0,4,24,0],
+"struct_priv_rl.html#a6da9639ec4061689d1c30a58e0befd14":[16,0,0,4,24,2],
+"struct_priv_rl.html#af7317529b8e55476bd06b66ed8131d64":[16,0,0,4,24,1],
+"struct_sha256_digest.html":[16,0,0,0,4,0],
+"struct_sha256_digest.html#a4b6462ddd3f89e4c40220ceb6b1c7f28":[16,0,0,0,4,0,0],
+"struct_sig_rl.html":[16,0,0,4,26],
+"struct_sig_rl.html#a12757d30fcccd310716433948e0b603e":[16,0,0,4,26,1],
+"struct_sig_rl.html#a9dfb6b508db9051f4dc480a51d702af2":[16,0,0,4,26,2],
+"struct_sig_rl.html#ac23a919993d99d24a5150302f1778102":[16,0,0,4,26,0],
+"struct_sig_rl.html#ac9d4c343c539dba799e1f42eb38b351f":[16,0,0,4,26,3],
+"struct_sig_rl_entry.html":[16,0,0,4,25],
+"struct_sig_rl_entry.html#a0dfeb058614e81878bfbf86ae3edac3c":[16,0,0,4,25,1],
+"struct_sig_rl_entry.html#ac6a47ff0d1b8ea1512e0ff14983ac5ce":[16,0,0,4,25,0],
+"struct_verifier_precomp.html":[16,0,2,1],
+"struct_verifier_precomp.html#a8caf79578e3c0baf91921460391103ca":[16,0,2,1,2],
+"struct_verifier_precomp.html#ab061d6cc07d1467eeb5bf25f3ea7e306":[16,0,2,1,3],
+"struct_verifier_precomp.html#ad1106376f12772942af0331eb74de6e5":[16,0,2,1,0],
+"struct_verifier_precomp.html#af8fd90f3a5a2be932a97dcd86099d5b2":[16,0,2,1,1],
+"struct_verifier_precomp.html#afc3e29a325c95c62bb192d5f8cdd5c1c":[16,0,2,1,4],
+"struct_verifier_rl.html":[16,0,0,4,28],
+"struct_verifier_rl.html#a1e3f84b873bccc0c882aa6432c42d2f7":[16,0,0,4,28,3],
+"struct_verifier_rl.html#a5d9a9265fffa96fd5f9260543eb08c68":[16,0,0,4,28,0],
+"struct_verifier_rl.html#ab85c4666d16145ff16443e84468d2d7d":[16,0,0,4,28,1],
+"struct_verifier_rl.html#ac7d3dceab4772096bbbeb3fa735d18a9":[16,0,0,4,28,2],
+"struct_verifier_rl.html#afa44ab69ffff5a3508366aeb2131fdaa":[16,0,0,4,28,4],
+"user":[0]
+};
diff --git a/doc/html/nr__prove_8c.html b/doc/html/nr__prove_8c.html
deleted file mode 100644
index 980c3ca..0000000
--- a/doc/html/nr__prove_8c.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/member/nr_prove.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('nr__prove_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">nr_prove.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>EpidNrProve implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="member_2api_8h.html">epid/member/api.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="member_2context_8h.html">epid/member/context.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_nr_verify_commit_values.html">NrVerifyCommitValues</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Storage for values to create commitment in NrProve algorithm. <a href="struct_nr_verify_commit_values.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="nr__prove_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">BREAK_ON_EPID_ERROR</a>(ret)</td></tr>
-<tr class="memdesc:a5638f861b82f1746ea1af0b384ef8ff1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handle SDK Error with Break. <a href="#a5638f861b82f1746ea1af0b384ef8ff1">More...</a><br /></td></tr>
-<tr class="separator:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac362b8d551a6a185f226af3be3d931f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac362b8d551a6a185f226af3be3d931f8"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="nr__prove_8c.html#ac362b8d551a6a185f226af3be3d931f8">COUNT_OF</a>(A)&#160;&#160;&#160;(sizeof(A) / sizeof((A)[0]))</td></tr>
-<tr class="memdesc:ac362b8d551a6a185f226af3be3d931f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Count of elements in array. <br /></td></tr>
-<tr class="separator:ac362b8d551a6a185f226af3be3d931f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:gac8e2c6c1fead8030785a40427905a2cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc">EpidNrProve</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, <a class="el" href="struct_sig_rl_entry.html">SigRlEntry</a> const *sigrl_entry, <a class="el" href="struct_nr_proof.html">NrProof</a> *proof)</td></tr>
-<tr class="memdesc:gac8e2c6c1fead8030785a40427905a2cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calculates a non-revoked proof for a single signature based revocation list entry. <a href="group___epid_member_module.html#gac8e2c6c1fead8030785a40427905a2cc">More...</a><br /></td></tr>
-<tr class="separator:gac8e2c6c1fead8030785a40427905a2cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>EpidNrProve implementation. </p>
-</div><h2 class="groupheader">Macro Definition Documentation</h2>
-<a class="anchor" id="a5638f861b82f1746ea1af0b384ef8ff1"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define BREAK_ON_EPID_ERROR</td>
- <td>(</td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">ret</td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != (ret)) { \</div><div class="line"> break; \</div><div class="line"> }</div><div class="ttc" id="group___error_codes_html_ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9"><div class="ttname"><a href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a></div><div class="ttdoc">no error </div><div class="ttdef"><b>Definition:</b> errors.h:41</div></div>
-</div><!-- fragment -->
-<p>Handle SDK Error with Break. </p>
-
-</div>
-</div>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_512d3e62841a8535b716ec4cf8b9e950.html">member</a></li><li class="navelem"><a class="el" href="nr__prove_8c.html">nr_prove.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/nrverify_8c.html b/doc/html/nrverify_8c.html
deleted file mode 100644
index 36f25d9..0000000
--- a/doc/html/nrverify_8c.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/verifier/nrverify.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('nrverify_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">nrverify.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>NrVerfy implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="verifier_2api_8h.html">epid/verifier/api.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="verifier_2context_8h.html">epid/verifier/context.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_nr_verify_commit_values.html">NrVerifyCommitValues</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Storage for values to create commitment in NrProve algorithm. <a href="struct_nr_verify_commit_values.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="nrverify_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">BREAK_ON_EPID_ERROR</a>(ret)</td></tr>
-<tr class="memdesc:a5638f861b82f1746ea1af0b384ef8ff1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handle SDK Error with Break. <a href="#a5638f861b82f1746ea1af0b384ef8ff1">More...</a><br /></td></tr>
-<tr class="separator:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:gac6e2fab59e3af8a33a74a5b201642700"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700">EpidNrVerify</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, void const *msg, size_t msg_len, <a class="el" href="struct_sig_rl_entry.html">SigRlEntry</a> const *sigrl_entry, <a class="el" href="struct_nr_proof.html">NrProof</a> const *proof)</td></tr>
-<tr class="memdesc:gac6e2fab59e3af8a33a74a5b201642700"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies the non-revoked proof for a single signature based revocation list entry. <a href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700">More...</a><br /></td></tr>
-<tr class="separator:gac6e2fab59e3af8a33a74a5b201642700"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>NrVerfy implementation. </p>
-</div><h2 class="groupheader">Macro Definition Documentation</h2>
-<a class="anchor" id="a5638f861b82f1746ea1af0b384ef8ff1"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define BREAK_ON_EPID_ERROR</td>
- <td>(</td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">ret</td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != (ret)) { \</div><div class="line"> break; \</div><div class="line"> }</div><div class="ttc" id="group___error_codes_html_ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9"><div class="ttname"><a href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a></div><div class="ttdoc">no error </div><div class="ttdef"><b>Definition:</b> errors.h:41</div></div>
-</div><!-- fragment -->
-<p>Handle SDK Error with Break. </p>
-
-</div>
-</div>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_02c945662023679b89476bd7126bc985.html">verifier</a></li><li class="navelem"><a class="el" href="nrverify_8c.html">nrverify.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/organization_8dox.html b/doc/html/organization_8dox.html
index 09c1dc3..69164cd 100644
--- a/doc/html/organization_8dox.html
+++ b/doc/html/organization_8dox.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/pageorder_8dox.html b/doc/html/pageorder_8dox.html
index 063a70b..94858a8 100644
--- a/doc/html/pageorder_8dox.html
+++ b/doc/html/pageorder_8dox.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/pages.html b/doc/html/pages.html
index 5e99445..7c341f6 100644
--- a/doc/html/pages.html
+++ b/doc/html/pages.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -62,16 +62,23 @@ $(document).ready(function(){initNavTree('pages.html','');});
</div><!--header-->
<div class="contents">
<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
-<table class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="LegalInformation.html" target="_self">Legal Information</a></td><td class="desc"></td></tr>
<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ChangeLog.html" target="_self">What&#39;s New</a></td><td class="desc"></td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="EpidOverview.html" target="_self">Introduction to the Intel&reg; EPID Scheme</a></td><td class="desc"></td></tr>
<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="SdkOverview.html" target="_self">What&#39;s Included in the SDK</a></td><td class="desc"></td></tr>
-<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="BuildingSdk.html" target="_self">Building From Source</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="BuildingSdk.html" target="_self">Building from Source</a></td><td class="desc"></td></tr>
<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="SignVerifyTutorial.html" target="_self">Signing and Verification Tutorial</a></td><td class="desc"></td></tr>
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="IssuerMaterial.html" target="_self">Sample Issuer Material</a></td><td class="desc"></td></tr>
-<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ImplementationNotes.html" target="_self">Implementation Notes</a></td><td class="desc"></td></tr>
-<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="Glossary.html" target="_self">Glossary</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ChoosingiKGF.html" target="_self">If You Choose iKGF as Your Issuer</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="Revocation.html" target="_self">In-Depth Explanation of Revocation</a></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="Basenames.html" target="_self">In-Depth Explanation of Basenames</a></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="ImplementationNotes.html" target="_self">Implementation Notes</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="Glossary.html" target="_self">Glossary</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="BuildToolsInstallation.html" target="_self">Guide to Installing Build Tools</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_13_" class="arrow" onclick="toggleFolder('13_')">&#9660;</span><a class="el" href="Examples.html" target="_self">Walkthroughs of Examples Showing API Usage</a></td><td class="desc"></td></tr>
+<tr id="row_13_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="SignmsgWalkthru.html" target="_self">Generating an Intel&reg; EPID Signature</a></td><td class="desc"></td></tr>
+<tr id="row_13_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><a class="el" href="VerifysigWalkthru.html" target="_self">Verifying an Intel&reg; EPID Signature</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
diff --git a/doc/html/pairing_8c.html b/doc/html/pairing_8c.html
deleted file mode 100644
index 9bd73ce..0000000
--- a/doc/html/pairing_8c.html
+++ /dev/null
@@ -1,205 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/math/pairing.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('pairing_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">pairing.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Pairing implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;limits.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="pairing_8h.html">epid/common/math/pairing.h</a>&quot;</code><br />
-<code>#include &quot;epid/common/math/bignum-internal.h&quot;</code><br />
-<code>#include &quot;epid/common/math/finitefield-internal.h&quot;</code><br />
-<code>#include &quot;epid/common/math/ecgroup-internal.h&quot;</code><br />
-<code>#include &quot;epid/common/math/pairing-internal.h&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &quot;ext/ipp/include/ippcp.h&quot;</code><br />
-<code>#include &quot;ext/ipp/include/ippcpepid.h&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_fq_elem_dat.html">FqElemDat</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Data for element in Fq. <a href="struct_fq_elem_dat.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_fq2_elem_dat.html">Fq2ElemDat</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Data for element in Fq2. <a href="struct_fq2_elem_dat.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_fq6_elem_dat.html">Fq6ElemDat</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Data for element in Fq2^3. <a href="struct_fq6_elem_dat.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_fq12_elem_dat.html">Fq12ElemDat</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Data for element in Fq2^3^2. <a href="struct_fq12_elem_dat.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a05172cee9b4cc2d463a7cd7b66d1123b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pairing_8c.html#a05172cee9b4cc2d463a7cd7b66d1123b">BREAK_ON_IPP_ERROR</a>(sts, ret) </td></tr>
-<tr class="memdesc:a05172cee9b4cc2d463a7cd7b66d1123b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handle Ipp Errors with Break. <a href="#a05172cee9b4cc2d463a7cd7b66d1123b">More...</a><br /></td></tr>
-<tr class="separator:a05172cee9b4cc2d463a7cd7b66d1123b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae10abdda5f1cafa6919c41f0d7f7caf8"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pairing_8c.html#ae10abdda5f1cafa6919c41f0d7f7caf8">RETURN_ON_IPP_ERROR</a>(sts) </td></tr>
-<tr class="memdesc:ae10abdda5f1cafa6919c41f0d7f7caf8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handle Ipp Errors with Return. <a href="#ae10abdda5f1cafa6919c41f0d7f7caf8">More...</a><br /></td></tr>
-<tr class="separator:ae10abdda5f1cafa6919c41f0d7f7caf8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="pairing_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">BREAK_ON_EPID_ERROR</a>(ret)</td></tr>
-<tr class="memdesc:a5638f861b82f1746ea1af0b384ef8ff1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handle SDK Error with Break. <a href="#a5638f861b82f1746ea1af0b384ef8ff1">More...</a><br /></td></tr>
-<tr class="separator:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga29f79a645871830754d396b9b4a2a0cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc">NewPairingState</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> const *ga, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> const *gb, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const *t, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> neg, <a class="el" href="group___pairing_primitives.html#ga3f1fa61d25487f96dfb0ffef4ad35607">PairingState</a> **ps)</td></tr>
-<tr class="memdesc:ga29f79a645871830754d396b9b4a2a0cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a new Pairing State. <a href="group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc">More...</a><br /></td></tr>
-<tr class="separator:ga29f79a645871830754d396b9b4a2a0cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gad54aebdc331d39b73000fdca9e04f94d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d">DeletePairingState</a> (<a class="el" href="group___pairing_primitives.html#ga3f1fa61d25487f96dfb0ffef4ad35607">PairingState</a> **ps)</td></tr>
-<tr class="memdesc:gad54aebdc331d39b73000fdca9e04f94d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees a previously allocated by PairingState. <a href="group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d">More...</a><br /></td></tr>
-<tr class="separator:gad54aebdc331d39b73000fdca9e04f94d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga5dd07d13536e27c37eaeee285297066c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___pairing_primitives.html#ga5dd07d13536e27c37eaeee285297066c">Pairing</a> (<a class="el" href="group___pairing_primitives.html#ga3f1fa61d25487f96dfb0ffef4ad35607">PairingState</a> *ps, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *d, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *a, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *b)</td></tr>
-<tr class="memdesc:ga5dd07d13536e27c37eaeee285297066c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes an Optimal Ate Pairing for two parameters. <a href="group___pairing_primitives.html#ga5dd07d13536e27c37eaeee285297066c">More...</a><br /></td></tr>
-<tr class="separator:ga5dd07d13536e27c37eaeee285297066c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Pairing implementation. </p>
-</div><h2 class="groupheader">Macro Definition Documentation</h2>
-<a class="anchor" id="a5638f861b82f1746ea1af0b384ef8ff1"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define BREAK_ON_EPID_ERROR</td>
- <td>(</td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">ret</td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != (ret)) { \</div><div class="line"> break; \</div><div class="line"> }</div><div class="ttc" id="group___error_codes_html_ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9"><div class="ttname"><a href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a></div><div class="ttdoc">no error </div><div class="ttdef"><b>Definition:</b> errors.h:41</div></div>
-</div><!-- fragment -->
-<p>Handle SDK Error with Break. </p>
-
-</div>
-</div>
-<a class="anchor" id="a05172cee9b4cc2d463a7cd7b66d1123b"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define BREAK_ON_IPP_ERROR</td>
- <td>(</td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">sts, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">ret&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line">{ \</div><div class="line"> IppStatus temp_sts = (sts); \</div><div class="line"> if (ippStsNoErr != temp_sts) { \</div><div class="line"> if (ippStsContextMatchErr == temp_sts) { \</div><div class="line"> (ret) = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6">kEpidMathErr</a>; \</div><div class="line"> } <span class="keywordflow">else</span> { \</div><div class="line"> (ret) = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf">kEpidBadArgErr</a>; \</div><div class="line"> } \</div><div class="line"> break; \</div><div class="line"> } \</div><div class="line"> }</div><div class="ttc" id="group___error_codes_html_ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6"><div class="ttname"><a href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6">kEpidMathErr</a></div><div class="ttdoc">internal math error </div><div class="ttdef"><b>Definition:</b> errors.h:53</div></div>
-<div class="ttc" id="group___error_codes_html_ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf"><div class="ttname"><a href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf">kEpidBadArgErr</a></div><div class="ttdoc">incorrect arg to function </div><div class="ttdef"><b>Definition:</b> errors.h:50</div></div>
-</div><!-- fragment -->
-<p>Handle Ipp Errors with Break. </p>
-
-</div>
-</div>
-<a class="anchor" id="ae10abdda5f1cafa6919c41f0d7f7caf8"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define RETURN_ON_IPP_ERROR</td>
- <td>(</td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">sts</td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line">{ \</div><div class="line"> IppStatus temp_sts = (sts); \</div><div class="line"> if (ippStsNoErr != temp_sts) { \</div><div class="line"> if (ippStsContextMatchErr == temp_sts) { \</div><div class="line"> return <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6">kEpidMathErr</a>; \</div><div class="line"> } <span class="keywordflow">else</span> { \</div><div class="line"> return <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf">kEpidBadArgErr</a>; \</div><div class="line"> } \</div><div class="line"> } \</div><div class="line"> }</div><div class="ttc" id="group___error_codes_html_ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6"><div class="ttname"><a href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6">kEpidMathErr</a></div><div class="ttdoc">internal math error </div><div class="ttdef"><b>Definition:</b> errors.h:53</div></div>
-<div class="ttc" id="group___error_codes_html_ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf"><div class="ttname"><a href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf">kEpidBadArgErr</a></div><div class="ttdoc">incorrect arg to function </div><div class="ttdef"><b>Definition:</b> errors.h:50</div></div>
-</div><!-- fragment -->
-<p>Handle Ipp Errors with Return. </p>
-
-</div>
-</div>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="dir_f169ebf8da29290a918fa4b3f7151050.html">math</a></li><li class="navelem"><a class="el" href="pairing_8c.html">pairing.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/pairing_8h.html b/doc/html/pairing_8h.html
index 0915010..41d1aa0 100644
--- a/doc/html/pairing_8h.html
+++ b/doc/html/pairing_8h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -82,7 +82,7 @@ typedef struct <a class="el" href="group___pairing_primitives.html#ga3f1fa61d254
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga29f79a645871830754d396b9b4a2a0cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc">NewPairingState</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> const *ga, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> const *gb, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *ff, <a class="el" href="struct_big_num_str.html">BigNumStr</a> const *t, <a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a> neg, <a class="el" href="group___pairing_primitives.html#ga3f1fa61d25487f96dfb0ffef4ad35607">PairingState</a> **ps)</td></tr>
-<tr class="memdesc:ga29f79a645871830754d396b9b4a2a0cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a new Pairing State. <a href="group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc">More...</a><br /></td></tr>
+<tr class="memdesc:ga29f79a645871830754d396b9b4a2a0cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a new pairing state. <a href="group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc">More...</a><br /></td></tr>
<tr class="separator:ga29f79a645871830754d396b9b4a2a0cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad54aebdc331d39b73000fdca9e04f94d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d">DeletePairingState</a> (<a class="el" href="group___pairing_primitives.html#ga3f1fa61d25487f96dfb0ffef4ad35607">PairingState</a> **ps)</td></tr>
<tr class="memdesc:gad54aebdc331d39b73000fdca9e04f94d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees a previously allocated by PairingState. <a href="group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d">More...</a><br /></td></tr>
diff --git a/doc/html/presig_8c.html b/doc/html/presig_8c.html
deleted file mode 100644
index 25b2006..0000000
--- a/doc/html/presig_8c.html
+++ /dev/null
@@ -1,161 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/member/presig.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('presig_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">presig.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>EpidComputePreSig implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="member_2context_8h.html">epid/member/context.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="presig_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">BREAK_ON_EPID_ERROR</a>(ret)</td></tr>
-<tr class="memdesc:a5638f861b82f1746ea1af0b384ef8ff1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handle SDK Error with Break. <a href="#a5638f861b82f1746ea1af0b384ef8ff1">More...</a><br /></td></tr>
-<tr class="separator:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac362b8d551a6a185f226af3be3d931f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac362b8d551a6a185f226af3be3d931f8"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="presig_8c.html#ac362b8d551a6a185f226af3be3d931f8">COUNT_OF</a>(A)&#160;&#160;&#160;(sizeof(A) / sizeof((A)[0]))</td></tr>
-<tr class="memdesc:ac362b8d551a6a185f226af3be3d931f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Count of elements in array. <br /></td></tr>
-<tr class="separator:ac362b8d551a6a185f226af3be3d931f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:a0423e8400abd2171062e4c42b90b8145"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="presig_8c.html#a0423e8400abd2171062e4c42b90b8145">EpidComputePreSig</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx, <a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a> *precompsig)</td></tr>
-<tr class="memdesc:a0423e8400abd2171062e4c42b90b8145"><td class="mdescLeft">&#160;</td><td class="mdescRight">Performs Pre-computation that can be used to speed up signing. <a href="#a0423e8400abd2171062e4c42b90b8145">More...</a><br /></td></tr>
-<tr class="separator:a0423e8400abd2171062e4c42b90b8145"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>EpidComputePreSig implementation. </p>
-</div><h2 class="groupheader">Macro Definition Documentation</h2>
-<a class="anchor" id="a5638f861b82f1746ea1af0b384ef8ff1"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define BREAK_ON_EPID_ERROR</td>
- <td>(</td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">ret</td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != (ret)) { \</div><div class="line"> break; \</div><div class="line"> }</div><div class="ttc" id="group___error_codes_html_ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9"><div class="ttname"><a href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a></div><div class="ttdoc">no error </div><div class="ttdef"><b>Definition:</b> errors.h:41</div></div>
-</div><!-- fragment -->
-<p>Handle SDK Error with Break. </p>
-
-</div>
-</div>
-<h2 class="groupheader">Function Documentation</h2>
-<a class="anchor" id="a0423e8400abd2171062e4c42b90b8145"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> EpidComputePreSig </td>
- <td>(</td>
- <td class="paramtype"><a class="el" href="struct_member_ctx.html">MemberCtx</a> const *&#160;</td>
- <td class="paramname"><em>ctx</em>, </td>
- </tr>
- <tr>
- <td class="paramkey"></td>
- <td></td>
- <td class="paramtype"><a class="el" href="struct_pre_computed_signature.html">PreComputedSignature</a> *&#160;</td>
- <td class="paramname"><em>precompsig</em>&#160;</td>
- </tr>
- <tr>
- <td></td>
- <td>)</td>
- <td></td><td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-
-<p>Performs Pre-computation that can be used to speed up signing. </p>
-<dl class="section warning"><dt>Warning</dt><dd>Do not re-use the same pre-computed signature to generate more than one signature. If a pre-computed signature is used for computing two signatures, an attacker could learn the Intel(R) EPID private key.</dd></dl>
-<dl class="params"><dt>Parameters</dt><dd>
- <table class="params">
- <tr><td class="paramdir">[in]</td><td class="paramname">ctx</td><td>The member context. </td></tr>
- <tr><td class="paramdir">[out]</td><td class="paramname">precompsig</td><td>The pre-computed signature.</td></tr>
- </table>
- </dd>
-</dl>
-<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360" title="Return status for SDK functions. ">EpidStatus</a> </dd></dl>
-
-</div>
-</div>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_512d3e62841a8535b716ec4cf8b9e950.html">member</a></li><li class="navelem"><a class="el" href="presig_8c.html">presig.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/printutils_8c.html b/doc/html/printutils_8c.html
deleted file mode 100644
index 300c6c9..0000000
--- a/doc/html/printutils_8c.html
+++ /dev/null
@@ -1,178 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/math/printutils.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('printutils_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">printutils.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Print helper implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="printutils_8h.html">epid/common/math/printutils.h</a>&quot;</code><br />
-<code>#include &lt;stdio.h&gt;</code><br />
-<code>#include &lt;string.h&gt;</code><br />
-<code>#include &quot;ext/ipp/include/ippcp.h&quot;</code><br />
-<code>#include &quot;epid/common/math/bignum-internal.h&quot;</code><br />
-<code>#include &quot;epid/common/math/ecgroup-internal.h&quot;</code><br />
-<code>#include &quot;epid/common/math/finitefield-internal.h&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a241aeeb764887ae5e3de58b98f04b16d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a241aeeb764887ae5e3de58b98f04b16d"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="printutils_8c.html#a241aeeb764887ae5e3de58b98f04b16d">WIDTH</a>&#160;&#160;&#160;49</td></tr>
-<tr class="memdesc:a241aeeb764887ae5e3de58b98f04b16d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allowed number of characters printed in one line. <br /></td></tr>
-<tr class="separator:a241aeeb764887ae5e3de58b98f04b16d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a502b06aa5ad25116c775d201326bad52"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a502b06aa5ad25116c775d201326bad52"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="printutils_8c.html#a502b06aa5ad25116c775d201326bad52">INDENT</a>&#160;&#160;&#160;2</td></tr>
-<tr class="memdesc:a502b06aa5ad25116c775d201326bad52"><td class="mdescLeft">&#160;</td><td class="mdescRight">Amount of identation added in the beginning of each line. <br /></td></tr>
-<tr class="separator:a502b06aa5ad25116c775d201326bad52"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa9b6652aabab4e1adadd19b5366d1f69"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa9b6652aabab4e1adadd19b5366d1f69"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="printutils_8c.html#aa9b6652aabab4e1adadd19b5366d1f69">BYTE_LENGTH</a>&#160;&#160;&#160;2</td></tr>
-<tr class="memdesc:aa9b6652aabab4e1adadd19b5366d1f69"><td class="mdescLeft">&#160;</td><td class="mdescRight">Number of charaters used to represent one byte. For example, "ab" or "05". <br /></td></tr>
-<tr class="separator:aa9b6652aabab4e1adadd19b5366d1f69"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af68c3a5ad6ffce6c97fff154856a823d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af68c3a5ad6ffce6c97fff154856a823d"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="printutils_8c.html#af68c3a5ad6ffce6c97fff154856a823d">SEPARATOR</a>&#160;&#160;&#160;(&quot; &quot;)</td></tr>
-<tr class="memdesc:af68c3a5ad6ffce6c97fff154856a823d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Separator. <br /></td></tr>
-<tr class="separator:af68c3a5ad6ffce6c97fff154856a823d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a91e2eeae06fcf21c3fa4fc0eadf6b0cd"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="printutils_8c.html#a91e2eeae06fcf21c3fa4fc0eadf6b0cd">MAKE_INDENT</a>() </td></tr>
-<tr class="memdesc:a91e2eeae06fcf21c3fa4fc0eadf6b0cd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Make configured number of identation. <a href="#a91e2eeae06fcf21c3fa4fc0eadf6b0cd">More...</a><br /></td></tr>
-<tr class="separator:a91e2eeae06fcf21c3fa4fc0eadf6b0cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a15bb631053a1fce9c5470701900984c7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15bb631053a1fce9c5470701900984c7"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="printutils_8c.html#a15bb631053a1fce9c5470701900984c7">PRINT</a>(...)&#160;&#160;&#160;fprintf(stdout, __VA_ARGS__)</td></tr>
-<tr class="memdesc:a15bb631053a1fce9c5470701900984c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Print to specified stream. <br /></td></tr>
-<tr class="separator:a15bb631053a1fce9c5470701900984c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga45a933b44fc1dfe926e3af89c198070a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_print.html#ga45a933b44fc1dfe926e3af89c198070a">PrintBigNum</a> (<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> const *big_num, char const *var_name)</td></tr>
-<tr class="memdesc:ga45a933b44fc1dfe926e3af89c198070a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints BigNum. <a href="group___epid_print.html#ga45a933b44fc1dfe926e3af89c198070a">More...</a><br /></td></tr>
-<tr class="separator:ga45a933b44fc1dfe926e3af89c198070a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gaa3b1cbbfc6f78562658953113e5798cf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_print.html#gaa3b1cbbfc6f78562658953113e5798cf">PrintFfElement</a> (<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> const *ff, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> const *ff_element, char const *var_name, <a class="el" href="group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83">PrintUtilFormat</a> format)</td></tr>
-<tr class="memdesc:gaa3b1cbbfc6f78562658953113e5798cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints finite field element. <a href="group___epid_print.html#gaa3b1cbbfc6f78562658953113e5798cf">More...</a><br /></td></tr>
-<tr class="separator:gaa3b1cbbfc6f78562658953113e5798cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga0d6377d9c1651d0101ec6b61feaa78ca"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_print.html#ga0d6377d9c1651d0101ec6b61feaa78ca">PrintEcPoint</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> const *g, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *ec_point, char const *var_name, <a class="el" href="group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83">PrintUtilFormat</a> format)</td></tr>
-<tr class="memdesc:ga0d6377d9c1651d0101ec6b61feaa78ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints elliptic curve group element. <a href="group___epid_print.html#ga0d6377d9c1651d0101ec6b61feaa78ca">More...</a><br /></td></tr>
-<tr class="separator:ga0d6377d9c1651d0101ec6b61feaa78ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga5f249c594ed12e4a9b11b7bc101da85d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_print.html#ga5f249c594ed12e4a9b11b7bc101da85d">PrintBigNumStr</a> (<a class="el" href="struct_big_num_str.html">BigNumStr</a> const *big_num_str, char const *var_name)</td></tr>
-<tr class="memdesc:ga5f249c594ed12e4a9b11b7bc101da85d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints serialized BigNum. <a href="group___epid_print.html#ga5f249c594ed12e4a9b11b7bc101da85d">More...</a><br /></td></tr>
-<tr class="separator:ga5f249c594ed12e4a9b11b7bc101da85d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gae553c3a156a0e4968b89635ab0757580"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_print.html#gae553c3a156a0e4968b89635ab0757580">PrintFpElemStr</a> (<a class="el" href="struct_fp_elem_str.html">FpElemStr</a> const *fp_elem_str, char const *var_name)</td></tr>
-<tr class="memdesc:gae553c3a156a0e4968b89635ab0757580"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints serialized Fp element. <a href="group___epid_print.html#gae553c3a156a0e4968b89635ab0757580">More...</a><br /></td></tr>
-<tr class="separator:gae553c3a156a0e4968b89635ab0757580"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga6c9fea48fa0477f4a98abb50f891a5e4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_print.html#ga6c9fea48fa0477f4a98abb50f891a5e4">PrintFqElemStr</a> (<a class="el" href="struct_fq_elem_str.html">FqElemStr</a> const *fq_elem_str, char const *var_name)</td></tr>
-<tr class="memdesc:ga6c9fea48fa0477f4a98abb50f891a5e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints serialized Fq element. <a href="group___epid_print.html#ga6c9fea48fa0477f4a98abb50f891a5e4">More...</a><br /></td></tr>
-<tr class="separator:ga6c9fea48fa0477f4a98abb50f891a5e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga883a834ab1703365bb0bca4abd3104de"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_print.html#ga883a834ab1703365bb0bca4abd3104de">PrintFq2ElemStr</a> (<a class="el" href="struct_fq2_elem_str.html">Fq2ElemStr</a> const *fq2_elem_str, char const *var_name, <a class="el" href="group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83">PrintUtilFormat</a> format)</td></tr>
-<tr class="memdesc:ga883a834ab1703365bb0bca4abd3104de"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints serialized Fq2 element. <a href="group___epid_print.html#ga883a834ab1703365bb0bca4abd3104de">More...</a><br /></td></tr>
-<tr class="separator:ga883a834ab1703365bb0bca4abd3104de"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga3f2961ef6b4c44a6205d422d8a293476"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_print.html#ga3f2961ef6b4c44a6205d422d8a293476">PrintFq6ElemStr</a> (<a class="el" href="struct_fq6_elem_str.html">Fq6ElemStr</a> const *fq6_elem_str, char const *var_name, <a class="el" href="group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83">PrintUtilFormat</a> format)</td></tr>
-<tr class="memdesc:ga3f2961ef6b4c44a6205d422d8a293476"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints serialized Fq6 element. <a href="group___epid_print.html#ga3f2961ef6b4c44a6205d422d8a293476">More...</a><br /></td></tr>
-<tr class="separator:ga3f2961ef6b4c44a6205d422d8a293476"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gaf185fe3df270cd8b4a2969bf3cfc5d5f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_print.html#gaf185fe3df270cd8b4a2969bf3cfc5d5f">PrintFq12ElemStr</a> (<a class="el" href="struct_fq12_elem_str.html">Fq12ElemStr</a> const *fq12_elem_str, char const *var_name, <a class="el" href="group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83">PrintUtilFormat</a> format)</td></tr>
-<tr class="memdesc:gaf185fe3df270cd8b4a2969bf3cfc5d5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints serialized Fq12 element. <a href="group___epid_print.html#gaf185fe3df270cd8b4a2969bf3cfc5d5f">More...</a><br /></td></tr>
-<tr class="separator:gaf185fe3df270cd8b4a2969bf3cfc5d5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga87168a3ce5306f9839b8e8d6c9a5f84f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_print.html#ga87168a3ce5306f9839b8e8d6c9a5f84f">PrintG1ElemStr</a> (<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a> const *g1_elem_str, char const *var_name, <a class="el" href="group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83">PrintUtilFormat</a> format)</td></tr>
-<tr class="memdesc:ga87168a3ce5306f9839b8e8d6c9a5f84f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints serialized G1 element. <a href="group___epid_print.html#ga87168a3ce5306f9839b8e8d6c9a5f84f">More...</a><br /></td></tr>
-<tr class="separator:ga87168a3ce5306f9839b8e8d6c9a5f84f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gab76a4cf0385dc4a76bb56ee9f0e3e87a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_print.html#gab76a4cf0385dc4a76bb56ee9f0e3e87a">PrintG2ElemStr</a> (<a class="el" href="struct_g2_elem_str.html">G2ElemStr</a> const *g2_elem_str, char const *var_name, <a class="el" href="group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83">PrintUtilFormat</a> format)</td></tr>
-<tr class="memdesc:gab76a4cf0385dc4a76bb56ee9f0e3e87a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints serialized G2 element. <a href="group___epid_print.html#gab76a4cf0385dc4a76bb56ee9f0e3e87a">More...</a><br /></td></tr>
-<tr class="separator:gab76a4cf0385dc4a76bb56ee9f0e3e87a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga138cd388247a58680d4701d59d6976d2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_print.html#ga138cd388247a58680d4701d59d6976d2">PrintGtElemStr</a> (<a class="el" href="struct_gt_elem_str.html">GtElemStr</a> const *gt_elem_str, char const *var_name, <a class="el" href="group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83">PrintUtilFormat</a> format)</td></tr>
-<tr class="memdesc:ga138cd388247a58680d4701d59d6976d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints serialized Gt element. <a href="group___epid_print.html#ga138cd388247a58680d4701d59d6976d2">More...</a><br /></td></tr>
-<tr class="separator:ga138cd388247a58680d4701d59d6976d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Print helper implementation. </p>
-</div><h2 class="groupheader">Macro Definition Documentation</h2>
-<a class="anchor" id="a91e2eeae06fcf21c3fa4fc0eadf6b0cd"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define MAKE_INDENT</td>
- <td>(</td>
- <td class="paramname"></td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line">{ \</div><div class="line"> uint8_t ind = 0; \</div><div class="line"> for (ind = 0; ind &lt; <a class="code" href="printutils_8c.html#a502b06aa5ad25116c775d201326bad52">INDENT</a>; ind++) { \</div><div class="line"> PRINT(<span class="stringliteral">&quot; &quot;</span>); \</div><div class="line"> } \</div><div class="line"> }</div><div class="ttc" id="printutils_8c_html_a502b06aa5ad25116c775d201326bad52"><div class="ttname"><a href="printutils_8c.html#a502b06aa5ad25116c775d201326bad52">INDENT</a></div><div class="ttdeci">#define INDENT</div><div class="ttdoc">Amount of identation added in the beginning of each line. </div><div class="ttdef"><b>Definition:</b> printutils.c:40</div></div>
-</div><!-- fragment -->
-<p>Make configured number of identation. </p>
-
-</div>
-</div>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="dir_f169ebf8da29290a918fa4b3f7151050.html">math</a></li><li class="navelem"><a class="el" href="printutils_8c.html">printutils.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/printutils_8h.html b/doc/html/printutils_8h.html
index ec7591f..565f2c7 100644
--- a/doc/html/printutils_8h.html
+++ b/doc/html/printutils_8h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -75,7 +75,8 @@ $(document).ready(function(){initNavTree('printutils_8h.html','');});
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga3e215d157eb205ad596bb84bce694a83"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83">PrintUtilFormat</a> { <a class="el" href="group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83aeb475b793d8d357087d7fcc74702ffae">kPrintUtilUnannotated</a> = 0,
-<a class="el" href="group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ae2d5345c14f57fc992a613003c3c443d">kPrintUtilAnnotated</a> = 1
+<a class="el" href="group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ae2d5345c14f57fc992a613003c3c443d">kPrintUtilAnnotated</a> = 1,
+<a class="el" href="group___epid_print.html#gga3e215d157eb205ad596bb84bce694a83ade23610605d0ba7dd48db5060e28995a">kPrintUtilFormatCount</a> = 2
}<tr class="memdesc:ga3e215d157eb205ad596bb84bce694a83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Print format. <a href="group___epid_print.html#ga3e215d157eb205ad596bb84bce694a83">More...</a><br /></td></tr>
</td></tr>
<tr class="separator:ga3e215d157eb205ad596bb84bce694a83"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/doc/html/privkey_8c.html b/doc/html/privkey_8c.html
deleted file mode 100644
index 953de11..0000000
--- a/doc/html/privkey_8c.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/member/privkey.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('privkey_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">privkey.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Private key implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="privkey_8h.html">epid/member/privkey.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:gae51985a0e811f4bbb2d70b62e35b881e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gae51985a0e811f4bbb2d70b62e35b881e">CreatePrivKey</a> (<a class="el" href="struct_priv_key.html">PrivKey</a> const *priv_key_str, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *G1, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *Fp, <a class="el" href="struct_priv_key__.html">PrivKey_</a> **priv_key)</td></tr>
-<tr class="memdesc:gae51985a0e811f4bbb2d70b62e35b881e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs internal representation of <a class="el" href="struct_priv_key.html" title="Intel(R) EPID 2.0 private key. ">PrivKey</a>. <a href="group___epid_common.html#gae51985a0e811f4bbb2d70b62e35b881e">More...</a><br /></td></tr>
-<tr class="separator:gae51985a0e811f4bbb2d70b62e35b881e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga53db100214e65e362fa426508a240d12"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga53db100214e65e362fa426508a240d12">DeletePrivKey</a> (<a class="el" href="struct_priv_key__.html">PrivKey_</a> **priv_key)</td></tr>
-<tr class="memdesc:ga53db100214e65e362fa426508a240d12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deallocate storage for internal representation of <a class="el" href="struct_priv_key.html" title="Intel(R) EPID 2.0 private key. ">PrivKey</a>. <a href="group___epid_common.html#ga53db100214e65e362fa426508a240d12">More...</a><br /></td></tr>
-<tr class="separator:ga53db100214e65e362fa426508a240d12"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Private key implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_512d3e62841a8535b716ec4cf8b9e950.html">member</a></li><li class="navelem"><a class="el" href="privkey_8c.html">privkey.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/privkey_8h.html b/doc/html/privkey_8h.html
deleted file mode 100644
index 7d2f5df..0000000
--- a/doc/html/privkey_8h.html
+++ /dev/null
@@ -1,104 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/member/privkey.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('privkey_8h.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">privkey.h File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Private key private interface.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="errors_8h.html">epid/common/errors.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="ecgroup_8h.html">epid/common/math/ecgroup.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="types_8h.html">epid/common/types.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_priv_key__.html">PrivKey_</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal implementation of <a class="el" href="struct_priv_key.html" title="Intel(R) EPID 2.0 private key. ">PrivKey</a>. <a href="struct_priv_key__.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:gae51985a0e811f4bbb2d70b62e35b881e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gae51985a0e811f4bbb2d70b62e35b881e">CreatePrivKey</a> (<a class="el" href="struct_priv_key.html">PrivKey</a> const *priv_key_str, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *G1, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *Fp, <a class="el" href="struct_priv_key__.html">PrivKey_</a> **priv_key)</td></tr>
-<tr class="memdesc:gae51985a0e811f4bbb2d70b62e35b881e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs internal representation of <a class="el" href="struct_priv_key.html" title="Intel(R) EPID 2.0 private key. ">PrivKey</a>. <a href="group___epid_common.html#gae51985a0e811f4bbb2d70b62e35b881e">More...</a><br /></td></tr>
-<tr class="separator:gae51985a0e811f4bbb2d70b62e35b881e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga53db100214e65e362fa426508a240d12"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga53db100214e65e362fa426508a240d12">DeletePrivKey</a> (<a class="el" href="struct_priv_key__.html">PrivKey_</a> **priv_key)</td></tr>
-<tr class="memdesc:ga53db100214e65e362fa426508a240d12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deallocate storage for internal representation of <a class="el" href="struct_priv_key.html" title="Intel(R) EPID 2.0 private key. ">PrivKey</a>. <a href="group___epid_common.html#ga53db100214e65e362fa426508a240d12">More...</a><br /></td></tr>
-<tr class="separator:ga53db100214e65e362fa426508a240d12"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Private key private interface. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_512d3e62841a8535b716ec4cf8b9e950.html">member</a></li><li class="navelem"><a class="el" href="privkey_8h.html">privkey.h</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/request__join_8c.html b/doc/html/request__join_8c.html
deleted file mode 100644
index 6e7759d..0000000
--- a/doc/html/request__join_8c.html
+++ /dev/null
@@ -1,133 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/member/request_join.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('request__join_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">request_join.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>EpidRequestJoin implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;<a class="el" href="member_2api_8h.html">epid/member/api.h</a>&gt;</code><br />
-<code>#include &lt;string.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="epid2params_8h.html">epid/common/epid2params.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="finitefield_8h.html">epid/common/math/finitefield.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="ecgroup_8h.html">epid/common/math/ecgroup.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_join_p_commit_values.html">JoinPCommitValues</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Storage for values to create commitment in Sign and Verify algorithms. <a href="struct_join_p_commit_values.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="request__join_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">BREAK_ON_EPID_ERROR</a>(ret)</td></tr>
-<tr class="memdesc:a5638f861b82f1746ea1af0b384ef8ff1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handle SDK Error with Break. <a href="#a5638f861b82f1746ea1af0b384ef8ff1">More...</a><br /></td></tr>
-<tr class="separator:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga13dd0d72be9babf8194d472d7712a361"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga13dd0d72be9babf8194d472d7712a361">EpidRequestJoin</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="group___epid_types.html#ga55eb2193045bde31af3f551565126042">IssuerNonce</a> const *ni, <a class="el" href="struct_fp_elem_str.html">FpElemStr</a> const *f, <a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a> rnd_func, void *rnd_param, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg, <a class="el" href="struct_join_request.html">JoinRequest</a> *join_request)</td></tr>
-<tr class="memdesc:ga13dd0d72be9babf8194d472d7712a361"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a request to join a group. <a href="group___epid_member_module.html#ga13dd0d72be9babf8194d472d7712a361">More...</a><br /></td></tr>
-<tr class="separator:ga13dd0d72be9babf8194d472d7712a361"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga8e3f201d1e9dc668659e08a3bdf543b6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga8e3f201d1e9dc668659e08a3bdf543b6">EpidIsPrivKeyInGroup</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_priv_key.html">PrivKey</a> const *priv_key)</td></tr>
-<tr class="memdesc:ga8e3f201d1e9dc668659e08a3bdf543b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tests if a member private key is valid without checking revocation. <a href="group___epid_member_module.html#ga8e3f201d1e9dc668659e08a3bdf543b6">More...</a><br /></td></tr>
-<tr class="separator:ga8e3f201d1e9dc668659e08a3bdf543b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>EpidRequestJoin implementation. </p>
-</div><h2 class="groupheader">Macro Definition Documentation</h2>
-<a class="anchor" id="a5638f861b82f1746ea1af0b384ef8ff1"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define BREAK_ON_EPID_ERROR</td>
- <td>(</td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">ret</td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != (ret)) { \</div><div class="line"> break; \</div><div class="line"> }</div><div class="ttc" id="group___error_codes_html_ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9"><div class="ttname"><a href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a></div><div class="ttdoc">no error </div><div class="ttdef"><b>Definition:</b> errors.h:41</div></div>
-</div><!-- fragment -->
-<p>Handle SDK Error with Break. </p>
-
-</div>
-</div>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_512d3e62841a8535b716ec4cf8b9e950.html">member</a></li><li class="navelem"><a class="el" href="request__join_8c.html">request_join.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_m.html b/doc/html/revocation_8dox.html
index 8d86dd4..d33edd4 100644
--- a/doc/html/functions_m.html
+++ b/doc/html/revocation_8dox.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: doc/docsrc/revocation.dox File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,26 +53,26 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_m.html','');});
+$(document).ready(function(){initNavTree('revocation_8dox.html','');});
</script>
<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<div class="title">doc/docsrc/revocation.dox File Reference</div> </div>
+</div><!--header-->
<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-<h3><a class="anchor" id="index_m"></a>- m -</h3><ul>
-<li>max_size
-: <a class="el" href="struct_stack.html#abcc9e152813f8e38fda7971902f4c33d">Stack</a>
-</li>
-<li>msg
-: <a class="el" href="struct_nr_verify_commit_values.html#ac86cca7003dea44bf5368a0340e12a54">NrVerifyCommitValues</a>
-</li>
-</ul>
-</div><!-- contents -->
+<p>This file is used by Doxygen to generate documentation.
+<a href="#details">More...</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>This file is used by Doxygen to generate documentation. </p>
+</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
+ <li class="navelem"><a class="el" href="revocation_8dox.html">revocation.dox</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/sdk__overview_8dox.html b/doc/html/sdk__overview_8dox.html
index 5c42a38..ff2e0d5 100644
--- a/doc/html/sdk__overview_8dox.html
+++ b/doc/html/sdk__overview_8dox.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/sdk_block_diagram.png b/doc/html/sdk_block_diagram.png
index c9726c1..be144ec 100644
--- a/doc/html/sdk_block_diagram.png
+++ b/doc/html/sdk_block_diagram.png
Binary files differ
diff --git a/doc/html/sha256_8c.html b/doc/html/sha256_8c.html
deleted file mode 100644
index c6a7ecc..0000000
--- a/doc/html/sha256_8c.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/math/sha256.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('sha256_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">sha256.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>SHA256 implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="hash_8h.html">epid/common/math/hash.h</a>&quot;</code><br />
-<code>#include &quot;ext/ipp/include/ippcp.h&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga86d62aac9efd7445acee311b41846c6c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___hash_primitives.html#ga86d62aac9efd7445acee311b41846c6c">Sha256MessageDigest</a> (void const *msg, size_t len, <a class="el" href="struct_sha256_digest.html">Sha256Digest</a> *digest)</td></tr>
-<tr class="memdesc:ga86d62aac9efd7445acee311b41846c6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes SHA256 digest of a message. <a href="group___hash_primitives.html#ga86d62aac9efd7445acee311b41846c6c">More...</a><br /></td></tr>
-<tr class="separator:ga86d62aac9efd7445acee311b41846c6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>SHA256 implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="dir_f169ebf8da29290a918fa4b3f7151050.html">math</a></li><li class="navelem"><a class="el" href="sha256_8c.html">sha256.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/sign_8c.html b/doc/html/sign_8c.html
deleted file mode 100644
index ac8ceae..0000000
--- a/doc/html/sign_8c.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/member/sign.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('sign_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">sign.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>EpidSign implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;string.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="endian__convert_8h.html">epid/common/endian_convert.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="sigrlvalid_8h.html">epid/common/sigrlvalid.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="member_2api_8h.html">epid/member/api.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="member_2context_8h.html">epid/member/context.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga759155a719254f734157722716dac640"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#ga759155a719254f734157722716dac640">EpidSign</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, void const *basename, size_t basename_len, <a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl, size_t sig_rl_size, <a class="el" href="struct_epid_signature.html">EpidSignature</a> *sig, size_t sig_len)</td></tr>
-<tr class="memdesc:ga759155a719254f734157722716dac640"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes a Intel(R) EPID signature. <a href="group___epid_member_module.html#ga759155a719254f734157722716dac640">More...</a><br /></td></tr>
-<tr class="separator:ga759155a719254f734157722716dac640"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>EpidSign implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_512d3e62841a8535b716ec4cf8b9e950.html">member</a></li><li class="navelem"><a class="el" href="sign_8c.html">sign.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/sign__verify__tutorial_8dox.html b/doc/html/sign__verify__tutorial_8dox.html
index 6e64fb1..25d675c 100644
--- a/doc/html/sign__verify__tutorial_8dox.html
+++ b/doc/html/sign__verify__tutorial_8dox.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/signbasic_8c.html b/doc/html/signbasic_8c.html
deleted file mode 100644
index 5cf136e..0000000
--- a/doc/html/signbasic_8c.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/member/signbasic.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('signbasic_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">signbasic.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>EpidSignBasic implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;string.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="stack_8h.html">epid/common/stack.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="member_2api_8h.html">epid/member/api.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="member_2context_8h.html">epid/member/context.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="signbasic_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">BREAK_ON_EPID_ERROR</a>(ret)</td></tr>
-<tr class="memdesc:a5638f861b82f1746ea1af0b384ef8ff1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handle SDK Error with Break. <a href="#a5638f861b82f1746ea1af0b384ef8ff1">More...</a><br /></td></tr>
-<tr class="separator:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:gae04a250d5981fcf9bd6f9f57e0468faa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa">EpidSignBasic</a> (<a class="el" href="struct_member_ctx.html">MemberCtx</a> const *ctx, void const *msg, size_t msg_len, void const *basename, size_t basename_len, <a class="el" href="struct_basic_signature.html">BasicSignature</a> *sig)</td></tr>
-<tr class="memdesc:gae04a250d5981fcf9bd6f9f57e0468faa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a basic signature for use in constrained environment. <a href="group___epid_member_module.html#gae04a250d5981fcf9bd6f9f57e0468faa">More...</a><br /></td></tr>
-<tr class="separator:gae04a250d5981fcf9bd6f9f57e0468faa"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>EpidSignBasic implementation. </p>
-</div><h2 class="groupheader">Macro Definition Documentation</h2>
-<a class="anchor" id="a5638f861b82f1746ea1af0b384ef8ff1"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define BREAK_ON_EPID_ERROR</td>
- <td>(</td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">ret</td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != (ret)) { \</div><div class="line"> break; \</div><div class="line"> }</div><div class="ttc" id="group___error_codes_html_ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9"><div class="ttname"><a href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a></div><div class="ttdoc">no error </div><div class="ttdef"><b>Definition:</b> errors.h:41</div></div>
-</div><!-- fragment -->
-<p>Handle SDK Error with Break. </p>
-
-</div>
-</div>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_512d3e62841a8535b716ec4cf8b9e950.html">member</a></li><li class="navelem"><a class="el" href="signbasic_8c.html">signbasic.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/signmsg_8c-example.html b/doc/html/signmsg_8c-example.html
deleted file mode 100644
index 6550451..0000000
--- a/doc/html/signmsg_8c-example.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: signmsg.c</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('signmsg_8c-example.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="headertitle">
-<div class="title">signmsg.c</div> </div>
-</div><!--header-->
-<div class="contents">
-<p>This is an example of how to call the SDK member APIs.</p>
-<div class="fragment"><div class="line"><span class="comment">/*############################################################################</span></div><div class="line"><span class="comment"> # Copyright 2016 Intel Corporation</span></div><div class="line"><span class="comment"> #</span></div><div class="line"><span class="comment"> # Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><span class="comment"> # you may not use this file except in compliance with the License.</span></div><div class="line"><span class="comment"> # You may obtain a copy of the License at</span></div><div class="line"><span class="comment"> #</span></div><div class="line"><span class="comment"> # http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><span class="comment"> #</span></div><div class="line"><span class="comment"> # Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><span class="comment"> # distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><span class="comment"> # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><span class="comment"> # See the License for the specific language governing permissions and</span></div><div class="line"><span class="comment"> # limitations under the License.</span></div><div class="line"><span class="comment"> ############################################################################*/</span></div><div class="line"></div><div class="line"><span class="preprocessor">#include &lt;stdlib.h&gt;</span></div><div class="line"><span class="preprocessor">#include &lt;string.h&gt;</span></div><div class="line"><span class="preprocessor">#include &quot;src/signmsg.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;src/prng.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;util/envutil.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;util/stdtypes.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;util/buffutil.h&quot;</span></div><div class="line"></div><div class="line"><span class="keywordtype">bool</span> IsCaCertAuthorizedByRootCa(<span class="keywordtype">void</span> <span class="keyword">const</span>* data, <span class="keywordtype">size_t</span> size) {</div><div class="line"> <span class="comment">// Implementation of this function is out of scope of the sample.</span></div><div class="line"> <span class="comment">// In an actual implementation Issuing CA certificate must be validated</span></div><div class="line"> <span class="comment">// with CA Root certificate before using it in parse functions.</span></div><div class="line"> (void)data;</div><div class="line"> (void)size;</div><div class="line"> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line">}</div><div class="line"></div><div class="line"><a class="code" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> SignMsg(<span class="keywordtype">void</span> <span class="keyword">const</span>* msg, <span class="keywordtype">size_t</span> msg_len, <span class="keywordtype">void</span> <span class="keyword">const</span>* basename,</div><div class="line"> <span class="keywordtype">size_t</span> basename_len, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <span class="keyword">const</span>* signed_sig_rl,</div><div class="line"> <span class="keywordtype">size_t</span> signed_sig_rl_size,</div><div class="line"> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <span class="keyword">const</span>* signed_pubkey,</div><div class="line"> <span class="keywordtype">size_t</span> signed_pubkey_size, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <span class="keyword">const</span>* priv_key_ptr,</div><div class="line"> <span class="keywordtype">size_t</span> privkey_size, <a class="code" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg,</div><div class="line"> <a name="_a0"></a><a class="code" href="struct_member_precomp.html">MemberPrecomp</a>* member_precomp, <span class="keywordtype">bool</span> member_precomp_is_input,</div><div class="line"> <a name="_a1"></a><a class="code" href="struct_epid_signature.html">EpidSignature</a>** sig, <span class="keywordtype">size_t</span>* sig_len,</div><div class="line"> <a name="_a2"></a><a class="code" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> <span class="keyword">const</span>* cacert) {</div><div class="line"> <a class="code" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> sts = <a name="a3"></a><a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e">kEpidErr</a>;</div><div class="line"> <span class="keywordtype">void</span>* prng = NULL;</div><div class="line"> <a name="_a4"></a><a class="code" href="struct_member_ctx.html">MemberCtx</a>* member = NULL;</div><div class="line"></div><div class="line"> <a name="_a5"></a><a class="code" href="struct_sig_rl.html">SigRl</a>* sig_rl = NULL;</div><div class="line"> <span class="keywordtype">size_t</span> sig_rl_size = 0;</div><div class="line"></div><div class="line"> <span class="keywordflow">do</span> {</div><div class="line"> <a name="_a6"></a><a class="code" href="struct_group_pub_key.html">GroupPubKey</a> pub_key = {0};</div><div class="line"> <a name="_a7"></a><a class="code" href="struct_priv_key.html">PrivKey</a> priv_key = {0};</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (!sig) {</div><div class="line"> sts = <a name="a8"></a><a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf">kEpidBadArgErr</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// authenticate and extract group public key</span></div><div class="line"> sts = <a name="a9"></a><a class="code" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">EpidParseGroupPubKeyFile</a>(signed_pubkey, signed_pubkey_size, cacert,</div><div class="line"> &amp;pub_key);</div><div class="line"> <span class="keywordflow">if</span> (<a name="a10"></a><a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (signed_sig_rl) {</div><div class="line"> <span class="comment">// authenticate and determine space needed for SigRl</span></div><div class="line"> sts = <a name="a11"></a><a class="code" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">EpidParseSigRlFile</a>(signed_sig_rl, signed_sig_rl_size, cacert,</div><div class="line"> sig_rl, &amp;sig_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a name="a12"></a><a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8">kEpidSigInvalid</a> == sts) {</div><div class="line"> <span class="comment">// authentication failure</span></div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> sig_rl = AllocBuffer(sig_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (!sig_rl) {</div><div class="line"> sts = <a name="a13"></a><a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a11a4d2f1c37064eb663de08dc57bcda8">kEpidMemAllocErr</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// fill the SigRl</span></div><div class="line"> sts = <a class="code" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">EpidParseSigRlFile</a>(signed_sig_rl, signed_sig_rl_size, cacert,</div><div class="line"> sig_rl, &amp;sig_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8">kEpidSigInvalid</a> == sts) {</div><div class="line"> <span class="comment">// authentication failure</span></div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// acquire PRNG</span></div><div class="line"> sts = PrngCreate(&amp;prng);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// decompress private key</span></div><div class="line"> <span class="keywordflow">if</span> (privkey_size == <span class="keyword">sizeof</span>(<a class="code" href="struct_priv_key.html">PrivKey</a>)) {</div><div class="line"> priv_key = *(<a class="code" href="struct_priv_key.html">PrivKey</a>*)priv_key_ptr;</div><div class="line"> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (privkey_size == <span class="keyword">sizeof</span>(<a name="_a14"></a><a class="code" href="struct_compressed_priv_key.html">CompressedPrivKey</a>)) {</div><div class="line"> sts = <a name="a15"></a><a class="code" href="group___epid_member_module.html#gaf8cd05388f017486f14da2ee48d067ef">EpidDecompressPrivKey</a>(&amp;pub_key, (<a class="code" href="struct_compressed_priv_key.html">CompressedPrivKey</a>*)priv_key_ptr,</div><div class="line"> &amp;priv_key);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> } <span class="keywordflow">else</span> {</div><div class="line"> sts = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e">kEpidErr</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// create member</span></div><div class="line"> sts = <a name="a16"></a><a class="code" href="group___epid_member_module.html#ga561c4d544a78ee1bf59c3f4f919aa7bb">EpidMemberCreate</a>(&amp;pub_key, &amp;priv_key,</div><div class="line"> member_precomp_is_input ? member_precomp : NULL,</div><div class="line"> PrngGen, prng, &amp;member);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// return member pre-computation blob if requested</span></div><div class="line"> sts = <a name="a17"></a><a class="code" href="group___epid_member_module.html#ga5c35798d62cf81c4ca62b22c38809721">EpidMemberWritePrecomp</a>(member, member_precomp);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// register any provided basename as allowed</span></div><div class="line"> <span class="keywordflow">if</span> (0 != basename_len) {</div><div class="line"> sts = <a name="a18"></a><a class="code" href="group___epid_member_module.html#gad92d3c3266ae1833ffb1dba9ad76035d">EpidRegisterBaseName</a>(member, basename, basename_len);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"> sts = <a name="a19"></a><a class="code" href="group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf">EpidMemberSetHashAlg</a>(member, hash_alg);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// Signature</span></div><div class="line"> <span class="comment">// Note: Signature size must be computed after sig_rl is loaded.</span></div><div class="line"> *sig_len = <a name="a20"></a><a class="code" href="group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000">EpidGetSigSize</a>(sig_rl);</div><div class="line"></div><div class="line"> *sig = AllocBuffer(*sig_len);</div><div class="line"> <span class="keywordflow">if</span> (!*sig) {</div><div class="line"> sts = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a11a4d2f1c37064eb663de08dc57bcda8">kEpidMemAllocErr</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// sign message</span></div><div class="line"> sts = <a name="a21"></a><a class="code" href="group___epid_member_module.html#ga759155a719254f734157722716dac640">EpidSign</a>(member, msg, msg_len, basename, basename_len, sig_rl,</div><div class="line"> sig_rl_size, *sig, *sig_len);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != sts) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> sts = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a>;</div><div class="line"> } <span class="keywordflow">while</span> (0);</div><div class="line"></div><div class="line"> PrngDelete(&amp;prng);</div><div class="line"> <a name="a22"></a><a class="code" href="group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6">EpidMemberDelete</a>(&amp;member);</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (sig_rl) free(sig_rl);</div><div class="line"></div><div class="line"> <span class="keywordflow">return</span> sts;</div><div class="line">}</div></div><!-- fragment --> </div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/functions_l.html b/doc/html/signmsg__walkthrough_8dox.html
index 9c72e63..9f7ba33 100644
--- a/doc/html/functions_l.html
+++ b/doc/html/signmsg__walkthrough_8dox.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Data Fields</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: doc/docsrc/signmsg_walkthrough.dox File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,23 +53,26 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('functions_l.html','');});
+$(document).ready(function(){initNavTree('signmsg__walkthrough_8dox.html','');});
</script>
<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<div class="title">doc/docsrc/signmsg_walkthrough.dox File Reference</div> </div>
+</div><!--header-->
<div class="contents">
-<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div>
-<h3><a class="anchor" id="index_l"></a>- l -</h3><ul>
-<li>length
-: <a class="el" href="struct_allowed_basename.html#a15d6406bf481929526413be47ab5eec8">AllowedBasename</a>
-</li>
-</ul>
-</div><!-- contents -->
+<p>This file is used by Doxygen to generate documentation.
+<a href="#details">More...</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>This file is used by Doxygen to generate documentation. </p>
+</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
+ <li class="navelem"><a class="el" href="signmsg__walkthrough_8dox.html">signmsg_walkthrough.dox</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/sigrlvalid_8c.html b/doc/html/sigrlvalid_8c.html
deleted file mode 100644
index f7d41b8..0000000
--- a/doc/html/sigrlvalid_8c.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/sigrlvalid.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('sigrlvalid_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">sigrlvalid.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p><a class="el" href="struct_sig_rl.html" title="signature based revocation list ">SigRl</a> validity checking implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;string.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="endian__convert_8h.html">epid/common/endian_convert.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="sigrlvalid_8h.html">epid/common/sigrlvalid.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga23ec3f6c8b89eb63e04d2b1ec6fd2696"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga23ec3f6c8b89eb63e04d2b1ec6fd2696">IsSigRlValid</a> (<a class="el" href="group___epid_types.html#gada666b48d0cbc301985405fde896f1de">GroupId</a> const *gid, <a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl, size_t sig_rl_size)</td></tr>
-<tr class="memdesc:ga23ec3f6c8b89eb63e04d2b1ec6fd2696"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function to verify if signature based revocation list is valid. <a href="group___epid_common.html#ga23ec3f6c8b89eb63e04d2b1ec6fd2696">More...</a><br /></td></tr>
-<tr class="separator:ga23ec3f6c8b89eb63e04d2b1ec6fd2696"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p><a class="el" href="struct_sig_rl.html" title="signature based revocation list ">SigRl</a> validity checking implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="sigrlvalid_8c.html">sigrlvalid.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/sigrlvalid_8h.html b/doc/html/sigrlvalid_8h.html
deleted file mode 100644
index 76e6300..0000000
--- a/doc/html/sigrlvalid_8h.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/sigrlvalid.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('sigrlvalid_8h.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">sigrlvalid.h File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p><a class="el" href="struct_sig_rl.html" title="signature based revocation list ">SigRl</a> validity checking interface.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;stddef.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="stdtypes_8h.html">epid/common/stdtypes.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="types_8h.html">epid/common/types.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga23ec3f6c8b89eb63e04d2b1ec6fd2696"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga23ec3f6c8b89eb63e04d2b1ec6fd2696">IsSigRlValid</a> (<a class="el" href="group___epid_types.html#gada666b48d0cbc301985405fde896f1de">GroupId</a> const *gid, <a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl, size_t sig_rl_size)</td></tr>
-<tr class="memdesc:ga23ec3f6c8b89eb63e04d2b1ec6fd2696"><td class="mdescLeft">&#160;</td><td class="mdescRight">Function to verify if signature based revocation list is valid. <a href="group___epid_common.html#ga23ec3f6c8b89eb63e04d2b1ec6fd2696">More...</a><br /></td></tr>
-<tr class="separator:ga23ec3f6c8b89eb63e04d2b1ec6fd2696"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p><a class="el" href="struct_sig_rl.html" title="signature based revocation list ">SigRl</a> validity checking interface. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="sigrlvalid_8h.html">sigrlvalid.h</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/sigs__linked_8c.html b/doc/html/sigs__linked_8c.html
deleted file mode 100644
index 3788556..0000000
--- a/doc/html/sigs__linked_8c.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/verifier/sigs_linked.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('sigs__linked_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">sigs_linked.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>AreSigsLinked implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;<a class="el" href="verifier_2api_8h.html">epid/verifier/api.h</a>&gt;</code><br />
-<code>#include &lt;string.h&gt;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:gae44bd8acbc1e7205aeedff0c7e2632a8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gae44bd8acbc1e7205aeedff0c7e2632a8">EpidAreSigsLinked</a> (<a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig1, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig2)</td></tr>
-<tr class="memdesc:gae44bd8acbc1e7205aeedff0c7e2632a8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if two signatures are linked. <a href="group___epid_verifier_module.html#gae44bd8acbc1e7205aeedff0c7e2632a8">More...</a><br /></td></tr>
-<tr class="separator:gae44bd8acbc1e7205aeedff0c7e2632a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>AreSigsLinked implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_02c945662023679b89476bd7126bc985.html">verifier</a></li><li class="navelem"><a class="el" href="sigs__linked_8c.html">sigs_linked.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/stack_8c.html b/doc/html/stack_8c.html
deleted file mode 100644
index 312d4a8..0000000
--- a/doc/html/stack_8c.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/stack.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('stack_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">stack.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p><a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> container implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;limits.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="stack_8h.html">epid/common/stack.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_stack.html">Stack</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal representation of a <a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a>. <a href="struct_stack.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga00cb25d52726cef61a9a5266176c2a58"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58">CreateStack</a> (size_t element_size, <a class="el" href="struct_stack.html">Stack</a> **stack)</td></tr>
-<tr class="memdesc:ga00cb25d52726cef61a9a5266176c2a58"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create stack. <a href="group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58">More...</a><br /></td></tr>
-<tr class="separator:ga00cb25d52726cef61a9a5266176c2a58"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga0b4dedb867504e0148aa0e1fdf642b2b"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga0b4dedb867504e0148aa0e1fdf642b2b">StackPushN</a> (<a class="el" href="struct_stack.html">Stack</a> *stack, size_t n, void *elements)</td></tr>
-<tr class="memdesc:ga0b4dedb867504e0148aa0e1fdf642b2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Push multiple elements to the stack. <a href="group___epid_common.html#ga0b4dedb867504e0148aa0e1fdf642b2b">More...</a><br /></td></tr>
-<tr class="separator:ga0b4dedb867504e0148aa0e1fdf642b2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga8cdde2b366f4473f0a6965bcfea5b6a6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga8cdde2b366f4473f0a6965bcfea5b6a6">StackPopN</a> (<a class="el" href="struct_stack.html">Stack</a> *stack, size_t n, void *elements)</td></tr>
-<tr class="memdesc:ga8cdde2b366f4473f0a6965bcfea5b6a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pop multiple elements from the stack. <a href="group___epid_common.html#ga8cdde2b366f4473f0a6965bcfea5b6a6">More...</a><br /></td></tr>
-<tr class="separator:ga8cdde2b366f4473f0a6965bcfea5b6a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gab34066dc882ad63362c43c0790973fdc"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gab34066dc882ad63362c43c0790973fdc">StackGetSize</a> (<a class="el" href="struct_stack.html">Stack</a> const *stack)</td></tr>
-<tr class="memdesc:gab34066dc882ad63362c43c0790973fdc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get number of elements in the stack. <a href="group___epid_common.html#gab34066dc882ad63362c43c0790973fdc">More...</a><br /></td></tr>
-<tr class="separator:gab34066dc882ad63362c43c0790973fdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga3335a4754825c54840263aa4b2a9bf67"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga3335a4754825c54840263aa4b2a9bf67">DeleteStack</a> (<a class="el" href="struct_stack.html">Stack</a> **stack)</td></tr>
-<tr class="memdesc:ga3335a4754825c54840263aa4b2a9bf67"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deallocates memory used for the stack. <a href="group___epid_common.html#ga3335a4754825c54840263aa4b2a9bf67">More...</a><br /></td></tr>
-<tr class="separator:ga3335a4754825c54840263aa4b2a9bf67"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p><a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> container implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="stack_8c.html">stack.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/stack_8h.html b/doc/html/stack_8h.html
deleted file mode 100644
index 736596c..0000000
--- a/doc/html/stack_8h.html
+++ /dev/null
@@ -1,105 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/stack.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('stack_8h.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">stack.h File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p><a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> container interface.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;stddef.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="stdtypes_8h.html">epid/common/stdtypes.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga00cb25d52726cef61a9a5266176c2a58"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58">CreateStack</a> (size_t element_size, <a class="el" href="struct_stack.html">Stack</a> **stack)</td></tr>
-<tr class="memdesc:ga00cb25d52726cef61a9a5266176c2a58"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create stack. <a href="group___epid_common.html#ga00cb25d52726cef61a9a5266176c2a58">More...</a><br /></td></tr>
-<tr class="separator:ga00cb25d52726cef61a9a5266176c2a58"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga0b4dedb867504e0148aa0e1fdf642b2b"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga0b4dedb867504e0148aa0e1fdf642b2b">StackPushN</a> (<a class="el" href="struct_stack.html">Stack</a> *stack, size_t n, void *elements)</td></tr>
-<tr class="memdesc:ga0b4dedb867504e0148aa0e1fdf642b2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Push multiple elements to the stack. <a href="group___epid_common.html#ga0b4dedb867504e0148aa0e1fdf642b2b">More...</a><br /></td></tr>
-<tr class="separator:ga0b4dedb867504e0148aa0e1fdf642b2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga8cdde2b366f4473f0a6965bcfea5b6a6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga8cdde2b366f4473f0a6965bcfea5b6a6">StackPopN</a> (<a class="el" href="struct_stack.html">Stack</a> *stack, size_t n, void *elements)</td></tr>
-<tr class="memdesc:ga8cdde2b366f4473f0a6965bcfea5b6a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pop multiple elements from the stack. <a href="group___epid_common.html#ga8cdde2b366f4473f0a6965bcfea5b6a6">More...</a><br /></td></tr>
-<tr class="separator:ga8cdde2b366f4473f0a6965bcfea5b6a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gab34066dc882ad63362c43c0790973fdc"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#gab34066dc882ad63362c43c0790973fdc">StackGetSize</a> (<a class="el" href="struct_stack.html">Stack</a> const *stack)</td></tr>
-<tr class="memdesc:gab34066dc882ad63362c43c0790973fdc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get number of elements in the stack. <a href="group___epid_common.html#gab34066dc882ad63362c43c0790973fdc">More...</a><br /></td></tr>
-<tr class="separator:gab34066dc882ad63362c43c0790973fdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga3335a4754825c54840263aa4b2a9bf67"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_common.html#ga3335a4754825c54840263aa4b2a9bf67">DeleteStack</a> (<a class="el" href="struct_stack.html">Stack</a> **stack)</td></tr>
-<tr class="memdesc:ga3335a4754825c54840263aa4b2a9bf67"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deallocates memory used for the stack. <a href="group___epid_common.html#ga3335a4754825c54840263aa4b2a9bf67">More...</a><br /></td></tr>
-<tr class="separator:ga3335a4754825c54840263aa4b2a9bf67"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p><a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> container interface. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="stack_8h.html">stack.h</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/stdtypes_8h.html b/doc/html/stdtypes_8h.html
index 1884498..ce9162c 100644
--- a/doc/html/stdtypes_8h.html
+++ b/doc/html/stdtypes_8h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -71,6 +71,10 @@ $(document).ready(function(){initNavTree('stdtypes_8h.html','');});
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
+<tr class="memitem:aeaff0db5524987a2f50d71ac0162ceb2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeaff0db5524987a2f50d71ac0162ceb2"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stdtypes_8h.html#aeaff0db5524987a2f50d71ac0162ceb2">_Bool</a>&#160;&#160;&#160;char</td></tr>
+<tr class="memdesc:aeaff0db5524987a2f50d71ac0162ceb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">C99 standard name for bool. <br /></td></tr>
+<tr class="separator:aeaff0db5524987a2f50d71ac0162ceb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41f9c5fb8b08eb5dc3edce4dcb37fee7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41f9c5fb8b08eb5dc3edce4dcb37fee7"></a>
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="stdtypes_8h.html#a41f9c5fb8b08eb5dc3edce4dcb37fee7">true</a>&#160;&#160;&#160;1</td></tr>
<tr class="memdesc:a41f9c5fb8b08eb5dc3edce4dcb37fee7"><td class="mdescLeft">&#160;</td><td class="mdescRight">integer constant 1 <br /></td></tr>
diff --git a/doc/html/struct_basic_signature.html b/doc/html/struct_basic_signature.html
index 8828584..786998e 100644
--- a/doc/html/struct_basic_signature.html
+++ b/doc/html/struct_basic_signature.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_big_num_str.html b/doc/html/struct_big_num_str.html
index e9527b3..2c8239f 100644
--- a/doc/html/struct_big_num_str.html
+++ b/doc/html/struct_big_num_str.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_commit_values.html b/doc/html/struct_commit_values.html
deleted file mode 100644
index 9d567ec..0000000
--- a/doc/html/struct_commit_values.html
+++ /dev/null
@@ -1,137 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: CommitValues Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_commit_values.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#pub-attribs">Data Fields</a> </div>
- <div class="headertitle">
-<div class="title">CommitValues Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a></div></div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Storage for values to create commitment in Sign and Verify algorithms.
- <a href="struct_commit_values.html#details">More...</a></p>
-
-<p><code>#include &lt;epid/common/commitment.h&gt;</code></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Data Fields</h2></td></tr>
-<tr class="memitem:af5bf0f288e76f28ce54fe2df813881ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af5bf0f288e76f28ce54fe2df813881ef"></a>
-<a class="el" href="struct_big_num_str.html">BigNumStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_commit_values.html#af5bf0f288e76f28ce54fe2df813881ef">p</a></td></tr>
-<tr class="memdesc:af5bf0f288e76f28ce54fe2df813881ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID2.0 parameter p. <br /></td></tr>
-<tr class="separator:af5bf0f288e76f28ce54fe2df813881ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a22512a6efa7b7b0277b211be64f71c30"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22512a6efa7b7b0277b211be64f71c30"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_commit_values.html#a22512a6efa7b7b0277b211be64f71c30">g1</a></td></tr>
-<tr class="memdesc:a22512a6efa7b7b0277b211be64f71c30"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID2.0 parameter g1. <br /></td></tr>
-<tr class="separator:a22512a6efa7b7b0277b211be64f71c30"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af7022c18732bbee8c12328923a4a12a1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af7022c18732bbee8c12328923a4a12a1"></a>
-<a class="el" href="struct_g2_elem_str.html">G2ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_commit_values.html#af7022c18732bbee8c12328923a4a12a1">g2</a></td></tr>
-<tr class="memdesc:af7022c18732bbee8c12328923a4a12a1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID2.0 parameter g2. <br /></td></tr>
-<tr class="separator:af7022c18732bbee8c12328923a4a12a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a42297d157420f0b554bce8a8cbe95c46"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42297d157420f0b554bce8a8cbe95c46"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_commit_values.html#a42297d157420f0b554bce8a8cbe95c46">h1</a></td></tr>
-<tr class="memdesc:a42297d157420f0b554bce8a8cbe95c46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Group public key value h1. <br /></td></tr>
-<tr class="separator:a42297d157420f0b554bce8a8cbe95c46"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4a93cb984bac3de47bb60511b382a074"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a93cb984bac3de47bb60511b382a074"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_commit_values.html#a4a93cb984bac3de47bb60511b382a074">h2</a></td></tr>
-<tr class="memdesc:a4a93cb984bac3de47bb60511b382a074"><td class="mdescLeft">&#160;</td><td class="mdescRight">Group public key value h2. <br /></td></tr>
-<tr class="separator:a4a93cb984bac3de47bb60511b382a074"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac00af9d3eeb74543808a9e52e692f614"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac00af9d3eeb74543808a9e52e692f614"></a>
-<a class="el" href="struct_g2_elem_str.html">G2ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_commit_values.html#ac00af9d3eeb74543808a9e52e692f614">w</a></td></tr>
-<tr class="memdesc:ac00af9d3eeb74543808a9e52e692f614"><td class="mdescLeft">&#160;</td><td class="mdescRight">Group public key value w. <br /></td></tr>
-<tr class="separator:ac00af9d3eeb74543808a9e52e692f614"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abc97167d51a8d0669da9a8d97353db4d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abc97167d51a8d0669da9a8d97353db4d"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_commit_values.html#abc97167d51a8d0669da9a8d97353db4d">B</a></td></tr>
-<tr class="memdesc:abc97167d51a8d0669da9a8d97353db4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Variable B computed in algorithm. <br /></td></tr>
-<tr class="separator:abc97167d51a8d0669da9a8d97353db4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a49f073d0132a51020c0bfc819ec0d619"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49f073d0132a51020c0bfc819ec0d619"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_commit_values.html#a49f073d0132a51020c0bfc819ec0d619">K</a></td></tr>
-<tr class="memdesc:a49f073d0132a51020c0bfc819ec0d619"><td class="mdescLeft">&#160;</td><td class="mdescRight">Variable K computed in algorithm. <br /></td></tr>
-<tr class="separator:a49f073d0132a51020c0bfc819ec0d619"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab2da47fe5c28b4202658c5ad3523ea1a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab2da47fe5c28b4202658c5ad3523ea1a"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_commit_values.html#ab2da47fe5c28b4202658c5ad3523ea1a">T</a></td></tr>
-<tr class="memdesc:ab2da47fe5c28b4202658c5ad3523ea1a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Variable T computed in algorithm. <br /></td></tr>
-<tr class="separator:ab2da47fe5c28b4202658c5ad3523ea1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a00f7731d75085be08f171771c8f43d30"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00f7731d75085be08f171771c8f43d30"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_commit_values.html#a00f7731d75085be08f171771c8f43d30">R1</a></td></tr>
-<tr class="memdesc:a00f7731d75085be08f171771c8f43d30"><td class="mdescLeft">&#160;</td><td class="mdescRight">Variable R1 computed in algorithm. <br /></td></tr>
-<tr class="separator:a00f7731d75085be08f171771c8f43d30"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acb0d12e761fadb149924cdf21290b9bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acb0d12e761fadb149924cdf21290b9bf"></a>
-<a class="el" href="struct_fq12_elem_str.html">Fq12ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_commit_values.html#acb0d12e761fadb149924cdf21290b9bf">R2</a></td></tr>
-<tr class="memdesc:acb0d12e761fadb149924cdf21290b9bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Variable R2 computed in algorithm. <br /></td></tr>
-<tr class="separator:acb0d12e761fadb149924cdf21290b9bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Storage for values to create commitment in Sign and Verify algorithms. </p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/common/<a class="el" href="commitment_8h.html">commitment.h</a></li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="struct_commit_values.html">CommitValues</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/struct_compressed_priv_key.html b/doc/html/struct_compressed_priv_key.html
index bb2cc74..1823c32 100644
--- a/doc/html/struct_compressed_priv_key.html
+++ b/doc/html/struct_compressed_priv_key.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -87,8 +87,7 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Compressed private key. </p>
<p>Compressed Private key: (gid, A.x, seed) </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#_a14">signmsg.c</a>.</dd>
-</dl></div><hr/>The documentation for this struct was generated from the following file:<ul>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>epid/common/<a class="el" href="types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/struct_ecdsa_private_key.html b/doc/html/struct_ecdsa_private_key.html
index 608d33e..e3da810 100644
--- a/doc/html/struct_ecdsa_private_key.html
+++ b/doc/html/struct_ecdsa_private_key.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_ecdsa_public_key.html b/doc/html/struct_ecdsa_public_key.html
index 1d57bce..3b48d55 100644
--- a/doc/html/struct_ecdsa_public_key.html
+++ b/doc/html/struct_ecdsa_public_key.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_ecdsa_signature.html b/doc/html/struct_ecdsa_signature.html
index a89a8c9..f04b9fb 100644
--- a/doc/html/struct_ecdsa_signature.html
+++ b/doc/html/struct_ecdsa_signature.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_epid11_basic_signature.html b/doc/html/struct_epid11_basic_signature.html
new file mode 100644
index 0000000..c41bc64
--- /dev/null
+++ b/doc/html/struct_epid11_basic_signature.html
@@ -0,0 +1,146 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: Epid11BasicSignature Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('struct_epid11_basic_signature.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">Epid11BasicSignature Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Intel(R) EPID 1.1 basic signature.
+ <a href="struct_epid11_basic_signature.html#details">More...</a></p>
+
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a27fd7ae99d1ada652e21e7508a467c0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a27fd7ae99d1ada652e21e7508a467c0b"></a>
+<a class="el" href="group___epid11_types.html#gaf1f4f1d6f001895abe548cfb33611c23">Epid11G3ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html#a27fd7ae99d1ada652e21e7508a467c0b">B</a></td></tr>
+<tr class="memdesc:a27fd7ae99d1ada652e21e7508a467c0b"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G3 <br /></td></tr>
+<tr class="separator:a27fd7ae99d1ada652e21e7508a467c0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5882fcbfd272774e12e50a2d77f0b139"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5882fcbfd272774e12e50a2d77f0b139"></a>
+<a class="el" href="group___epid11_types.html#gaf1f4f1d6f001895abe548cfb33611c23">Epid11G3ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html#a5882fcbfd272774e12e50a2d77f0b139">K</a></td></tr>
+<tr class="memdesc:a5882fcbfd272774e12e50a2d77f0b139"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G3 <br /></td></tr>
+<tr class="separator:a5882fcbfd272774e12e50a2d77f0b139"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58b058a9c5119a240177acfade328b3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a58b058a9c5119a240177acfade328b3b"></a>
+<a class="el" href="group___epid11_types.html#gadff9c05d5b7751024152b40dda545545">Epid11G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html#a58b058a9c5119a240177acfade328b3b">T1</a></td></tr>
+<tr class="memdesc:a58b058a9c5119a240177acfade328b3b"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G1 <br /></td></tr>
+<tr class="separator:a58b058a9c5119a240177acfade328b3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a267cf4e17d10584736b0c38f3668d822"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a267cf4e17d10584736b0c38f3668d822"></a>
+<a class="el" href="group___epid11_types.html#gadff9c05d5b7751024152b40dda545545">Epid11G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html#a267cf4e17d10584736b0c38f3668d822">T2</a></td></tr>
+<tr class="memdesc:a267cf4e17d10584736b0c38f3668d822"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G1 <br /></td></tr>
+<tr class="separator:a267cf4e17d10584736b0c38f3668d822"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cc6efcd3d7270022779bd16776168ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9cc6efcd3d7270022779bd16776168ed"></a>
+<a class="el" href="struct_oct_str256.html">OctStr256</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html#a9cc6efcd3d7270022779bd16776168ed">c</a></td></tr>
+<tr class="memdesc:a9cc6efcd3d7270022779bd16776168ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">a 256-bit integer <br /></td></tr>
+<tr class="separator:a9cc6efcd3d7270022779bd16776168ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af18200712d2cf3ed3ccaee328e8a4e0f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af18200712d2cf3ed3ccaee328e8a4e0f"></a>
+<a class="el" href="struct_oct_str80.html">OctStr80</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html#af18200712d2cf3ed3ccaee328e8a4e0f">nd</a></td></tr>
+<tr class="memdesc:af18200712d2cf3ed3ccaee328e8a4e0f"><td class="mdescLeft">&#160;</td><td class="mdescRight">an 80-bit integer <br /></td></tr>
+<tr class="separator:af18200712d2cf3ed3ccaee328e8a4e0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2718346665210b7e26521bf4a15cb3bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2718346665210b7e26521bf4a15cb3bd"></a>
+<a class="el" href="struct_fp_elem_str.html">FpElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html#a2718346665210b7e26521bf4a15cb3bd">sx</a></td></tr>
+<tr class="memdesc:a2718346665210b7e26521bf4a15cb3bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, p-1] <br /></td></tr>
+<tr class="separator:a2718346665210b7e26521bf4a15cb3bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a911441845fc9b82d514133371b5ba87c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a911441845fc9b82d514133371b5ba87c"></a>
+<a class="el" href="struct_fp_elem_str.html">FpElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html#a911441845fc9b82d514133371b5ba87c">sy</a></td></tr>
+<tr class="memdesc:a911441845fc9b82d514133371b5ba87c"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, p-1] <br /></td></tr>
+<tr class="separator:a911441845fc9b82d514133371b5ba87c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae17b45194997a6fa13c6014a51ec711c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae17b45194997a6fa13c6014a51ec711c"></a>
+<a class="el" href="struct_oct_str600.html">OctStr600</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html#ae17b45194997a6fa13c6014a51ec711c">sf</a></td></tr>
+<tr class="memdesc:ae17b45194997a6fa13c6014a51ec711c"><td class="mdescLeft">&#160;</td><td class="mdescRight">a 593-bit integer <br /></td></tr>
+<tr class="separator:ae17b45194997a6fa13c6014a51ec711c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeb221cf52bc2b1a9bf6e0a9779bfd20f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aeb221cf52bc2b1a9bf6e0a9779bfd20f"></a>
+<a class="el" href="struct_fp_elem_str.html">FpElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html#aeb221cf52bc2b1a9bf6e0a9779bfd20f">sa</a></td></tr>
+<tr class="memdesc:aeb221cf52bc2b1a9bf6e0a9779bfd20f"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, p-1] <br /></td></tr>
+<tr class="separator:aeb221cf52bc2b1a9bf6e0a9779bfd20f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a29a700f3bec251600e18b2292081df4b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29a700f3bec251600e18b2292081df4b"></a>
+<a class="el" href="struct_fp_elem_str.html">FpElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html#a29a700f3bec251600e18b2292081df4b">sb</a></td></tr>
+<tr class="memdesc:a29a700f3bec251600e18b2292081df4b"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, p-1] <br /></td></tr>
+<tr class="separator:a29a700f3bec251600e18b2292081df4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1a73fc922f69e2499643dd4c53d0d42d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1a73fc922f69e2499643dd4c53d0d42d"></a>
+<a class="el" href="struct_fp_elem_str.html">FpElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html#a1a73fc922f69e2499643dd4c53d0d42d">salpha</a></td></tr>
+<tr class="memdesc:a1a73fc922f69e2499643dd4c53d0d42d"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, p-1] <br /></td></tr>
+<tr class="separator:a1a73fc922f69e2499643dd4c53d0d42d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afe28bad6328f81e6f7af011cc96ac2e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afe28bad6328f81e6f7af011cc96ac2e5"></a>
+<a class="el" href="struct_fp_elem_str.html">FpElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_basic_signature.html#afe28bad6328f81e6f7af011cc96ac2e5">sbeta</a></td></tr>
+<tr class="memdesc:afe28bad6328f81e6f7af011cc96ac2e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, p-1] <br /></td></tr>
+<tr class="separator:afe28bad6328f81e6f7af011cc96ac2e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Intel(R) EPID 1.1 basic signature. </p>
+<p>Basic signature: (B, K, T1, T2, c, nd, sx, sy, sf, sa, sb, salpha, sbeta) </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a></li>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/struct_error_text_entry.html b/doc/html/struct_epid11_g2_elem_str.html
index 171ed94..940bdaf 100644
--- a/doc/html/struct_error_text_entry.html
+++ b/doc/html/struct_epid11_g2_elem_str.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: ErrorTextEntry Struct Reference</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: Epid11G2ElemStr Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,35 +53,37 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_error_text_entry.html','');});
+$(document).ready(function(){initNavTree('struct_epid11_g2_elem_str.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-attribs">Data Fields</a> </div>
<div class="headertitle">
-<div class="title">ErrorTextEntry Struct Reference</div> </div>
+<div class="title">Epid11G2ElemStr Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
</div><!--header-->
<div class="contents">
-<p>Record mapping status code to string.
- <a href="struct_error_text_entry.html#details">More...</a></p>
+<p>Serialized Intel(R) EPID 1.1 G2 element.
+ <a href="struct_epid11_g2_elem_str.html#details">More...</a></p>
+
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Data Fields</h2></td></tr>
-<tr class="memitem:a8bbdabb59eded9b6206ea17b5cb04648"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8bbdabb59eded9b6206ea17b5cb04648"></a>
-<a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_error_text_entry.html#a8bbdabb59eded9b6206ea17b5cb04648">value</a></td></tr>
-<tr class="memdesc:a8bbdabb59eded9b6206ea17b5cb04648"><td class="mdescLeft">&#160;</td><td class="mdescRight">error code <br /></td></tr>
-<tr class="separator:a8bbdabb59eded9b6206ea17b5cb04648"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa6b2528ee3cd37397a9ce382284cd01a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa6b2528ee3cd37397a9ce382284cd01a"></a>
-char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_error_text_entry.html#aa6b2528ee3cd37397a9ce382284cd01a">text</a></td></tr>
-<tr class="memdesc:aa6b2528ee3cd37397a9ce382284cd01a"><td class="mdescLeft">&#160;</td><td class="mdescRight">string associated with error code <br /></td></tr>
-<tr class="separator:aa6b2528ee3cd37397a9ce382284cd01a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af28558484298f4f56377ededf57a4a04"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af28558484298f4f56377ededf57a4a04"></a>
+<a class="el" href="struct_fq_elem_str.html">FqElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_g2_elem_str.html#af28558484298f4f56377ededf57a4a04">x</a> [3]</td></tr>
+<tr class="memdesc:af28558484298f4f56377ededf57a4a04"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, q-1] <br /></td></tr>
+<tr class="separator:af28558484298f4f56377ededf57a4a04"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9e8984e479bcbe8bd36c65e80c340032"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e8984e479bcbe8bd36c65e80c340032"></a>
+<a class="el" href="struct_fq_elem_str.html">FqElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_g2_elem_str.html#a9e8984e479bcbe8bd36c65e80c340032">y</a> [3]</td></tr>
+<tr class="memdesc:a9e8984e479bcbe8bd36c65e80c340032"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, q-1] <br /></td></tr>
+<tr class="separator:a9e8984e479bcbe8bd36c65e80c340032"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Record mapping status code to string. </p>
+<div class="textblock"><p>Serialized Intel(R) EPID 1.1 G2 element. </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/common/<a class="el" href="errors_8c.html">errors.c</a></li>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
@@ -89,7 +91,7 @@ char const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" hr
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
- <li class="navelem"><a class="el" href="struct_error_text_entry.html">ErrorTextEntry</a></li>
+ <li class="navelem"><a class="el" href="struct_epid11_g2_elem_str.html">Epid11G2ElemStr</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/struct_group_pub_key__.html b/doc/html/struct_epid11_group_pub_key.html
index e24e186..b50e2ed 100644
--- a/doc/html/struct_group_pub_key__.html
+++ b/doc/html/struct_epid11_group_pub_key.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: GroupPubKey_ Struct Reference</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: Epid11GroupPubKey Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,45 +53,46 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_group_pub_key__.html','');});
+$(document).ready(function(){initNavTree('struct_epid11_group_pub_key.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-attribs">Data Fields</a> </div>
<div class="headertitle">
-<div class="title">GroupPubKey_ Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a></div></div> </div>
+<div class="title">Epid11GroupPubKey Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
</div><!--header-->
<div class="contents">
-<p>Internal representation of <a class="el" href="struct_group_pub_key.html" title="Intel(R) EPID 2.0 group public key. ">GroupPubKey</a>.
- <a href="struct_group_pub_key__.html#details">More...</a></p>
+<p>Intel(R) EPID 1.1 group public key.
+ <a href="struct_epid11_group_pub_key.html#details">More...</a></p>
-<p><code>#include &lt;epid/common/grouppubkey.h&gt;</code></p>
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Data Fields</h2></td></tr>
-<tr class="memitem:afd2192bfd1e24c09951d9c0200a74f95"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afd2192bfd1e24c09951d9c0200a74f95"></a>
-<a class="el" href="group___epid_types.html#gada666b48d0cbc301985405fde896f1de">GroupId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_group_pub_key__.html#afd2192bfd1e24c09951d9c0200a74f95">gid</a></td></tr>
-<tr class="memdesc:afd2192bfd1e24c09951d9c0200a74f95"><td class="mdescLeft">&#160;</td><td class="mdescRight">group ID <br /></td></tr>
-<tr class="separator:afd2192bfd1e24c09951d9c0200a74f95"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2322bc1b42f85e0d01b50b15d064f840"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2322bc1b42f85e0d01b50b15d064f840"></a>
-<a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_group_pub_key__.html#a2322bc1b42f85e0d01b50b15d064f840">h1</a></td></tr>
-<tr class="memdesc:a2322bc1b42f85e0d01b50b15d064f840"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G1 <br /></td></tr>
-<tr class="separator:a2322bc1b42f85e0d01b50b15d064f840"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4d95b831d9a66071092678547df921ae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d95b831d9a66071092678547df921ae"></a>
-<a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_group_pub_key__.html#a4d95b831d9a66071092678547df921ae">h2</a></td></tr>
-<tr class="memdesc:a4d95b831d9a66071092678547df921ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G1 <br /></td></tr>
-<tr class="separator:a4d95b831d9a66071092678547df921ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4d1537e5bd834b6fc92eb2fd7c826329"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d1537e5bd834b6fc92eb2fd7c826329"></a>
-<a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_group_pub_key__.html#a4d1537e5bd834b6fc92eb2fd7c826329">w</a></td></tr>
-<tr class="memdesc:a4d1537e5bd834b6fc92eb2fd7c826329"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G2 <br /></td></tr>
-<tr class="separator:a4d1537e5bd834b6fc92eb2fd7c826329"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a964344b3c595bdd585bb9b5d9d0ea762"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a964344b3c595bdd585bb9b5d9d0ea762"></a>
+<a class="el" href="group___epid11_types.html#ga7293cec8f937d6f5da42084403f978f1">Epid11GroupId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_group_pub_key.html#a964344b3c595bdd585bb9b5d9d0ea762">gid</a></td></tr>
+<tr class="memdesc:a964344b3c595bdd585bb9b5d9d0ea762"><td class="mdescLeft">&#160;</td><td class="mdescRight">group ID <br /></td></tr>
+<tr class="separator:a964344b3c595bdd585bb9b5d9d0ea762"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a36f688472e2655052d485eac67d8c362"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36f688472e2655052d485eac67d8c362"></a>
+<a class="el" href="group___epid11_types.html#gadff9c05d5b7751024152b40dda545545">Epid11G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_group_pub_key.html#a36f688472e2655052d485eac67d8c362">h1</a></td></tr>
+<tr class="memdesc:a36f688472e2655052d485eac67d8c362"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G1 <br /></td></tr>
+<tr class="separator:a36f688472e2655052d485eac67d8c362"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa724e9d2f0cb6019c05547d76a13b72a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa724e9d2f0cb6019c05547d76a13b72a"></a>
+<a class="el" href="group___epid11_types.html#gadff9c05d5b7751024152b40dda545545">Epid11G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_group_pub_key.html#aa724e9d2f0cb6019c05547d76a13b72a">h2</a></td></tr>
+<tr class="memdesc:aa724e9d2f0cb6019c05547d76a13b72a"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G1 <br /></td></tr>
+<tr class="separator:aa724e9d2f0cb6019c05547d76a13b72a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a056c7138246e2bdcd47eaad501b756bb"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a056c7138246e2bdcd47eaad501b756bb"></a>
+<a class="el" href="struct_epid11_g2_elem_str.html">Epid11G2ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_group_pub_key.html#a056c7138246e2bdcd47eaad501b756bb">w</a></td></tr>
+<tr class="memdesc:a056c7138246e2bdcd47eaad501b756bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G2 <br /></td></tr>
+<tr class="separator:a056c7138246e2bdcd47eaad501b756bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Internal representation of <a class="el" href="struct_group_pub_key.html" title="Intel(R) EPID 2.0 group public key. ">GroupPubKey</a>. </p>
+<div class="textblock"><p>Intel(R) EPID 1.1 group public key. </p>
+<p>Group public key: (gid, h1, h2, w) </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/common/<a class="el" href="grouppubkey_8h.html">grouppubkey.h</a></li>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
@@ -99,7 +100,7 @@ Data Fields</h2></td></tr>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
- <li class="navelem"><a class="el" href="struct_group_pub_key__.html">GroupPubKey_</a></li>
+ <li class="navelem"><a class="el" href="struct_epid11_group_pub_key.html">Epid11GroupPubKey</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/struct_stack.html b/doc/html/struct_epid11_group_rl.html
index a93fbe5..95001a9 100644
--- a/doc/html/struct_stack.html
+++ b/doc/html/struct_epid11_group_rl.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Stack Struct Reference</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: Epid11GroupRl Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,44 +53,42 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_stack.html','');});
+$(document).ready(function(){initNavTree('struct_epid11_group_rl.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-attribs">Data Fields</a> </div>
<div class="headertitle">
-<div class="title">Stack Struct Reference</div> </div>
+<div class="title">Epid11GroupRl Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
</div><!--header-->
<div class="contents">
-<p>Internal representation of a <a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a>.
- <a href="struct_stack.html#details">More...</a></p>
+<p>Intel(R) EPID 1.1 group revocation list.
+ <a href="struct_epid11_group_rl.html#details">More...</a></p>
+
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Data Fields</h2></td></tr>
-<tr class="memitem:abcbae1a2f5b8f56dd4ca19c0ed0810f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcbae1a2f5b8f56dd4ca19c0ed0810f3"></a>
-size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_stack.html#abcbae1a2f5b8f56dd4ca19c0ed0810f3">element_size</a></td></tr>
-<tr class="memdesc:abcbae1a2f5b8f56dd4ca19c0ed0810f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Size of element in bytes. <br /></td></tr>
-<tr class="separator:abcbae1a2f5b8f56dd4ca19c0ed0810f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a41da8a13c8a2dc6d4b957864822a1e4b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41da8a13c8a2dc6d4b957864822a1e4b"></a>
-void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_stack.html#a41da8a13c8a2dc6d4b957864822a1e4b">buf</a></td></tr>
-<tr class="memdesc:a41da8a13c8a2dc6d4b957864822a1e4b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Buffer to store elements. <br /></td></tr>
-<tr class="separator:a41da8a13c8a2dc6d4b957864822a1e4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abcc9e152813f8e38fda7971902f4c33d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abcc9e152813f8e38fda7971902f4c33d"></a>
-size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_stack.html#abcc9e152813f8e38fda7971902f4c33d">max_size</a></td></tr>
-<tr class="memdesc:abcc9e152813f8e38fda7971902f4c33d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Numbers of elements buffer was allocated to. <br /></td></tr>
-<tr class="separator:abcc9e152813f8e38fda7971902f4c33d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0adc2afde769affc767fa708ac378880"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0adc2afde769affc767fa708ac378880"></a>
-size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_stack.html#a0adc2afde769affc767fa708ac378880">top</a></td></tr>
-<tr class="memdesc:a0adc2afde769affc767fa708ac378880"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a> top, the number of elements in the stack. <br /></td></tr>
-<tr class="separator:a0adc2afde769affc767fa708ac378880"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63afa9863e8dcb63ff884e6e4093c481"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a63afa9863e8dcb63ff884e6e4093c481"></a>
+<a class="el" href="struct_oct_str32.html">OctStr32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_group_rl.html#a63afa9863e8dcb63ff884e6e4093c481">version</a></td></tr>
+<tr class="memdesc:a63afa9863e8dcb63ff884e6e4093c481"><td class="mdescLeft">&#160;</td><td class="mdescRight">revocation list version number <br /></td></tr>
+<tr class="separator:a63afa9863e8dcb63ff884e6e4093c481"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a35cb954f598d4006b0f047cde77010a5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a35cb954f598d4006b0f047cde77010a5"></a>
+<a class="el" href="struct_oct_str32.html">OctStr32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_group_rl.html#a35cb954f598d4006b0f047cde77010a5">n3</a></td></tr>
+<tr class="memdesc:a35cb954f598d4006b0f047cde77010a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">number of entries in GroupRL <br /></td></tr>
+<tr class="separator:a35cb954f598d4006b0f047cde77010a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a97f165c59bc447e3ca3c2148a096710f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a97f165c59bc447e3ca3c2148a096710f"></a>
+<a class="el" href="group___epid11_types.html#ga7293cec8f937d6f5da42084403f978f1">Epid11GroupId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_group_rl.html#a97f165c59bc447e3ca3c2148a096710f">gid</a> [1]</td></tr>
+<tr class="memdesc:a97f165c59bc447e3ca3c2148a096710f"><td class="mdescLeft">&#160;</td><td class="mdescRight">revoked group IDs (flexible array) <br /></td></tr>
+<tr class="separator:a97f165c59bc447e3ca3c2148a096710f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Internal representation of a <a class="el" href="struct_stack.html" title="Internal representation of a Stack. ">Stack</a>. </p>
-<p>A stack. </p>
+<div class="textblock"><p>Intel(R) EPID 1.1 group revocation list. </p>
+<p>Group revocation list GroupRL: (RLver, n3, gid[0], ..., gid[n3-1]) </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/common/<a class="el" href="stack_8c.html">stack.c</a></li>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
@@ -98,7 +96,7 @@ size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="st
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
- <li class="navelem"><a class="el" href="struct_stack.html">Stack</a></li>
+ <li class="navelem"><a class="el" href="struct_epid11_group_rl.html">Epid11GroupRl</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/struct_epid11_gt_elem_str.html b/doc/html/struct_epid11_gt_elem_str.html
new file mode 100644
index 0000000..a6117ec
--- /dev/null
+++ b/doc/html/struct_epid11_gt_elem_str.html
@@ -0,0 +1,97 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: Epid11GtElemStr Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('struct_epid11_gt_elem_str.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">Epid11GtElemStr Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Serialized Intel(R) EPID 1.1 GT element.
+ <a href="struct_epid11_gt_elem_str.html#details">More...</a></p>
+
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aed8dd86f1696c2f3537154fc904bf2b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed8dd86f1696c2f3537154fc904bf2b0"></a>
+<a class="el" href="struct_fq3_elem_str.html">Fq3ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_gt_elem_str.html#aed8dd86f1696c2f3537154fc904bf2b0">a</a> [2]</td></tr>
+<tr class="memdesc:aed8dd86f1696c2f3537154fc904bf2b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in Fq3 <br /></td></tr>
+<tr class="separator:aed8dd86f1696c2f3537154fc904bf2b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Serialized Intel(R) EPID 1.1 GT element. </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="struct_epid11_gt_elem_str.html">Epid11GtElemStr</a></li>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/struct_priv_key__.html b/doc/html/struct_epid11_nr_proof.html
index 23f0242..71f918d 100644
--- a/doc/html/struct_priv_key__.html
+++ b/doc/html/struct_epid11_nr_proof.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: PrivKey_ Struct Reference</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: Epid11NrProof Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,45 +53,46 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_priv_key__.html','');});
+$(document).ready(function(){initNavTree('struct_epid11_nr_proof.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-attribs">Data Fields</a> </div>
<div class="headertitle">
-<div class="title">PrivKey_ Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a></div></div> </div>
+<div class="title">Epid11NrProof Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
</div><!--header-->
<div class="contents">
-<p>Internal implementation of <a class="el" href="struct_priv_key.html" title="Intel(R) EPID 2.0 private key. ">PrivKey</a>.
- <a href="struct_priv_key__.html#details">More...</a></p>
+<p>Intel(R) EPID 1.1 non-revoked Proof.
+ <a href="struct_epid11_nr_proof.html#details">More...</a></p>
-<p><code>#include &lt;epid/member/privkey.h&gt;</code></p>
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Data Fields</h2></td></tr>
-<tr class="memitem:a0892f451bb967dd7c99fe1d926d5056f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0892f451bb967dd7c99fe1d926d5056f"></a>
-<a class="el" href="group___epid_types.html#gada666b48d0cbc301985405fde896f1de">GroupId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_priv_key__.html#a0892f451bb967dd7c99fe1d926d5056f">gid</a></td></tr>
-<tr class="memdesc:a0892f451bb967dd7c99fe1d926d5056f"><td class="mdescLeft">&#160;</td><td class="mdescRight">group ID <br /></td></tr>
-<tr class="separator:a0892f451bb967dd7c99fe1d926d5056f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aaf02af1379a0801f49a3f8845e7a1b1f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaf02af1379a0801f49a3f8845e7a1b1f"></a>
-<a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_priv_key__.html#aaf02af1379a0801f49a3f8845e7a1b1f">A</a></td></tr>
-<tr class="memdesc:aaf02af1379a0801f49a3f8845e7a1b1f"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G1 <br /></td></tr>
-<tr class="separator:aaf02af1379a0801f49a3f8845e7a1b1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a327d7192cbb6b5638e3f6f1c3d9d2d5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a327d7192cbb6b5638e3f6f1c3d9d2d5b"></a>
-<a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_priv_key__.html#a327d7192cbb6b5638e3f6f1c3d9d2d5b">x</a></td></tr>
-<tr class="memdesc:a327d7192cbb6b5638e3f6f1c3d9d2d5b"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, p-1] <br /></td></tr>
-<tr class="separator:a327d7192cbb6b5638e3f6f1c3d9d2d5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a183eb6658baec9825313ab534608fa10"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a183eb6658baec9825313ab534608fa10"></a>
-<a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_priv_key__.html#a183eb6658baec9825313ab534608fa10">f</a></td></tr>
-<tr class="memdesc:a183eb6658baec9825313ab534608fa10"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, p-1] <br /></td></tr>
-<tr class="separator:a183eb6658baec9825313ab534608fa10"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5ad9ba3bfac4eac37fd4a4e33ea65ddc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5ad9ba3bfac4eac37fd4a4e33ea65ddc"></a>
+<a class="el" href="group___epid11_types.html#gaf1f4f1d6f001895abe548cfb33611c23">Epid11G3ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_nr_proof.html#a5ad9ba3bfac4eac37fd4a4e33ea65ddc">T</a></td></tr>
+<tr class="memdesc:a5ad9ba3bfac4eac37fd4a4e33ea65ddc"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G3 <br /></td></tr>
+<tr class="separator:a5ad9ba3bfac4eac37fd4a4e33ea65ddc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e5ee8dc25d296538dce935397a93d68"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e5ee8dc25d296538dce935397a93d68"></a>
+<a class="el" href="struct_oct_str256.html">OctStr256</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_nr_proof.html#a2e5ee8dc25d296538dce935397a93d68">c</a></td></tr>
+<tr class="memdesc:a2e5ee8dc25d296538dce935397a93d68"><td class="mdescLeft">&#160;</td><td class="mdescRight">a 256-bit integer <br /></td></tr>
+<tr class="separator:a2e5ee8dc25d296538dce935397a93d68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1ad7fe6b32c09f2504ee49731c0ad145"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ad7fe6b32c09f2504ee49731c0ad145"></a>
+<a class="el" href="struct_fp_elem_str.html">FpElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_nr_proof.html#a1ad7fe6b32c09f2504ee49731c0ad145">smu</a></td></tr>
+<tr class="memdesc:a1ad7fe6b32c09f2504ee49731c0ad145"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, p'-1] <br /></td></tr>
+<tr class="separator:a1ad7fe6b32c09f2504ee49731c0ad145"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa8406e938b2f87bded9e374e93a8ee5d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8406e938b2f87bded9e374e93a8ee5d"></a>
+<a class="el" href="struct_fp_elem_str.html">FpElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_nr_proof.html#aa8406e938b2f87bded9e374e93a8ee5d">snu</a></td></tr>
+<tr class="memdesc:aa8406e938b2f87bded9e374e93a8ee5d"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, p'-1] <br /></td></tr>
+<tr class="separator:aa8406e938b2f87bded9e374e93a8ee5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Internal implementation of <a class="el" href="struct_priv_key.html" title="Intel(R) EPID 2.0 private key. ">PrivKey</a>. </p>
+<div class="textblock"><p>Intel(R) EPID 1.1 non-revoked Proof. </p>
+<p>Non-revoked Proof: (T, c, smu, snu) </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/member/<a class="el" href="privkey_8h.html">privkey.h</a></li>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
@@ -99,7 +100,7 @@ Data Fields</h2></td></tr>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
- <li class="navelem"><a class="el" href="struct_priv_key__.html">PrivKey_</a></li>
+ <li class="navelem"><a class="el" href="struct_epid11_nr_proof.html">Epid11NrProof</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/struct_epid11_params.html b/doc/html/struct_epid11_params.html
new file mode 100644
index 0000000..df7dc38
--- /dev/null
+++ b/doc/html/struct_epid11_params.html
@@ -0,0 +1,170 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: Epid11Params Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('struct_epid11_params.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">Epid11Params Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Intel(R) EPID 1.1 Parameters.
+ <a href="struct_epid11_params.html#details">More...</a></p>
+
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a2aa4d8a2ebe0dfeb6d930fd7b39f9d1a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2aa4d8a2ebe0dfeb6d930fd7b39f9d1a"></a>
+<a class="el" href="struct_big_num_str.html">BigNumStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#a2aa4d8a2ebe0dfeb6d930fd7b39f9d1a">p</a></td></tr>
+<tr class="memdesc:a2aa4d8a2ebe0dfeb6d930fd7b39f9d1a"><td class="mdescLeft">&#160;</td><td class="mdescRight">a prime <br /></td></tr>
+<tr class="separator:a2aa4d8a2ebe0dfeb6d930fd7b39f9d1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad03fd1cc3955bb8879535fa7298123f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aad03fd1cc3955bb8879535fa7298123f"></a>
+<a class="el" href="struct_big_num_str.html">BigNumStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#aad03fd1cc3955bb8879535fa7298123f">q</a></td></tr>
+<tr class="memdesc:aad03fd1cc3955bb8879535fa7298123f"><td class="mdescLeft">&#160;</td><td class="mdescRight">a prime <br /></td></tr>
+<tr class="separator:aad03fd1cc3955bb8879535fa7298123f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae2d1dc635d9d7cba496c3d64fb6f9d5b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae2d1dc635d9d7cba496c3d64fb6f9d5b"></a>
+<a class="el" href="struct_oct_str32.html">OctStr32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#ae2d1dc635d9d7cba496c3d64fb6f9d5b">h</a></td></tr>
+<tr class="memdesc:ae2d1dc635d9d7cba496c3d64fb6f9d5b"><td class="mdescLeft">&#160;</td><td class="mdescRight">a small integer, also denoted as cofactor <br /></td></tr>
+<tr class="separator:ae2d1dc635d9d7cba496c3d64fb6f9d5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a01381f84b2d747b6273e21c71c58a1b0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a01381f84b2d747b6273e21c71c58a1b0"></a>
+<a class="el" href="struct_fq_elem_str.html">FqElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#a01381f84b2d747b6273e21c71c58a1b0">a</a></td></tr>
+<tr class="memdesc:a01381f84b2d747b6273e21c71c58a1b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, q-1] <br /></td></tr>
+<tr class="separator:a01381f84b2d747b6273e21c71c58a1b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a27b45ed7771a3024d1d059b4b4ff6eae"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a27b45ed7771a3024d1d059b4b4ff6eae"></a>
+<a class="el" href="struct_fq_elem_str.html">FqElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#a27b45ed7771a3024d1d059b4b4ff6eae">b</a></td></tr>
+<tr class="memdesc:a27b45ed7771a3024d1d059b4b4ff6eae"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, q-1] <br /></td></tr>
+<tr class="separator:a27b45ed7771a3024d1d059b4b4ff6eae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aacc39ebe0cc625321039ffb6be0b0e87"><td class="memItemLeft" align="right" valign="top"><a class="el" href="struct_big_num_str.html">BigNumStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#aacc39ebe0cc625321039ffb6be0b0e87">coeff</a> [3]</td></tr>
+<tr class="separator:aacc39ebe0cc625321039ffb6be0b0e87"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af22cfcd6c7ec0e7e7369b79554b963bd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af22cfcd6c7ec0e7e7369b79554b963bd"></a>
+<a class="el" href="struct_fq_elem_str.html">FqElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#af22cfcd6c7ec0e7e7369b79554b963bd">qnr</a></td></tr>
+<tr class="memdesc:af22cfcd6c7ec0e7e7369b79554b963bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">a quadratic non-residue (an integer between [0, q-1]) <br /></td></tr>
+<tr class="separator:af22cfcd6c7ec0e7e7369b79554b963bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a02bd6fa2ab256e3a07533e947ab0101e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02bd6fa2ab256e3a07533e947ab0101e"></a>
+<a class="el" href="struct_oct_str768.html">OctStr768</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#a02bd6fa2ab256e3a07533e947ab0101e">orderG2</a></td></tr>
+<tr class="memdesc:a02bd6fa2ab256e3a07533e947ab0101e"><td class="mdescLeft">&#160;</td><td class="mdescRight">the total number of points in G2 elliptic curve <br /></td></tr>
+<tr class="separator:a02bd6fa2ab256e3a07533e947ab0101e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a77a8350b97a7afb584a46eb5b32f03bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a77a8350b97a7afb584a46eb5b32f03bf"></a>
+<a class="el" href="struct_big_num_str.html">BigNumStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#a77a8350b97a7afb584a46eb5b32f03bf">p_tick</a></td></tr>
+<tr class="memdesc:a77a8350b97a7afb584a46eb5b32f03bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">a prime <br /></td></tr>
+<tr class="separator:a77a8350b97a7afb584a46eb5b32f03bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a49462f35596d07a456a731d0690fdd83"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a49462f35596d07a456a731d0690fdd83"></a>
+<a class="el" href="struct_big_num_str.html">BigNumStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#a49462f35596d07a456a731d0690fdd83">q_tick</a></td></tr>
+<tr class="memdesc:a49462f35596d07a456a731d0690fdd83"><td class="mdescLeft">&#160;</td><td class="mdescRight">a prime <br /></td></tr>
+<tr class="separator:a49462f35596d07a456a731d0690fdd83"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0fe238db4ebc0225899dc2dac97d11c0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0fe238db4ebc0225899dc2dac97d11c0"></a>
+<a class="el" href="struct_oct_str32.html">OctStr32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#a0fe238db4ebc0225899dc2dac97d11c0">h_tick</a></td></tr>
+<tr class="memdesc:a0fe238db4ebc0225899dc2dac97d11c0"><td class="mdescLeft">&#160;</td><td class="mdescRight">a small integer, also denoted as cofactor <br /></td></tr>
+<tr class="separator:a0fe238db4ebc0225899dc2dac97d11c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae8770bb921aac9214ff8c45c41dbb228"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae8770bb921aac9214ff8c45c41dbb228"></a>
+<a class="el" href="struct_fq_elem_str.html">FqElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#ae8770bb921aac9214ff8c45c41dbb228">a_tick</a></td></tr>
+<tr class="memdesc:ae8770bb921aac9214ff8c45c41dbb228"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, q-1] <br /></td></tr>
+<tr class="separator:ae8770bb921aac9214ff8c45c41dbb228"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade3f88ce73d7de656ec67d9fdb0719d7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade3f88ce73d7de656ec67d9fdb0719d7"></a>
+<a class="el" href="struct_fq_elem_str.html">FqElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#ade3f88ce73d7de656ec67d9fdb0719d7">b_tick</a></td></tr>
+<tr class="memdesc:ade3f88ce73d7de656ec67d9fdb0719d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer between [0, q-1] <br /></td></tr>
+<tr class="separator:ade3f88ce73d7de656ec67d9fdb0719d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a835e70da717cd5b0c94e242a6418a287"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a835e70da717cd5b0c94e242a6418a287"></a>
+<a class="el" href="group___epid11_types.html#gadff9c05d5b7751024152b40dda545545">Epid11G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#a835e70da717cd5b0c94e242a6418a287">g1</a></td></tr>
+<tr class="memdesc:a835e70da717cd5b0c94e242a6418a287"><td class="mdescLeft">&#160;</td><td class="mdescRight">a generator(an element) of G1 <br /></td></tr>
+<tr class="separator:a835e70da717cd5b0c94e242a6418a287"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1c6bbc4e066449d9c329f88cb653ef7c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c6bbc4e066449d9c329f88cb653ef7c"></a>
+<a class="el" href="struct_epid11_g2_elem_str.html">Epid11G2ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#a1c6bbc4e066449d9c329f88cb653ef7c">g2</a></td></tr>
+<tr class="memdesc:a1c6bbc4e066449d9c329f88cb653ef7c"><td class="mdescLeft">&#160;</td><td class="mdescRight">a generator (an element) of G2 <br /></td></tr>
+<tr class="separator:a1c6bbc4e066449d9c329f88cb653ef7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7eb9a1371d7187ae81bccfa8d5595033"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7eb9a1371d7187ae81bccfa8d5595033"></a>
+<a class="el" href="group___epid11_types.html#gadff9c05d5b7751024152b40dda545545">Epid11G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_params.html#a7eb9a1371d7187ae81bccfa8d5595033">g3</a></td></tr>
+<tr class="memdesc:a7eb9a1371d7187ae81bccfa8d5595033"><td class="mdescLeft">&#160;</td><td class="mdescRight">a generator (an element) of G3 <br /></td></tr>
+<tr class="separator:a7eb9a1371d7187ae81bccfa8d5595033"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Intel(R) EPID 1.1 Parameters. </p>
+<p>Intel(R) EPID 1.1 parameters are: (p, q, h, a, b, coeff, qnr, orderG2, p', q', h', a', b', g1, g2, g3). The size of the Intel(R) EPID public parameters of G1, G2, G3, and GT is 6464 bits or 808 bytes. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a class="anchor" id="aacc39ebe0cc625321039ffb6be0b0e87"></a>
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="struct_big_num_str.html">BigNumStr</a> Epid11Params::coeff[3]</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>the coefficients of an irreducible polynomial coeff[0], coeff[1], coeff[2] are 256-bit integers between [0, q - 1] </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="struct_epid11_params.html">Epid11Params</a></li>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/struct_epid11_priv_rl.html b/doc/html/struct_epid11_priv_rl.html
new file mode 100644
index 0000000..ecc3286
--- /dev/null
+++ b/doc/html/struct_epid11_priv_rl.html
@@ -0,0 +1,110 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: Epid11PrivRl Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('struct_epid11_priv_rl.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">Epid11PrivRl Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Intel(R) EPID 1.1 private-key based revocation list.
+ <a href="struct_epid11_priv_rl.html#details">More...</a></p>
+
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aa8945d81e30674b52a6d0900b64feb3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8945d81e30674b52a6d0900b64feb3c"></a>
+<a class="el" href="group___epid11_types.html#ga7293cec8f937d6f5da42084403f978f1">Epid11GroupId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_priv_rl.html#aa8945d81e30674b52a6d0900b64feb3c">gid</a></td></tr>
+<tr class="memdesc:aa8945d81e30674b52a6d0900b64feb3c"><td class="mdescLeft">&#160;</td><td class="mdescRight">group ID <br /></td></tr>
+<tr class="separator:aa8945d81e30674b52a6d0900b64feb3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2b3899f5a35bf64f860d6d91bccb03c8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b3899f5a35bf64f860d6d91bccb03c8"></a>
+<a class="el" href="struct_oct_str32.html">OctStr32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_priv_rl.html#a2b3899f5a35bf64f860d6d91bccb03c8">version</a></td></tr>
+<tr class="memdesc:a2b3899f5a35bf64f860d6d91bccb03c8"><td class="mdescLeft">&#160;</td><td class="mdescRight">revocation list version number <br /></td></tr>
+<tr class="separator:a2b3899f5a35bf64f860d6d91bccb03c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad95f880f40e2f40c723f5bdbd22ecfa2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad95f880f40e2f40c723f5bdbd22ecfa2"></a>
+<a class="el" href="struct_oct_str32.html">OctStr32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_priv_rl.html#ad95f880f40e2f40c723f5bdbd22ecfa2">n1</a></td></tr>
+<tr class="memdesc:ad95f880f40e2f40c723f5bdbd22ecfa2"><td class="mdescLeft">&#160;</td><td class="mdescRight">number of entries in PrivRL <br /></td></tr>
+<tr class="separator:ad95f880f40e2f40c723f5bdbd22ecfa2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abbb75fee81aecb2dde7e2daab895ad3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abbb75fee81aecb2dde7e2daab895ad3b"></a>
+<a class="el" href="struct_fp_elem_str.html">FpElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_priv_rl.html#abbb75fee81aecb2dde7e2daab895ad3b">f</a> [1]</td></tr>
+<tr class="memdesc:abbb75fee81aecb2dde7e2daab895ad3b"><td class="mdescLeft">&#160;</td><td class="mdescRight">integers between [1, p-1] (flexible array) <br /></td></tr>
+<tr class="separator:abbb75fee81aecb2dde7e2daab895ad3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Intel(R) EPID 1.1 private-key based revocation list. </p>
+<p>Private-key based revocation list PrivRL: (gid, RLver, n1, f[0], ..., f[n1-1]) </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="struct_epid11_priv_rl.html">Epid11PrivRl</a></li>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/struct_epid11_sig_rl.html b/doc/html/struct_epid11_sig_rl.html
new file mode 100644
index 0000000..8f381d5
--- /dev/null
+++ b/doc/html/struct_epid11_sig_rl.html
@@ -0,0 +1,110 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: Epid11SigRl Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('struct_epid11_sig_rl.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">Epid11SigRl Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Intel(R) EPID 1.1 signature based revocation list.
+ <a href="struct_epid11_sig_rl.html#details">More...</a></p>
+
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ad45b0e3e1be59649150dd34c104000ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad45b0e3e1be59649150dd34c104000ac"></a>
+<a class="el" href="group___epid11_types.html#ga7293cec8f937d6f5da42084403f978f1">Epid11GroupId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_sig_rl.html#ad45b0e3e1be59649150dd34c104000ac">gid</a></td></tr>
+<tr class="memdesc:ad45b0e3e1be59649150dd34c104000ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">group ID <br /></td></tr>
+<tr class="separator:ad45b0e3e1be59649150dd34c104000ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa38674729293f4879ff94328dd3c59b1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa38674729293f4879ff94328dd3c59b1"></a>
+<a class="el" href="struct_oct_str32.html">OctStr32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_sig_rl.html#aa38674729293f4879ff94328dd3c59b1">version</a></td></tr>
+<tr class="memdesc:aa38674729293f4879ff94328dd3c59b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">revocation list version number <br /></td></tr>
+<tr class="separator:aa38674729293f4879ff94328dd3c59b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8c654d43df132db7874f4c84c177dc12"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8c654d43df132db7874f4c84c177dc12"></a>
+<a class="el" href="struct_oct_str32.html">OctStr32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_sig_rl.html#a8c654d43df132db7874f4c84c177dc12">n2</a></td></tr>
+<tr class="memdesc:a8c654d43df132db7874f4c84c177dc12"><td class="mdescLeft">&#160;</td><td class="mdescRight">number of entries in SigRL <br /></td></tr>
+<tr class="separator:a8c654d43df132db7874f4c84c177dc12"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6473f8a98f76c9f82183041ea5ae17e3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6473f8a98f76c9f82183041ea5ae17e3"></a>
+<a class="el" href="struct_epid11_sig_rl_entry.html">Epid11SigRlEntry</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_sig_rl.html#a6473f8a98f76c9f82183041ea5ae17e3">bk</a> [1]</td></tr>
+<tr class="memdesc:a6473f8a98f76c9f82183041ea5ae17e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">revoked Bs and Ks (flexible array) <br /></td></tr>
+<tr class="separator:a6473f8a98f76c9f82183041ea5ae17e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Intel(R) EPID 1.1 signature based revocation list. </p>
+<p>Signature based revocation list SigRL: (gid, RLver, n2, B[0], K[0], ..., B[n2-1], K[n2-1]) </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="struct_epid11_sig_rl.html">Epid11SigRl</a></li>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/struct_allowed_basename.html b/doc/html/struct_epid11_sig_rl_entry.html
index 6ceca87..4b13885 100644
--- a/doc/html/struct_allowed_basename.html
+++ b/doc/html/struct_epid11_sig_rl_entry.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: AllowedBasename Struct Reference</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: Epid11SigRlEntry Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,41 +53,37 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_allowed_basename.html','');});
+$(document).ready(function(){initNavTree('struct_epid11_sig_rl_entry.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-attribs">Data Fields</a> </div>
<div class="headertitle">
-<div class="title">AllowedBasename Struct Reference</div> </div>
+<div class="title">Epid11SigRlEntry Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
</div><!--header-->
<div class="contents">
-<p>Internal implementation of base name.
- <a href="struct_allowed_basename.html#details">More...</a></p>
+<p>Intel(R) EPID 1.1 entry in SigRL (B,K)
+ <a href="struct_epid11_sig_rl_entry.html#details">More...</a></p>
-<p><code>#include &lt;epid/member/context.h&gt;</code></p>
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Data Fields</h2></td></tr>
-<tr class="memitem:affc96b4ca9846cee782c3316818d3ae1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="affc96b4ca9846cee782c3316818d3ae1"></a>
-struct <a class="el" href="struct_allowed_basename.html">AllowedBasename</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_allowed_basename.html#affc96b4ca9846cee782c3316818d3ae1">next</a></td></tr>
-<tr class="memdesc:affc96b4ca9846cee782c3316818d3ae1"><td class="mdescLeft">&#160;</td><td class="mdescRight">pointer to the next base name <br /></td></tr>
-<tr class="separator:affc96b4ca9846cee782c3316818d3ae1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a15d6406bf481929526413be47ab5eec8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a15d6406bf481929526413be47ab5eec8"></a>
-size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_allowed_basename.html#a15d6406bf481929526413be47ab5eec8">length</a></td></tr>
-<tr class="memdesc:a15d6406bf481929526413be47ab5eec8"><td class="mdescLeft">&#160;</td><td class="mdescRight">size of base name <br /></td></tr>
-<tr class="separator:a15d6406bf481929526413be47ab5eec8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:addc76fe7f064b1d18edcb0a34a878db2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="addc76fe7f064b1d18edcb0a34a878db2"></a>
-uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_allowed_basename.html#addc76fe7f064b1d18edcb0a34a878db2">name</a> [1]</td></tr>
-<tr class="memdesc:addc76fe7f064b1d18edcb0a34a878db2"><td class="mdescLeft">&#160;</td><td class="mdescRight">base name (flexible array) <br /></td></tr>
-<tr class="separator:addc76fe7f064b1d18edcb0a34a878db2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abe47cfbd00684941f93a211417bedf0c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abe47cfbd00684941f93a211417bedf0c"></a>
+<a class="el" href="group___epid11_types.html#gaf1f4f1d6f001895abe548cfb33611c23">Epid11G3ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_sig_rl_entry.html#abe47cfbd00684941f93a211417bedf0c">b</a></td></tr>
+<tr class="memdesc:abe47cfbd00684941f93a211417bedf0c"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element of G1 <br /></td></tr>
+<tr class="separator:abe47cfbd00684941f93a211417bedf0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5de66e1352eafe95774a0d76bac8f01a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5de66e1352eafe95774a0d76bac8f01a"></a>
+<a class="el" href="group___epid11_types.html#gaf1f4f1d6f001895abe548cfb33611c23">Epid11G3ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_sig_rl_entry.html#a5de66e1352eafe95774a0d76bac8f01a">k</a></td></tr>
+<tr class="memdesc:a5de66e1352eafe95774a0d76bac8f01a"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element of G1 <br /></td></tr>
+<tr class="separator:a5de66e1352eafe95774a0d76bac8f01a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Internal implementation of base name. </p>
+<div class="textblock"><p>Intel(R) EPID 1.1 entry in SigRL (B,K) </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/member/<a class="el" href="member_2context_8h.html">context.h</a></li>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
@@ -95,7 +91,7 @@ uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="s
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
- <li class="navelem"><a class="el" href="struct_allowed_basename.html">AllowedBasename</a></li>
+ <li class="navelem"><a class="el" href="struct_epid11_sig_rl_entry.html">Epid11SigRlEntry</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/struct_epid11_signature.html b/doc/html/struct_epid11_signature.html
new file mode 100644
index 0000000..713f607
--- /dev/null
+++ b/doc/html/struct_epid11_signature.html
@@ -0,0 +1,110 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: Epid11Signature Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('struct_epid11_signature.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">Epid11Signature Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Intel(R) EPID 1.1 Signature.
+ <a href="struct_epid11_signature.html#details">More...</a></p>
+
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a48526e73f02ad3f1544c4c71c481f153"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a48526e73f02ad3f1544c4c71c481f153"></a>
+<a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_signature.html#a48526e73f02ad3f1544c4c71c481f153">sigma0</a></td></tr>
+<tr class="memdesc:a48526e73f02ad3f1544c4c71c481f153"><td class="mdescLeft">&#160;</td><td class="mdescRight">basic signature <br /></td></tr>
+<tr class="separator:a48526e73f02ad3f1544c4c71c481f153"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43cb3ed13c862ff05a9292623ad57c5e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a43cb3ed13c862ff05a9292623ad57c5e"></a>
+<a class="el" href="struct_oct_str32.html">OctStr32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_signature.html#a43cb3ed13c862ff05a9292623ad57c5e">rl_ver</a></td></tr>
+<tr class="memdesc:a43cb3ed13c862ff05a9292623ad57c5e"><td class="mdescLeft">&#160;</td><td class="mdescRight">revocation list version number <br /></td></tr>
+<tr class="separator:a43cb3ed13c862ff05a9292623ad57c5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad25c277223a5210063163ea554d08ad4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad25c277223a5210063163ea554d08ad4"></a>
+<a class="el" href="struct_oct_str32.html">OctStr32</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_signature.html#ad25c277223a5210063163ea554d08ad4">n2</a></td></tr>
+<tr class="memdesc:ad25c277223a5210063163ea554d08ad4"><td class="mdescLeft">&#160;</td><td class="mdescRight">number of entries in SigRL <br /></td></tr>
+<tr class="separator:ad25c277223a5210063163ea554d08ad4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf24a8df563ba3f535486d8dad7384f4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf24a8df563ba3f535486d8dad7384f4"></a>
+<a class="el" href="struct_epid11_nr_proof.html">Epid11NrProof</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_signature.html#abf24a8df563ba3f535486d8dad7384f4">sigma</a> [1]</td></tr>
+<tr class="memdesc:abf24a8df563ba3f535486d8dad7384f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">array of non-revoked proofs (flexible array) <br /></td></tr>
+<tr class="separator:abf24a8df563ba3f535486d8dad7384f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Intel(R) EPID 1.1 Signature. </p>
+<p>Signature: (sigma0, RLver, n2, sigma[0], ..., sigma[n2-1]) </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="struct_epid11_signature.html">Epid11Signature</a></li>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/struct_epid11_verifier_precomp.html b/doc/html/struct_epid11_verifier_precomp.html
new file mode 100644
index 0000000..ab3db86
--- /dev/null
+++ b/doc/html/struct_epid11_verifier_precomp.html
@@ -0,0 +1,113 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: Epid11VerifierPrecomp Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('struct_epid11_verifier_precomp.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">Epid11VerifierPrecomp Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_verifier_module.html">verifier</a> &raquo; <a class="el" href="group___epid11_verifier_module.html">EPID 1.1 support</a></div></div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Intel(R) EPID 1.1 Pre-computed verifier settings.
+ <a href="struct_epid11_verifier_precomp.html#details">More...</a></p>
+
+<p><code>#include &lt;epid/verifier/1.1/api.h&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a03138e937f4488bdbc52ed473dc313da"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a03138e937f4488bdbc52ed473dc313da"></a>
+<a class="el" href="group___epid11_types.html#ga7293cec8f937d6f5da42084403f978f1">Epid11GroupId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_verifier_precomp.html#a03138e937f4488bdbc52ed473dc313da">gid</a></td></tr>
+<tr class="memdesc:a03138e937f4488bdbc52ed473dc313da"><td class="mdescLeft">&#160;</td><td class="mdescRight">group ID <br /></td></tr>
+<tr class="separator:a03138e937f4488bdbc52ed473dc313da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a980adb039089263ec59a995600ee91"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0a980adb039089263ec59a995600ee91"></a>
+<a class="el" href="struct_epid11_gt_elem_str.html">Epid11GtElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_verifier_precomp.html#a0a980adb039089263ec59a995600ee91">e12</a></td></tr>
+<tr class="memdesc:a0a980adb039089263ec59a995600ee91"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in GT <br /></td></tr>
+<tr class="separator:a0a980adb039089263ec59a995600ee91"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad0ff2a13c2c87460296900dde72a2f30"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad0ff2a13c2c87460296900dde72a2f30"></a>
+<a class="el" href="struct_epid11_gt_elem_str.html">Epid11GtElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_verifier_precomp.html#ad0ff2a13c2c87460296900dde72a2f30">e22</a></td></tr>
+<tr class="memdesc:ad0ff2a13c2c87460296900dde72a2f30"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in GT <br /></td></tr>
+<tr class="separator:ad0ff2a13c2c87460296900dde72a2f30"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a14ebadf105aff085edb9a817a2d1db89"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14ebadf105aff085edb9a817a2d1db89"></a>
+<a class="el" href="struct_epid11_gt_elem_str.html">Epid11GtElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_verifier_precomp.html#a14ebadf105aff085edb9a817a2d1db89">e2w</a></td></tr>
+<tr class="memdesc:a14ebadf105aff085edb9a817a2d1db89"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in GT <br /></td></tr>
+<tr class="separator:a14ebadf105aff085edb9a817a2d1db89"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Intel(R) EPID 1.1 Pre-computed verifier settings. </p>
+<p>Serialized form of the information about a verifier that remains stable for a given set of keys.</p>
+<p>This API supports Intel(R) EPID 1.1 verification.</p>
+<dl class="section note"><dt>Note</dt><dd>e12 = 0 implies that this data is not valid </dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a href="group___epid11_verifier_module.html#details"><b>EPID 1.1 support</b></a> </dd></dl>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>epid/verifier/1.1/<a class="el" href="verifier_21_81_2api_8h.html">api.h</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="struct_epid11_verifier_precomp.html">Epid11VerifierPrecomp</a></li>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/struct_epid2_params.html b/doc/html/struct_epid2_params.html
index 3399729..17f661f 100644
--- a/doc/html/struct_epid2_params.html
+++ b/doc/html/struct_epid2_params.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_epid2_params__.html b/doc/html/struct_epid2_params__.html
deleted file mode 100644
index f982e78..0000000
--- a/doc/html/struct_epid2_params__.html
+++ /dev/null
@@ -1,153 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Epid2Params_ Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_epid2_params__.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#pub-attribs">Data Fields</a> </div>
- <div class="headertitle">
-<div class="title">Epid2Params_ Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a></div></div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Internal representation of <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a>.
- <a href="struct_epid2_params__.html#details">More...</a></p>
-
-<p><code>#include &lt;epid/common/epid2params.h&gt;</code></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Data Fields</h2></td></tr>
-<tr class="memitem:ad90e9f295e28d3f93852e87e97640e76"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad90e9f295e28d3f93852e87e97640e76"></a>
-<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#ad90e9f295e28d3f93852e87e97640e76">p</a></td></tr>
-<tr class="memdesc:ad90e9f295e28d3f93852e87e97640e76"><td class="mdescLeft">&#160;</td><td class="mdescRight">a prime <br /></td></tr>
-<tr class="separator:ad90e9f295e28d3f93852e87e97640e76"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6d56c3f4dff7e92a0738e7866208bf4d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6d56c3f4dff7e92a0738e7866208bf4d"></a>
-<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#a6d56c3f4dff7e92a0738e7866208bf4d">q</a></td></tr>
-<tr class="memdesc:a6d56c3f4dff7e92a0738e7866208bf4d"><td class="mdescLeft">&#160;</td><td class="mdescRight">a prime <br /></td></tr>
-<tr class="separator:a6d56c3f4dff7e92a0738e7866208bf4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a4bca3d05a46b1325ac2490ebeb460543"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4bca3d05a46b1325ac2490ebeb460543"></a>
-<a class="el" href="group___big_num_primitives.html#ga2bf153e27be2683f0fb26f0f7ff1f718">BigNum</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#a4bca3d05a46b1325ac2490ebeb460543">t</a></td></tr>
-<tr class="memdesc:a4bca3d05a46b1325ac2490ebeb460543"><td class="mdescLeft">&#160;</td><td class="mdescRight">an integer <br /></td></tr>
-<tr class="separator:a4bca3d05a46b1325ac2490ebeb460543"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a1e50604a1739e48e8588d666d33d03ef"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e50604a1739e48e8588d666d33d03ef"></a>
-<a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#a1e50604a1739e48e8588d666d33d03ef">neg</a></td></tr>
-<tr class="memdesc:a1e50604a1739e48e8588d666d33d03ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">a boolean <br /></td></tr>
-<tr class="separator:a1e50604a1739e48e8588d666d33d03ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a51a678f0f26804e0c6f3a4c55fcf6731"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a51a678f0f26804e0c6f3a4c55fcf6731"></a>
-<a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#a51a678f0f26804e0c6f3a4c55fcf6731">xi</a></td></tr>
-<tr class="memdesc:a51a678f0f26804e0c6f3a4c55fcf6731"><td class="mdescLeft">&#160;</td><td class="mdescRight">array of integers between [0, q-1] <br /></td></tr>
-<tr class="separator:a51a678f0f26804e0c6f3a4c55fcf6731"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a337490f043e867b6c8d92180a9120541"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a337490f043e867b6c8d92180a9120541"></a>
-<a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#a337490f043e867b6c8d92180a9120541">g1</a></td></tr>
-<tr class="memdesc:a337490f043e867b6c8d92180a9120541"><td class="mdescLeft">&#160;</td><td class="mdescRight">a generator (an element) of G1 <br /></td></tr>
-<tr class="separator:a337490f043e867b6c8d92180a9120541"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a20dcfa40dba6679f45f1b90a91791a5c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a20dcfa40dba6679f45f1b90a91791a5c"></a>
-<a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#a20dcfa40dba6679f45f1b90a91791a5c">g2</a></td></tr>
-<tr class="memdesc:a20dcfa40dba6679f45f1b90a91791a5c"><td class="mdescLeft">&#160;</td><td class="mdescRight">a generator (an element) of G2 <br /></td></tr>
-<tr class="separator:a20dcfa40dba6679f45f1b90a91791a5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a45d742532485af7f34d43606a3f96b5d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a45d742532485af7f34d43606a3f96b5d"></a>
-<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#a45d742532485af7f34d43606a3f96b5d">Fp</a></td></tr>
-<tr class="memdesc:a45d742532485af7f34d43606a3f96b5d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finite field Fp. <br /></td></tr>
-<tr class="separator:a45d742532485af7f34d43606a3f96b5d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9cd99a40a7427666ff4b940ed69f69a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9cd99a40a7427666ff4b940ed69f69a0"></a>
-<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#a9cd99a40a7427666ff4b940ed69f69a0">Fq</a></td></tr>
-<tr class="memdesc:a9cd99a40a7427666ff4b940ed69f69a0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finite field Fq. <br /></td></tr>
-<tr class="separator:a9cd99a40a7427666ff4b940ed69f69a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aebda3f9b5ed6f015adc992216bacf29f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aebda3f9b5ed6f015adc992216bacf29f"></a>
-<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#aebda3f9b5ed6f015adc992216bacf29f">Fq2</a></td></tr>
-<tr class="memdesc:aebda3f9b5ed6f015adc992216bacf29f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finite field Fq2. <br /></td></tr>
-<tr class="separator:aebda3f9b5ed6f015adc992216bacf29f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af3e9afc48ec8274f15d10f5f991c0937"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af3e9afc48ec8274f15d10f5f991c0937"></a>
-<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#af3e9afc48ec8274f15d10f5f991c0937">Fq6</a></td></tr>
-<tr class="memdesc:af3e9afc48ec8274f15d10f5f991c0937"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finite field Fq6. <br /></td></tr>
-<tr class="separator:af3e9afc48ec8274f15d10f5f991c0937"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac085cbd970d89fb382b621fb2884e420"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac085cbd970d89fb382b621fb2884e420"></a>
-<a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#ac085cbd970d89fb382b621fb2884e420">GT</a></td></tr>
-<tr class="memdesc:ac085cbd970d89fb382b621fb2884e420"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finite field GT(Fq12 ) <br /></td></tr>
-<tr class="separator:ac085cbd970d89fb382b621fb2884e420"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ade20ba985bc9219832df78ee9d255ee5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ade20ba985bc9219832df78ee9d255ee5"></a>
-<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#ade20ba985bc9219832df78ee9d255ee5">G1</a></td></tr>
-<tr class="memdesc:ade20ba985bc9219832df78ee9d255ee5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Elliptic curve group over finite field Fq. <br /></td></tr>
-<tr class="separator:ade20ba985bc9219832df78ee9d255ee5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae15ab066b26bbf1be8772743d604c766"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae15ab066b26bbf1be8772743d604c766"></a>
-<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#ae15ab066b26bbf1be8772743d604c766">G2</a></td></tr>
-<tr class="memdesc:ae15ab066b26bbf1be8772743d604c766"><td class="mdescLeft">&#160;</td><td class="mdescRight">Elliptic curve group over finite field Fq2. <br /></td></tr>
-<tr class="separator:ae15ab066b26bbf1be8772743d604c766"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a74aa52f336a194b20627f8a540196dd5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74aa52f336a194b20627f8a540196dd5"></a>
-<a class="el" href="group___pairing_primitives.html#ga3f1fa61d25487f96dfb0ffef4ad35607">PairingState</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid2_params__.html#a74aa52f336a194b20627f8a540196dd5">pairing_state</a></td></tr>
-<tr class="memdesc:a74aa52f336a194b20627f8a540196dd5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pairing state. <br /></td></tr>
-<tr class="separator:a74aa52f336a194b20627f8a540196dd5"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Internal representation of <a class="el" href="struct_epid2_params.html" title="Intel(R) EPID 2.0 Parameters. ">Epid2Params</a>. </p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/common/<a class="el" href="epid2params_8h.html">epid2params.h</a></li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="struct_epid2_params__.html">Epid2Params_</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/struct_epid_ca_certificate.html b/doc/html/struct_epid_ca_certificate.html
index b487c8c..5057459 100644
--- a/doc/html/struct_epid_ca_certificate.html
+++ b/doc/html/struct_epid_ca_certificate.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -110,8 +110,7 @@ Data Fields</h2></td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>IoT CA Certificate binary format. </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#_a2">signmsg.c</a>, and <a class="el" href="verifysig_8c-example.html#_a0">verifysig.c</a>.</dd>
-</dl></div><hr/>The documentation for this struct was generated from the following file:<ul>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>epid/common/<a class="el" href="file__parser_8h.html">file_parser.h</a></li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/struct_epid_file_header.html b/doc/html/struct_epid_file_header.html
index 64f2016..ff4caa4 100644
--- a/doc/html/struct_epid_file_header.html
+++ b/doc/html/struct_epid_file_header.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_epid_group_pub_key_certificate.html b/doc/html/struct_epid_group_pub_key_certificate.html
deleted file mode 100644
index aa250d4..0000000
--- a/doc/html/struct_epid_group_pub_key_certificate.html
+++ /dev/null
@@ -1,115 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: EpidGroupPubKeyCertificate Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_epid_group_pub_key_certificate.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#pub-attribs">Data Fields</a> </div>
- <div class="headertitle">
-<div class="title">EpidGroupPubKeyCertificate Struct Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Intel(R) EPID 2.0 Group Public Key binary format.
- <a href="struct_epid_group_pub_key_certificate.html#details">More...</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Data Fields</h2></td></tr>
-<tr class="memitem:a705c109c7023bf179c38157ebe4c7436"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a705c109c7023bf179c38157ebe4c7436"></a>
-<a class="el" href="struct_epid_file_header.html">EpidFileHeader</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid_group_pub_key_certificate.html#a705c109c7023bf179c38157ebe4c7436">header</a></td></tr>
-<tr class="memdesc:a705c109c7023bf179c38157ebe4c7436"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID binary file header. <br /></td></tr>
-<tr class="separator:a705c109c7023bf179c38157ebe4c7436"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a3ed78ceb88e3fa13b2403d48fdebd753"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ed78ceb88e3fa13b2403d48fdebd753"></a>
-<a class="el" href="group___epid_types.html#gada666b48d0cbc301985405fde896f1de">GroupId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid_group_pub_key_certificate.html#a3ed78ceb88e3fa13b2403d48fdebd753">gid</a></td></tr>
-<tr class="memdesc:a3ed78ceb88e3fa13b2403d48fdebd753"><td class="mdescLeft">&#160;</td><td class="mdescRight">group ID <br /></td></tr>
-<tr class="separator:a3ed78ceb88e3fa13b2403d48fdebd753"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a79f1e0e6dd0abb47b06b7e11d7bb2c19"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a79f1e0e6dd0abb47b06b7e11d7bb2c19"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid_group_pub_key_certificate.html#a79f1e0e6dd0abb47b06b7e11d7bb2c19">h1</a></td></tr>
-<tr class="memdesc:a79f1e0e6dd0abb47b06b7e11d7bb2c19"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G1 <br /></td></tr>
-<tr class="separator:a79f1e0e6dd0abb47b06b7e11d7bb2c19"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a67d15525c455401db87a6cbabc6f2700"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67d15525c455401db87a6cbabc6f2700"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid_group_pub_key_certificate.html#a67d15525c455401db87a6cbabc6f2700">h2</a></td></tr>
-<tr class="memdesc:a67d15525c455401db87a6cbabc6f2700"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G1 <br /></td></tr>
-<tr class="separator:a67d15525c455401db87a6cbabc6f2700"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aa7c144c9b55acf3021fa5e2b8eb5fb8e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa7c144c9b55acf3021fa5e2b8eb5fb8e"></a>
-<a class="el" href="struct_g2_elem_str.html">G2ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid_group_pub_key_certificate.html#aa7c144c9b55acf3021fa5e2b8eb5fb8e">w</a></td></tr>
-<tr class="memdesc:aa7c144c9b55acf3021fa5e2b8eb5fb8e"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in G2 <br /></td></tr>
-<tr class="separator:aa7c144c9b55acf3021fa5e2b8eb5fb8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a118c43bee82e3cbb13add3d97f0a6a7d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a118c43bee82e3cbb13add3d97f0a6a7d"></a>
-<a class="el" href="struct_ecdsa_signature.html">EcdsaSignature</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid_group_pub_key_certificate.html#a118c43bee82e3cbb13add3d97f0a6a7d">signature</a></td></tr>
-<tr class="memdesc:a118c43bee82e3cbb13add3d97f0a6a7d"><td class="mdescLeft">&#160;</td><td class="mdescRight">ECDSA Signature on SHA-256 of above values. <br /></td></tr>
-<tr class="separator:a118c43bee82e3cbb13add3d97f0a6a7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Intel(R) EPID 2.0 Group Public Key binary format. </p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/common/<a class="el" href="file__parser_8c.html">file_parser.c</a></li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="struct_epid_group_pub_key_certificate.html">EpidGroupPubKeyCertificate</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/struct_epid_signature.html b/doc/html/struct_epid_signature.html
index db9f778..537ad36 100644
--- a/doc/html/struct_epid_signature.html
+++ b/doc/html/struct_epid_signature.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -91,8 +91,7 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Intel(R) EPID 2.0 Signature. </p>
<p>Signature: (sigma0, RLver, n2, sigma[0], ..., sigma[n2-1]) </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#_a1">signmsg.c</a>, and <a class="el" href="verifysig_8c-example.html#_a1">verifysig.c</a>.</dd>
-</dl></div><hr/>The documentation for this struct was generated from the following file:<ul>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>epid/common/<a class="el" href="types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/struct_fp_elem_str.html b/doc/html/struct_fp_elem_str.html
index e83aef0..9c21127 100644
--- a/doc/html/struct_fp_elem_str.html
+++ b/doc/html/struct_fp_elem_str.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_fq12_elem_str.html b/doc/html/struct_fq12_elem_str.html
index b3acf5a..339ba52 100644
--- a/doc/html/struct_fq12_elem_str.html
+++ b/doc/html/struct_fq12_elem_str.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_fq2_elem_str.html b/doc/html/struct_fq2_elem_str.html
index 0373e12..3629780 100644
--- a/doc/html/struct_fq2_elem_str.html
+++ b/doc/html/struct_fq2_elem_str.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_fq2_elem_dat.html b/doc/html/struct_fq3_elem_str.html
index 9ad63d0..07892d8 100644
--- a/doc/html/struct_fq2_elem_dat.html
+++ b/doc/html/struct_fq3_elem_str.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Fq2ElemDat Struct Reference</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: Fq3ElemStr Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,31 +53,33 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_fq2_elem_dat.html','');});
+$(document).ready(function(){initNavTree('struct_fq3_elem_str.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-attribs">Data Fields</a> </div>
<div class="headertitle">
-<div class="title">Fq2ElemDat Struct Reference</div> </div>
+<div class="title">Fq3ElemStr Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
</div><!--header-->
<div class="contents">
-<p>Data for element in Fq2.
- <a href="struct_fq2_elem_dat.html#details">More...</a></p>
+<p>Serialized Fq3 element.
+ <a href="struct_fq3_elem_str.html#details">More...</a></p>
+
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Data Fields</h2></td></tr>
-<tr class="memitem:ac7980c3e4eecb24c4b388d7f9903f835"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac7980c3e4eecb24c4b388d7f9903f835"></a>
-<a class="el" href="struct_fq_elem_dat.html">FqElemDat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_fq2_elem_dat.html#ac7980c3e4eecb24c4b388d7f9903f835">x</a> [2]</td></tr>
-<tr class="memdesc:ac7980c3e4eecb24c4b388d7f9903f835"><td class="mdescLeft">&#160;</td><td class="mdescRight">element in Fq2 <br /></td></tr>
-<tr class="separator:ac7980c3e4eecb24c4b388d7f9903f835"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1be0a4d5c9c674d75bec34f95e3c731"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af1be0a4d5c9c674d75bec34f95e3c731"></a>
+<a class="el" href="struct_fq_elem_str.html">FqElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_fq3_elem_str.html#af1be0a4d5c9c674d75bec34f95e3c731">a</a> [3]</td></tr>
+<tr class="memdesc:af1be0a4d5c9c674d75bec34f95e3c731"><td class="mdescLeft">&#160;</td><td class="mdescRight">polynomial coefficient <br /></td></tr>
+<tr class="separator:af1be0a4d5c9c674d75bec34f95e3c731"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Data for element in Fq2. </p>
+<div class="textblock"><p>Serialized Fq3 element. </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/common/math/<a class="el" href="pairing_8c.html">pairing.c</a></li>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
@@ -85,7 +87,7 @@ Data Fields</h2></td></tr>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
- <li class="navelem"><a class="el" href="struct_fq2_elem_dat.html">Fq2ElemDat</a></li>
+ <li class="navelem"><a class="el" href="struct_fq3_elem_str.html">Fq3ElemStr</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/struct_fq6_elem_str.html b/doc/html/struct_fq6_elem_str.html
index 4ee457e..06a9570 100644
--- a/doc/html/struct_fq6_elem_str.html
+++ b/doc/html/struct_fq6_elem_str.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_fq_elem_str.html b/doc/html/struct_fq_elem_str.html
index a0e1b33..cb4d66e 100644
--- a/doc/html/struct_fq_elem_str.html
+++ b/doc/html/struct_fq_elem_str.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_g1_elem_str.html b/doc/html/struct_g1_elem_str.html
index 61d9ab6..f0b89ba 100644
--- a/doc/html/struct_g1_elem_str.html
+++ b/doc/html/struct_g1_elem_str.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_g2_elem_str.html b/doc/html/struct_g2_elem_str.html
index 8beb3e7..0e0e551 100644
--- a/doc/html/struct_g2_elem_str.html
+++ b/doc/html/struct_g2_elem_str.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_group_pub_key.html b/doc/html/struct_group_pub_key.html
index ef5db91..5f5426c 100644
--- a/doc/html/struct_group_pub_key.html
+++ b/doc/html/struct_group_pub_key.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -91,8 +91,7 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Intel(R) EPID 2.0 group public key. </p>
<p>Group public key: (gid, h1, h2, w) </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#_a6">signmsg.c</a>, and <a class="el" href="verifysig_8c-example.html#_a9">verifysig.c</a>.</dd>
-</dl></div><hr/>The documentation for this struct was generated from the following file:<ul>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>epid/common/<a class="el" href="types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/struct_group_rl.html b/doc/html/struct_group_rl.html
index 415981c..f6f68d4 100644
--- a/doc/html/struct_group_rl.html
+++ b/doc/html/struct_group_rl.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -87,8 +87,7 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>group revocation list </p>
<p>Group revocation list GroupRL: (RLver, n3, gid[0], ..., gid[n3-1]) </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#_a8">verifysig.c</a>.</dd>
-</dl></div><hr/>The documentation for this struct was generated from the following file:<ul>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>epid/common/<a class="el" href="types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/struct_gt_elem_str.html b/doc/html/struct_gt_elem_str.html
index 729cb28..59a3806 100644
--- a/doc/html/struct_gt_elem_str.html
+++ b/doc/html/struct_gt_elem_str.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_i_priv_key.html b/doc/html/struct_i_priv_key.html
index 1696dc4..928db56 100644
--- a/doc/html/struct_i_priv_key.html
+++ b/doc/html/struct_i_priv_key.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_join_p_commit_values.html b/doc/html/struct_join_p_commit_values.html
deleted file mode 100644
index 0c2c629..0000000
--- a/doc/html/struct_join_p_commit_values.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: JoinPCommitValues Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_join_p_commit_values.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#pub-attribs">Data Fields</a> </div>
- <div class="headertitle">
-<div class="title">JoinPCommitValues Struct Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Storage for values to create commitment in Sign and Verify algorithms.
- <a href="struct_join_p_commit_values.html#details">More...</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Data Fields</h2></td></tr>
-<tr class="memitem:af5e8b7bc6e080d712470c9bad1b5e48c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af5e8b7bc6e080d712470c9bad1b5e48c"></a>
-<a class="el" href="struct_big_num_str.html">BigNumStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_join_p_commit_values.html#af5e8b7bc6e080d712470c9bad1b5e48c">p</a></td></tr>
-<tr class="memdesc:af5e8b7bc6e080d712470c9bad1b5e48c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 2.0 parameter p. <br /></td></tr>
-<tr class="separator:af5e8b7bc6e080d712470c9bad1b5e48c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9e61fb0b847e50f84fdadf25e461ca8f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e61fb0b847e50f84fdadf25e461ca8f"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_join_p_commit_values.html#a9e61fb0b847e50f84fdadf25e461ca8f">g1</a></td></tr>
-<tr class="memdesc:a9e61fb0b847e50f84fdadf25e461ca8f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 2.0 parameter g1. <br /></td></tr>
-<tr class="separator:a9e61fb0b847e50f84fdadf25e461ca8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a29a56f9fe05b695dc13ac7d926b84975"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a29a56f9fe05b695dc13ac7d926b84975"></a>
-<a class="el" href="struct_g2_elem_str.html">G2ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_join_p_commit_values.html#a29a56f9fe05b695dc13ac7d926b84975">g2</a></td></tr>
-<tr class="memdesc:a29a56f9fe05b695dc13ac7d926b84975"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 2.0 parameter g2. <br /></td></tr>
-<tr class="separator:a29a56f9fe05b695dc13ac7d926b84975"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a237b5057eece79798f17f3b0a4604024"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a237b5057eece79798f17f3b0a4604024"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_join_p_commit_values.html#a237b5057eece79798f17f3b0a4604024">h1</a></td></tr>
-<tr class="memdesc:a237b5057eece79798f17f3b0a4604024"><td class="mdescLeft">&#160;</td><td class="mdescRight">Group public key value h1. <br /></td></tr>
-<tr class="separator:a237b5057eece79798f17f3b0a4604024"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a173606388fab3698177b71b58969fa76"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a173606388fab3698177b71b58969fa76"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_join_p_commit_values.html#a173606388fab3698177b71b58969fa76">h2</a></td></tr>
-<tr class="memdesc:a173606388fab3698177b71b58969fa76"><td class="mdescLeft">&#160;</td><td class="mdescRight">Group public key value h2. <br /></td></tr>
-<tr class="separator:a173606388fab3698177b71b58969fa76"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac0e998b80c93cd7076172b5262dccaf0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac0e998b80c93cd7076172b5262dccaf0"></a>
-<a class="el" href="struct_g2_elem_str.html">G2ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_join_p_commit_values.html#ac0e998b80c93cd7076172b5262dccaf0">w</a></td></tr>
-<tr class="memdesc:ac0e998b80c93cd7076172b5262dccaf0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Group public key value w. <br /></td></tr>
-<tr class="separator:ac0e998b80c93cd7076172b5262dccaf0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:add1f958cc9787ad84658d9973f7b7c94"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="add1f958cc9787ad84658d9973f7b7c94"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_join_p_commit_values.html#add1f958cc9787ad84658d9973f7b7c94">F</a></td></tr>
-<tr class="memdesc:add1f958cc9787ad84658d9973f7b7c94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Variable F computed in algorithm. <br /></td></tr>
-<tr class="separator:add1f958cc9787ad84658d9973f7b7c94"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab5bb16513636868f9d87019aa67051b9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab5bb16513636868f9d87019aa67051b9"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_join_p_commit_values.html#ab5bb16513636868f9d87019aa67051b9">R</a></td></tr>
-<tr class="memdesc:ab5bb16513636868f9d87019aa67051b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Variable R computed in algorithm. <br /></td></tr>
-<tr class="separator:ab5bb16513636868f9d87019aa67051b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2a045f80d378b8b096d05854b0a15b17"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a045f80d378b8b096d05854b0a15b17"></a>
-<a class="el" href="group___epid_types.html#ga55eb2193045bde31af3f551565126042">IssuerNonce</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_join_p_commit_values.html#a2a045f80d378b8b096d05854b0a15b17">NI</a></td></tr>
-<tr class="memdesc:a2a045f80d378b8b096d05854b0a15b17"><td class="mdescLeft">&#160;</td><td class="mdescRight">Nonce. <br /></td></tr>
-<tr class="separator:a2a045f80d378b8b096d05854b0a15b17"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Storage for values to create commitment in Sign and Verify algorithms. </p>
-</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/member/<a class="el" href="request__join_8c.html">request_join.c</a></li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="struct_join_p_commit_values.html">JoinPCommitValues</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/struct_join_request.html b/doc/html/struct_join_request.html
index 6c14953..de12951 100644
--- a/doc/html/struct_join_request.html
+++ b/doc/html/struct_join_request.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_member_ctx.html b/doc/html/struct_member_ctx.html
deleted file mode 100644
index 5e679af..0000000
--- a/doc/html/struct_member_ctx.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: MemberCtx Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_member_ctx.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#pub-attribs">Data Fields</a> </div>
- <div class="headertitle">
-<div class="title">MemberCtx Struct Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Member context definition.
- <a href="struct_member_ctx.html#details">More...</a></p>
-
-<p><code>#include &lt;epid/member/context.h&gt;</code></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Data Fields</h2></td></tr>
-<tr class="memitem:a2eff58d4b2eaf1bd5f86ad85ffbcf99e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2eff58d4b2eaf1bd5f86ad85ffbcf99e"></a>
-<a class="el" href="struct_group_pub_key__.html">GroupPubKey_</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_member_ctx.html#a2eff58d4b2eaf1bd5f86ad85ffbcf99e">pub_key</a></td></tr>
-<tr class="memdesc:a2eff58d4b2eaf1bd5f86ad85ffbcf99e"><td class="mdescLeft">&#160;</td><td class="mdescRight">group public key <br /></td></tr>
-<tr class="separator:a2eff58d4b2eaf1bd5f86ad85ffbcf99e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9d5c2782a44b9d369079edba9a0b2462"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9d5c2782a44b9d369079edba9a0b2462"></a>
-<a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_member_ctx.html#a9d5c2782a44b9d369079edba9a0b2462">e12</a></td></tr>
-<tr class="memdesc:a9d5c2782a44b9d369079edba9a0b2462"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in GT <br /></td></tr>
-<tr class="separator:a9d5c2782a44b9d369079edba9a0b2462"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a87bc05ae4afd66010ca08ac47f4c034b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a87bc05ae4afd66010ca08ac47f4c034b"></a>
-<a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_member_ctx.html#a87bc05ae4afd66010ca08ac47f4c034b">e22</a></td></tr>
-<tr class="memdesc:a87bc05ae4afd66010ca08ac47f4c034b"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in GT <br /></td></tr>
-<tr class="separator:a87bc05ae4afd66010ca08ac47f4c034b"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a96f683c1b5c4df63274ca400d6f09832"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a96f683c1b5c4df63274ca400d6f09832"></a>
-<a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_member_ctx.html#a96f683c1b5c4df63274ca400d6f09832">e2w</a></td></tr>
-<tr class="memdesc:a96f683c1b5c4df63274ca400d6f09832"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in GT <br /></td></tr>
-<tr class="separator:a96f683c1b5c4df63274ca400d6f09832"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a18b7ab447a75c75a341cd3865b7e0cc8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a18b7ab447a75c75a341cd3865b7e0cc8"></a>
-<a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_member_ctx.html#a18b7ab447a75c75a341cd3865b7e0cc8">ea2</a></td></tr>
-<tr class="memdesc:a18b7ab447a75c75a341cd3865b7e0cc8"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in GT <br /></td></tr>
-<tr class="separator:a18b7ab447a75c75a341cd3865b7e0cc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a907868ed2cef684e542a0bb813d9b04c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a907868ed2cef684e542a0bb813d9b04c"></a>
-<a class="el" href="struct_epid2_params__.html">Epid2Params_</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_member_ctx.html#a907868ed2cef684e542a0bb813d9b04c">epid2_params</a></td></tr>
-<tr class="memdesc:a907868ed2cef684e542a0bb813d9b04c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 2.0 params. <br /></td></tr>
-<tr class="separator:a907868ed2cef684e542a0bb813d9b04c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af645f48f24ae31ce9ef9992617e5d6db"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af645f48f24ae31ce9ef9992617e5d6db"></a>
-<a class="el" href="struct_priv_key__.html">PrivKey_</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_member_ctx.html#af645f48f24ae31ce9ef9992617e5d6db">priv_key</a></td></tr>
-<tr class="memdesc:af645f48f24ae31ce9ef9992617e5d6db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Member private key. <br /></td></tr>
-<tr class="separator:af645f48f24ae31ce9ef9992617e5d6db"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a91a1750c59cd25d31fc07709b1da65af"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91a1750c59cd25d31fc07709b1da65af"></a>
-<a class="el" href="group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c">BitSupplier</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_member_ctx.html#a91a1750c59cd25d31fc07709b1da65af">rnd_func</a></td></tr>
-<tr class="memdesc:a91a1750c59cd25d31fc07709b1da65af"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pseudo random number generation function. <br /></td></tr>
-<tr class="separator:a91a1750c59cd25d31fc07709b1da65af"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a91619280f591f192761ceaae2f75261c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a91619280f591f192761ceaae2f75261c"></a>
-void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_member_ctx.html#a91619280f591f192761ceaae2f75261c">rnd_param</a></td></tr>
-<tr class="memdesc:a91619280f591f192761ceaae2f75261c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to user context for rnd_func. <br /></td></tr>
-<tr class="separator:a91619280f591f192761ceaae2f75261c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a590ef513bda4c468a461de84d4385990"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a590ef513bda4c468a461de84d4385990"></a>
-<a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_member_ctx.html#a590ef513bda4c468a461de84d4385990">hash_alg</a></td></tr>
-<tr class="memdesc:a590ef513bda4c468a461de84d4385990"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hash algorithm to use. <br /></td></tr>
-<tr class="separator:a590ef513bda4c468a461de84d4385990"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:acd3f0e198a1a462d5cee67341e006fe6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd3f0e198a1a462d5cee67341e006fe6"></a>
-<a class="el" href="struct_allowed_basename.html">AllowedBasename</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_member_ctx.html#acd3f0e198a1a462d5cee67341e006fe6">allowed_basenames</a></td></tr>
-<tr class="memdesc:acd3f0e198a1a462d5cee67341e006fe6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base name list. <br /></td></tr>
-<tr class="separator:acd3f0e198a1a462d5cee67341e006fe6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac2f16d027485dbb10f71e835e3a25799"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac2f16d027485dbb10f71e835e3a25799"></a>
-<a class="el" href="struct_stack.html">Stack</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_member_ctx.html#ac2f16d027485dbb10f71e835e3a25799">presigs</a></td></tr>
-<tr class="memdesc:ac2f16d027485dbb10f71e835e3a25799"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pre-computed signatures pool. <br /></td></tr>
-<tr class="separator:ac2f16d027485dbb10f71e835e3a25799"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ab85e4325ad7e8e20c58fb93093f119ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab85e4325ad7e8e20c58fb93093f119ed"></a>
-<a class="el" href="struct_commit_values.html">CommitValues</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_member_ctx.html#ab85e4325ad7e8e20c58fb93093f119ed">commit_values</a></td></tr>
-<tr class="memdesc:ab85e4325ad7e8e20c58fb93093f119ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Values that are hashed to create commitment. <br /></td></tr>
-<tr class="separator:ab85e4325ad7e8e20c58fb93093f119ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Member context definition. </p>
-<p>Internal context of member. </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#_a4">signmsg.c</a>.</dd>
-</dl></div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/member/<a class="el" href="member_2context_8h.html">context.h</a></li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="struct_member_ctx.html">MemberCtx</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/struct_member_precomp.html b/doc/html/struct_member_precomp.html
index cd058d8..42cbfee 100644
--- a/doc/html/struct_member_precomp.html
+++ b/doc/html/struct_member_precomp.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -92,8 +92,7 @@ Data Fields</h2></td></tr>
<div class="textblock"><p>Pre-computed member settings. </p>
<p>Serialized form of the information about a member that remains stable for a given set of keys.</p>
<dl class="section note"><dt>Note</dt><dd>e12 = 0 implies that this data is not valid </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#_a0">signmsg.c</a>.</dd>
-</dl></div><hr/>The documentation for this struct was generated from the following file:<ul>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>epid/member/<a class="el" href="member_2api_8h.html">api.h</a></li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/struct_membership_credential.html b/doc/html/struct_membership_credential.html
index 644787d..1b96f37 100644
--- a/doc/html/struct_membership_credential.html
+++ b/doc/html/struct_membership_credential.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_nr_proof.html b/doc/html/struct_nr_proof.html
index 1940414..eff3efb 100644
--- a/doc/html/struct_nr_proof.html
+++ b/doc/html/struct_nr_proof.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_nr_verify_commit_values.html b/doc/html/struct_nr_verify_commit_values.html
deleted file mode 100644
index fdb242b..0000000
--- a/doc/html/struct_nr_verify_commit_values.html
+++ /dev/null
@@ -1,133 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: NrVerifyCommitValues Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_nr_verify_commit_values.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#pub-attribs">Data Fields</a> </div>
- <div class="headertitle">
-<div class="title">NrVerifyCommitValues Struct Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Storage for values to create commitment in NrProve algorithm.
- <a href="struct_nr_verify_commit_values.html#details">More...</a></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Data Fields</h2></td></tr>
-<tr class="memitem:a00d147a62b1ba82f168df73245230bab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a00d147a62b1ba82f168df73245230bab"></a>
-<a class="el" href="struct_big_num_str.html">BigNumStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_nr_verify_commit_values.html#a00d147a62b1ba82f168df73245230bab">p</a></td></tr>
-<tr class="memdesc:a00d147a62b1ba82f168df73245230bab"><td class="mdescLeft">&#160;</td><td class="mdescRight">A large prime (256-bit) <br /></td></tr>
-<tr class="separator:a00d147a62b1ba82f168df73245230bab"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a46c08b69a0fb1f342b8ee4bc1d77ed7f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a46c08b69a0fb1f342b8ee4bc1d77ed7f"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_nr_verify_commit_values.html#a46c08b69a0fb1f342b8ee4bc1d77ed7f">g1</a></td></tr>
-<tr class="memdesc:a46c08b69a0fb1f342b8ee4bc1d77ed7f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Generator of G1 (512-bit) <br /></td></tr>
-<tr class="separator:a46c08b69a0fb1f342b8ee4bc1d77ed7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af4773d71220b730b6108b198640cfef6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4773d71220b730b6108b198640cfef6"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_nr_verify_commit_values.html#af4773d71220b730b6108b198640cfef6">b</a></td></tr>
-<tr class="memdesc:af4773d71220b730b6108b198640cfef6"><td class="mdescLeft">&#160;</td><td class="mdescRight">(element of G1): part of basic signature Sigma0 <br /></td></tr>
-<tr class="separator:af4773d71220b730b6108b198640cfef6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a316d13c42592a5cccacafb5543c74696"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a316d13c42592a5cccacafb5543c74696"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_nr_verify_commit_values.html#a316d13c42592a5cccacafb5543c74696">k</a></td></tr>
-<tr class="memdesc:a316d13c42592a5cccacafb5543c74696"><td class="mdescLeft">&#160;</td><td class="mdescRight">(element of G1): part of basic signature Sigma0 <br /></td></tr>
-<tr class="separator:a316d13c42592a5cccacafb5543c74696"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a6f6f9cd6d4ce1a2625276c3ebf09663a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f6f9cd6d4ce1a2625276c3ebf09663a"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_nr_verify_commit_values.html#a6f6f9cd6d4ce1a2625276c3ebf09663a">bp</a></td></tr>
-<tr class="memdesc:a6f6f9cd6d4ce1a2625276c3ebf09663a"><td class="mdescLeft">&#160;</td><td class="mdescRight">(element of G1): one entry in SigRL <br /></td></tr>
-<tr class="separator:a6f6f9cd6d4ce1a2625276c3ebf09663a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a189855b5445f5ae8a374ff78ab4b536a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a189855b5445f5ae8a374ff78ab4b536a"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_nr_verify_commit_values.html#a189855b5445f5ae8a374ff78ab4b536a">kp</a></td></tr>
-<tr class="memdesc:a189855b5445f5ae8a374ff78ab4b536a"><td class="mdescLeft">&#160;</td><td class="mdescRight">(element of G1): one entry in SigRL <br /></td></tr>
-<tr class="separator:a189855b5445f5ae8a374ff78ab4b536a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a64ef396e14aa573fda80a44532421a2f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a64ef396e14aa573fda80a44532421a2f"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_nr_verify_commit_values.html#a64ef396e14aa573fda80a44532421a2f">t</a></td></tr>
-<tr class="memdesc:a64ef396e14aa573fda80a44532421a2f"><td class="mdescLeft">&#160;</td><td class="mdescRight">element of G1 <br /></td></tr>
-<tr class="separator:a64ef396e14aa573fda80a44532421a2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac28b67d09aff827d88d73a9b382b8781"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac28b67d09aff827d88d73a9b382b8781"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_nr_verify_commit_values.html#ac28b67d09aff827d88d73a9b382b8781">r1</a></td></tr>
-<tr class="memdesc:ac28b67d09aff827d88d73a9b382b8781"><td class="mdescLeft">&#160;</td><td class="mdescRight">element of G1 <br /></td></tr>
-<tr class="separator:ac28b67d09aff827d88d73a9b382b8781"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adfb4fa346d6be553671fc6346fc74c83"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adfb4fa346d6be553671fc6346fc74c83"></a>
-<a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_nr_verify_commit_values.html#adfb4fa346d6be553671fc6346fc74c83">r2</a></td></tr>
-<tr class="memdesc:adfb4fa346d6be553671fc6346fc74c83"><td class="mdescLeft">&#160;</td><td class="mdescRight">element of G1 <br /></td></tr>
-<tr class="separator:adfb4fa346d6be553671fc6346fc74c83"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac86cca7003dea44bf5368a0340e12a54"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac86cca7003dea44bf5368a0340e12a54"></a>
-uint8_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_nr_verify_commit_values.html#ac86cca7003dea44bf5368a0340e12a54">msg</a> [1]</td></tr>
-<tr class="memdesc:ac86cca7003dea44bf5368a0340e12a54"><td class="mdescLeft">&#160;</td><td class="mdescRight">message <br /></td></tr>
-<tr class="separator:ac86cca7003dea44bf5368a0340e12a54"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Storage for values to create commitment in NrProve algorithm. </p>
-<p>Storage for values to create commitment in NrVerify algorithm. </p>
-</div><hr/>The documentation for this struct was generated from the following files:<ul>
-<li>epid/member/<a class="el" href="nr__prove_8c.html">nr_prove.c</a></li>
-<li>epid/verifier/<a class="el" href="nrverify_8c.html">nrverify.c</a></li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="struct_nr_verify_commit_values.html">NrVerifyCommitValues</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/struct_oct_str128.html b/doc/html/struct_oct_str128.html
index 8ffc0fe..ca45266 100644
--- a/doc/html/struct_oct_str128.html
+++ b/doc/html/struct_oct_str128.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_oct_str16.html b/doc/html/struct_oct_str16.html
index 2f6c7f0..118e14e 100644
--- a/doc/html/struct_oct_str16.html
+++ b/doc/html/struct_oct_str16.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_oct_str256.html b/doc/html/struct_oct_str256.html
index 885b917..ac0570a 100644
--- a/doc/html/struct_oct_str256.html
+++ b/doc/html/struct_oct_str256.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_oct_str32.html b/doc/html/struct_oct_str32.html
index e8edf88..c834d79 100644
--- a/doc/html/struct_oct_str32.html
+++ b/doc/html/struct_oct_str32.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_oct_str512.html b/doc/html/struct_oct_str512.html
index 2193d4e..793004c 100644
--- a/doc/html/struct_oct_str512.html
+++ b/doc/html/struct_oct_str512.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_fq_elem_dat.html b/doc/html/struct_oct_str600.html
index 7cf8e3b..7acfc20 100644
--- a/doc/html/struct_fq_elem_dat.html
+++ b/doc/html/struct_oct_str600.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: FqElemDat Struct Reference</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: OctStr600 Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,31 +53,33 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_fq_elem_dat.html','');});
+$(document).ready(function(){initNavTree('struct_oct_str600.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-attribs">Data Fields</a> </div>
<div class="headertitle">
-<div class="title">FqElemDat Struct Reference</div> </div>
+<div class="title">OctStr600 Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
</div><!--header-->
<div class="contents">
-<p>Data for element in Fq.
- <a href="struct_fq_elem_dat.html#details">More...</a></p>
+<p>600 bit octet string
+ <a href="struct_oct_str600.html#details">More...</a></p>
+
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Data Fields</h2></td></tr>
-<tr class="memitem:a9c3b30d0473490a4b01631969c0e0c0b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c3b30d0473490a4b01631969c0e0c0b"></a>
-Ipp32u&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_fq_elem_dat.html#a9c3b30d0473490a4b01631969c0e0c0b">x</a> [sizeof(<a class="el" href="struct_fq_elem_str.html">FqElemStr</a>)/sizeof(Ipp32u)]</td></tr>
-<tr class="memdesc:a9c3b30d0473490a4b01631969c0e0c0b"><td class="mdescLeft">&#160;</td><td class="mdescRight">element in Fq <br /></td></tr>
-<tr class="separator:a9c3b30d0473490a4b01631969c0e0c0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06d53af92a06e1decc6062fd16c43a59"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06d53af92a06e1decc6062fd16c43a59"></a>
+unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_oct_str600.html#a06d53af92a06e1decc6062fd16c43a59">data</a> [600/CHAR_BIT]</td></tr>
+<tr class="memdesc:a06d53af92a06e1decc6062fd16c43a59"><td class="mdescLeft">&#160;</td><td class="mdescRight">600 bit data <br /></td></tr>
+<tr class="separator:a06d53af92a06e1decc6062fd16c43a59"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Data for element in Fq. </p>
+<div class="textblock"><p>600 bit octet string </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/common/math/<a class="el" href="pairing_8c.html">pairing.c</a></li>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
@@ -85,7 +87,7 @@ Ipp32u&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="st
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
- <li class="navelem"><a class="el" href="struct_fq_elem_dat.html">FqElemDat</a></li>
+ <li class="navelem"><a class="el" href="struct_oct_str600.html">OctStr600</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/struct_oct_str64.html b/doc/html/struct_oct_str64.html
index b7448f8..326acb4 100644
--- a/doc/html/struct_oct_str64.html
+++ b/doc/html/struct_oct_str64.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_fq12_elem_dat.html b/doc/html/struct_oct_str768.html
index f752dd5..a5495e8 100644
--- a/doc/html/struct_fq12_elem_dat.html
+++ b/doc/html/struct_oct_str768.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Fq12ElemDat Struct Reference</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: OctStr768 Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,31 +53,33 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_fq12_elem_dat.html','');});
+$(document).ready(function(){initNavTree('struct_oct_str768.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-attribs">Data Fields</a> </div>
<div class="headertitle">
-<div class="title">Fq12ElemDat Struct Reference</div> </div>
+<div class="title">OctStr768 Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
</div><!--header-->
<div class="contents">
-<p>Data for element in Fq2^3^2.
- <a href="struct_fq12_elem_dat.html#details">More...</a></p>
+<p>768 bit octet string
+ <a href="struct_oct_str768.html#details">More...</a></p>
+
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Data Fields</h2></td></tr>
-<tr class="memitem:ac73d5fe5cde8325f87eb719ea2e27ef1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac73d5fe5cde8325f87eb719ea2e27ef1"></a>
-<a class="el" href="struct_fq6_elem_dat.html">Fq6ElemDat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_fq12_elem_dat.html#ac73d5fe5cde8325f87eb719ea2e27ef1">x</a> [2]</td></tr>
-<tr class="memdesc:ac73d5fe5cde8325f87eb719ea2e27ef1"><td class="mdescLeft">&#160;</td><td class="mdescRight">element in Fq12 <br /></td></tr>
-<tr class="separator:ac73d5fe5cde8325f87eb719ea2e27ef1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae45eea89259bd22e60a8d960063921cc"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae45eea89259bd22e60a8d960063921cc"></a>
+unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_oct_str768.html#ae45eea89259bd22e60a8d960063921cc">data</a> [768/CHAR_BIT]</td></tr>
+<tr class="memdesc:ae45eea89259bd22e60a8d960063921cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">768 bit data <br /></td></tr>
+<tr class="separator:ae45eea89259bd22e60a8d960063921cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Data for element in Fq2^3^2. </p>
+<div class="textblock"><p>768 bit octet string </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/common/math/<a class="el" href="pairing_8c.html">pairing.c</a></li>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
@@ -85,7 +87,7 @@ Data Fields</h2></td></tr>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
- <li class="navelem"><a class="el" href="struct_fq12_elem_dat.html">Fq12ElemDat</a></li>
+ <li class="navelem"><a class="el" href="struct_oct_str768.html">OctStr768</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/struct_oct_str8.html b/doc/html/struct_oct_str8.html
index 5a0e807..0001a9b 100644
--- a/doc/html/struct_oct_str8.html
+++ b/doc/html/struct_oct_str8.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_fq6_elem_dat.html b/doc/html/struct_oct_str80.html
index 5fea4f7..4cff6da 100644
--- a/doc/html/struct_fq6_elem_dat.html
+++ b/doc/html/struct_oct_str80.html
@@ -5,7 +5,7 @@
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: Fq6ElemDat Struct Reference</title>
+<title>Intel&reg; Enhanced Privacy ID SDK: OctStr80 Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -53,31 +53,33 @@
</div>
</div>
<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_fq6_elem_dat.html','');});
+$(document).ready(function(){initNavTree('struct_oct_str80.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#pub-attribs">Data Fields</a> </div>
<div class="headertitle">
-<div class="title">Fq6ElemDat Struct Reference</div> </div>
+<div class="title">OctStr80 Struct Reference<div class="ingroups"><a class="el" href="group___epid_module.html">epid</a> &raquo; <a class="el" href="group___epid_common.html">common</a> &raquo; <a class="el" href="group___epid_types.html">types</a> &raquo; <a class="el" href="group___epid11_types.html">EPID 1.1 specific types</a></div></div> </div>
</div><!--header-->
<div class="contents">
-<p>Data for element in Fq2^3.
- <a href="struct_fq6_elem_dat.html#details">More...</a></p>
+<p>80 bit octet string
+ <a href="struct_oct_str80.html#details">More...</a></p>
+
+<p><code>#include &lt;epid/common/1.1/types.h&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Data Fields</h2></td></tr>
-<tr class="memitem:af56452e7fa0d07a2d392bb7cccd6d268"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af56452e7fa0d07a2d392bb7cccd6d268"></a>
-<a class="el" href="struct_fq2_elem_dat.html">Fq2ElemDat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_fq6_elem_dat.html#af56452e7fa0d07a2d392bb7cccd6d268">x</a> [3]</td></tr>
-<tr class="memdesc:af56452e7fa0d07a2d392bb7cccd6d268"><td class="mdescLeft">&#160;</td><td class="mdescRight">element in Fq6 <br /></td></tr>
-<tr class="separator:af56452e7fa0d07a2d392bb7cccd6d268"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af80e2b81554109d9a41c5e771aceb8c9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af80e2b81554109d9a41c5e771aceb8c9"></a>
+unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_oct_str80.html#af80e2b81554109d9a41c5e771aceb8c9">data</a> [80/CHAR_BIT]</td></tr>
+<tr class="memdesc:af80e2b81554109d9a41c5e771aceb8c9"><td class="mdescLeft">&#160;</td><td class="mdescRight">80 bit data <br /></td></tr>
+<tr class="separator:af80e2b81554109d9a41c5e771aceb8c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Data for element in Fq2^3. </p>
+<div class="textblock"><p>80 bit octet string </p>
</div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/common/math/<a class="el" href="pairing_8c.html">pairing.c</a></li>
+<li>epid/common/1.1/<a class="el" href="1_81_2types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
@@ -85,7 +87,7 @@ Data Fields</h2></td></tr>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
- <li class="navelem"><a class="el" href="struct_fq6_elem_dat.html">Fq6ElemDat</a></li>
+ <li class="navelem"><a class="el" href="struct_oct_str80.html">OctStr80</a></li>
<li class="footer">
&copy; 2016 Intel Corporation
</li>
diff --git a/doc/html/struct_pre_computed_signature.html b/doc/html/struct_pre_computed_signature.html
index 725d2ff..ab33400 100644
--- a/doc/html/struct_pre_computed_signature.html
+++ b/doc/html/struct_pre_computed_signature.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_priv_key.html b/doc/html/struct_priv_key.html
index beb8f32..a81978f 100644
--- a/doc/html/struct_priv_key.html
+++ b/doc/html/struct_priv_key.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -91,8 +91,7 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Intel(R) EPID 2.0 private key. </p>
<p>Private key: (gid, A, x, f) </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#_a7">signmsg.c</a>.</dd>
-</dl></div><hr/>The documentation for this struct was generated from the following file:<ul>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>epid/common/<a class="el" href="types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/struct_priv_rl.html b/doc/html/struct_priv_rl.html
index 8ee2b25..fc65874 100644
--- a/doc/html/struct_priv_rl.html
+++ b/doc/html/struct_priv_rl.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -91,8 +91,7 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>private-key based revocation list. </p>
<p>Private-key based revocation list PrivRL: (gid, RLver, n1, f[0], ..., f[n1-1]) </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#_a6">verifysig.c</a>.</dd>
-</dl></div><hr/>The documentation for this struct was generated from the following file:<ul>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>epid/common/<a class="el" href="types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/struct_sha256_digest.html b/doc/html/struct_sha256_digest.html
index 86582c4..350ebc9 100644
--- a/doc/html/struct_sha256_digest.html
+++ b/doc/html/struct_sha256_digest.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_sig_rl.html b/doc/html/struct_sig_rl.html
index 918cf07..7572586 100644
--- a/doc/html/struct_sig_rl.html
+++ b/doc/html/struct_sig_rl.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -91,8 +91,7 @@ Data Fields</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>signature based revocation list </p>
<p>Signature based revocation list SigRL: (gid, RLver, n2, B[0], K[0], ..., B[n2-1], K[n2-1]) </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="signmsg_8c-example.html#_a5">signmsg.c</a>, and <a class="el" href="verifysig_8c-example.html#_a7">verifysig.c</a>.</dd>
-</dl></div><hr/>The documentation for this struct was generated from the following file:<ul>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>epid/common/<a class="el" href="types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/struct_sig_rl_entry.html b/doc/html/struct_sig_rl_entry.html
index 346906a..4cf161b 100644
--- a/doc/html/struct_sig_rl_entry.html
+++ b/doc/html/struct_sig_rl_entry.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
diff --git a/doc/html/struct_verifier_ctx.html b/doc/html/struct_verifier_ctx.html
deleted file mode 100644
index 9a199e0..0000000
--- a/doc/html/struct_verifier_ctx.html
+++ /dev/null
@@ -1,143 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: VerifierCtx Struct Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('struct_verifier_ctx.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#pub-attribs">Data Fields</a> </div>
- <div class="headertitle">
-<div class="title">VerifierCtx Struct Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Verifier context definition.
- <a href="struct_verifier_ctx.html#details">More...</a></p>
-
-<p><code>#include &lt;epid/verifier/context.h&gt;</code></p>
-<table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
-Data Fields</h2></td></tr>
-<tr class="memitem:a8e4846973639e85dee44c643802aa51c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8e4846973639e85dee44c643802aa51c"></a>
-<a class="el" href="struct_group_pub_key__.html">GroupPubKey_</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_ctx.html#a8e4846973639e85dee44c643802aa51c">pub_key</a></td></tr>
-<tr class="memdesc:a8e4846973639e85dee44c643802aa51c"><td class="mdescLeft">&#160;</td><td class="mdescRight">group public key <br /></td></tr>
-<tr class="separator:a8e4846973639e85dee44c643802aa51c"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac40d686427ecb1d8c0ac4620dabdeb1e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac40d686427ecb1d8c0ac4620dabdeb1e"></a>
-<a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_ctx.html#ac40d686427ecb1d8c0ac4620dabdeb1e">e12</a></td></tr>
-<tr class="memdesc:ac40d686427ecb1d8c0ac4620dabdeb1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in GT <br /></td></tr>
-<tr class="separator:ac40d686427ecb1d8c0ac4620dabdeb1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac9277f6b9723c2cab5edd7f872a7595d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9277f6b9723c2cab5edd7f872a7595d"></a>
-<a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_ctx.html#ac9277f6b9723c2cab5edd7f872a7595d">e22</a></td></tr>
-<tr class="memdesc:ac9277f6b9723c2cab5edd7f872a7595d"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in GT <br /></td></tr>
-<tr class="separator:ac9277f6b9723c2cab5edd7f872a7595d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afbbf27c2f7897f64dc06a2cb4e1aa32a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbbf27c2f7897f64dc06a2cb4e1aa32a"></a>
-<a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_ctx.html#afbbf27c2f7897f64dc06a2cb4e1aa32a">e2w</a></td></tr>
-<tr class="memdesc:afbbf27c2f7897f64dc06a2cb4e1aa32a"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in GT <br /></td></tr>
-<tr class="separator:afbbf27c2f7897f64dc06a2cb4e1aa32a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad6486d46703ff4e148cac53e8582faab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad6486d46703ff4e148cac53e8582faab"></a>
-<a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_ctx.html#ad6486d46703ff4e148cac53e8582faab">eg12</a></td></tr>
-<tr class="memdesc:ad6486d46703ff4e148cac53e8582faab"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in GT <br /></td></tr>
-<tr class="separator:ad6486d46703ff4e148cac53e8582faab"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a630740c525aa9ee808c6a59c2ce15db3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a630740c525aa9ee808c6a59c2ce15db3"></a>
-<a class="el" href="struct_priv_rl.html">PrivRl</a> const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_ctx.html#a630740c525aa9ee808c6a59c2ce15db3">priv_rl</a></td></tr>
-<tr class="memdesc:a630740c525aa9ee808c6a59c2ce15db3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Private key based revocation list - not owned. <br /></td></tr>
-<tr class="separator:a630740c525aa9ee808c6a59c2ce15db3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a71fe864652cd3cf986dcd92c97edc52e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a71fe864652cd3cf986dcd92c97edc52e"></a>
-<a class="el" href="struct_sig_rl.html">SigRl</a> const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_ctx.html#a71fe864652cd3cf986dcd92c97edc52e">sig_rl</a></td></tr>
-<tr class="memdesc:a71fe864652cd3cf986dcd92c97edc52e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Signature based revocation list - not owned. <br /></td></tr>
-<tr class="separator:a71fe864652cd3cf986dcd92c97edc52e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a5424a579436533625aa53b516b43ec94"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5424a579436533625aa53b516b43ec94"></a>
-<a class="el" href="struct_group_rl.html">GroupRl</a> const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_ctx.html#a5424a579436533625aa53b516b43ec94">group_rl</a></td></tr>
-<tr class="memdesc:a5424a579436533625aa53b516b43ec94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Group revocation list - not owned. <br /></td></tr>
-<tr class="separator:a5424a579436533625aa53b516b43ec94"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:aed00ae85eaae4a5c12e4254a956ddab4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aed00ae85eaae4a5c12e4254a956ddab4"></a>
-<a class="el" href="struct_verifier_rl.html">VerifierRl</a> const *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_ctx.html#aed00ae85eaae4a5c12e4254a956ddab4">verifier_rl</a></td></tr>
-<tr class="memdesc:aed00ae85eaae4a5c12e4254a956ddab4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifier revocation list - not owned. <br /></td></tr>
-<tr class="separator:aed00ae85eaae4a5c12e4254a956ddab4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adeb96848d86f31447bf66c4a8dabe296"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adeb96848d86f31447bf66c4a8dabe296"></a>
-<a class="el" href="struct_epid2_params__.html">Epid2Params_</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_ctx.html#adeb96848d86f31447bf66c4a8dabe296">epid2_params</a></td></tr>
-<tr class="memdesc:adeb96848d86f31447bf66c4a8dabe296"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 2.0 params. <br /></td></tr>
-<tr class="separator:adeb96848d86f31447bf66c4a8dabe296"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2b1bd7f1a90a8effc0f79c008cb3d31a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2b1bd7f1a90a8effc0f79c008cb3d31a"></a>
-<a class="el" href="struct_commit_values.html">CommitValues</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_ctx.html#a2b1bd7f1a90a8effc0f79c008cb3d31a">commit_values</a></td></tr>
-<tr class="memdesc:a2b1bd7f1a90a8effc0f79c008cb3d31a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Values that are hashed to create commitment. <br /></td></tr>
-<tr class="separator:a2b1bd7f1a90a8effc0f79c008cb3d31a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a2a13a21ed54acd9fd26bd4a9221a4eb7"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2a13a21ed54acd9fd26bd4a9221a4eb7"></a>
-<a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_ctx.html#a2a13a21ed54acd9fd26bd4a9221a4eb7">hash_alg</a></td></tr>
-<tr class="memdesc:a2a13a21ed54acd9fd26bd4a9221a4eb7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hash algorithm to use. <br /></td></tr>
-<tr class="separator:a2a13a21ed54acd9fd26bd4a9221a4eb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Verifier context definition. </p>
-<p>Internal context of verifier. </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#_a5">verifysig.c</a>.</dd>
-</dl></div><hr/>The documentation for this struct was generated from the following file:<ul>
-<li>epid/verifier/<a class="el" href="verifier_2context_8h.html">context.h</a></li>
-</ul>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/struct_verifier_precomp.html b/doc/html/struct_verifier_precomp.html
index abc8e5c..1293a72 100644
--- a/doc/html/struct_verifier_precomp.html
+++ b/doc/html/struct_verifier_precomp.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -64,13 +64,17 @@ $(document).ready(function(){initNavTree('struct_verifier_precomp.html','');});
</div><!--header-->
<div class="contents">
-<p>Pre-computed member settings.
+<p>Pre-computed verifier settings.
<a href="struct_verifier_precomp.html#details">More...</a></p>
<p><code>#include &lt;epid/verifier/api.h&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Data Fields</h2></td></tr>
+<tr class="memitem:afc3e29a325c95c62bb192d5f8cdd5c1c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afc3e29a325c95c62bb192d5f8cdd5c1c"></a>
+<a class="el" href="group___epid_types.html#gada666b48d0cbc301985405fde896f1de">GroupId</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_precomp.html#afc3e29a325c95c62bb192d5f8cdd5c1c">gid</a></td></tr>
+<tr class="memdesc:afc3e29a325c95c62bb192d5f8cdd5c1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">group ID <br /></td></tr>
+<tr class="separator:afc3e29a325c95c62bb192d5f8cdd5c1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1106376f12772942af0331eb74de6e5"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad1106376f12772942af0331eb74de6e5"></a>
<a class="el" href="struct_gt_elem_str.html">GtElemStr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_precomp.html#ad1106376f12772942af0331eb74de6e5">e12</a></td></tr>
<tr class="memdesc:ad1106376f12772942af0331eb74de6e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">an element in GT <br /></td></tr>
@@ -89,11 +93,10 @@ Data Fields</h2></td></tr>
<tr class="separator:ab061d6cc07d1467eeb5bf25f3ea7e306"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Pre-computed member settings. </p>
-<p>Serialized form of the information about a member that remains stable for a given set of keys.</p>
+<div class="textblock"><p>Pre-computed verifier settings. </p>
+<p>Serialized form of the information about a verifier that remains stable for a given set of keys.</p>
<dl class="section note"><dt>Note</dt><dd>e12 = 0 implies that this data is not valid </dd></dl>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#_a3">verifysig.c</a>.</dd>
-</dl></div><hr/>The documentation for this struct was generated from the following file:<ul>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>epid/verifier/<a class="el" href="verifier_2api_8h.html">api.h</a></li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/struct_verifier_rl.html b/doc/html/struct_verifier_rl.html
index 199dd08..13b0169 100644
--- a/doc/html/struct_verifier_rl.html
+++ b/doc/html/struct_verifier_rl.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -91,8 +91,7 @@ Data Fields</h2></td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>verifier revocation list Verifier revocation list VerifierRL: (gid, B, RLver, n4, K[0], ..., K[n4-1]) </p>
-<dl><dt><b>Examples: </b></dt><dd><a class="el" href="verifysig_8c-example.html#_a2">verifysig.c</a>.</dd>
-</dl></div><hr/>The documentation for this struct was generated from the following file:<ul>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
<li>epid/common/<a class="el" href="types_8h.html">types.h</a></li>
</ul>
</div><!-- contents -->
diff --git a/doc/html/tatepairing_8h.html b/doc/html/tatepairing_8h.html
new file mode 100644
index 0000000..85bedea
--- /dev/null
+++ b/doc/html/tatepairing_8h.html
@@ -0,0 +1,109 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: epid/common/math/tatepairing.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('tatepairing_8h.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">tatepairing.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Intel(R) EPID 1.1 Pairing interface.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="errors_8h.html">epid/common/errors.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="types_8h.html">epid/common/types.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="finitefield_8h.html">epid/common/math/finitefield.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="ecgroup_8h.html">epid/common/math/ecgroup.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga74236e8ebbfc30a7daa7fa1cf1df148b"><td class="memItemLeft" align="right" valign="top">
+typedef struct <a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">Epid11PairingState</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">Epid11PairingState</a></td></tr>
+<tr class="memdesc:ga74236e8ebbfc30a7daa7fa1cf1df148b"><td class="mdescLeft">&#160;</td><td class="mdescRight">A pairing. <br /></td></tr>
+<tr class="separator:ga74236e8ebbfc30a7daa7fa1cf1df148b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga0ee658e26e9f933ba2ffbf2504dfae7e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_pairing_primitives.html#ga0ee658e26e9f933ba2ffbf2504dfae7e">NewEpid11PairingState</a> (<a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> const *ga, <a class="el" href="group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159">EcGroup</a> const *gb, <a class="el" href="group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e">FiniteField</a> const *ff, <a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">Epid11PairingState</a> **ps)</td></tr>
+<tr class="memdesc:ga0ee658e26e9f933ba2ffbf2504dfae7e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a new Tate pairing state. <a href="group___epid11_pairing_primitives.html#ga0ee658e26e9f933ba2ffbf2504dfae7e">More...</a><br /></td></tr>
+<tr class="separator:ga0ee658e26e9f933ba2ffbf2504dfae7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa3457d6f85889bc714910252fd21c758"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_pairing_primitives.html#gaa3457d6f85889bc714910252fd21c758">DeleteEpid11PairingState</a> (<a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">Epid11PairingState</a> **ps)</td></tr>
+<tr class="memdesc:gaa3457d6f85889bc714910252fd21c758"><td class="mdescLeft">&#160;</td><td class="mdescRight">Frees a previously allocated by Epid11PairingState. <a href="group___epid11_pairing_primitives.html#gaa3457d6f85889bc714910252fd21c758">More...</a><br /></td></tr>
+<tr class="separator:gaa3457d6f85889bc714910252fd21c758"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa4076dfe25e8e61ac6753333a322c059"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_pairing_primitives.html#gaa4076dfe25e8e61ac6753333a322c059">Epid11Pairing</a> (<a class="el" href="group___epid11_pairing_primitives.html#ga74236e8ebbfc30a7daa7fa1cf1df148b">Epid11PairingState</a> *ps, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *a, <a class="el" href="group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa">EcPoint</a> const *b, <a class="el" href="group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa">FfElement</a> *d)</td></tr>
+<tr class="memdesc:gaa4076dfe25e8e61ac6753333a322c059"><td class="mdescLeft">&#160;</td><td class="mdescRight">Computes a Tate Pairing for two parameters. <a href="group___epid11_pairing_primitives.html#gaa4076dfe25e8e61ac6753333a322c059">More...</a><br /></td></tr>
+<tr class="separator:gaa4076dfe25e8e61ac6753333a322c059"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Intel(R) EPID 1.1 Pairing interface. </p>
+</div></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_f6bef457d5f671b6e774bfccc16651f6.html">common</a></li><li class="navelem"><a class="el" href="dir_f169ebf8da29290a918fa4b3f7151050.html">math</a></li><li class="navelem"><a class="el" href="tatepairing_8h.html">tatepairing.h</a></li>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/types_8h.html b/doc/html/types_8h.html
index 0a0104d..2f09b6b 100644
--- a/doc/html/types_8h.html
+++ b/doc/html/types_8h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -196,12 +196,13 @@ typedef <a class="el" href="struct_g1_elem_str.html">G1ElemStr</a>&#160;</td><td
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga5e450438f6f9a5eacd0cf5ce354ec890"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> { <br />
-&#160;&#160;<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890aefb89989305b5c34120b0f18ee8e2c5d">kSha256</a> = 0,
+&#160;&#160;<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a68b2137c7946583a99f0dac2286523eb">kInvalidHashAlg</a> = -1,
+<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890aefb89989305b5c34120b0f18ee8e2c5d">kSha256</a> = 0,
<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a0f4dde6e82b84f5769873f6704fcd290">kSha384</a> = 1,
<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890afb78d98f37fecc53dd1637d94c5c0055">kSha512</a> = 2,
-<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a9746b5049a62bca2f7b844925e6136ba">kSha512_256</a> = 3,
<br />
-&#160;&#160;<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a4fa16d3867498f5e2f8ae5c94b0fab85">kSha3_256</a> = 4,
+&#160;&#160;<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a9746b5049a62bca2f7b844925e6136ba">kSha512_256</a> = 3,
+<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a4fa16d3867498f5e2f8ae5c94b0fab85">kSha3_256</a> = 4,
<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890a90d21c8885ab138f7cf91f253dd6ef86">kSha3_384</a> = 5,
<a class="el" href="group___epid_types.html#gga5e450438f6f9a5eacd0cf5ce354ec890ade8e74cf7910b3a71fe902a40abf7eee">kSha3_512</a> = 6
<br />
diff --git a/doc/html/verifier_21_81_2api_8h.html b/doc/html/verifier_21_81_2api_8h.html
new file mode 100644
index 0000000..a35abd0
--- /dev/null
+++ b/doc/html/verifier_21_81_2api_8h.html
@@ -0,0 +1,144 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: epid/verifier/1.1/api.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('verifier_21_81_2api_8h.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">api.h File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>Intel(R) EPID SDK verifier Intel(R) EPID 1.1 API.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &lt;stddef.h&gt;</code><br />
+<code>#include &quot;<a class="el" href="stdtypes_8h.html">epid/common/stdtypes.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="1_81_2types_8h.html">epid/common/1.1/types.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="errors_8h.html">epid/common/errors.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="verifier_2api_8h.html">epid/verifier/api.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_epid11_verifier_precomp.html">Epid11VerifierPrecomp</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Intel(R) EPID 1.1 Pre-computed verifier settings. <a href="struct_epid11_verifier_precomp.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gabe6a864a06322205ae7536ffea34c702"><td class="memItemLeft" align="right" valign="top">
+typedef struct <a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a></td></tr>
+<tr class="memdesc:gabe6a864a06322205ae7536ffea34c702"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal context of Intel(R) EPID 1.1 verifier. <br /></td></tr>
+<tr class="separator:gabe6a864a06322205ae7536ffea34c702"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac5a8f8d7624063ea428d81dbdbf61fa8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8">Epid11VerifierCreate</a> (<a class="el" href="struct_epid11_group_pub_key.html">Epid11GroupPubKey</a> const *pub_key, <a class="el" href="struct_epid11_verifier_precomp.html">Epid11VerifierPrecomp</a> const *precomp, <a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> **ctx)</td></tr>
+<tr class="memdesc:gac5a8f8d7624063ea428d81dbdbf61fa8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new Intel(R) EPID 1.1 verifier context. <a href="group___epid11_verifier_module.html#gac5a8f8d7624063ea428d81dbdbf61fa8">More...</a><br /></td></tr>
+<tr class="separator:gac5a8f8d7624063ea428d81dbdbf61fa8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga63cae8d5abcf4d7e3af4157de18998f1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#ga63cae8d5abcf4d7e3af4157de18998f1">Epid11VerifierDelete</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> **ctx)</td></tr>
+<tr class="memdesc:ga63cae8d5abcf4d7e3af4157de18998f1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deletes an existing Intel(R) EPID 1.1 verifier context. <a href="group___epid11_verifier_module.html#ga63cae8d5abcf4d7e3af4157de18998f1">More...</a><br /></td></tr>
+<tr class="separator:ga63cae8d5abcf4d7e3af4157de18998f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga241520cb925e5be89893a2037451cf1c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#ga241520cb925e5be89893a2037451cf1c">Epid11VerifierWritePrecomp</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *ctx, <a class="el" href="struct_epid11_verifier_precomp.html">Epid11VerifierPrecomp</a> *precomp)</td></tr>
+<tr class="memdesc:ga241520cb925e5be89893a2037451cf1c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes the pre-computed Intel(R) EPID 1.1 verifier settings. <a href="group___epid11_verifier_module.html#ga241520cb925e5be89893a2037451cf1c">More...</a><br /></td></tr>
+<tr class="separator:ga241520cb925e5be89893a2037451cf1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaffbe6ac2bc7236ad65126a17ebdceb14"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#gaffbe6ac2bc7236ad65126a17ebdceb14">Epid11VerifierSetPrivRl</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> *ctx, <a class="el" href="struct_epid11_priv_rl.html">Epid11PrivRl</a> const *priv_rl, size_t priv_rl_size)</td></tr>
+<tr class="memdesc:gaffbe6ac2bc7236ad65126a17ebdceb14"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the Intel(R) EPID 1.1 private key based revocation list. <a href="group___epid11_verifier_module.html#gaffbe6ac2bc7236ad65126a17ebdceb14">More...</a><br /></td></tr>
+<tr class="separator:gaffbe6ac2bc7236ad65126a17ebdceb14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaff5a014b0334be7e8583f0f99cb5e9b8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#gaff5a014b0334be7e8583f0f99cb5e9b8">Epid11VerifierSetSigRl</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> *ctx, <a class="el" href="struct_epid11_sig_rl.html">Epid11SigRl</a> const *sig_rl, size_t sig_rl_size)</td></tr>
+<tr class="memdesc:gaff5a014b0334be7e8583f0f99cb5e9b8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the Intel(R) EPID 1.1 signature based revocation list. <a href="group___epid11_verifier_module.html#gaff5a014b0334be7e8583f0f99cb5e9b8">More...</a><br /></td></tr>
+<tr class="separator:gaff5a014b0334be7e8583f0f99cb5e9b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga809c777908b2f9d029062d9424cb5f65"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#ga809c777908b2f9d029062d9424cb5f65">Epid11VerifierSetGroupRl</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> *ctx, <a class="el" href="struct_epid11_group_rl.html">Epid11GroupRl</a> const *grp_rl, size_t grp_rl_size)</td></tr>
+<tr class="memdesc:ga809c777908b2f9d029062d9424cb5f65"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the Intel(R) EPID 1.1 group based revocation list. <a href="group___epid11_verifier_module.html#ga809c777908b2f9d029062d9424cb5f65">More...</a><br /></td></tr>
+<tr class="separator:ga809c777908b2f9d029062d9424cb5f65"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0cb6d30df527ee0d8f0a1b68d2b7c0c0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#ga0cb6d30df527ee0d8f0a1b68d2b7c0c0">Epid11VerifierSetBasename</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> *ctx, void const *basename, size_t basename_len)</td></tr>
+<tr class="memdesc:ga0cb6d30df527ee0d8f0a1b68d2b7c0c0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the basename to be used by a verifier. <a href="group___epid11_verifier_module.html#ga0cb6d30df527ee0d8f0a1b68d2b7c0c0">More...</a><br /></td></tr>
+<tr class="separator:ga0cb6d30df527ee0d8f0a1b68d2b7c0c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafe5ad6bde38ad0c3e0a9960975fd5216"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#gafe5ad6bde38ad0c3e0a9960975fd5216">Epid11Verify</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *ctx, <a class="el" href="struct_epid11_signature.html">Epid11Signature</a> const *sig, size_t sig_len, void const *msg, size_t msg_len)</td></tr>
+<tr class="memdesc:gafe5ad6bde38ad0c3e0a9960975fd5216"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies an Intel(R) EPID 1.1 signature and checks revocation status. <a href="group___epid11_verifier_module.html#gafe5ad6bde38ad0c3e0a9960975fd5216">More...</a><br /></td></tr>
+<tr class="separator:gafe5ad6bde38ad0c3e0a9960975fd5216"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab0b6560b226a37321f5ca5d4fb55eba7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#gab0b6560b226a37321f5ca5d4fb55eba7">Epid11AreSigsLinked</a> (<a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *sig1, <a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *sig2)</td></tr>
+<tr class="memdesc:gab0b6560b226a37321f5ca5d4fb55eba7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if two Intel(R) EPID 1.1 signatures are linked. <a href="group___epid11_verifier_module.html#gab0b6560b226a37321f5ca5d4fb55eba7">More...</a><br /></td></tr>
+<tr class="separator:gab0b6560b226a37321f5ca5d4fb55eba7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7b5d19277da043c2b79721975d7bd070"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070">Epid11VerifyBasicSig</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *ctx, <a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *sig, void const *msg, size_t msg_len)</td></tr>
+<tr class="memdesc:ga7b5d19277da043c2b79721975d7bd070"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies an Intel(R) EPID 1.1 member signature without revocation checks. <a href="group___epid11_verifier_module.html#ga7b5d19277da043c2b79721975d7bd070">More...</a><br /></td></tr>
+<tr class="separator:ga7b5d19277da043c2b79721975d7bd070"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3a2e320d7de6156b2ce9d73e9cdce813"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#ga3a2e320d7de6156b2ce9d73e9cdce813">Epid11NrVerify</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *ctx, <a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *sig, void const *msg, size_t msg_len, <a class="el" href="struct_epid11_sig_rl_entry.html">Epid11SigRlEntry</a> const *sigrl_entry, <a class="el" href="struct_epid11_nr_proof.html">Epid11NrProof</a> const *proof)</td></tr>
+<tr class="memdesc:ga3a2e320d7de6156b2ce9d73e9cdce813"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies the non-revoked proof for a single Intel(R) EPID 1.1 signature based revocation list entry. <a href="group___epid11_verifier_module.html#ga3a2e320d7de6156b2ce9d73e9cdce813">More...</a><br /></td></tr>
+<tr class="separator:ga3a2e320d7de6156b2ce9d73e9cdce813"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0b79c79d09e3551158e1c38c7c335929"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid11_verifier_module.html#ga0b79c79d09e3551158e1c38c7c335929">Epid11CheckPrivRlEntry</a> (<a class="el" href="group___epid11_verifier_module.html#gabe6a864a06322205ae7536ffea34c702">Epid11VerifierCtx</a> const *ctx, <a class="el" href="struct_epid11_basic_signature.html">Epid11BasicSignature</a> const *sig, <a class="el" href="struct_fp_elem_str.html">FpElemStr</a> const *f)</td></tr>
+<tr class="memdesc:ga0b79c79d09e3551158e1c38c7c335929"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies an Intel(R) EPID 1.1 signature has not been revoked in the private key based revocation list. <a href="group___epid11_verifier_module.html#ga0b79c79d09e3551158e1c38c7c335929">More...</a><br /></td></tr>
+<tr class="separator:ga0b79c79d09e3551158e1c38c7c335929"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Intel(R) EPID SDK verifier Intel(R) EPID 1.1 API. </p>
+</div></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_02c945662023679b89476bd7126bc985.html">verifier</a></li><li class="navelem"><a class="el" href="dir_ef364879bae02db2684040178ed9b186.html">1.1</a></li><li class="navelem"><a class="el" href="verifier_21_81_2api_8h.html">api.h</a></li>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/html/verifier_2api_8h.html b/doc/html/verifier_2api_8h.html
index be8299b..6eeaf21 100644
--- a/doc/html/verifier_2api_8h.html
+++ b/doc/html/verifier_2api_8h.html
@@ -32,7 +32,7 @@
id="projectlink"
class="index.html"
href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
+&#160;<span id="projectnumber">3.0.0</span>
</div>
</td>
</tr>
@@ -59,6 +59,7 @@ $(document).ready(function(){initNavTree('verifier_2api_8h.html','');});
<div class="header">
<div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">api.h File Reference</div> </div>
@@ -75,50 +76,69 @@ $(document).ready(function(){initNavTree('verifier_2api_8h.html','');});
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_precomp.html">VerifierPrecomp</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pre-computed member settings. <a href="struct_verifier_precomp.html#details">More...</a><br /></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pre-computed verifier settings. <a href="struct_verifier_precomp.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gaf172a5f8f7f069d38c5838b723a1a85c"><td class="memItemLeft" align="right" valign="top">
+typedef struct <a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a></td></tr>
+<tr class="memdesc:gaf172a5f8f7f069d38c5838b723a1a85c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal context of verifier. <br /></td></tr>
+<tr class="separator:gaf172a5f8f7f069d38c5838b723a1a85c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
-<tr class="memitem:ga1d116daaee5466a1485d26ebc4e3ab70"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">EpidVerifierCreate</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_verifier_precomp.html">VerifierPrecomp</a> const *precomp, <a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> **ctx)</td></tr>
+<tr class="memitem:ga1d116daaee5466a1485d26ebc4e3ab70"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">EpidVerifierCreate</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pub_key, <a class="el" href="struct_verifier_precomp.html">VerifierPrecomp</a> const *precomp, <a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> **ctx)</td></tr>
<tr class="memdesc:ga1d116daaee5466a1485d26ebc4e3ab70"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new verifier context. <a href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">More...</a><br /></td></tr>
<tr class="separator:ga1d116daaee5466a1485d26ebc4e3ab70"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga6707e691f4b3916f9c684d5bbd463d12"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12">EpidVerifierDelete</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> **ctx)</td></tr>
+<tr class="memitem:ga6707e691f4b3916f9c684d5bbd463d12"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12">EpidVerifierDelete</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> **ctx)</td></tr>
<tr class="memdesc:ga6707e691f4b3916f9c684d5bbd463d12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deletes an existing verifier context. <a href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12">More...</a><br /></td></tr>
<tr class="separator:ga6707e691f4b3916f9c684d5bbd463d12"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga92df4d00ea4ee59d7bfd35b23da03392"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">EpidVerifierWritePrecomp</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_verifier_precomp.html">VerifierPrecomp</a> *precomp)</td></tr>
+<tr class="memitem:ga92df4d00ea4ee59d7bfd35b23da03392"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">EpidVerifierWritePrecomp</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *ctx, <a class="el" href="struct_verifier_precomp.html">VerifierPrecomp</a> *precomp)</td></tr>
<tr class="memdesc:ga92df4d00ea4ee59d7bfd35b23da03392"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes the pre-computed verifier settings. <a href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">More...</a><br /></td></tr>
<tr class="separator:ga92df4d00ea4ee59d7bfd35b23da03392"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gafab08180a43b58ce2e1d56c4b070bb0e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e">EpidVerifierSetPrivRl</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="struct_priv_rl.html">PrivRl</a> const *priv_rl, size_t priv_rl_size)</td></tr>
+<tr class="memitem:gafab08180a43b58ce2e1d56c4b070bb0e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e">EpidVerifierSetPrivRl</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *ctx, <a class="el" href="struct_priv_rl.html">PrivRl</a> const *priv_rl, size_t priv_rl_size)</td></tr>
<tr class="memdesc:gafab08180a43b58ce2e1d56c4b070bb0e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the private key based revocation list. <a href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e">More...</a><br /></td></tr>
<tr class="separator:gafab08180a43b58ce2e1d56c4b070bb0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga4c7c9820409ee06f30bb8dc75fdd5dcf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf">EpidVerifierSetSigRl</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl, size_t sig_rl_size)</td></tr>
+<tr class="memitem:ga4c7c9820409ee06f30bb8dc75fdd5dcf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf">EpidVerifierSetSigRl</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *ctx, <a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl, size_t sig_rl_size)</td></tr>
<tr class="memdesc:ga4c7c9820409ee06f30bb8dc75fdd5dcf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the signature based revocation list. <a href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf">More...</a><br /></td></tr>
<tr class="separator:ga4c7c9820409ee06f30bb8dc75fdd5dcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga1d41d6ef4dabbc30ec28452edd6baffb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">EpidVerifierSetGroupRl</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="struct_group_rl.html">GroupRl</a> const *grp_rl, size_t grp_rl_size)</td></tr>
+<tr class="memitem:ga1d41d6ef4dabbc30ec28452edd6baffb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">EpidVerifierSetGroupRl</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *ctx, <a class="el" href="struct_group_rl.html">GroupRl</a> const *grp_rl, size_t grp_rl_size)</td></tr>
<tr class="memdesc:ga1d41d6ef4dabbc30ec28452edd6baffb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the group based revocation list. <a href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">More...</a><br /></td></tr>
<tr class="separator:ga1d41d6ef4dabbc30ec28452edd6baffb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga0909703a0a4dfe080374d0d99077465a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a">EpidVerifierSetVerifierRl</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="struct_verifier_rl.html">VerifierRl</a> const *ver_rl, size_t ver_rl_size)</td></tr>
+<tr class="memitem:ga0909703a0a4dfe080374d0d99077465a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a">EpidVerifierSetVerifierRl</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *ctx, <a class="el" href="struct_verifier_rl.html">VerifierRl</a> const *ver_rl, size_t ver_rl_size)</td></tr>
<tr class="memdesc:ga0909703a0a4dfe080374d0d99077465a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the verifier revocation list. <a href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a">More...</a><br /></td></tr>
<tr class="separator:ga0909703a0a4dfe080374d0d99077465a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga97b58b2382f24756b66a357f1e825c92"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92">EpidVerifierSetHashAlg</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg)</td></tr>
+<tr class="memitem:ga97b58b2382f24756b66a357f1e825c92"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92">EpidVerifierSetHashAlg</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *ctx, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg)</td></tr>
<tr class="memdesc:ga97b58b2382f24756b66a357f1e825c92"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the hash algorithm to be used by a verifier. <a href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92">More...</a><br /></td></tr>
<tr class="separator:ga97b58b2382f24756b66a357f1e825c92"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga39b240a17f310894e9f5946c9a731798"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga39b240a17f310894e9f5946c9a731798">EpidVerify</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_epid_signature.html">EpidSignature</a> const *sig, size_t sig_len, void const *msg, size_t msg_len, void const *basename, size_t basename_len)</td></tr>
-<tr class="memdesc:ga39b240a17f310894e9f5946c9a731798"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies a signature and checks revocation status. <a href="group___epid_verifier_module.html#ga39b240a17f310894e9f5946c9a731798">More...</a><br /></td></tr>
-<tr class="separator:ga39b240a17f310894e9f5946c9a731798"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1c3810ef361da678a1f77823bd9c37a6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga1c3810ef361da678a1f77823bd9c37a6">EpidVerifierSetBasename</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *ctx, void const *basename, size_t basename_len)</td></tr>
+<tr class="memdesc:ga1c3810ef361da678a1f77823bd9c37a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the basename to be used by a verifier. <a href="group___epid_verifier_module.html#ga1c3810ef361da678a1f77823bd9c37a6">More...</a><br /></td></tr>
+<tr class="separator:ga1c3810ef361da678a1f77823bd9c37a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae3f9c37628e18b880d8bbee3e7f55064"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gae3f9c37628e18b880d8bbee3e7f55064">EpidVerify</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *ctx, <a class="el" href="struct_epid_signature.html">EpidSignature</a> const *sig, size_t sig_len, void const *msg, size_t msg_len)</td></tr>
+<tr class="memdesc:gae3f9c37628e18b880d8bbee3e7f55064"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies a signature and checks revocation status. <a href="group___epid_verifier_module.html#gae3f9c37628e18b880d8bbee3e7f55064">More...</a><br /></td></tr>
+<tr class="separator:gae3f9c37628e18b880d8bbee3e7f55064"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae44bd8acbc1e7205aeedff0c7e2632a8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="stdtypes_8h.html#ad5c9d4ba3dc37783a528b0925dc981a0">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gae44bd8acbc1e7205aeedff0c7e2632a8">EpidAreSigsLinked</a> (<a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig1, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig2)</td></tr>
<tr class="memdesc:gae44bd8acbc1e7205aeedff0c7e2632a8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Determines if two signatures are linked. <a href="group___epid_verifier_module.html#gae44bd8acbc1e7205aeedff0c7e2632a8">More...</a><br /></td></tr>
<tr class="separator:gae44bd8acbc1e7205aeedff0c7e2632a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga974b92a62e8b65ea75cf802e8cc6bb6a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a">EpidVerifyBasicSig</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, void const *msg, size_t msg_len, void const *basename, size_t basename_len)</td></tr>
-<tr class="memdesc:ga974b92a62e8b65ea75cf802e8cc6bb6a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies a member signature without revocation checks. <a href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a">More...</a><br /></td></tr>
-<tr class="separator:ga974b92a62e8b65ea75cf802e8cc6bb6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gac6e2fab59e3af8a33a74a5b201642700"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700">EpidNrVerify</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, void const *msg, size_t msg_len, <a class="el" href="struct_sig_rl_entry.html">SigRlEntry</a> const *sigrl_entry, <a class="el" href="struct_nr_proof.html">NrProof</a> const *proof)</td></tr>
+<tr class="memitem:gac3b1f1a2bdba8eeeebbf1e0c8c00862e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e">EpidVerifyBasicSig</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, void const *msg, size_t msg_len)</td></tr>
+<tr class="memdesc:gac3b1f1a2bdba8eeeebbf1e0c8c00862e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies a member signature without revocation checks. <a href="group___epid_verifier_module.html#gac3b1f1a2bdba8eeeebbf1e0c8c00862e">More...</a><br /></td></tr>
+<tr class="separator:gac3b1f1a2bdba8eeeebbf1e0c8c00862e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac6e2fab59e3af8a33a74a5b201642700"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700">EpidNrVerify</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, void const *msg, size_t msg_len, <a class="el" href="struct_sig_rl_entry.html">SigRlEntry</a> const *sigrl_entry, <a class="el" href="struct_nr_proof.html">NrProof</a> const *proof)</td></tr>
<tr class="memdesc:gac6e2fab59e3af8a33a74a5b201642700"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies the non-revoked proof for a single signature based revocation list entry. <a href="group___epid_verifier_module.html#gac6e2fab59e3af8a33a74a5b201642700">More...</a><br /></td></tr>
<tr class="separator:gac6e2fab59e3af8a33a74a5b201642700"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gaeb05e6faea6f09c0665b13adc6e7ddea"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea">EpidCheckPrivRlEntry</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, <a class="el" href="struct_fp_elem_str.html">FpElemStr</a> const *f)</td></tr>
+<tr class="memitem:gaeb05e6faea6f09c0665b13adc6e7ddea"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea">EpidCheckPrivRlEntry</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, <a class="el" href="struct_fp_elem_str.html">FpElemStr</a> const *f)</td></tr>
<tr class="memdesc:gaeb05e6faea6f09c0665b13adc6e7ddea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies a signature has not been revoked in the private key based revocation list. <a href="group___epid_verifier_module.html#gaeb05e6faea6f09c0665b13adc6e7ddea">More...</a><br /></td></tr>
<tr class="separator:gaeb05e6faea6f09c0665b13adc6e7ddea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2a75c7d5775e852a7b6e24178dd4054f"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga2a75c7d5775e852a7b6e24178dd4054f">EpidGetVerifierRlSize</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *ctx)</td></tr>
+<tr class="memdesc:ga2a75c7d5775e852a7b6e24178dd4054f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of bytes required to serialize the verifier blacklist. <a href="group___epid_verifier_module.html#ga2a75c7d5775e852a7b6e24178dd4054f">More...</a><br /></td></tr>
+<tr class="separator:ga2a75c7d5775e852a7b6e24178dd4054f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac857bff47e7d80363eac15285471fe81"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gac857bff47e7d80363eac15285471fe81">EpidWriteVerifierRl</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> const *ctx, <a class="el" href="struct_verifier_rl.html">VerifierRl</a> *ver_rl, size_t ver_rl_size)</td></tr>
+<tr class="memdesc:gac857bff47e7d80363eac15285471fe81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes the verifier blacklist to a buffer. <a href="group___epid_verifier_module.html#gac857bff47e7d80363eac15285471fe81">More...</a><br /></td></tr>
+<tr class="separator:gac857bff47e7d80363eac15285471fe81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8eaeb9f4a34e9e37ccdf342919f38c69"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga8eaeb9f4a34e9e37ccdf342919f38c69">EpidBlacklistSig</a> (<a class="el" href="group___epid_verifier_module.html#gaf172a5f8f7f069d38c5838b723a1a85c">VerifierCtx</a> *ctx, <a class="el" href="struct_epid_signature.html">EpidSignature</a> const *sig, size_t sig_len, void const *msg, size_t msg_len)</td></tr>
+<tr class="memdesc:ga8eaeb9f4a34e9e37ccdf342919f38c69"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds a valid name-based signature to the verifier blacklist. <a href="group___epid_verifier_module.html#ga8eaeb9f4a34e9e37ccdf342919f38c69">More...</a><br /></td></tr>
+<tr class="separator:ga8eaeb9f4a34e9e37ccdf342919f38c69"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Intel(R) EPID SDK verifier API. </p>
diff --git a/doc/html/verifier_2context_8c.html b/doc/html/verifier_2context_8c.html
deleted file mode 100644
index 3723969..0000000
--- a/doc/html/verifier_2context_8c.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/verifier/context.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('verifier_2context_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">context.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Verifier context implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;string.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="verifier_2api_8h.html">epid/verifier/api.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="verifier_2context_8h.html">epid/verifier/context.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="epid2params_8h.html">epid/common/epid2params.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="pairing_8h.html">epid/common/math/pairing.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="endian__convert_8h.html">epid/common/endian_convert.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="sigrlvalid_8h.html">epid/common/sigrlvalid.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga1d116daaee5466a1485d26ebc4e3ab70"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">EpidVerifierCreate</a> (<a class="el" href="struct_group_pub_key.html">GroupPubKey</a> const *pubkey, <a class="el" href="struct_verifier_precomp.html">VerifierPrecomp</a> const *precomp, <a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> **ctx)</td></tr>
-<tr class="memdesc:ga1d116daaee5466a1485d26ebc4e3ab70"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a new verifier context. <a href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">More...</a><br /></td></tr>
-<tr class="separator:ga1d116daaee5466a1485d26ebc4e3ab70"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga6707e691f4b3916f9c684d5bbd463d12"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12">EpidVerifierDelete</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> **ctx)</td></tr>
-<tr class="memdesc:ga6707e691f4b3916f9c684d5bbd463d12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deletes an existing verifier context. <a href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12">More...</a><br /></td></tr>
-<tr class="separator:ga6707e691f4b3916f9c684d5bbd463d12"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga92df4d00ea4ee59d7bfd35b23da03392"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">EpidVerifierWritePrecomp</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_verifier_precomp.html">VerifierPrecomp</a> *precomp)</td></tr>
-<tr class="memdesc:ga92df4d00ea4ee59d7bfd35b23da03392"><td class="mdescLeft">&#160;</td><td class="mdescRight">Serializes the pre-computed verifier settings. <a href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">More...</a><br /></td></tr>
-<tr class="separator:ga92df4d00ea4ee59d7bfd35b23da03392"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:gafab08180a43b58ce2e1d56c4b070bb0e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e">EpidVerifierSetPrivRl</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="struct_priv_rl.html">PrivRl</a> const *priv_rl, size_t priv_rl_size)</td></tr>
-<tr class="memdesc:gafab08180a43b58ce2e1d56c4b070bb0e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the private key based revocation list. <a href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e">More...</a><br /></td></tr>
-<tr class="separator:gafab08180a43b58ce2e1d56c4b070bb0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga4c7c9820409ee06f30bb8dc75fdd5dcf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf">EpidVerifierSetSigRl</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="struct_sig_rl.html">SigRl</a> const *sig_rl, size_t sig_rl_size)</td></tr>
-<tr class="memdesc:ga4c7c9820409ee06f30bb8dc75fdd5dcf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the signature based revocation list. <a href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf">More...</a><br /></td></tr>
-<tr class="separator:ga4c7c9820409ee06f30bb8dc75fdd5dcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga1d41d6ef4dabbc30ec28452edd6baffb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">EpidVerifierSetGroupRl</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="struct_group_rl.html">GroupRl</a> const *grp_rl, size_t grp_rl_size)</td></tr>
-<tr class="memdesc:ga1d41d6ef4dabbc30ec28452edd6baffb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the group based revocation list. <a href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">More...</a><br /></td></tr>
-<tr class="separator:ga1d41d6ef4dabbc30ec28452edd6baffb"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga0909703a0a4dfe080374d0d99077465a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a">EpidVerifierSetVerifierRl</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="struct_verifier_rl.html">VerifierRl</a> const *ver_rl, size_t ver_rl_size)</td></tr>
-<tr class="memdesc:ga0909703a0a4dfe080374d0d99077465a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the verifier revocation list. <a href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a">More...</a><br /></td></tr>
-<tr class="separator:ga0909703a0a4dfe080374d0d99077465a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ga97b58b2382f24756b66a357f1e825c92"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92">EpidVerifierSetHashAlg</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> *ctx, <a class="el" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg)</td></tr>
-<tr class="memdesc:ga97b58b2382f24756b66a357f1e825c92"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the hash algorithm to be used by a verifier. <a href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92">More...</a><br /></td></tr>
-<tr class="separator:ga97b58b2382f24756b66a357f1e825c92"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Verifier context implementation. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_02c945662023679b89476bd7126bc985.html">verifier</a></li><li class="navelem"><a class="el" href="verifier_2context_8c.html">context.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/verifier_2context_8h.html b/doc/html/verifier_2context_8h.html
deleted file mode 100644
index dc831de..0000000
--- a/doc/html/verifier_2context_8h.html
+++ /dev/null
@@ -1,96 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/verifier/context.h File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('verifier_2context_8h.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#nested-classes">Data Structures</a> </div>
- <div class="headertitle">
-<div class="title">context.h File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Verifier context interface.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="grouppubkey_8h.html">epid/common/grouppubkey.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="ecgroup_8h.html">epid/common/math/ecgroup.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="finitefield_8h.html">epid/common/math/finitefield.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="epid2params_8h.html">epid/common/epid2params.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="commitment_8h.html">epid/common/commitment.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
-Data Structures</h2></td></tr>
-<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_verifier_ctx.html">VerifierCtx</a></td></tr>
-<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifier context definition. <a href="struct_verifier_ctx.html#details">More...</a><br /></td></tr>
-<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Verifier context interface. </p>
-</div></div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_02c945662023679b89476bd7126bc985.html">verifier</a></li><li class="navelem"><a class="el" href="verifier_2context_8h.html">context.h</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/verify_8c.html b/doc/html/verify_8c.html
deleted file mode 100644
index ec1c625..0000000
--- a/doc/html/verify_8c.html
+++ /dev/null
@@ -1,122 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/verifier/verify.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('verify_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">verify.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>Verify implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &lt;string.h&gt;</code><br />
-<code>#include &quot;<a class="el" href="verifier_2api_8h.html">epid/verifier/api.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="verifier_2context_8h.html">epid/verifier/context.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="endian__convert_8h.html">epid/common/endian_convert.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="verify_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">BREAK_ON_EPID_ERROR</a>(ret)</td></tr>
-<tr class="memdesc:a5638f861b82f1746ea1af0b384ef8ff1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handle SDK Error with Break. <a href="#a5638f861b82f1746ea1af0b384ef8ff1">More...</a><br /></td></tr>
-<tr class="separator:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga39b240a17f310894e9f5946c9a731798"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga39b240a17f310894e9f5946c9a731798">EpidVerify</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_epid_signature.html">EpidSignature</a> const *sig, size_t sig_len, void const *msg, size_t msg_len, void const *basename, size_t basename_len)</td></tr>
-<tr class="memdesc:ga39b240a17f310894e9f5946c9a731798"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies a signature and checks revocation status. <a href="group___epid_verifier_module.html#ga39b240a17f310894e9f5946c9a731798">More...</a><br /></td></tr>
-<tr class="separator:ga39b240a17f310894e9f5946c9a731798"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Verify implementation. </p>
-</div><h2 class="groupheader">Macro Definition Documentation</h2>
-<a class="anchor" id="a5638f861b82f1746ea1af0b384ef8ff1"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define BREAK_ON_EPID_ERROR</td>
- <td>(</td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">ret</td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != (ret)) { \</div><div class="line"> break; \</div><div class="line"> }</div><div class="ttc" id="group___error_codes_html_ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9"><div class="ttname"><a href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a></div><div class="ttdoc">no error </div><div class="ttdef"><b>Definition:</b> errors.h:41</div></div>
-</div><!-- fragment -->
-<p>Handle SDK Error with Break. </p>
-
-</div>
-</div>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_02c945662023679b89476bd7126bc985.html">verifier</a></li><li class="navelem"><a class="el" href="verify_8c.html">verify.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/verifybasic_8c.html b/doc/html/verifybasic_8c.html
deleted file mode 100644
index 9d12ce6..0000000
--- a/doc/html/verifybasic_8c.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: epid/verifier/verifybasic.c File Reference</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('verifybasic_8c.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="summary">
-<a href="#define-members">Macros</a> &#124;
-<a href="#func-members">Functions</a> </div>
- <div class="headertitle">
-<div class="title">verifybasic.c File Reference</div> </div>
-</div><!--header-->
-<div class="contents">
-
-<p>VerifyBasicSig implementation.
-<a href="#details">More...</a></p>
-<div class="textblock"><code>#include &quot;<a class="el" href="verifier_2api_8h.html">epid/verifier/api.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="verifier_2context_8h.html">epid/verifier/context.h</a>&quot;</code><br />
-<code>#include &quot;<a class="el" href="memory_8h.html">epid/common/memory.h</a>&quot;</code><br />
-</div><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
-Macros</h2></td></tr>
-<tr class="memitem:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="verifybasic_8c.html#a5638f861b82f1746ea1af0b384ef8ff1">BREAK_ON_EPID_ERROR</a>(ret)</td></tr>
-<tr class="memdesc:a5638f861b82f1746ea1af0b384ef8ff1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handle SDK Error with Break. <a href="#a5638f861b82f1746ea1af0b384ef8ff1">More...</a><br /></td></tr>
-<tr class="separator:a5638f861b82f1746ea1af0b384ef8ff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ac362b8d551a6a185f226af3be3d931f8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac362b8d551a6a185f226af3be3d931f8"></a>
-#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="verifybasic_8c.html#ac362b8d551a6a185f226af3be3d931f8">COUNT_OF</a>(A)&#160;&#160;&#160;(sizeof(A) / sizeof((A)[0]))</td></tr>
-<tr class="memdesc:ac362b8d551a6a185f226af3be3d931f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Count of elements in array. <br /></td></tr>
-<tr class="separator:ac362b8d551a6a185f226af3be3d931f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
-Functions</h2></td></tr>
-<tr class="memitem:ga974b92a62e8b65ea75cf802e8cc6bb6a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a">EpidVerifyBasicSig</a> (<a class="el" href="struct_verifier_ctx.html">VerifierCtx</a> const *ctx, <a class="el" href="struct_basic_signature.html">BasicSignature</a> const *sig, void const *msg, size_t msg_len, void const *basename, size_t basename_len)</td></tr>
-<tr class="memdesc:ga974b92a62e8b65ea75cf802e8cc6bb6a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Verifies a member signature without revocation checks. <a href="group___epid_verifier_module.html#ga974b92a62e8b65ea75cf802e8cc6bb6a">More...</a><br /></td></tr>
-<tr class="separator:ga974b92a62e8b65ea75cf802e8cc6bb6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
-</table>
-<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>VerifyBasicSig implementation. </p>
-</div><h2 class="groupheader">Macro Definition Documentation</h2>
-<a class="anchor" id="a5638f861b82f1746ea1af0b384ef8ff1"></a>
-<div class="memitem">
-<div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">#define BREAK_ON_EPID_ERROR</td>
- <td>(</td>
- <td class="paramtype">&#160;</td>
- <td class="paramname">ret</td><td>)</td>
- <td></td>
- </tr>
- </table>
-</div><div class="memdoc">
-<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != (ret)) { \</div><div class="line"> break; \</div><div class="line"> }</div><div class="ttc" id="group___error_codes_html_ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9"><div class="ttname"><a href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a></div><div class="ttdoc">no error </div><div class="ttdef"><b>Definition:</b> errors.h:41</div></div>
-</div><!-- fragment -->
-<p>Handle SDK Error with Break. </p>
-
-</div>
-</div>
-</div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="navelem"><a class="el" href="dir_12b90d9c027aaf878a834df729679a56.html">epid</a></li><li class="navelem"><a class="el" href="dir_02c945662023679b89476bd7126bc985.html">verifier</a></li><li class="navelem"><a class="el" href="verifybasic_8c.html">verifybasic.c</a></li>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/verifysig_8c-example.html b/doc/html/verifysig_8c-example.html
deleted file mode 100644
index 1f9fa2b..0000000
--- a/doc/html/verifysig_8c-example.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!-- HTML header for doxygen 1.8.10-->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=9"/>
-<meta name="generator" content="Doxygen 1.8.11"/>
-<title>Intel&reg; Enhanced Privacy ID SDK: verifysig.c</title>
-<link href="tabs.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="jquery.js"></script>
-<script type="text/javascript" src="dynsections.js"></script>
-<link href="navtree.css" rel="stylesheet" type="text/css"/>
-<script type="text/javascript" src="resize.js"></script>
-<script type="text/javascript" src="navtreedata.js"></script>
-<script type="text/javascript" src="navtree.js"></script>
-<script type="text/javascript">
- $(document).ready(initResizable);
- $(window).load(resizeHeight);
-</script>
-<link href="doxygen.css" rel="stylesheet" type="text/css" />
-<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
-</head>
-<body>
-<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
- <td id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname"><a
- onclick="storeLink('index.html')"
- id="projectlink"
- class="index.html"
- href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
-&#160;<span id="projectnumber">2.0.0</span>
-</div>
- </td>
- </tr>
- </tbody>
-</table>
-</div>
-<!-- end header part -->
-<!-- Generated by Doxygen 1.8.11 -->
-</div><!-- top -->
-<div id="side-nav" class="ui-resizable side-nav-resizable">
- <div id="nav-tree">
- <div id="nav-tree-contents">
- <div id="nav-sync" class="sync"></div>
- </div>
- </div>
- <div id="splitbar" style="-moz-user-select:none;"
- class="ui-resizable-handle">
- </div>
-</div>
-<script type="text/javascript">
-$(document).ready(function(){initNavTree('verifysig_8c-example.html','');});
-</script>
-<div id="doc-content">
-<div class="header">
- <div class="headertitle">
-<div class="title">verifysig.c</div> </div>
-</div><!--header-->
-<div class="contents">
-<p>This is an example of how to call the SDK verifier APIs.</p>
-<div class="fragment"><div class="line"><span class="comment">/*############################################################################</span></div><div class="line"><span class="comment"> # Copyright 2016 Intel Corporation</span></div><div class="line"><span class="comment"> #</span></div><div class="line"><span class="comment"> # Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><span class="comment"> # you may not use this file except in compliance with the License.</span></div><div class="line"><span class="comment"> # You may obtain a copy of the License at</span></div><div class="line"><span class="comment"> #</span></div><div class="line"><span class="comment"> # http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><span class="comment"> #</span></div><div class="line"><span class="comment"> # Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><span class="comment"> # distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><span class="comment"> # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><span class="comment"> # See the License for the specific language governing permissions and</span></div><div class="line"><span class="comment"> # limitations under the License.</span></div><div class="line"><span class="comment"> ############################################################################*/</span></div><div class="line"></div><div class="line"><span class="preprocessor">#include &quot;src/verifysig.h&quot;</span></div><div class="line"></div><div class="line"><span class="preprocessor">#include &lt;stdlib.h&gt;</span></div><div class="line"></div><div class="line"><span class="preprocessor">#include &quot;util/buffutil.h&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;util/envutil.h&quot;</span></div><div class="line"></div><div class="line"><span class="keywordtype">bool</span> IsCaCertAuthorizedByRootCa(<span class="keywordtype">void</span> <span class="keyword">const</span>* data, <span class="keywordtype">size_t</span> size) {</div><div class="line"> <span class="comment">// Implementation of this function is out of scope of the sample.</span></div><div class="line"> <span class="comment">// In an actual implementation Issuing CA certificate must be validated</span></div><div class="line"> <span class="comment">// with CA Root certificate before using it in parse functions.</span></div><div class="line"> (void)data;</div><div class="line"> (void)size;</div><div class="line"> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line">}</div><div class="line"></div><div class="line"></div><div class="line"><a class="code" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> AuthenticateAndAllocateRl(<span class="keywordtype">void</span> <span class="keyword">const</span>* buf, <span class="keywordtype">size_t</span> len,</div><div class="line"> <a name="_a0"></a><a class="code" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> <span class="keyword">const</span>* cert,</div><div class="line"> <a class="code" href="group___file_parser.html#ga9a33be7edc6b4c7a867fb07bd2bddecb">EpidFileType</a> file_type, <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div><div class="line"> <span class="keywordtype">void</span>** new_rl, <span class="keywordtype">size_t</span>* rl_len);</div><div class="line"></div><div class="line"><a class="code" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> Verify(<a name="_a1"></a><a class="code" href="struct_epid_signature.html">EpidSignature</a> <span class="keyword">const</span>* sig, <span class="keywordtype">size_t</span> sig_len, <span class="keywordtype">void</span> <span class="keyword">const</span>* msg,</div><div class="line"> <span class="keywordtype">size_t</span> msg_len, <span class="keywordtype">void</span> <span class="keyword">const</span>* basename, <span class="keywordtype">size_t</span> basename_len,</div><div class="line"> <span class="keywordtype">void</span> <span class="keyword">const</span>* signed_priv_rl, <span class="keywordtype">size_t</span> signed_priv_rl_size,</div><div class="line"> <span class="keywordtype">void</span> <span class="keyword">const</span>* signed_sig_rl, <span class="keywordtype">size_t</span> signed_sig_rl_size,</div><div class="line"> <span class="keywordtype">void</span> <span class="keyword">const</span>* signed_grp_rl, <span class="keywordtype">size_t</span> signed_grp_rl_size,</div><div class="line"> <a name="_a2"></a><a class="code" href="struct_verifier_rl.html">VerifierRl</a> <span class="keyword">const</span>* ver_rl, <span class="keywordtype">size_t</span> ver_rl_size,</div><div class="line"> <span class="keywordtype">void</span> <span class="keyword">const</span>* signed_pub_key, <span class="keywordtype">size_t</span> signed_pub_key_size,</div><div class="line"> <a class="code" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> <span class="keyword">const</span>* cacert, <a class="code" href="group___epid_types.html#ga5e450438f6f9a5eacd0cf5ce354ec890">HashAlg</a> hash_alg,</div><div class="line"> <a name="_a3"></a><a class="code" href="struct_verifier_precomp.html">VerifierPrecomp</a>* precomp, <span class="keywordtype">bool</span> is_precomp_init) {</div><div class="line"> <a class="code" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> result = <a name="a4"></a><a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e">kEpidErr</a>;</div><div class="line"> <a name="_a5"></a><a class="code" href="struct_verifier_ctx.html">VerifierCtx</a>* ctx = NULL;</div><div class="line"></div><div class="line"> <a name="_a6"></a><a class="code" href="struct_priv_rl.html">PrivRl</a>* priv_rl = NULL;</div><div class="line"> <span class="keywordtype">size_t</span> priv_rl_size = 0;</div><div class="line"> <a name="_a7"></a><a class="code" href="struct_sig_rl.html">SigRl</a>* sig_rl = NULL;</div><div class="line"> <span class="keywordtype">size_t</span> sig_rl_size = 0;</div><div class="line"> <a name="_a8"></a><a class="code" href="struct_group_rl.html">GroupRl</a>* grp_rl = NULL;</div><div class="line"> <span class="keywordtype">size_t</span> grp_rl_size = 0;</div><div class="line"></div><div class="line"> <span class="keywordflow">do</span> {</div><div class="line"> <a name="_a9"></a><a class="code" href="struct_group_pub_key.html">GroupPubKey</a> pub_key = {0};</div><div class="line"> <span class="comment">// authenticate and extract group public key</span></div><div class="line"> result = <a name="a10"></a><a class="code" href="group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb">EpidParseGroupPubKeyFile</a>(signed_pub_key, signed_pub_key_size,</div><div class="line"> cacert, &amp;pub_key);</div><div class="line"> <span class="keywordflow">if</span> (<a name="a11"></a><a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (is_precomp_init &amp;&amp; precomp) {</div><div class="line"> <span class="comment">// create verifier</span></div><div class="line"> result = <a name="a12"></a><a class="code" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">EpidVerifierCreate</a>(&amp;pub_key, precomp, &amp;ctx);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> } <span class="keywordflow">else</span> {</div><div class="line"> <span class="comment">// create verifier</span></div><div class="line"> result = <a class="code" href="group___epid_verifier_module.html#ga1d116daaee5466a1485d26ebc4e3ab70">EpidVerifierCreate</a>(&amp;pub_key, NULL, &amp;ctx);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// initialize pre-computation blob</span></div><div class="line"> result = <a name="a13"></a><a class="code" href="group___epid_verifier_module.html#ga92df4d00ea4ee59d7bfd35b23da03392">EpidVerifierWritePrecomp</a>(ctx, precomp);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// set hash algorithm used for signing</span></div><div class="line"> result = <a name="a14"></a><a class="code" href="group___epid_verifier_module.html#ga97b58b2382f24756b66a357f1e825c92">EpidVerifierSetHashAlg</a>(ctx, hash_alg);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (signed_priv_rl) {</div><div class="line"> result = AuthenticateAndAllocateRl(signed_priv_rl, signed_priv_rl_size,</div><div class="line"> cacert, <a name="a15"></a><a class="code" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba692b4141bff8225bee6000750b0da322">kPrivRlFile</a>, <span class="stringliteral">&quot;PrivRl&quot;</span>,</div><div class="line"> (<span class="keywordtype">void</span>**)&amp;priv_rl, &amp;priv_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> <span class="comment">// set private key based revocation list</span></div><div class="line"> result = <a name="a16"></a><a class="code" href="group___epid_verifier_module.html#gafab08180a43b58ce2e1d56c4b070bb0e">EpidVerifierSetPrivRl</a>(ctx, priv_rl, priv_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (signed_sig_rl) {</div><div class="line"> result = AuthenticateAndAllocateRl(signed_sig_rl, signed_sig_rl_size,</div><div class="line"> cacert, <a name="a17"></a><a class="code" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba8aead4b6aab87a1efb2d7e8c77a9b710">kSigRlFile</a>, <span class="stringliteral">&quot;SigRl&quot;</span>,</div><div class="line"> (<span class="keywordtype">void</span>**)&amp;sig_rl, &amp;sig_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> <span class="comment">// set signature based revocation list</span></div><div class="line"> result = <a name="a18"></a><a class="code" href="group___epid_verifier_module.html#ga4c7c9820409ee06f30bb8dc75fdd5dcf">EpidVerifierSetSigRl</a>(ctx, sig_rl, sig_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (signed_grp_rl) {</div><div class="line"> result = AuthenticateAndAllocateRl(signed_grp_rl, signed_grp_rl_size,</div><div class="line"> cacert, <a name="a19"></a><a class="code" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba8e5247daee3999540e6cb24d4c2b3770">kGroupRlFile</a>, <span class="stringliteral">&quot;GroupRl&quot;</span>,</div><div class="line"> (<span class="keywordtype">void</span>**)&amp;grp_rl, &amp;grp_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> <span class="comment">// set group based revocation list</span></div><div class="line"> result = <a name="a20"></a><a class="code" href="group___epid_verifier_module.html#ga1d41d6ef4dabbc30ec28452edd6baffb">EpidVerifierSetGroupRl</a>(ctx, grp_rl, grp_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (ver_rl) {</div><div class="line"> <span class="comment">// set verifier based revocation list</span></div><div class="line"> result = <a name="a21"></a><a class="code" href="group___epid_verifier_module.html#ga0909703a0a4dfe080374d0d99077465a">EpidVerifierSetVerifierRl</a>(ctx, ver_rl, ver_rl_size);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// verify signature</span></div><div class="line"> result =</div><div class="line"> <a name="a22"></a><a class="code" href="group___epid_verifier_module.html#ga39b240a17f310894e9f5946c9a731798">EpidVerify</a>(ctx, sig, sig_len, msg, msg_len, basename, basename_len);</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> } <span class="keywordflow">while</span> (0);</div><div class="line"></div><div class="line"> <span class="comment">// delete verifier</span></div><div class="line"> <a name="a23"></a><a class="code" href="group___epid_verifier_module.html#ga6707e691f4b3916f9c684d5bbd463d12">EpidVerifierDelete</a>(&amp;ctx);</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (priv_rl) free(priv_rl);</div><div class="line"> <span class="keywordflow">if</span> (sig_rl) free(sig_rl);</div><div class="line"> <span class="keywordflow">if</span> (grp_rl) free(grp_rl);</div><div class="line"></div><div class="line"> <span class="keywordflow">return</span> result;</div><div class="line">}</div><div class="line"></div><div class="line"><a class="code" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> AuthenticateAndAllocateRl(<span class="keywordtype">void</span> <span class="keyword">const</span>* buf, <span class="keywordtype">size_t</span> len,</div><div class="line"> <a class="code" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> <span class="keyword">const</span>* cert,</div><div class="line"> <a class="code" href="group___file_parser.html#ga9a33be7edc6b4c7a867fb07bd2bddecb">EpidFileType</a> file_type, <span class="keyword">const</span> <span class="keywordtype">char</span>* name,</div><div class="line"> <span class="keywordtype">void</span>** new_rl, <span class="keywordtype">size_t</span>* rl_len) {</div><div class="line"> <span class="keyword">typedef</span> <a name="a24"></a><a class="code" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> (*ParseFuncType)(<span class="keywordtype">void</span> <span class="keyword">const</span>* buf, <span class="keywordtype">size_t</span> len,</div><div class="line"> <a class="code" href="struct_epid_ca_certificate.html">EpidCaCertificate</a> <span class="keyword">const</span>* cert,</div><div class="line"> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* rl, <span class="keywordtype">size_t</span>* rl_len);</div><div class="line"> <a class="code" href="group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360">EpidStatus</a> result = <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e">kEpidErr</a>;</div><div class="line"> <span class="keywordtype">void</span>* parsed_rl = NULL;</div><div class="line"> ParseFuncType ParseFunc = NULL;</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (!buf || !cert || !new_rl || !rl_len || !name) {</div><div class="line"> <span class="keywordflow">return</span> <a name="a25"></a><a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf">kEpidBadArgErr</a>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keywordflow">switch</span> (file_type) {</div><div class="line"> <span class="keywordflow">case</span> <a class="code" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba692b4141bff8225bee6000750b0da322">kPrivRlFile</a>:</div><div class="line"> ParseFunc = (ParseFuncType)&amp;<a name="a26"></a><a class="code" href="group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e">EpidParsePrivRlFile</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> <span class="keywordflow">case</span> <a class="code" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba8aead4b6aab87a1efb2d7e8c77a9b710">kSigRlFile</a>:</div><div class="line"> ParseFunc = (ParseFuncType)&amp;<a name="a27"></a><a class="code" href="group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f">EpidParseSigRlFile</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> <span class="keywordflow">case</span> <a class="code" href="group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba8e5247daee3999540e6cb24d4c2b3770">kGroupRlFile</a>:</div><div class="line"> ParseFunc = (ParseFuncType)&amp;<a name="a28"></a><a class="code" href="group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f">EpidParseGroupRlFile</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> <span class="keywordflow">default</span>:</div><div class="line"> <span class="keywordflow">return</span> <a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf">kEpidBadArgErr</a>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keywordflow">do</span> {</div><div class="line"> <span class="keywordtype">size_t</span> parsed_len = 0;</div><div class="line"></div><div class="line"> <span class="comment">// authenticate and determine space needed for RL</span></div><div class="line"> result = ParseFunc(buf, len, cert, NULL, &amp;parsed_len);</div><div class="line"> <span class="keywordflow">if</span> (<a name="a29"></a><a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8">kEpidSigInvalid</a> == result) {</div><div class="line"> <span class="comment">// authentication failure</span></div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> parsed_rl = AllocBuffer(parsed_len);</div><div class="line"> <span class="keywordflow">if</span> (!parsed_rl) {</div><div class="line"> result = <a name="a30"></a><a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a11a4d2f1c37064eb663de08dc57bcda8">kEpidMemAllocErr</a>;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// fill the rl</span></div><div class="line"> result = ParseFunc(buf, len, cert, parsed_rl, &amp;parsed_len);</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> *rl_len = parsed_len;</div><div class="line"> *new_rl = parsed_rl;</div><div class="line"> } <span class="keywordflow">while</span> (0);</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9">kEpidNoErr</a> != result) {</div><div class="line"> <span class="keywordflow">if</span> (parsed_rl) free(parsed_rl);</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keywordflow">return</span> result;</div><div class="line">}</div></div><!-- fragment --> </div><!-- contents -->
-</div><!-- doc-content -->
-<!-- HTML footer for doxygen 1.8.10-->
-<!-- start footer part -->
-<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
- <ul>
- <li class="footer">
- &copy; 2016 Intel Corporation
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/doc/html/verifysig__walkthrough_8dox.html b/doc/html/verifysig__walkthrough_8dox.html
new file mode 100644
index 0000000..9883f8e
--- /dev/null
+++ b/doc/html/verifysig__walkthrough_8dox.html
@@ -0,0 +1,82 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Intel&reg; Enhanced Privacy ID SDK: doc/docsrc/verifysig_walkthrough.dox File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+ $(window).load(resizeHeight);
+</script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname"><a
+ onclick="storeLink('index.html')"
+ id="projectlink"
+ class="index.html"
+ href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
+&#160;<span id="projectnumber">3.0.0</span>
+</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('verifysig__walkthrough_8dox.html','');});
+</script>
+<div id="doc-content">
+<div class="header">
+ <div class="headertitle">
+<div class="title">doc/docsrc/verifysig_walkthrough.dox File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p>This file is used by Doxygen to generate documentation.
+<a href="#details">More...</a></p>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>This file is used by Doxygen to generate documentation. </p>
+</div></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="verifysig__walkthrough_8dox.html">verifysig_walkthrough.dox</a></li>
+ <li class="footer">
+ &copy; 2016 Intel Corporation
+ </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/epid/common-testhelper/1.1/epid_params-testhelper.cc b/epid/common-testhelper/1.1/epid_params-testhelper.cc
new file mode 100644
index 0000000..f1be7e9
--- /dev/null
+++ b/epid/common-testhelper/1.1/epid_params-testhelper.cc
@@ -0,0 +1,216 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Intel(R) EPID 1.1 parameters C++ wrapper implementation.
+ */
+
+#include <cstring>
+
+#include "epid/common-testhelper/1.1/epid_params-testhelper.h"
+#include "epid/common-testhelper/errors-testhelper.h"
+#include "epid/common-testhelper/ffelement_wrapper-testhelper.h"
+#include "epid/common-testhelper/finite_field_wrapper-testhelper.h"
+#include "epid/common-testhelper/bignum_wrapper-testhelper.h"
+
+extern "C" {
+#include "epid/common/math/src/ecgroup-internal.h"
+#include "epid/common/math/src/finitefield-internal.h"
+#include "epid/common/math/src/pairing-internal.h"
+}
+
+#ifndef COUNT_OF
+#define COUNT_OF(a) (sizeof(a) / sizeof((a)[0]))
+#endif // COUNT_OF
+
+Epid11ParamsObj::Epid11ParamsObj() {
+ // construct Fq finite field
+ FiniteFieldObj fq(this->q_str_);
+
+ // Create G1
+ // G1 is an elliptic curve group E(Fq).It can be initialized as follows:
+ // Set G1 = E(Fq).init(p, q, h, a, b, g1.x, g1.y)
+ G1 = EcGroupObj(&fq, FfElementObj(&fq, a_str_), FfElementObj(&fq, b_str_),
+ FfElementObj(&fq, g1_str_.x), FfElementObj(&fq, g1_str_.y),
+ BigNumObj(p_str_), BigNumObj(h_str_));
+
+ // construct Fq1 finite field
+ FiniteFieldObj fq1(this->q1_str_);
+
+ // Create G3
+ // G3 is an elliptic curve group E(Fq) as well (but with different
+ // parameters).
+ // It can be initialized as follows:
+ // Set G3 = Fq.init(p', q', h', a', b', g3.x, g3.y)
+ G3 =
+ EcGroupObj(&fq1, FfElementObj(&fq1, a1_str_), FfElementObj(&fq1, b1_str_),
+ FfElementObj(&fq1, g3_str_.x), FfElementObj(&fq1, g3_str_.y),
+ BigNumObj(p1_str_), BigNumObj(h1_str_));
+
+ // construct Fqd finite field
+ FiniteFieldObj fqd(fq, this->coeffs_str_, COUNT_OF(this->coeffs_str_));
+
+ // Fqk ground element is {-qnr, 0, 0}
+ FfElementObj neg_qnr(&fq);
+ THROW_ON_EPIDERR(FfNeg(fq, FfElementObj(&fq, qnr_str), neg_qnr));
+ Fq3ElemStr ground_element_str = {0};
+ THROW_ON_EPIDERR(WriteFfElement(fq, neg_qnr, &ground_element_str.a[0],
+ sizeof(ground_element_str.a[0])));
+ FfElementObj ground_element(&fqd, ground_element_str);
+
+ // construct GT:=Fqk finite field
+ GT = FiniteFieldObj(fqd, ground_element, 2);
+
+ // G2 is an elliptic curve group E(Fqd).It can be initialized as follows:
+
+ FfElementObj qnr(&fq, qnr_str);
+
+ // twista = (a * qnr * qnr) mod q
+ FfElementObj twista_fq(&fq, a_str_);
+ THROW_ON_EPIDERR(FfMul(fq, twista_fq, qnr, twista_fq));
+ THROW_ON_EPIDERR(FfMul(fq, twista_fq, qnr, twista_fq));
+ Fq3ElemStr twista_str = {0};
+ THROW_ON_EPIDERR(
+ WriteFfElement(fq, twista_fq, &twista_str.a[0], sizeof(twista_str.a[0])));
+
+ // twistb = (b * qnr * qnr * qnr) mod q
+ FfElementObj twistb_fq(&fq, b_str_);
+ THROW_ON_EPIDERR(FfMul(fq, twistb_fq, qnr, twistb_fq));
+ THROW_ON_EPIDERR(FfMul(fq, twistb_fq, qnr, twistb_fq));
+ THROW_ON_EPIDERR(FfMul(fq, twistb_fq, qnr, twistb_fq));
+ Fq3ElemStr twistb_str = {0};
+ THROW_ON_EPIDERR(
+ WriteFfElement(fq, twistb_fq, &twistb_str.a[0], sizeof(twistb_str.a[0])));
+
+ // cofactor is 1 for G2
+ const BigNumStr h2_str_ = {
+ {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}}};
+
+ // Create G2
+ // Set G2 = E(Fqd).init(orderG2, param(Fqd), twista, twistb, g2.x, g2.y).
+ G2 = EcGroupObj(&fqd, FfElementObj(&fqd, twista_str),
+ FfElementObj(&fqd, twistb_str), FfElementObj(&fqd, g2x_str_),
+ FfElementObj(&fqd, g2y_str_), BigNumObj(orderG2_str),
+ BigNumObj(h2_str_));
+}
+
+const BigNumStr Epid11ParamsObj::p_str_ = {
+ {{0x00, 0x00, 0x89, 0x57, 0x3F, 0x17, 0x47, 0x30, 0x8C, 0x43, 0xD5, 0xEE,
+ 0x41, 0x97, 0x96, 0x19, 0x72, 0xBB, 0x86, 0x88, 0xED, 0x4B, 0xEF, 0x04,
+ 0xAB, 0xAE, 0xC3, 0x8E, 0xEC, 0x51, 0xC3, 0xD3}}};
+
+const BigNumStr Epid11ParamsObj::q_str_ = {
+ {{0x09, 0xF9, 0x24, 0xE5, 0xD9, 0xBC, 0x67, 0x7F, 0x81, 0x0D, 0xF0, 0x25,
+ 0x58, 0xF7, 0x53, 0x13, 0xA9, 0x8A, 0xA6, 0x10, 0x47, 0x65, 0x5D, 0x73,
+ 0x9E, 0xF1, 0x94, 0xEB, 0x05, 0xB1, 0xA7, 0x11}}};
+
+const std::vector<uint8_t> Epid11ParamsObj::h_str_ = {0x00, 0x00, 0x12, 0x97};
+const FqElemStr Epid11ParamsObj::a_str_ = {
+ {{0x05, 0x53, 0xD7, 0xC8, 0x81, 0xF7, 0x78, 0xC2, 0x2C, 0x37, 0xB6, 0xC0,
+ 0x16, 0x3E, 0x68, 0x24, 0x3A, 0x84, 0x78, 0x1C, 0x0A, 0xDF, 0x9B, 0xB3,
+ 0xED, 0x21, 0xC4, 0x46, 0xE5, 0xA7, 0xA3, 0x92}}};
+const FqElemStr Epid11ParamsObj::b_str_ = {
+ {{0x00, 0x3A, 0x2E, 0x39, 0x0E, 0x10, 0xD8, 0xAC, 0x47, 0xCB, 0x29, 0xC8,
+ 0xF1, 0x2C, 0x7F, 0x11, 0x99, 0x2A, 0x18, 0xB7, 0xEF, 0x73, 0x48, 0xA6,
+ 0xBE, 0x70, 0xA6, 0x8B, 0x97, 0x34, 0x8A, 0xB1}}};
+
+const BigNumStr Epid11ParamsObj::coeffs_str_[3] = {
+ {{{0x02, 0x16, 0x7A, 0x61, 0x53, 0xDD, 0xF6, 0xE2, 0x89, 0x15, 0xA0, 0x94,
+ 0xF1, 0xB5, 0xDC, 0x65, 0x21, 0x15, 0x62, 0xE1, 0x7D, 0xC5, 0x43, 0x89,
+ 0xEE, 0xB4, 0xEF, 0xC8, 0xA0, 0x8E, 0x34, 0x0F}}},
+
+ {{{0x04, 0x82, 0x27, 0xE1, 0xEB, 0x98, 0x64, 0xC2, 0x8D, 0x8F, 0xDD, 0x0E,
+ 0x82, 0x40, 0xAE, 0xD4, 0x31, 0x63, 0xD6, 0x46, 0x32, 0x16, 0x85, 0x7A,
+ 0xB7, 0x18, 0x68, 0xB8, 0x17, 0x02, 0x81, 0xA6}}},
+
+ {{{0x06, 0x20, 0x76, 0xE8, 0x54, 0x54, 0x53, 0xB4, 0xA9, 0xD8, 0x44, 0x4B,
+ 0xAA, 0xFB, 0x1C, 0xFD, 0xAE, 0x15, 0xCA, 0x29, 0x79, 0xA6, 0x24, 0xA4,
+ 0x0A, 0xF6, 0x1E, 0xAC, 0xED, 0xFB, 0x10, 0x41}}}};
+
+const FqElemStr Epid11ParamsObj::qnr_str = {
+ {0x08, 0x66, 0xA7, 0x67, 0x36, 0x6E, 0x62, 0x71, 0xB7, 0xA6, 0x52, 0x94,
+ 0x8F, 0xFB, 0x25, 0x9E, 0xE6, 0x4F, 0x25, 0xE5, 0x26, 0x9A, 0x2B, 0x6E,
+ 0x7E, 0xF8, 0xA6, 0x39, 0xAE, 0x46, 0xAA, 0x24}};
+
+const std::vector<uint8_t> Epid11ParamsObj::orderG2_str = {
+ 0x00, 0x03, 0xDF, 0xFC, 0xBE, 0x2F, 0x5C, 0x2E, 0x45, 0x49, 0x7A, 0x2A,
+ 0x91, 0xBA, 0xD1, 0x3E, 0x01, 0xEC, 0x5F, 0xC2, 0x15, 0x14, 0x10, 0xB3,
+ 0x28, 0x5E, 0x56, 0xCC, 0x26, 0x51, 0x24, 0x93, 0x0E, 0x6C, 0x99, 0x96,
+ 0x38, 0xE0, 0x7D, 0x68, 0x8C, 0xB7, 0x97, 0x23, 0xF4, 0xAC, 0x4D, 0xBC,
+ 0x5E, 0x01, 0x15, 0xFF, 0x45, 0x60, 0x08, 0x13, 0xCD, 0x59, 0xD7, 0x73,
+ 0xB0, 0x0C, 0x20, 0x5E, 0xAB, 0xAA, 0x24, 0x31, 0xE2, 0x2A, 0xA2, 0x53,
+ 0x8A, 0xF7, 0x86, 0xD5, 0x19, 0x78, 0xC5, 0x55, 0x9C, 0x08, 0xB7, 0xE2,
+ 0xF4, 0xD0, 0x37, 0x74, 0x93, 0x56, 0x62, 0x7B, 0x95, 0xCC, 0x2C, 0xB0};
+
+const BigNumStr Epid11ParamsObj::p1_str_ = {
+ {{0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xBC, 0xE6, 0xFA, 0xAD, 0xA7, 0x17, 0x9E, 0x84,
+ 0xF3, 0xB9, 0xCA, 0xC2, 0xFC, 0x63, 0x25, 0x51}}};
+
+const BigNumStr Epid11ParamsObj::q1_str_ = {
+ {{0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}}};
+
+const std::vector<uint8_t> Epid11ParamsObj::h1_str_ = {0x00, 0x00, 0x00, 0x01};
+
+const FqElemStr Epid11ParamsObj::a1_str_ = {
+ {{0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC}}};
+const FqElemStr Epid11ParamsObj::b1_str_ = {
+ {{0x5A, 0xC6, 0x35, 0xD8, 0xAA, 0x3A, 0x93, 0xE7, 0xB3, 0xEB, 0xBD, 0x55,
+ 0x76, 0x98, 0x86, 0xBC, 0x65, 0x1D, 0x06, 0xB0, 0xCC, 0x53, 0xB0, 0xF6,
+ 0x3B, 0xCE, 0x3C, 0x3E, 0x27, 0xD2, 0x60, 0x4B}}};
+
+const Epid11G1ElemStr Epid11ParamsObj::g1_str_ = {
+ {{{0x07, 0x78, 0x3B, 0x0D, 0xFE, 0x4A, 0xA3, 0x19, 0x49, 0xB0, 0xCE, 0xAF,
+ 0x3F, 0x74, 0x0F, 0x32, 0x16, 0x0C, 0x8B, 0x46, 0x94, 0x5B, 0xA5, 0xB0,
+ 0xE4, 0x8A, 0xDA, 0xD8, 0x88, 0x32, 0x90, 0x53}}},
+ {{{0x08, 0xF7, 0xA2, 0xAA, 0xBA, 0x62, 0xB3, 0xFE, 0x29, 0x80, 0xC9, 0x5B,
+ 0x63, 0x53, 0xC8, 0x24, 0x3C, 0x7C, 0x1F, 0x4C, 0xDA, 0xCD, 0xE5, 0x5F,
+ 0xA2, 0x36, 0x93, 0x04, 0x3C, 0x3A, 0xBC, 0x2E}}}};
+const Fq3ElemStr Epid11ParamsObj::g2x_str_ = {
+ {{{{0x02, 0x10, 0x9A, 0xF4, 0x06, 0x32, 0x30, 0x89, 0xCB, 0x95, 0xE9, 0x55,
+ 0x0E, 0x9D, 0xAF, 0x0E, 0x98, 0xCD, 0xCA, 0xDC, 0xB1, 0xFF, 0xFC, 0xD1,
+ 0x45, 0x66, 0xBB, 0x86, 0x46, 0x1E, 0x8C, 0x30}}},
+ {{{0x04, 0x78, 0x53, 0xE1, 0x3F, 0x96, 0xC5, 0xE4, 0x15, 0x23, 0x7B, 0x1F,
+ 0x3F, 0x2C, 0xD3, 0x95, 0x40, 0xBC, 0x7A, 0x31, 0x1F, 0x14, 0x38, 0x9E,
+ 0x1A, 0xA5, 0xD6, 0x63, 0x10, 0x91, 0xE4, 0xD3}}},
+ {{{0x00, 0xB4, 0x02, 0xBC, 0x47, 0xFA, 0xA6, 0x29, 0x82, 0x0B, 0xB1, 0xD5,
+ 0xFF, 0xF2, 0xE6, 0xB0, 0xC6, 0xAE, 0xE8, 0x7B, 0x91, 0xD9, 0xEE, 0x66,
+ 0x07, 0x1F, 0xFD, 0xA2, 0xE7, 0x02, 0x66, 0xDD}}}}};
+
+const Fq3ElemStr Epid11ParamsObj::g2y_str_ = {
+ {{{{0x05, 0x2E, 0xF8, 0xC6, 0xC1, 0x6A, 0xEF, 0x3C, 0xC1, 0x95, 0xF6, 0x26,
+ 0xCE, 0x5E, 0x55, 0xD1, 0x64, 0x13, 0x28, 0xB1, 0x18, 0x57, 0xD8, 0x1B,
+ 0x84, 0xFA, 0xEC, 0x7E, 0x5D, 0x99, 0x06, 0x49}}},
+ {{{0x05, 0x73, 0x35, 0xA9, 0xA7, 0xF2, 0xA1, 0x92, 0x5F, 0x3E, 0x7C, 0xDF,
+ 0xAC, 0xFE, 0x0F, 0xF5, 0x08, 0xD0, 0x3C, 0xAE, 0xCD, 0x58, 0x00, 0x5F,
+ 0xD0, 0x84, 0x7E, 0xEA, 0x63, 0x57, 0xFE, 0xC6}}},
+ {{{0x01, 0x56, 0xDA, 0xF3, 0x72, 0x61, 0xDA, 0xC6, 0x93, 0xB0, 0xAC, 0xEF,
+ 0xAA, 0xD4, 0x51, 0x6D, 0xCA, 0x71, 0x1E, 0x06, 0x73, 0xEA, 0x83, 0xB2,
+ 0xB1, 0x99, 0x4A, 0x4D, 0x4A, 0x0D, 0x35, 0x07}}}}};
+const Epid11G3ElemStr Epid11ParamsObj::g3_str_ = {
+ {{{0x6B, 0x17, 0xD1, 0xF2, 0xE1, 0x2C, 0x42, 0x47, 0xF8, 0xBC, 0xE6, 0xE5,
+ 0x63, 0xA4, 0x40, 0xF2, 0x77, 0x03, 0x7D, 0x81, 0x2D, 0xEB, 0x33, 0xA0,
+ 0xF4, 0xA1, 0x39, 0x45, 0xD8, 0x98, 0xC2, 0x96}}},
+ {{{0x4F, 0xE3, 0x42, 0xE2, 0xFE, 0x1A, 0x7F, 0x9B, 0x8E, 0xE7, 0xEB, 0x4A,
+ 0x7C, 0x0F, 0x9E, 0x16, 0x2B, 0xCE, 0x33, 0x57, 0x6B, 0x31, 0x5E, 0xCE,
+ 0xCB, 0xB6, 0x40, 0x68, 0x37, 0xBF, 0x51, 0xF5}}}};
diff --git a/epid/common-testhelper/1.1/epid_params-testhelper.h b/epid/common-testhelper/1.1/epid_params-testhelper.h
new file mode 100644
index 0000000..82b80d3
--- /dev/null
+++ b/epid/common-testhelper/1.1/epid_params-testhelper.h
@@ -0,0 +1,78 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+
+/*!
+* \file
+* \brief Intel(R) EPID 1.1 parameters C++ wrapper interface.
+*/
+#ifndef EPID_COMMON_TESTHELPER_1_1_EPID_PARAMS_TESTHELPER_H_
+#define EPID_COMMON_TESTHELPER_1_1_EPID_PARAMS_TESTHELPER_H_
+
+#include <memory>
+#include <vector>
+
+extern "C" {
+#include "epid/common/math/bignum.h"
+#include "epid/common/math/finitefield.h"
+#include "epid/common/math/ecgroup.h"
+#include "epid/common/1.1/types.h"
+}
+
+#include "epid/common-testhelper/ffelement_wrapper-testhelper.h"
+#include "epid/common-testhelper/finite_field_wrapper-testhelper.h"
+#include "epid/common-testhelper/ecgroup_wrapper-testhelper.h"
+#include "epid/common-testhelper/ecpoint_wrapper-testhelper.h"
+
+class Epid11ParamsObj {
+ public:
+ Epid11ParamsObj();
+
+ // This class instances are not meant to be copied.
+ // Explicitly delete copy constructor and assignment operator.
+ Epid11ParamsObj(const Epid11ParamsObj&) = delete;
+ Epid11ParamsObj& operator=(const Epid11ParamsObj&) = delete;
+
+ virtual ~Epid11ParamsObj() {}
+
+ FiniteFieldObj GT;
+ EcGroupObj G1;
+ EcGroupObj G2;
+ EcGroupObj G3;
+
+ private:
+ static const BigNumStr p_str_;
+ static const BigNumStr q_str_;
+ static const std::vector<uint8_t> h_str_;
+ static const FqElemStr a_str_;
+ static const FqElemStr b_str_;
+ static const BigNumStr coeffs_str_[3];
+ static const FqElemStr qnr_str;
+
+ static const std::vector<uint8_t> orderG2_str;
+
+ static const BigNumStr p1_str_;
+ static const BigNumStr q1_str_;
+ static const std::vector<uint8_t> h1_str_;
+ static const FqElemStr a1_str_;
+ static const FqElemStr b1_str_;
+
+ static const Epid11G1ElemStr g1_str_;
+ static const Fq3ElemStr g2x_str_;
+ static const Fq3ElemStr g2y_str_;
+ static const Epid11G3ElemStr g3_str_;
+};
+
+#endif // EPID_COMMON_TESTHELPER_1_1_EPID_PARAMS_TESTHELPER_H_
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/epid_grpcrt.inc b/epid/common-testhelper/1.1/testdata/grp_x/epid_grpcrt.inc
new file mode 100644
index 0000000..b3ba691
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/epid_grpcrt.inc
@@ -0,0 +1,52 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 group public key
+ * Group : grpX
+ */
+//unsigned char epid_grpcrt_dat[] = {
+ 0x00, 0x00, 0x00, 0x7b, 0x08, 0x4a, 0x9d, 0x2e, 0xf9, 0x4f, 0x78, 0x02,
+ 0xd7, 0x89, 0x75, 0xb4, 0xe7, 0x25, 0x26, 0x9f, 0x00, 0x57, 0xad, 0x33,
+ 0x30, 0xea, 0xa9, 0x6c, 0x00, 0x9e, 0x8b, 0xc8, 0x13, 0x23, 0xcb, 0x06,
+ 0x04, 0xbe, 0x42, 0x74, 0x11, 0x07, 0xb1, 0x06, 0xd7, 0xef, 0x5f, 0x66,
+ 0x87, 0xd9, 0xfa, 0xdd, 0x53, 0xae, 0xd7, 0xf4, 0x54, 0xf8, 0xd0, 0x21,
+ 0x75, 0xe0, 0x07, 0x44, 0xc9, 0xc3, 0x4e, 0xf7, 0x06, 0xd8, 0xa9, 0x90,
+ 0x02, 0x8f, 0xca, 0xa5, 0x73, 0x36, 0x24, 0x03, 0xc9, 0xa8, 0x7e, 0x9d,
+ 0x64, 0x12, 0xac, 0xa7, 0xbd, 0x17, 0x7f, 0x7c, 0x96, 0x8d, 0x2e, 0x13,
+ 0xd9, 0xb2, 0x69, 0x47, 0x09, 0xdb, 0xe3, 0xbf, 0xbc, 0xa1, 0x34, 0x0f,
+ 0xc6, 0xe2, 0x00, 0x3d, 0x98, 0xa3, 0x7d, 0xab, 0xd4, 0x0e, 0xec, 0xde,
+ 0x4f, 0x97, 0xa9, 0xbb, 0xdd, 0x60, 0x94, 0x24, 0x7b, 0xb3, 0xf5, 0x94,
+ 0x02, 0x43, 0x78, 0x9f, 0x54, 0xc1, 0x21, 0x3a, 0x2b, 0x4d, 0x12, 0x65,
+ 0x2f, 0x51, 0x94, 0xc6, 0x34, 0x24, 0xd9, 0x7b, 0x06, 0x3a, 0xc4, 0xf5,
+ 0x56, 0xeb, 0x32, 0xe3, 0xee, 0x7b, 0xad, 0x6b, 0x04, 0x90, 0x86, 0x31,
+ 0x18, 0x2a, 0xa4, 0xcf, 0xa3, 0x90, 0xa5, 0x80, 0x7b, 0xae, 0x3b, 0xb1,
+ 0x77, 0x03, 0xe7, 0x7e, 0xf2, 0xfc, 0x6d, 0x3a, 0xab, 0x8f, 0xbf, 0x95,
+ 0x40, 0xed, 0x08, 0x03, 0x01, 0x05, 0x86, 0xf5, 0x42, 0xea, 0x4d, 0xf7,
+ 0x4f, 0xef, 0x46, 0xdf, 0x8f, 0xe8, 0x2d, 0xbb, 0x5d, 0x0d, 0x2f, 0x4f,
+ 0xf4, 0xd8, 0x31, 0xc6, 0x5a, 0x97, 0x98, 0x44, 0xcf, 0x42, 0x5a, 0xf3,
+ 0x03, 0x5f, 0xb6, 0x38, 0x45, 0x5a, 0x15, 0x1e, 0xb9, 0x54, 0xfa, 0x2c,
+ 0x3f, 0x68, 0x7b, 0x4e, 0x85, 0x35, 0xf3, 0x5b, 0xe5, 0xdc, 0x96, 0x2b,
+ 0x18, 0x84, 0x5e, 0x1e, 0x53, 0xdc, 0x22, 0x23, 0x06, 0x08, 0x91, 0x5a,
+ 0x2d, 0x27, 0xe2, 0x12, 0x69, 0xfa, 0xab, 0x19, 0x7c, 0x47, 0x6b, 0xec,
+ 0xde, 0xc6, 0x25, 0xd4, 0x43, 0xb4, 0x65, 0x23, 0x61, 0x0f, 0x1f, 0x2d,
+ 0xfd, 0xb1, 0x18, 0xb0, 0x04, 0x8e, 0x1a, 0xc5, 0x95, 0x9a, 0x0e, 0x37,
+ 0x7c, 0x5e, 0x95, 0x38, 0xc2, 0xcf, 0xfa, 0x1f, 0xe3, 0x3a, 0x2b, 0x85,
+ 0xa5, 0xfd, 0x6b, 0xc4, 0x1d, 0xfb, 0x47, 0x27, 0xaf, 0xc1, 0x94, 0xcd
+// };
+//unsigned int epid_grpcrt_dat_len = 392;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0.inc b/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0.inc
new file mode 100644
index 0000000..75b62e0
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0.inc
@@ -0,0 +1,79 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 Signature
+ * Group : grpX
+ * Signer : member0
+ * HashAlg : Sha256
+ * Message : "test message"
+ * Basename: "basename1"
+ * SigRl : group x sigrl
+ */
+ //unsigned char sig_sha256_bsn0_msg0_dat[] = {
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53,
+ 0xba, 0x1e, 0x1b, 0x0e, 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09,
+ 0x4f, 0xcd, 0xb6, 0xe6, 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72,
+ 0xfa, 0x85, 0x0f, 0x5c, 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64,
+ 0xda, 0xa9, 0x8e, 0xf5, 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb,
+ 0x0a, 0x9d, 0x02, 0xc0, 0x33, 0xec, 0x2a, 0x70, 0x80, 0x85, 0x35, 0x04,
+ 0x7b, 0xfc, 0x0a, 0x6c, 0xb4, 0x10, 0x2d, 0x4a, 0xbe, 0x35, 0x78, 0x41,
+ 0x3a, 0xc6, 0x01, 0x3a, 0x59, 0x21, 0x17, 0x04, 0x60, 0x6a, 0x51, 0x6c,
+ 0x84, 0xde, 0xc3, 0x3b, 0x1e, 0x6a, 0xaf, 0x82, 0x5d, 0x81, 0xe2, 0x44,
+ 0x25, 0x98, 0x89, 0xdb, 0x82, 0x17, 0xe6, 0xb8, 0x9f, 0xfd, 0x03, 0x86,
+ 0x63, 0x8c, 0xe1, 0x93, 0x77, 0x61, 0x3c, 0xc2, 0x75, 0x14, 0xa1, 0xc2,
+ 0x05, 0x39, 0x5a, 0xef, 0x26, 0xf8, 0x6c, 0x41, 0x5d, 0x7f, 0xb2, 0x63,
+ 0x92, 0x5c, 0xf4, 0x82, 0xa3, 0x93, 0xe3, 0x02, 0x14, 0x55, 0x47, 0x99,
+ 0xa5, 0xf9, 0xf7, 0xad, 0x1f, 0x66, 0x23, 0x50, 0x08, 0xab, 0x10, 0x95,
+ 0x9a, 0x0c, 0x0f, 0x62, 0xca, 0xcb, 0x63, 0x6f, 0xc6, 0xb3, 0xb1, 0x06,
+ 0x52, 0x33, 0x56, 0xad, 0x8e, 0xac, 0xfe, 0xe4, 0x56, 0x88, 0xed, 0x8e,
+ 0xdd, 0xa4, 0x20, 0x7f, 0x03, 0xb7, 0x4c, 0xda, 0xb1, 0x70, 0x9d, 0x8c,
+ 0x5b, 0x34, 0x08, 0x37, 0x84, 0xbc, 0xd0, 0x54, 0xdf, 0x52, 0x40, 0x41,
+ 0xfe, 0x58, 0x48, 0x86, 0x43, 0x51, 0xa9, 0x7d, 0x53, 0x21, 0x01, 0xe6,
+ 0x06, 0x2b, 0xd0, 0xd3, 0x8a, 0xe0, 0xb6, 0xc3, 0xad, 0xb3, 0x6c, 0x12,
+ 0x75, 0x50, 0x19, 0xd2, 0x69, 0xc7, 0x41, 0x98, 0xf3, 0xfb, 0x5c, 0x58,
+ 0xe0, 0x8c, 0x0b, 0x22, 0x6f, 0x05, 0xa1, 0x0e, 0x45, 0xce, 0x2e, 0x83,
+ 0xd8, 0xd9, 0xeb, 0xc9, 0x9a, 0x81, 0x38, 0x1d, 0x33, 0x9a, 0x16, 0x9f,
+ 0x4c, 0x06, 0xf0, 0xb2, 0xc1, 0x1d, 0xb8, 0x54, 0xe4, 0x0f, 0x61, 0x36,
+ 0xd8, 0xbc, 0xbf, 0x0c, 0x60, 0x71, 0xde, 0x72, 0x10, 0x0e, 0x0a, 0x30,
+ 0x04, 0x60, 0x00, 0x00, 0x78, 0xb5, 0xb6, 0xc2, 0xdd, 0x20, 0x6a, 0xb5,
+ 0xdf, 0x61, 0x64, 0xd0, 0xa9, 0x02, 0x88, 0x4c, 0xdd, 0x2b, 0x81, 0x79,
+ 0x2e, 0x50, 0xb6, 0x1c, 0xaa, 0xf0, 0x74, 0x31, 0x31, 0x34, 0x00, 0x00,
+ 0x0a, 0xd1, 0xbf, 0x34, 0xa2, 0x84, 0xc8, 0x9b, 0xdf, 0xdc, 0xb5, 0x95,
+ 0x4a, 0xad, 0x76, 0xc2, 0xc6, 0xb0, 0xa3, 0x77, 0x25, 0x76, 0xb3, 0x2e,
+ 0x34, 0xfb, 0x79, 0x16, 0x0a, 0x7c, 0x00, 0xaf, 0x5b, 0x22, 0x71, 0x98,
+ 0xb6, 0xeb, 0x67, 0x3d, 0x94, 0x4a, 0xb6, 0x5e, 0x99, 0x81, 0xc5, 0x96,
+ 0x91, 0x55, 0xba, 0x2f, 0x16, 0x01, 0x4e, 0xe1, 0x25, 0xad, 0xca, 0x94,
+ 0x88, 0x60, 0x3b, 0xa2, 0x56, 0x0a, 0x94, 0x0b, 0x2c, 0x3e, 0xd0, 0x8f,
+ 0x15, 0x07, 0x3d, 0xd5, 0xbe, 0x72, 0x3e, 0x2d, 0x06, 0x74, 0xff, 0x06,
+ 0xed, 0x47, 0x28, 0x08, 0x0c, 0xa0, 0x6f, 0xdb, 0x75, 0x55, 0x32, 0xdc,
+ 0x97, 0x47, 0x60, 0x4e, 0x6f, 0xb4, 0x29, 0x89, 0x0c, 0x00, 0x00, 0x37,
+ 0x1e, 0xcd, 0x0f, 0x66, 0x09, 0x7d, 0x33, 0x9a, 0xdc, 0x47, 0x28, 0xf7,
+ 0x91, 0xf3, 0xc2, 0xbc, 0x3a, 0xa9, 0x05, 0x62, 0xfc, 0xdd, 0x8c, 0x65,
+ 0xc2, 0xa8, 0x14, 0x55, 0x52, 0x00, 0x00, 0x11, 0xed, 0x83, 0xfc, 0x60,
+ 0x97, 0x7e, 0x5e, 0x15, 0xe0, 0x43, 0xdb, 0x01, 0x0b, 0xc7, 0x93, 0xa0,
+ 0xef, 0x08, 0xf6, 0x4f, 0x91, 0xda, 0x83, 0x14, 0x34, 0x0d, 0x4f, 0x25,
+ 0xaf, 0x00, 0x00, 0x80, 0x3d, 0xc0, 0x9e, 0x85, 0xc8, 0x48, 0x35, 0xf8,
+ 0xd2, 0x7b, 0x6b, 0xcf, 0xfc, 0xe9, 0xe4, 0x59, 0x6d, 0x06, 0x4e, 0x12,
+ 0x56, 0x00, 0xbc, 0xb4, 0x6e, 0x20, 0x3a, 0xf4, 0x34, 0x00, 0x00, 0x2e,
+ 0x06, 0xcd, 0x93, 0x4f, 0x39, 0x62, 0x0b, 0xb1, 0x12, 0xf4, 0x49, 0x22,
+ 0xe5, 0x55, 0x29, 0x08, 0xd0, 0x51, 0x02, 0x14, 0xc3, 0xc5, 0x6d, 0xa3,
+ 0xb0, 0xd9, 0x67, 0x61, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00
+//};
+//unsigned int sig_sha256_bsn0_msg0_dat_len = 577;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0_single_entry.inc b/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0_single_entry.inc
new file mode 100644
index 0000000..f00bee5
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0_single_entry.inc
@@ -0,0 +1,97 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 Signature
+ * Group : grpX
+ * Signer : member0
+ * HashAlg : Sha256
+ * Message : "test message"
+ * Basename: "basename1"
+ * SigRl : group x sigrl
+ */
+//unsigned char sig_sha256_bsn0_msg0_dat[] = {
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x80, 0x85, 0x35, 0x04, 0x7b, 0xfc, 0x0a, 0x6c,
+ 0xb4, 0x10, 0x2d, 0x4a, 0xbe, 0x35, 0x78, 0x41, 0x3a, 0xc6, 0x01, 0x3a,
+ 0x59, 0x21, 0x17, 0x04, 0x60, 0x6a, 0x51, 0x6c, 0x84, 0xde, 0xc3, 0x3b,
+ 0x1e, 0x6a, 0xaf, 0x82, 0x5d, 0x81, 0xe2, 0x44, 0x25, 0x98, 0x89, 0xdb,
+ 0x82, 0x17, 0xe6, 0xb8, 0x9f, 0xfd, 0x03, 0x86, 0x63, 0x8c, 0xe1, 0x93,
+ 0x77, 0x61, 0x3c, 0xc2, 0x75, 0x14, 0xa1, 0xc2, 0x05, 0x39, 0x5a, 0xef,
+ 0x26, 0xf8, 0x6c, 0x41, 0x5d, 0x7f, 0xb2, 0x63, 0x92, 0x5c, 0xf4, 0x82,
+ 0xa3, 0x93, 0xe3, 0x02, 0x14, 0x55, 0x47, 0x99, 0xa5, 0xf9, 0xf7, 0xad,
+ 0x1f, 0x66, 0x23, 0x50, 0x08, 0xab, 0x10, 0x95, 0x9a, 0x0c, 0x0f, 0x62,
+ 0xca, 0xcb, 0x63, 0x6f, 0xc6, 0xb3, 0xb1, 0x06, 0x52, 0x33, 0x56, 0xad,
+ 0x8e, 0xac, 0xfe, 0xe4, 0x56, 0x88, 0xed, 0x8e, 0xdd, 0xa4, 0x20, 0x7f,
+ 0x03, 0xb7, 0x4c, 0xda, 0xb1, 0x70, 0x9d, 0x8c, 0x5b, 0x34, 0x08, 0x37,
+ 0x84, 0xbc, 0xd0, 0x54, 0xdf, 0x52, 0x40, 0x41, 0xfe, 0x58, 0x48, 0x86,
+ 0x43, 0x51, 0xa9, 0x7d, 0x53, 0x21, 0x01, 0xe6, 0x06, 0x2b, 0xd0, 0xd3,
+ 0x8a, 0xe0, 0xb6, 0xc3, 0xad, 0xb3, 0x6c, 0x12, 0x75, 0x50, 0x19, 0xd2,
+ 0x69, 0xc7, 0x41, 0x98, 0xf3, 0xfb, 0x5c, 0x58, 0xe0, 0x8c, 0x0b, 0x22,
+ 0x6f, 0x05, 0xa1, 0x0e, 0x45, 0xce, 0x2e, 0x83, 0xd8, 0xd9, 0xeb, 0xc9,
+ 0x9a, 0x81, 0x38, 0x1d, 0x33, 0x9a, 0x16, 0x9f, 0x4c, 0x06, 0xf0, 0xb2,
+ 0xc1, 0x1d, 0xb8, 0x54, 0xe4, 0x0f, 0x61, 0x36, 0xd8, 0xbc, 0xbf, 0x0c,
+ 0x60, 0x71, 0xde, 0x72, 0x10, 0x0e, 0x0a, 0x30, 0x04, 0x60, 0x00, 0x00,
+ 0x78, 0xb5, 0xb6, 0xc2, 0xdd, 0x20, 0x6a, 0xb5, 0xdf, 0x61, 0x64, 0xd0,
+ 0xa9, 0x02, 0x88, 0x4c, 0xdd, 0x2b, 0x81, 0x79, 0x2e, 0x50, 0xb6, 0x1c,
+ 0xaa, 0xf0, 0x74, 0x31, 0x31, 0x34, 0x00, 0x00, 0x0a, 0xd1, 0xbf, 0x34,
+ 0xa2, 0x84, 0xc8, 0x9b, 0xdf, 0xdc, 0xb5, 0x95, 0x4a, 0xad, 0x76, 0xc2,
+ 0xc6, 0xb0, 0xa3, 0x77, 0x25, 0x76, 0xb3, 0x2e, 0x34, 0xfb, 0x79, 0x16,
+ 0x0a, 0x7c, 0x00, 0xaf, 0x5b, 0x22, 0x71, 0x98, 0xb6, 0xeb, 0x67, 0x3d,
+ 0x94, 0x4a, 0xb6, 0x5e, 0x99, 0x81, 0xc5, 0x96, 0x91, 0x55, 0xba, 0x2f,
+ 0x16, 0x01, 0x4e, 0xe1, 0x25, 0xad, 0xca, 0x94, 0x88, 0x60, 0x3b, 0xa2,
+ 0x56, 0x0a, 0x94, 0x0b, 0x2c, 0x3e, 0xd0, 0x8f, 0x15, 0x07, 0x3d, 0xd5,
+ 0xbe, 0x72, 0x3e, 0x2d, 0x06, 0x74, 0xff, 0x06, 0xed, 0x47, 0x28, 0x08,
+ 0x0c, 0xa0, 0x6f, 0xdb, 0x75, 0x55, 0x32, 0xdc, 0x97, 0x47, 0x60, 0x4e,
+ 0x6f, 0xb4, 0x29, 0x89, 0x0c, 0x00, 0x00, 0x37, 0x1e, 0xcd, 0x0f, 0x66,
+ 0x09, 0x7d, 0x33, 0x9a, 0xdc, 0x47, 0x28, 0xf7, 0x91, 0xf3, 0xc2, 0xbc,
+ 0x3a, 0xa9, 0x05, 0x62, 0xfc, 0xdd, 0x8c, 0x65, 0xc2, 0xa8, 0x14, 0x55,
+ 0x52, 0x00, 0x00, 0x11, 0xed, 0x83, 0xfc, 0x60, 0x97, 0x7e, 0x5e, 0x15,
+ 0xe0, 0x43, 0xdb, 0x01, 0x0b, 0xc7, 0x93, 0xa0, 0xef, 0x08, 0xf6, 0x4f,
+ 0x91, 0xda, 0x83, 0x14, 0x34, 0x0d, 0x4f, 0x25, 0xaf, 0x00, 0x00, 0x80,
+ 0x3d, 0xc0, 0x9e, 0x85, 0xc8, 0x48, 0x35, 0xf8, 0xd2, 0x7b, 0x6b, 0xcf,
+ 0xfc, 0xe9, 0xe4, 0x59, 0x6d, 0x06, 0x4e, 0x12, 0x56, 0x00, 0xbc, 0xb4,
+ 0x6e, 0x20, 0x3a, 0xf4, 0x34, 0x00, 0x00, 0x2e, 0x06, 0xcd, 0x93, 0x4f,
+ 0x39, 0x62, 0x0b, 0xb1, 0x12, 0xf4, 0x49, 0x22, 0xe5, 0x55, 0x29, 0x08,
+ 0xd0, 0x51, 0x02, 0x14, 0xc3, 0xc5, 0x6d, 0xa3, 0xb0, 0xd9, 0x67, 0x61,
+ 0xec,
+
+ 0x00, 0x00, 0x00, 0x01,
+
+ 0x00, 0x00, 0x00, 0x01,
+
+ 0x70, 0x1a, 0x63, 0xed, 0x78, 0xb4, 0xfa, 0xe1, 0x22, 0xc8, 0xfc, 0xd7,
+ 0xfb, 0xf4, 0x63, 0x1f, 0xcf, 0x82, 0x02, 0x28, 0xe5, 0x70, 0xe0, 0x4e,
+ 0x73, 0xbd, 0xdf, 0xa2, 0xaf, 0x5a, 0xfe, 0xc8, 0x58, 0x95, 0xed, 0x67,
+ 0xc9, 0xcf, 0x41, 0xe9, 0x5c, 0xd9, 0x71, 0x30, 0x7a, 0xa2, 0x8e, 0xfb,
+ 0xb2, 0x59, 0xd8, 0x12, 0x47, 0x5d, 0x9f, 0x8b, 0x2f, 0x8c, 0xb9, 0x2c,
+ 0xb5, 0x12, 0x3d, 0x4c, 0x46, 0x06, 0x99, 0x02, 0xe5, 0x20, 0x99, 0x77,
+ 0x98, 0x29, 0x51, 0xb2, 0xee, 0x7b, 0x6e, 0xd9, 0xed, 0xbc, 0x1d, 0xf3,
+ 0xfe, 0xe5, 0xdb, 0x98, 0x02, 0x1e, 0xc7, 0x6b, 0x87, 0xdb, 0x81, 0x74,
+ 0x3c, 0x40, 0xbf, 0x24, 0xcb, 0xce, 0xc5, 0x3a, 0xd0, 0xd3, 0x5d, 0xd9,
+ 0x2c, 0xaf, 0xe0, 0x33, 0x84, 0xb6, 0xc4, 0xa3, 0xd5, 0x54, 0xdb, 0x18,
+ 0x6d, 0x10, 0x02, 0x90, 0x00, 0xc1, 0xdc, 0x59, 0x76, 0xdb, 0x0e, 0x72,
+ 0x49, 0xa8, 0x6f, 0xb1, 0x8e, 0x7b, 0xbe, 0xf8, 0xf6, 0x93, 0xe0, 0x1a,
+ 0xcc, 0xac, 0xe8, 0x4d, 0xe4, 0x41, 0xc3, 0xe8, 0xaa, 0x4a, 0x25, 0x96,
+ 0xd4, 0xc2, 0x9a, 0x87
+//};
+// unsigned int sig_sha256_bsn0_msg0_dat_len = 733;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0_three_entry.inc b/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0_three_entry.inc
new file mode 100644
index 0000000..7c80fe7
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0_three_entry.inc
@@ -0,0 +1,127 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+/*!
+* \file
+* \brief Test data.
+*
+* Type : Intel(R) EPID 1.1 Signature
+* Group : grpX
+* Signer : member0
+* HashAlg : Sha256
+* Message : "test message"
+* Basename: "basename1"
+* SigRl : group x sigrl
+*/
+//unsigned char epid_sig_dat[] = {
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x80, 0x85, 0x35, 0x04, 0x7b, 0xfc, 0x0a, 0x6c,
+ 0xb4, 0x10, 0x2d, 0x4a, 0xbe, 0x35, 0x78, 0x41, 0x3a, 0xc6, 0x01, 0x3a,
+ 0x59, 0x21, 0x17, 0x04, 0x60, 0x6a, 0x51, 0x6c, 0x84, 0xde, 0xc3, 0x3b,
+ 0x1e, 0x6a, 0xaf, 0x82, 0x5d, 0x81, 0xe2, 0x44, 0x25, 0x98, 0x89, 0xdb,
+ 0x82, 0x17, 0xe6, 0xb8, 0x9f, 0xfd, 0x03, 0x86, 0x63, 0x8c, 0xe1, 0x93,
+ 0x77, 0x61, 0x3c, 0xc2, 0x75, 0x14, 0xa1, 0xc2, 0x06, 0x88, 0x3b, 0x78,
+ 0xf9, 0x69, 0x8f, 0x4f, 0x80, 0x9b, 0xc6, 0x38, 0x30, 0x10, 0x12, 0x82,
+ 0x31, 0x00, 0x61, 0x15, 0x2f, 0x4d, 0x56, 0x14, 0x67, 0x30, 0x24, 0xb9,
+ 0xeb, 0xed, 0x75, 0x80, 0x06, 0x23, 0xbe, 0x49, 0x73, 0x18, 0x07, 0xf0,
+ 0xd7, 0xd1, 0xe9, 0x20, 0x39, 0xfc, 0x94, 0xb2, 0xaf, 0x72, 0xd6, 0xe5,
+ 0x3d, 0x29, 0x40, 0xc0, 0x6c, 0x58, 0x4e, 0xe9, 0xe8, 0x49, 0x5d, 0x8e,
+ 0x08, 0x04, 0x55, 0xec, 0x09, 0x9e, 0x63, 0x24, 0x50, 0x5b, 0xc5, 0x08,
+ 0x5d, 0xb9, 0xd2, 0xcf, 0x70, 0x48, 0xd3, 0x2e, 0x53, 0x12, 0x97, 0x5e,
+ 0xa4, 0xa5, 0x9f, 0xb5, 0xc4, 0xd3, 0x5e, 0xc3, 0x05, 0x33, 0x98, 0x86,
+ 0xcd, 0xac, 0x34, 0x41, 0xee, 0xf5, 0x03, 0x05, 0xed, 0x4b, 0xca, 0x08,
+ 0xc8, 0x31, 0x63, 0xce, 0x9e, 0xd8, 0xe2, 0xba, 0x9a, 0x0d, 0x7e, 0x5e,
+ 0x79, 0xc1, 0x13, 0xd4, 0xa4, 0xe6, 0x5e, 0x44, 0x54, 0xad, 0x61, 0xb8,
+ 0x99, 0xb7, 0xaf, 0xdc, 0x54, 0xf8, 0x3e, 0x5d, 0x47, 0xa9, 0x05, 0xdb,
+ 0xb6, 0xc1, 0x85, 0x1f, 0xaf, 0xb1, 0xe1, 0x0d, 0xd4, 0x71, 0x1b, 0x91,
+ 0x29, 0x69, 0x02, 0xd6, 0x0b, 0xd4, 0x33, 0x66, 0x4b, 0x5e, 0x00, 0x00,
+ 0x13, 0x3e, 0x2c, 0x68, 0xd2, 0x0b, 0x68, 0x2c, 0x22, 0x9d, 0x2d, 0xf0,
+ 0x74, 0x29, 0x87, 0x58, 0xb9, 0xa0, 0xc2, 0xdb, 0xd8, 0x68, 0xba, 0x46,
+ 0xc7, 0x75, 0x5b, 0x94, 0x4c, 0x4c, 0x00, 0x00, 0x41, 0x7b, 0xde, 0xfb,
+ 0xe0, 0x3c, 0x45, 0xf4, 0xf1, 0x9e, 0x70, 0x52, 0x37, 0x39, 0x20, 0xf6,
+ 0xb9, 0xa8, 0x0f, 0x49, 0x58, 0x4a, 0x72, 0x46, 0x31, 0xe5, 0xad, 0x92,
+ 0x47, 0x88, 0x00, 0xf1, 0x59, 0x15, 0x9e, 0x42, 0x7a, 0x60, 0x15, 0x74,
+ 0xc9, 0x37, 0x64, 0x10, 0x21, 0x83, 0x2d, 0x3c, 0xcd, 0xd1, 0xc1, 0xa1,
+ 0x85, 0x1b, 0x08, 0x2e, 0x8c, 0xb8, 0xfd, 0xe7, 0xb7, 0x82, 0xc4, 0xa2,
+ 0xa4, 0x71, 0x40, 0x1c, 0x1f, 0xf9, 0x7d, 0x7d, 0xf5, 0x2c, 0xd6, 0x63,
+ 0x2e, 0x7e, 0x34, 0x69, 0x8a, 0x1b, 0xdf, 0x7b, 0x01, 0x01, 0x92, 0xfc,
+ 0xa3, 0xc8, 0xb4, 0xa1, 0x0e, 0x18, 0x40, 0x96, 0xa1, 0xdf, 0xf2, 0xcb,
+ 0x75, 0x9d, 0x90, 0x54, 0xb0, 0x00, 0x00, 0x53, 0x86, 0xa4, 0x1c, 0xa8,
+ 0x29, 0x33, 0xda, 0x92, 0xe4, 0xab, 0x77, 0x79, 0x70, 0xe4, 0x84, 0xa9,
+ 0x5f, 0xdf, 0x8a, 0x23, 0x7d, 0xb0, 0xc6, 0x57, 0x22, 0x41, 0x7f, 0x99,
+ 0x5b, 0x00, 0x00, 0x4f, 0x52, 0x39, 0xde, 0xce, 0x9e, 0xc3, 0xf8, 0xa1,
+ 0x42, 0xf0, 0x71, 0xda, 0x5c, 0x43, 0xde, 0xe0, 0xdd, 0x88, 0x8a, 0xe5,
+ 0xb8, 0x38, 0xb1, 0x60, 0x75, 0xee, 0x1b, 0x04, 0xbb, 0x00, 0x00, 0x47,
+ 0xd6, 0xef, 0x11, 0x6f, 0xb8, 0x98, 0x06, 0x17, 0x14, 0x2d, 0x40, 0x5a,
+ 0xbd, 0x6a, 0x2d, 0xae, 0xb6, 0x04, 0x70, 0x56, 0x52, 0x4d, 0x6c, 0x1f,
+ 0x2d, 0x43, 0x1f, 0xad, 0x82, 0x00, 0x00, 0x1f, 0xb9, 0xdf, 0x3c, 0xf7,
+ 0xac, 0x90, 0x1c, 0x7a, 0xfc, 0x07, 0xf8, 0x01, 0x50, 0x52, 0x30, 0xba,
+ 0xc2, 0xb4, 0x7c, 0x0a, 0x0c, 0x25, 0xae, 0xd6, 0x6a, 0x38, 0x8d, 0xe1,
+ 0x13,
+
+ 0x00, 0x00, 0x00, 0x03,
+
+ 0x00, 0x00, 0x00, 0x03,
+
+ 0x98, 0x4f, 0xd9, 0x6a, 0x1f, 0xaa, 0xfc, 0xfb, 0x38, 0xbf, 0x49, 0x9e,
+ 0xd5, 0x1b, 0xc6, 0x48, 0xac, 0xeb, 0xc4, 0x1a, 0xec, 0x7c, 0xeb, 0xd9,
+ 0x1b, 0x02, 0xa4, 0xbc, 0x1d, 0x1a, 0x73, 0x79, 0x3f, 0x56, 0x15, 0x80,
+ 0x70, 0x94, 0x7b, 0xfe, 0xfc, 0x7a, 0x02, 0x4a, 0x16, 0xd1, 0x6b, 0x71,
+ 0xaa, 0x89, 0x12, 0xbe, 0x34, 0xc1, 0x08, 0xbf, 0xd7, 0xf8, 0xae, 0xc9,
+ 0xeb, 0xe9, 0xb3, 0xb8, 0xa5, 0x5f, 0x11, 0xfc, 0x6d, 0x4e, 0x9a, 0x86,
+ 0xe4, 0x67, 0xdf, 0xcc, 0xb6, 0xab, 0xf8, 0xee, 0x65, 0xf7, 0x19, 0x28,
+ 0x8c, 0x71, 0x60, 0xb0, 0x70, 0xc3, 0x7f, 0x20, 0xf0, 0xfa, 0x5f, 0xc8,
+ 0x09, 0xe4, 0xd1, 0x9f, 0xf4, 0x69, 0x00, 0xb9, 0x63, 0xc9, 0xc0, 0xa9,
+ 0xad, 0x62, 0x1f, 0x7c, 0xbb, 0xfc, 0x81, 0xe7, 0xc7, 0x37, 0xd1, 0xb4,
+ 0x59, 0x8f, 0x9a, 0xcf, 0x20, 0x2d, 0x9b, 0x6b, 0x9a, 0x1a, 0x4f, 0x28,
+ 0xdd, 0x4f, 0x9b, 0x2d, 0x4f, 0x20, 0x47, 0x70, 0xed, 0x85, 0xbc, 0x55,
+ 0x63, 0x9a, 0x37, 0xfd, 0xf1, 0xd7, 0xf1, 0x19, 0x37, 0x85, 0x2b, 0x55,
+ 0xcc, 0x8a, 0xfd, 0x67,
+
+ 0x49, 0x3a, 0x78, 0x1c, 0x57, 0x03, 0x7d, 0x84, 0x3c, 0xf4, 0x19, 0x6a,
+ 0xd2, 0x98, 0xcb, 0xe6, 0x6c, 0x7f, 0xf9, 0xa4, 0x80, 0xf8, 0x86, 0xc1,
+ 0x6f, 0xe2, 0x31, 0xd9, 0xeb, 0x92, 0x39, 0xd8, 0x9e, 0xcd, 0x78, 0xbf,
+ 0x50, 0xc5, 0xb8, 0xeb, 0xec, 0xcb, 0x3f, 0x96, 0x2c, 0x11, 0x01, 0x7f,
+ 0xb2, 0xd2, 0xc6, 0xf9, 0x01, 0xe5, 0x5d, 0x69, 0xed, 0xf0, 0xd5, 0xf4,
+ 0x2e, 0x1f, 0x68, 0x6f, 0xde, 0x76, 0x65, 0x91, 0x25, 0x86, 0xfe, 0xe4,
+ 0x55, 0xd1, 0x43, 0x2a, 0x19, 0x2e, 0xd8, 0x38, 0x1a, 0xec, 0x2b, 0xc9,
+ 0x14, 0xc3, 0x54, 0xd6, 0xe2, 0x7e, 0xd3, 0xe7, 0x77, 0xc8, 0x77, 0x75,
+ 0x28, 0x3d, 0xb6, 0x6e, 0xac, 0x29, 0x4c, 0x70, 0xcc, 0xa5, 0x50, 0xad,
+ 0xf1, 0x29, 0xf5, 0xea, 0xa5, 0x44, 0xda, 0xc1, 0xc5, 0x47, 0x39, 0x8e,
+ 0xbb, 0xa9, 0x63, 0xf9, 0x4c, 0xe9, 0x5a, 0xa4, 0x58, 0x2c, 0x33, 0xc7,
+ 0x24, 0x4b, 0x03, 0x54, 0xb4, 0xdb, 0x41, 0x51, 0xa7, 0x9a, 0x89, 0x46,
+ 0x27, 0x49, 0x08, 0xe6, 0x64, 0xca, 0xb7, 0xd2, 0x1c, 0xfa, 0x62, 0x2b,
+ 0x01, 0xb0, 0xb7, 0x98,
+
+ 0xd3, 0x7d, 0x29, 0xfb, 0x5e, 0x1f, 0x3a, 0x27, 0xc1, 0x26, 0xdc, 0x52,
+ 0x48, 0x16, 0xfa, 0x89, 0xb9, 0x68, 0x2e, 0xfb, 0xb8, 0xa2, 0xc0, 0x1a,
+ 0x74, 0xc5, 0x39, 0x1e, 0xe1, 0x9f, 0x25, 0x09, 0x02, 0xe6, 0x26, 0xda,
+ 0x39, 0x8c, 0xf0, 0x73, 0xa5, 0x2d, 0x59, 0x6e, 0xde, 0x5d, 0x64, 0x66,
+ 0x96, 0x87, 0x0e, 0x08, 0xa2, 0x78, 0x96, 0x7c, 0x8c, 0x54, 0xa4, 0x54,
+ 0xf1, 0x3c, 0x81, 0x44, 0xd5, 0x30, 0x4c, 0x2a, 0xdb, 0x5a, 0xbd, 0x13,
+ 0x5f, 0xa5, 0x7e, 0xbf, 0x7c, 0x9d, 0x51, 0x8b, 0x17, 0x49, 0xce, 0x4c,
+ 0x33, 0xaa, 0x7f, 0x6e, 0x8d, 0xdb, 0x18, 0x77, 0x02, 0x5b, 0xc6, 0x88,
+ 0x65, 0xf3, 0x94, 0x99, 0x6d, 0xcd, 0xa5, 0xa7, 0xa4, 0xbd, 0x62, 0xfa,
+ 0x36, 0x7c, 0xa5, 0xd7, 0x3c, 0xe3, 0x6b, 0x7e, 0x36, 0x02, 0x57, 0xa5,
+ 0xd2, 0x8e, 0x28, 0xa9, 0x4b, 0xc0, 0xca, 0xf2, 0xe9, 0x92, 0x86, 0x55,
+ 0xeb, 0x63, 0xc4, 0x7f, 0x45, 0x7f, 0x2f, 0xbb, 0x89, 0xa5, 0xa6, 0x10,
+ 0xe9, 0x4f, 0x98, 0x08, 0x43, 0xc8, 0x53, 0xad, 0x07, 0x8a, 0xb0, 0xe7,
+ 0x8e, 0x8f, 0x7b, 0x45,
+//};
+//unsigned int epid_sig_dat_len = 1053;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg1.inc b/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg1.inc
new file mode 100644
index 0000000..0c42c86
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg1.inc
@@ -0,0 +1,79 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 Signature
+ * Group : grpX
+ * Signer : member0
+ * HashAlg : Sha256
+ * Message : "test1"
+ * Basename: "basename1"
+ * SigRl : group x sigrl
+ */
+ //unsigned char sig_sha256_bsn0_msg1_dat[] = {
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53,
+ 0xba, 0x1e, 0x1b, 0x0e, 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09,
+ 0x4f, 0xcd, 0xb6, 0xe6, 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72,
+ 0xfa, 0x85, 0x0f, 0x5c, 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64,
+ 0xda, 0xa9, 0x8e, 0xf5, 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb,
+ 0x0a, 0x9d, 0x02, 0xc0, 0x33, 0xec, 0x2a, 0x70, 0x80, 0x85, 0x35, 0x04,
+ 0x7b, 0xfc, 0x0a, 0x6c, 0xb4, 0x10, 0x2d, 0x4a, 0xbe, 0x35, 0x78, 0x41,
+ 0x3a, 0xc6, 0x01, 0x3a, 0x59, 0x21, 0x17, 0x04, 0x60, 0x6a, 0x51, 0x6c,
+ 0x84, 0xde, 0xc3, 0x3b, 0x1e, 0x6a, 0xaf, 0x82, 0x5d, 0x81, 0xe2, 0x44,
+ 0x25, 0x98, 0x89, 0xdb, 0x82, 0x17, 0xe6, 0xb8, 0x9f, 0xfd, 0x03, 0x86,
+ 0x63, 0x8c, 0xe1, 0x93, 0x77, 0x61, 0x3c, 0xc2, 0x75, 0x14, 0xa1, 0xc2,
+ 0x03, 0xf0, 0x18, 0x3e, 0x21, 0xd3, 0x65, 0xa6, 0x2f, 0x7e, 0x85, 0xa9,
+ 0x9f, 0x7b, 0x28, 0x4e, 0xf0, 0x9c, 0xd1, 0xda, 0xc4, 0x4b, 0xe4, 0x8f,
+ 0xc0, 0xe1, 0x4c, 0xaf, 0xcf, 0x85, 0xf7, 0x5c, 0x01, 0x1a, 0x15, 0xd9,
+ 0x4c, 0xf5, 0xdc, 0xc6, 0xce, 0xc5, 0x95, 0x3c, 0x1f, 0xe6, 0x57, 0x3c,
+ 0xbd, 0x8f, 0x5d, 0x05, 0x6e, 0xf9, 0xa3, 0x1e, 0xfb, 0x11, 0x18, 0x0e,
+ 0xfa, 0x07, 0x3b, 0xfd, 0x06, 0xdb, 0x21, 0xaa, 0x13, 0x05, 0xf3, 0x49,
+ 0x63, 0xb2, 0x8e, 0x1d, 0x22, 0x58, 0x53, 0x32, 0xd5, 0x86, 0xcf, 0xd2,
+ 0x2b, 0xfb, 0xf0, 0xe7, 0x56, 0x63, 0xd7, 0x12, 0xd5, 0xe0, 0xa8, 0x71,
+ 0x03, 0x1c, 0xe4, 0x83, 0x1d, 0x58, 0x63, 0xad, 0xa0, 0x48, 0xf3, 0x69,
+ 0x6b, 0xbd, 0x04, 0x4b, 0x81, 0xc7, 0x11, 0xa0, 0x26, 0x48, 0x9d, 0x12,
+ 0xe7, 0x13, 0x20, 0xb4, 0x15, 0xec, 0xbb, 0x06, 0xd1, 0x8e, 0x61, 0xb1,
+ 0xac, 0x11, 0x77, 0x86, 0x4c, 0x03, 0x6a, 0x9a, 0xe6, 0x3a, 0xd7, 0x2b,
+ 0xc8, 0x12, 0xf5, 0xa7, 0x0a, 0x8b, 0x3d, 0xa3, 0x23, 0xdc, 0x66, 0x66,
+ 0x7e, 0x67, 0x19, 0x62, 0x65, 0x60, 0xe8, 0x36, 0x48, 0x97, 0x18, 0xfd,
+ 0xbf, 0x43, 0x00, 0x00, 0x12, 0xa8, 0x4b, 0x8b, 0xf4, 0x38, 0x73, 0x30,
+ 0x84, 0xbd, 0x3e, 0xeb, 0x88, 0xe4, 0x52, 0xd1, 0xd2, 0xb4, 0x35, 0x05,
+ 0x38, 0x66, 0x5c, 0x4f, 0x56, 0xa1, 0x9a, 0x71, 0x82, 0x30, 0x00, 0x00,
+ 0x3f, 0x2e, 0x31, 0x92, 0x93, 0x40, 0x32, 0x64, 0xf0, 0x5c, 0xfa, 0x4e,
+ 0x69, 0xf8, 0xe6, 0x13, 0x7e, 0x7d, 0x1f, 0xb0, 0x32, 0x76, 0x1c, 0x39,
+ 0x42, 0xcf, 0x58, 0xa4, 0xe7, 0x16, 0x00, 0x6f, 0x16, 0x43, 0x7f, 0xa4,
+ 0x4e, 0x58, 0x7d, 0x50, 0xd0, 0x4a, 0x02, 0x89, 0xeb, 0x57, 0x06, 0x8e,
+ 0x61, 0x90, 0x50, 0x1d, 0x29, 0xbf, 0x31, 0xaa, 0x58, 0x2b, 0xa2, 0xc2,
+ 0x0d, 0x23, 0x37, 0x25, 0x15, 0xfd, 0xfc, 0x9c, 0x64, 0xa1, 0xea, 0x12,
+ 0x32, 0x2c, 0x96, 0x24, 0xa9, 0xa8, 0x75, 0x18, 0x5f, 0xb4, 0xf8, 0xfe,
+ 0xd9, 0xf2, 0xd9, 0x44, 0x45, 0xfe, 0x4e, 0x8a, 0xb7, 0x68, 0x0f, 0x6b,
+ 0x5e, 0x05, 0xab, 0xec, 0x1b, 0x5e, 0xcd, 0x44, 0x6a, 0x00, 0x00, 0x33,
+ 0x45, 0xea, 0x26, 0x29, 0x78, 0xe5, 0x0b, 0x40, 0xe5, 0xe0, 0xe2, 0x78,
+ 0xdb, 0x9a, 0xf8, 0xef, 0xa5, 0x3b, 0x54, 0x57, 0x0a, 0x4a, 0x2c, 0x47,
+ 0xd0, 0x1d, 0x55, 0xd8, 0x5e, 0x00, 0x00, 0x30, 0xc0, 0x99, 0xac, 0xcf,
+ 0xb3, 0x0e, 0xd1, 0xf0, 0xc3, 0xfb, 0x47, 0xf5, 0x7e, 0xaa, 0xb7, 0xba,
+ 0x05, 0x21, 0x04, 0xcd, 0x12, 0x07, 0x3f, 0xb6, 0x12, 0x1b, 0x3b, 0x19,
+ 0x12, 0x00, 0x00, 0x3a, 0x2b, 0x9e, 0x80, 0x2a, 0x14, 0x1b, 0x21, 0x81,
+ 0xf8, 0x79, 0xfb, 0xe7, 0x9a, 0x60, 0x90, 0x66, 0x81, 0x65, 0x24, 0x49,
+ 0x27, 0x80, 0x18, 0x29, 0x42, 0x8c, 0xaa, 0xd9, 0xb8, 0x00, 0x00, 0x4e,
+ 0x0b, 0x8c, 0x7e, 0x01, 0xad, 0x83, 0xd1, 0xaa, 0xb4, 0xa3, 0x75, 0xd9,
+ 0x42, 0xa0, 0x9f, 0x1c, 0xd9, 0x05, 0x10, 0x78, 0x78, 0x60, 0xe6, 0xe5,
+ 0xa3, 0x24, 0x79, 0x47, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00
+//};
+//unsigned int sig_sha256_bsn0_msg1_dat_len = 577;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn1_msg0.inc b/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn1_msg0.inc
new file mode 100644
index 0000000..a13cf04
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn1_msg0.inc
@@ -0,0 +1,79 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 Signature
+ * Group : grpX
+ * Signer : member0
+ * HashAlg : Sha256
+ * Message : "test message"
+ * Basename: "basename2"
+ * SigRl : group x sigrl
+ */
+ //unsigned char sig_sha256_bsn1_msg0_dat[] = {
+ 0x67, 0x58, 0xb2, 0x9c, 0xad, 0x61, 0x1f, 0xfb,
+ 0x74, 0x23, 0xea, 0x40, 0xe9, 0x66, 0x26, 0xb0, 0x43, 0xdc, 0x7e, 0xc7,
+ 0x48, 0x88, 0x56, 0x59, 0xf3, 0x35, 0x9f, 0xdb, 0xfa, 0xa2, 0x49, 0x51,
+ 0x85, 0x35, 0x42, 0x50, 0x8e, 0x79, 0x79, 0xc0, 0x6c, 0xcc, 0x39, 0x0b,
+ 0xad, 0x3b, 0x39, 0x33, 0xae, 0xb2, 0xa1, 0xc5, 0x28, 0x6f, 0x48, 0x3a,
+ 0xd2, 0x63, 0x5d, 0xfb, 0x1b, 0x1f, 0x8a, 0x63, 0x84, 0xdc, 0x2d, 0xad,
+ 0x3b, 0x98, 0x3f, 0xc3, 0x8e, 0x18, 0xd7, 0xea, 0x18, 0x50, 0x0c, 0x50,
+ 0x42, 0x77, 0xb2, 0x59, 0xf5, 0xd5, 0x38, 0xc3, 0x8d, 0x57, 0xf4, 0xe7,
+ 0xb8, 0x74, 0x5a, 0x9e, 0x32, 0x75, 0xd1, 0xb4, 0xb3, 0x64, 0xbc, 0x23,
+ 0xcd, 0x98, 0x29, 0x7a, 0x77, 0x51, 0xfc, 0x26, 0x81, 0x41, 0x9b, 0xf6,
+ 0x21, 0xad, 0xc1, 0xd9, 0xab, 0x30, 0x25, 0x8d, 0x0c, 0x3b, 0x62, 0xe2,
+ 0x05, 0xe1, 0x05, 0xdd, 0x55, 0x7e, 0xf6, 0x7a, 0x66, 0xf9, 0x64, 0x67,
+ 0x2b, 0x57, 0x0b, 0xd1, 0x83, 0x12, 0xfa, 0x67, 0x4d, 0x29, 0x3e, 0x86,
+ 0x91, 0xbb, 0x4c, 0x9a, 0x50, 0xf4, 0xba, 0xab, 0x02, 0x46, 0x36, 0x83,
+ 0x12, 0x54, 0xf6, 0x5e, 0xcb, 0xd7, 0xcd, 0x8c, 0x47, 0x72, 0x43, 0xf4,
+ 0x5f, 0x8b, 0x9f, 0xa6, 0x31, 0x38, 0x8c, 0x52, 0xde, 0x16, 0x0f, 0xe5,
+ 0xea, 0x3b, 0x51, 0x18, 0x06, 0xda, 0xec, 0x18, 0x94, 0xdc, 0xb2, 0x32,
+ 0xc8, 0x0f, 0xfd, 0x43, 0x15, 0x9c, 0x91, 0xb2, 0xf4, 0x90, 0xb6, 0x9c,
+ 0xb8, 0xcd, 0x49, 0xfc, 0x27, 0xff, 0x68, 0x33, 0xc3, 0x06, 0xb9, 0x05,
+ 0x04, 0x9b, 0x71, 0x83, 0x6b, 0xf0, 0x95, 0x31, 0x16, 0x70, 0x30, 0xc9,
+ 0x4b, 0xcd, 0x63, 0x85, 0xc6, 0xf4, 0x3f, 0xe9, 0x35, 0x19, 0x02, 0x61,
+ 0x91, 0x52, 0xda, 0x47, 0xcf, 0x40, 0xed, 0x40, 0xda, 0x8d, 0xe3, 0xbb,
+ 0x31, 0xee, 0xf6, 0x3e, 0x83, 0x6a, 0x20, 0xc0, 0x38, 0xc6, 0xb1, 0x5d,
+ 0x78, 0xff, 0x2b, 0x5e, 0x90, 0x53, 0x04, 0xb0, 0x25, 0x49, 0x04, 0xb4,
+ 0x38, 0x1f, 0x56, 0xfe, 0x15, 0x23, 0x7d, 0xbc, 0x31, 0xc6, 0x38, 0x71,
+ 0xe5, 0xa3, 0x00, 0x00, 0x0b, 0x8c, 0x01, 0xef, 0x56, 0x72, 0x20, 0x1d,
+ 0x30, 0x95, 0x62, 0x3c, 0x37, 0x91, 0x32, 0x94, 0xf3, 0xa4, 0x73, 0x68,
+ 0x6c, 0xda, 0x11, 0x7f, 0x3e, 0x33, 0xa2, 0x35, 0xcb, 0x7c, 0x00, 0x00,
+ 0x43, 0xb9, 0x97, 0x4e, 0x4b, 0xcc, 0x01, 0x30, 0xea, 0xba, 0xcf, 0x5a,
+ 0x4a, 0x4c, 0x35, 0xdc, 0x2a, 0xfa, 0x3a, 0xa7, 0x8b, 0x07, 0x50, 0x1b,
+ 0x28, 0x83, 0x5f, 0x12, 0xd5, 0x3f, 0x00, 0x93, 0x24, 0x59, 0x9b, 0x1c,
+ 0x46, 0xd6, 0x1b, 0x85, 0x23, 0x4d, 0x05, 0xf2, 0x14, 0x00, 0x31, 0xe0,
+ 0x53, 0x85, 0x0b, 0x0a, 0xa5, 0x75, 0x6d, 0x74, 0x65, 0x87, 0x12, 0xa5,
+ 0x2f, 0x98, 0x23, 0x2f, 0x93, 0x21, 0x24, 0x93, 0x1e, 0x4e, 0x51, 0x0e,
+ 0x7a, 0x46, 0x01, 0x0b, 0x9b, 0xc8, 0xc7, 0xb0, 0xd0, 0x5d, 0x6a, 0x54,
+ 0xc5, 0x76, 0xf3, 0xdb, 0x40, 0xe1, 0x9e, 0xd0, 0x33, 0x32, 0xd5, 0x13,
+ 0x57, 0xf9, 0x74, 0x20, 0x86, 0x6b, 0xa8, 0xfb, 0xb9, 0x00, 0x00, 0x17,
+ 0xb0, 0xa5, 0x95, 0x02, 0x3c, 0x4e, 0x02, 0x73, 0x38, 0xc7, 0xbb, 0x5f,
+ 0xef, 0x48, 0x70, 0xde, 0xf4, 0xa4, 0x45, 0x4c, 0x7d, 0x9c, 0x19, 0xc8,
+ 0x98, 0x56, 0x13, 0xe3, 0x31, 0x00, 0x00, 0x6b, 0xdb, 0xe4, 0x38, 0x71,
+ 0xdc, 0x95, 0xf0, 0x40, 0xb1, 0xc8, 0xcd, 0x88, 0xe2, 0x75, 0xc1, 0xeb,
+ 0x7f, 0xb0, 0x6f, 0x9a, 0x46, 0xca, 0x1a, 0xb3, 0xf3, 0xc9, 0xe4, 0x56,
+ 0xaa, 0x00, 0x00, 0x6b, 0x89, 0xf7, 0xd9, 0x55, 0x3c, 0x9f, 0xd6, 0xf6,
+ 0x71, 0x0e, 0xc3, 0xe8, 0xbf, 0xe1, 0x3a, 0x91, 0x1d, 0xe8, 0x8d, 0x9d,
+ 0x1d, 0x20, 0x08, 0x4e, 0x2e, 0x04, 0x9c, 0xd0, 0x06, 0x00, 0x00, 0x23,
+ 0x5c, 0x31, 0x9b, 0x46, 0x4a, 0xff, 0x19, 0x16, 0x89, 0x06, 0x35, 0x58,
+ 0xdf, 0xf4, 0x2d, 0x17, 0x04, 0x21, 0x28, 0x80, 0x66, 0x2c, 0x48, 0xb6,
+ 0x4f, 0xee, 0xd0, 0xe5, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00
+//};
+//unsigned int sig_sha256_bsn1_msg0_dat_len = 577;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_rndbase_msg0.inc b/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_rndbase_msg0.inc
new file mode 100644
index 0000000..470e82c
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_rndbase_msg0.inc
@@ -0,0 +1,79 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 Signature
+ * Group : grpX
+ * Signer : member0
+ * HashAlg : Sha256
+ * Message : "test message"
+ * Basename: None (random base)
+ * SigRl : group x sigrl
+ */
+//unsigned char sig_sha256_rndbase_msg0_dat[] = {
+ 0x0a, 0x53, 0xeb, 0x13, 0xda, 0x3e, 0xc9, 0xe9,
+ 0x7d, 0xed, 0x23, 0xd3, 0xd0, 0x71, 0xf4, 0xdb, 0xf7, 0x36, 0x83, 0x24,
+ 0x09, 0x87, 0x20, 0x5d, 0x48, 0x2d, 0x6c, 0x3a, 0xf3, 0xe2, 0x46, 0xcd,
+ 0x8b, 0x2a, 0xaf, 0x60, 0x6b, 0xe3, 0x64, 0x9c, 0x9e, 0x6a, 0x6d, 0x05,
+ 0xb0, 0xf9, 0x61, 0xc6, 0x60, 0xd6, 0x70, 0xcf, 0xa6, 0x9f, 0x4a, 0xc0,
+ 0x7b, 0x3a, 0xb6, 0xa2, 0xbd, 0x85, 0xcf, 0x2b, 0xce, 0x9e, 0xf0, 0x48,
+ 0x85, 0xf9, 0x65, 0xf5, 0x73, 0x2c, 0xfc, 0x52, 0x21, 0x7e, 0xfa, 0x85,
+ 0xfc, 0x6a, 0x06, 0xad, 0xa5, 0xce, 0x3d, 0xb6, 0xe0, 0xc8, 0x34, 0x38,
+ 0x01, 0x8e, 0xea, 0x76, 0x99, 0xb4, 0x52, 0x99, 0xa7, 0x89, 0x86, 0x18,
+ 0x5f, 0xd9, 0xef, 0x06, 0x99, 0xeb, 0x63, 0x54, 0xd5, 0x8d, 0x44, 0x9b,
+ 0xb0, 0xa2, 0x86, 0xed, 0x1f, 0x85, 0xf7, 0x2e, 0x26, 0xfd, 0x31, 0xd9,
+ 0x05, 0x9b, 0x64, 0x1c, 0x73, 0x26, 0xeb, 0xce, 0xce, 0x77, 0xa1, 0xef,
+ 0x58, 0x16, 0x56, 0x7f, 0xaa, 0xa9, 0xc0, 0x21, 0x94, 0xa5, 0xa2, 0xdb,
+ 0xe8, 0x12, 0x00, 0x5f, 0x1e, 0x87, 0x42, 0x53, 0x08, 0x04, 0xa7, 0xe9,
+ 0x14, 0xd9, 0x9a, 0x56, 0xb1, 0x63, 0x5a, 0x64, 0x67, 0xa8, 0xb9, 0x96,
+ 0xff, 0xa6, 0x89, 0x47, 0xf3, 0xd9, 0x15, 0x82, 0xf6, 0x11, 0x9a, 0x39,
+ 0xc1, 0x85, 0x87, 0xac, 0x09, 0xdd, 0x35, 0xcf, 0x01, 0x34, 0xd7, 0x7f,
+ 0x6f, 0xe6, 0xfa, 0xa8, 0x5d, 0x12, 0x42, 0xa4, 0x32, 0x3a, 0x63, 0x76,
+ 0x46, 0xe5, 0xbe, 0x4d, 0xfb, 0xb4, 0xba, 0xa3, 0x64, 0x8e, 0x97, 0xfe,
+ 0x05, 0xe4, 0x86, 0xc6, 0x3d, 0xd7, 0x2e, 0xaf, 0xcf, 0xa4, 0x83, 0x66,
+ 0xe2, 0x84, 0x99, 0xf5, 0x55, 0x3f, 0xdf, 0x1e, 0x86, 0x2b, 0x61, 0x35,
+ 0xc2, 0x4b, 0x07, 0xc6, 0xa7, 0xe2, 0x59, 0x3e, 0xa8, 0xc7, 0x47, 0x34,
+ 0x42, 0xdb, 0x72, 0xec, 0xe6, 0x67, 0x85, 0xeb, 0xbe, 0xdd, 0x02, 0x37,
+ 0x1a, 0xc1, 0x7c, 0xea, 0xf1, 0x43, 0x19, 0xe1, 0x38, 0xb6, 0x82, 0x13,
+ 0x78, 0xeb, 0xe4, 0xa2, 0xe6, 0xd7, 0x26, 0x27, 0x4f, 0x33, 0x75, 0xaa,
+ 0x4c, 0x76, 0x00, 0x00, 0x75, 0x35, 0x2a, 0xdf, 0x8a, 0x7e, 0x29, 0xa8,
+ 0x12, 0xb7, 0x53, 0xaa, 0x51, 0x8a, 0x69, 0x2f, 0xa1, 0xf2, 0x4b, 0xac,
+ 0x33, 0x8e, 0xc6, 0xaa, 0xb3, 0x89, 0x2d, 0xa0, 0xf1, 0x61, 0x00, 0x00,
+ 0x5c, 0xb7, 0x83, 0x21, 0x28, 0x00, 0x91, 0xbd, 0x39, 0x38, 0xf0, 0x45,
+ 0x9b, 0xf7, 0xd3, 0x36, 0x13, 0x22, 0x04, 0x39, 0x6c, 0x5b, 0x0e, 0xb0,
+ 0x7b, 0x31, 0x8f, 0xa6, 0xe6, 0xd2, 0x00, 0x15, 0xa8, 0xec, 0xf1, 0xc2,
+ 0x68, 0xc8, 0x68, 0x75, 0xf3, 0xef, 0x66, 0x60, 0x35, 0x88, 0x5f, 0xae,
+ 0x3d, 0xd9, 0x26, 0x8e, 0x54, 0xdb, 0xc4, 0x5d, 0xf1, 0xb5, 0x57, 0xc2,
+ 0x1b, 0xca, 0x18, 0x65, 0xd8, 0xb5, 0x4d, 0xa8, 0xfa, 0x7a, 0x12, 0x6d,
+ 0xca, 0x65, 0x19, 0x26, 0x4d, 0x2c, 0xf6, 0x15, 0x3d, 0xbf, 0x18, 0xce,
+ 0xc8, 0x83, 0xbd, 0x7f, 0xe8, 0x73, 0xb4, 0xba, 0xbd, 0xcd, 0xc9, 0xe1,
+ 0x03, 0xa6, 0x36, 0x1d, 0xe6, 0x4b, 0xf1, 0x79, 0xc2, 0x00, 0x00, 0x86,
+ 0x29, 0x09, 0x23, 0xe9, 0x08, 0x76, 0x02, 0xc2, 0xea, 0x06, 0xc6, 0x46,
+ 0xfd, 0x41, 0x5e, 0x10, 0x9e, 0x45, 0xf2, 0x68, 0xb1, 0x7c, 0xbf, 0x27,
+ 0x7e, 0x5f, 0x35, 0xa1, 0x61, 0x00, 0x00, 0x00, 0xef, 0x17, 0x44, 0x9a,
+ 0xf0, 0xe7, 0xb7, 0xb1, 0xef, 0x64, 0xc1, 0xe9, 0x1c, 0xec, 0x23, 0x28,
+ 0x38, 0xb2, 0x68, 0x5d, 0x57, 0x22, 0x8d, 0x17, 0x34, 0x39, 0x90, 0x73,
+ 0x9e, 0x00, 0x00, 0x32, 0xca, 0xac, 0xa4, 0xf3, 0xe0, 0xf1, 0xd4, 0x76,
+ 0xc8, 0x66, 0x52, 0xa1, 0x1c, 0x77, 0x12, 0x1b, 0x12, 0xa4, 0xf1, 0xa7,
+ 0x61, 0x58, 0xb3, 0xd8, 0x6d, 0xa4, 0x38, 0x6f, 0xd7, 0x00, 0x00, 0x0b,
+ 0xf7, 0xc6, 0xc9, 0xa2, 0x7b, 0x65, 0x26, 0x33, 0xaf, 0xbc, 0xd9, 0x5c,
+ 0x07, 0x57, 0x59, 0x14, 0xac, 0x40, 0x71, 0xbd, 0x25, 0x9c, 0xbb, 0x52,
+ 0x9e, 0x2a, 0x64, 0x70, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00
+//};
+//unsigned int sig_sha256_rndbase_msg0_dat_len = 577;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_rndbase_msg1.inc b/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_rndbase_msg1.inc
new file mode 100644
index 0000000..4682ed3
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_rndbase_msg1.inc
@@ -0,0 +1,79 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 Signature
+ * Group : grpX
+ * Signer : member0
+ * HashAlg : Sha256
+ * Message : "test1"
+ * Basename: None (random base)
+ * SigRl : group x sigrl
+ */
+//unsigned char sig_sha256_rndbase_msg1_dat[] = {
+ 0x35, 0xac, 0x96, 0x37, 0xa4, 0x82, 0x58, 0xa1,
+ 0xf5, 0xa1, 0xd2, 0x6b, 0x65, 0x56, 0xb6, 0xee, 0x8f, 0x8d, 0xc8, 0xc7,
+ 0x8f, 0x54, 0x66, 0xad, 0xcc, 0x84, 0x5f, 0x7b, 0x97, 0x16, 0x3e, 0xa8,
+ 0x66, 0x20, 0x05, 0xb5, 0x3c, 0x84, 0xf9, 0xa2, 0x00, 0xd8, 0x0d, 0x61,
+ 0x93, 0x93, 0x0e, 0x81, 0x86, 0x1b, 0xe5, 0x53, 0xc0, 0xbe, 0xf1, 0x84,
+ 0x42, 0x75, 0x22, 0x60, 0xa3, 0xcf, 0x88, 0x35, 0x41, 0xf0, 0x0e, 0xd8,
+ 0x1c, 0x2f, 0xa0, 0x46, 0x2d, 0xbd, 0x5c, 0xee, 0xa1, 0xdb, 0xe3, 0x20,
+ 0x4c, 0xd3, 0x27, 0xe0, 0x92, 0x28, 0x85, 0x01, 0xbd, 0xe4, 0x13, 0x47,
+ 0x37, 0xaf, 0x30, 0xb7, 0x93, 0xce, 0x4d, 0x2c, 0x43, 0x31, 0xa7, 0x96,
+ 0x62, 0x53, 0xa5, 0x1b, 0x93, 0x49, 0x37, 0xb0, 0x7c, 0x67, 0x8e, 0x9e,
+ 0xf6, 0xe2, 0x5e, 0x3c, 0xcb, 0xcc, 0x2f, 0xc0, 0x50, 0x8f, 0xf4, 0xaa,
+ 0x04, 0x8d, 0x7b, 0x15, 0xf9, 0x89, 0xa6, 0x2f, 0x8a, 0xc3, 0xa0, 0x07,
+ 0x32, 0x6f, 0x25, 0x3c, 0x88, 0xa4, 0xf2, 0x93, 0x3c, 0x49, 0xe7, 0x84,
+ 0xb0, 0xc6, 0x77, 0xb3, 0x84, 0xcb, 0x0b, 0xb9, 0x00, 0x44, 0xd1, 0xca,
+ 0xea, 0x1e, 0xcc, 0xe2, 0x6f, 0xe9, 0x2b, 0x73, 0xfe, 0x13, 0x07, 0x27,
+ 0x36, 0x36, 0xc7, 0x0b, 0x7d, 0x76, 0xa2, 0xde, 0x96, 0xb1, 0x4a, 0xe4,
+ 0x05, 0x5f, 0x35, 0x1e, 0x01, 0x01, 0xfd, 0x80, 0x5f, 0x5a, 0xfd, 0x55,
+ 0x80, 0xe6, 0x76, 0xd9, 0xec, 0xfc, 0x1c, 0x4a, 0xf0, 0x3c, 0xec, 0x47,
+ 0x62, 0xca, 0x80, 0x12, 0x94, 0x7f, 0x3d, 0xc8, 0xe1, 0x7d, 0xdd, 0x20,
+ 0x01, 0xe3, 0x48, 0xdc, 0x78, 0xef, 0x45, 0x49, 0x30, 0x8d, 0xeb, 0xae,
+ 0x2a, 0x5a, 0x82, 0x40, 0x61, 0x16, 0xdb, 0x5c, 0x4c, 0x04, 0x0b, 0xc1,
+ 0x51, 0x64, 0xfb, 0x43, 0x2d, 0x71, 0xef, 0xf1, 0x76, 0xe4, 0xb6, 0xb8,
+ 0x9d, 0x27, 0x4f, 0xf4, 0x23, 0xaf, 0x56, 0x9f, 0x44, 0x7c, 0xb0, 0xb7,
+ 0x87, 0x89, 0xce, 0x05, 0xec, 0x06, 0xc3, 0x7f, 0xa1, 0x6c, 0xc3, 0xe1,
+ 0xa7, 0xd8, 0x02, 0xfc, 0x70, 0xd0, 0xd3, 0x40, 0x95, 0x85, 0x1c, 0x4b,
+ 0x15, 0x62, 0x00, 0x00, 0x62, 0xfb, 0xc3, 0x15, 0x6d, 0xf8, 0x4b, 0x50,
+ 0x52, 0xfd, 0xc9, 0x3a, 0xaf, 0x43, 0x22, 0x5e, 0xab, 0x76, 0x5a, 0x35,
+ 0x25, 0x32, 0x4c, 0x07, 0xf4, 0x03, 0xb6, 0x01, 0x09, 0xd8, 0x00, 0x00,
+ 0x32, 0x15, 0x7f, 0x79, 0xfe, 0x69, 0x79, 0x1c, 0x34, 0xe3, 0xdf, 0x9a,
+ 0xef, 0x31, 0xf4, 0x79, 0xad, 0x38, 0xf1, 0xee, 0x89, 0x95, 0x46, 0x56,
+ 0x82, 0x04, 0x7a, 0xda, 0xd5, 0x23, 0x00, 0x2b, 0x11, 0xa1, 0x5a, 0xc6,
+ 0x23, 0x46, 0xde, 0x9c, 0x86, 0x99, 0x4f, 0xd0, 0xf7, 0x10, 0xe7, 0x1d,
+ 0xd7, 0xed, 0xbd, 0xb1, 0x95, 0xcf, 0x2b, 0x2d, 0x97, 0x46, 0x1e, 0x95,
+ 0x69, 0x7d, 0x21, 0x11, 0x33, 0x37, 0x10, 0x17, 0xee, 0xb7, 0x64, 0x48,
+ 0x08, 0xf9, 0xd3, 0x56, 0xb5, 0xa8, 0x74, 0xb2, 0xc6, 0xe4, 0x07, 0x42,
+ 0x42, 0x30, 0x4c, 0x5e, 0x30, 0x1f, 0xce, 0x0e, 0x65, 0x03, 0x23, 0xfd,
+ 0x1b, 0x19, 0x73, 0xa5, 0xdb, 0xb0, 0x91, 0x11, 0xcd, 0x00, 0x00, 0x21,
+ 0x27, 0xb7, 0x3b, 0x45, 0x88, 0xc4, 0xbc, 0x47, 0xfb, 0x2d, 0xaf, 0x28,
+ 0x25, 0xb9, 0x7b, 0x38, 0xa6, 0xdd, 0x9c, 0x86, 0x56, 0xcc, 0xf2, 0x24,
+ 0xd0, 0x9a, 0xc9, 0x9e, 0x94, 0x00, 0x00, 0x76, 0xf1, 0xe7, 0xb1, 0xad,
+ 0x26, 0xbf, 0x5e, 0x04, 0xd1, 0x6e, 0x95, 0x18, 0x12, 0x8d, 0xce, 0x45,
+ 0xeb, 0x91, 0xce, 0xaa, 0x88, 0x7c, 0x65, 0xd5, 0x74, 0x9b, 0x05, 0xa4,
+ 0x3d, 0x00, 0x00, 0x11, 0x70, 0x70, 0xcc, 0x62, 0xe4, 0x70, 0xa3, 0x65,
+ 0x0a, 0x3e, 0xbe, 0xac, 0xbe, 0xdc, 0xeb, 0x2f, 0xe4, 0xe6, 0xec, 0x10,
+ 0x3a, 0x5a, 0x90, 0xd8, 0xb6, 0xa2, 0x4a, 0x3f, 0x27, 0x00, 0x00, 0x10,
+ 0x15, 0x11, 0xc1, 0x14, 0x9e, 0x53, 0x4e, 0x02, 0xe3, 0x1b, 0x90, 0x3e,
+ 0x3a, 0x65, 0xa4, 0x87, 0xaa, 0x24, 0xa0, 0x16, 0x59, 0x54, 0x7f, 0x10,
+ 0xb4, 0x73, 0x67, 0x55, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00
+//};
+//unsigned int sig_sha256_rndbase_msg1_dat_len = 577;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/member1/sig_sha256_bsn0_msg0.inc b/epid/common-testhelper/1.1/testdata/grp_x/member1/sig_sha256_bsn0_msg0.inc
new file mode 100644
index 0000000..13704b1
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/member1/sig_sha256_bsn0_msg0.inc
@@ -0,0 +1,79 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 Signature
+ * Group : grpX
+ * Signer : member1
+ * HashAlg : Sha256
+ * Message : "test message"
+ * Basename: "basename1"
+ * SigRl : group x sigrl
+ */
+//unsigned char sig_sha256_bsn0_msg0_dat[] = {
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53,
+ 0xba, 0x1e, 0x1b, 0x0e, 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09,
+ 0x4f, 0xcd, 0xb6, 0xe6, 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72,
+ 0xfa, 0x85, 0x0f, 0x5c, 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64,
+ 0xda, 0xa9, 0x8e, 0xf5, 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb,
+ 0x0a, 0x9d, 0x02, 0xc0, 0x33, 0xec, 0x2a, 0x70, 0x2e, 0x50, 0xd9, 0xca,
+ 0x8f, 0x12, 0x5b, 0xfc, 0xc8, 0x02, 0x58, 0xff, 0xc9, 0xb8, 0xc1, 0x91,
+ 0x59, 0x33, 0x1e, 0xdb, 0x17, 0x8c, 0x2b, 0x24, 0x03, 0x8f, 0x1a, 0xcd,
+ 0x6b, 0x69, 0x1d, 0xd0, 0xa5, 0x79, 0x11, 0x92, 0x6b, 0x26, 0xe2, 0xc5,
+ 0xec, 0xa8, 0x85, 0x7b, 0xe0, 0x4f, 0xb0, 0x3c, 0x41, 0xc2, 0xa5, 0x8e,
+ 0xb9, 0x74, 0xe6, 0xa5, 0x69, 0xca, 0x86, 0x34, 0xf0, 0x74, 0xaa, 0x95,
+ 0x03, 0x5a, 0xbe, 0x40, 0xcd, 0x53, 0x62, 0x56, 0x50, 0x42, 0x0c, 0x75,
+ 0xe3, 0x93, 0x3a, 0x87, 0x69, 0x0d, 0x18, 0x71, 0xd0, 0xfb, 0x5e, 0xd9,
+ 0xf9, 0x58, 0xb0, 0x8b, 0x64, 0xd5, 0x35, 0x17, 0x03, 0x45, 0x25, 0x4e,
+ 0x6b, 0x10, 0x1c, 0x1e, 0x87, 0x4d, 0xe1, 0x79, 0xf4, 0x41, 0x61, 0xf5,
+ 0x45, 0xf0, 0x72, 0x37, 0x41, 0x0c, 0x11, 0x74, 0x48, 0x98, 0x0e, 0xb4,
+ 0x65, 0x25, 0xcf, 0xad, 0x06, 0x2c, 0x1f, 0x4f, 0x01, 0xf8, 0x8b, 0xa6,
+ 0x79, 0xe3, 0x53, 0xf9, 0xe6, 0x26, 0xa1, 0x08, 0xdf, 0x0f, 0x6f, 0xff,
+ 0x92, 0x6b, 0xcb, 0x4c, 0x6a, 0x66, 0xe2, 0xb0, 0xad, 0x37, 0x05, 0xba,
+ 0x03, 0x27, 0xef, 0xad, 0x48, 0xb9, 0xd3, 0xe3, 0x10, 0xba, 0x28, 0xf7,
+ 0x76, 0xf6, 0xd1, 0xe3, 0x8d, 0x17, 0x3d, 0xdc, 0x38, 0xd0, 0x2c, 0xa4,
+ 0x34, 0xc8, 0x04, 0x39, 0xe8, 0xfb, 0xd6, 0xa0, 0x98, 0x64, 0x75, 0xbd,
+ 0xa9, 0xfb, 0x8e, 0x8b, 0x3a, 0x51, 0xa8, 0x0d, 0x75, 0x89, 0x9f, 0xe9,
+ 0x23, 0xe0, 0xfe, 0x3d, 0x52, 0x67, 0x95, 0xf6, 0x12, 0xe7, 0x9f, 0x23,
+ 0xfd, 0xba, 0xcb, 0xc8, 0xc5, 0x76, 0xca, 0x19, 0xb6, 0xfe, 0x00, 0x78,
+ 0x63, 0x0c, 0x00, 0x00, 0x17, 0x98, 0x13, 0xf3, 0x2e, 0xd1, 0x6c, 0xa1,
+ 0x58, 0x54, 0x4f, 0xcb, 0x68, 0xae, 0xe9, 0xbc, 0x52, 0xfc, 0x95, 0x4b,
+ 0x31, 0x23, 0x44, 0x30, 0x99, 0xdf, 0x40, 0x7f, 0xb8, 0xb1, 0x00, 0x00,
+ 0x3b, 0x35, 0x7b, 0x2b, 0xaf, 0xd7, 0x5f, 0x53, 0xeb, 0x10, 0x66, 0xa9,
+ 0x68, 0x23, 0xea, 0xbc, 0xa0, 0xdc, 0xb4, 0x4a, 0x1f, 0xd5, 0x15, 0x46,
+ 0x99, 0xb3, 0x7b, 0x44, 0xc9, 0xfc, 0x00, 0x47, 0x6e, 0xac, 0x44, 0xeb,
+ 0x65, 0x06, 0x7a, 0x3a, 0x57, 0xa1, 0x18, 0x4a, 0x70, 0x33, 0x7a, 0x5b,
+ 0x8f, 0x26, 0x5f, 0xfb, 0x13, 0x72, 0x58, 0xbd, 0xec, 0xc4, 0xe7, 0x7a,
+ 0x65, 0x18, 0xb4, 0x8b, 0x68, 0xa0, 0x53, 0x3f, 0xc0, 0x26, 0x67, 0xca,
+ 0x1c, 0xd4, 0x3d, 0x60, 0x62, 0x2f, 0x9f, 0x8c, 0xac, 0xd1, 0x80, 0xfd,
+ 0x9b, 0x6f, 0xe1, 0xd1, 0x3c, 0x65, 0x4e, 0x0d, 0x34, 0xca, 0x85, 0xe4,
+ 0x55, 0xf7, 0x4e, 0x41, 0x28, 0xea, 0xab, 0xef, 0x96, 0x00, 0x00, 0x54,
+ 0xbf, 0x83, 0x72, 0x76, 0x1c, 0xe5, 0xe5, 0x2e, 0xfc, 0xc7, 0x8a, 0x13,
+ 0xd8, 0x92, 0x5c, 0xab, 0x9e, 0x00, 0xf2, 0xbe, 0xf9, 0xfb, 0x63, 0x30,
+ 0xf5, 0x53, 0xa2, 0x99, 0x49, 0x00, 0x00, 0x0b, 0x9f, 0x78, 0x17, 0xc2,
+ 0xa5, 0x4f, 0xc1, 0x38, 0xe1, 0x75, 0xf6, 0x46, 0x2a, 0x8e, 0x45, 0xdf,
+ 0xbd, 0x39, 0xa0, 0x6d, 0xf8, 0x75, 0x68, 0xce, 0x73, 0xad, 0x56, 0xea,
+ 0xe0, 0x00, 0x00, 0x0e, 0xc6, 0xa7, 0x88, 0x43, 0xc2, 0xdb, 0xbf, 0x73,
+ 0xa3, 0xa1, 0xdb, 0x46, 0xd8, 0x89, 0xca, 0xea, 0x11, 0xf7, 0x6c, 0x47,
+ 0xea, 0x0d, 0xdd, 0x52, 0x7d, 0x33, 0xef, 0x65, 0xdb, 0x00, 0x00, 0x0f,
+ 0x48, 0xd4, 0x3f, 0xbc, 0x4e, 0xc3, 0xd9, 0x59, 0x52, 0x65, 0xbb, 0xbc,
+ 0x13, 0xa0, 0xb8, 0x51, 0xef, 0xdc, 0x11, 0x94, 0xa6, 0xc4, 0x09, 0x83,
+ 0x3d, 0xe2, 0x7e, 0x09, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00
+//};
+//unsigned int sig_sha256_bsn0_msg0_dat_len = 577;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey000.inc b/epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey000.inc
new file mode 100644
index 0000000..b1dc8e8
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey000.inc
@@ -0,0 +1,79 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data for revoked privrl.
+ *
+ * Type : Intel(R) EPID 1.1 Signature
+ * Group : grpX
+ * Signer : privrevoked->member000
+ * HashAlg : Sha256
+ * Message : "test message"
+ * Basename: "basename1"
+ * SigRl : groupx empty sigrl
+ */
+ //unsigned char sig_sha256_bsn0_msg0_revkey000_dat[] = {
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53,
+ 0xba, 0x1e, 0x1b, 0x0e, 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09,
+ 0x4f, 0xcd, 0xb6, 0xe6, 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72,
+ 0xfa, 0x85, 0x0f, 0x5c, 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64,
+ 0xda, 0xa9, 0x8e, 0xf5, 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb,
+ 0x0a, 0x9d, 0x02, 0xc0, 0x33, 0xec, 0x2a, 0x70, 0x06, 0x29, 0x78, 0xfc,
+ 0x10, 0xfc, 0x2c, 0xde, 0x10, 0xe7, 0xe0, 0x6b, 0xdd, 0x0a, 0x9a, 0xb7,
+ 0x0e, 0xad, 0x06, 0x41, 0x61, 0x2b, 0x4f, 0xc8, 0x31, 0x84, 0x64, 0x22,
+ 0xbb, 0xe1, 0x83, 0x77, 0x98, 0x03, 0x0e, 0x5c, 0x01, 0x38, 0xd1, 0x9b,
+ 0x29, 0x3f, 0xc3, 0x6f, 0x1d, 0x1a, 0x92, 0x9f, 0xab, 0x47, 0x6f, 0x42,
+ 0xf4, 0x79, 0x96, 0xae, 0x74, 0x45, 0xbf, 0x33, 0xb5, 0x93, 0xf6, 0x74,
+ 0x06, 0xbb, 0xf0, 0x0c, 0x9f, 0x2a, 0x41, 0x1f, 0xc9, 0x90, 0x34, 0x41,
+ 0xf5, 0xdc, 0xcc, 0x65, 0x7e, 0xfc, 0x00, 0xec, 0x9a, 0x50, 0x76, 0x2c,
+ 0xc9, 0x39, 0x1b, 0x17, 0x19, 0x4e, 0x41, 0xa6, 0x03, 0xcc, 0xc6, 0xd9,
+ 0xcd, 0x5e, 0x24, 0xeb, 0x5b, 0xaf, 0x2c, 0x44, 0xdc, 0x29, 0x71, 0x8f,
+ 0x6e, 0x24, 0x86, 0xfa, 0x58, 0x6c, 0x0b, 0x67, 0x8a, 0xf9, 0xb9, 0x36,
+ 0x41, 0xdb, 0xa4, 0x3f, 0x00, 0x8c, 0xa8, 0x10, 0x9c, 0xca, 0xc8, 0xbd,
+ 0x7b, 0x08, 0x9c, 0xb0, 0x20, 0x10, 0x2b, 0x63, 0xff, 0x25, 0x19, 0x48,
+ 0x69, 0x85, 0x92, 0x74, 0xc1, 0x3c, 0x26, 0x9a, 0x9c, 0x10, 0x42, 0x42,
+ 0x08, 0xe2, 0x9f, 0x98, 0xee, 0xb8, 0xc7, 0x6e, 0x0a, 0x87, 0x8a, 0x27,
+ 0x6d, 0xe7, 0x27, 0x22, 0xcf, 0x23, 0x14, 0x8c, 0x4e, 0xfe, 0x33, 0x3b,
+ 0xa4, 0x14, 0x3e, 0x37, 0x6a, 0x39, 0xfe, 0x12, 0xd0, 0x5b, 0xa5, 0x08,
+ 0x3d, 0x85, 0x71, 0xeb, 0xa5, 0xe8, 0x5a, 0x9f, 0xcb, 0xb4, 0xdb, 0xce,
+ 0x32, 0x49, 0x9a, 0xba, 0xda, 0x37, 0x23, 0x45, 0x16, 0x50, 0x60, 0x15,
+ 0x4b, 0xc1, 0xfd, 0xfb, 0x00, 0x9c, 0x67, 0xae, 0xc0, 0x98, 0xbb, 0x63,
+ 0x52, 0x7b, 0x00, 0x00, 0x82, 0xec, 0xd1, 0xd1, 0x45, 0xd6, 0x9e, 0x42,
+ 0x9a, 0x18, 0xe7, 0x1e, 0x52, 0x27, 0xed, 0x65, 0x90, 0x95, 0xc1, 0x79,
+ 0x3d, 0x0b, 0x2e, 0x84, 0xdd, 0xcc, 0xdc, 0xc3, 0x46, 0x17, 0x00, 0x00,
+ 0x7c, 0xce, 0x2e, 0x41, 0xd1, 0x68, 0xa8, 0xdb, 0xea, 0x42, 0x7a, 0x67,
+ 0xf7, 0x6b, 0xae, 0xb4, 0xc2, 0xdf, 0x8d, 0xbb, 0xd5, 0xdb, 0x1c, 0x88,
+ 0xca, 0x68, 0x4a, 0xc9, 0xdb, 0x18, 0x00, 0x9a, 0x1b, 0x74, 0xf0, 0x79,
+ 0xfc, 0xa8, 0x10, 0xb3, 0xec, 0x6b, 0x48, 0xdf, 0xbc, 0x89, 0xd6, 0x78,
+ 0xb4, 0xff, 0xb1, 0xae, 0x76, 0xec, 0x97, 0xa1, 0x72, 0x8e, 0xfe, 0x1d,
+ 0x30, 0xa3, 0xda, 0x64, 0x59, 0xf8, 0x28, 0x5b, 0xa5, 0x9c, 0x05, 0x2c,
+ 0x96, 0x45, 0x00, 0xd4, 0xb5, 0xab, 0x93, 0x2e, 0x34, 0x04, 0x09, 0x15,
+ 0x22, 0x9e, 0xf3, 0x44, 0x5e, 0xaa, 0xfc, 0xce, 0x1f, 0x05, 0x67, 0xe2,
+ 0x58, 0xa8, 0x88, 0xb2, 0x77, 0x5d, 0x23, 0x41, 0x9a, 0x00, 0x00, 0x5f,
+ 0xed, 0x04, 0x87, 0x17, 0x46, 0xcb, 0xb3, 0x94, 0x07, 0x58, 0xa5, 0xc2,
+ 0x98, 0xaa, 0xc1, 0x58, 0x30, 0x1f, 0x45, 0x28, 0xad, 0xbf, 0xce, 0x7d,
+ 0xb6, 0xb7, 0x80, 0x8f, 0x57, 0x00, 0x00, 0x2d, 0x5b, 0xc3, 0x9f, 0x99,
+ 0xb6, 0xb4, 0x15, 0x98, 0x4b, 0xb7, 0x3c, 0xb1, 0x1a, 0x7a, 0x78, 0xcd,
+ 0x03, 0xd0, 0xe7, 0x36, 0x1e, 0xdc, 0x13, 0x28, 0x5d, 0xdc, 0x4b, 0x47,
+ 0x18, 0x00, 0x00, 0x61, 0x3d, 0xa0, 0x18, 0x14, 0xbd, 0x62, 0xdc, 0x75,
+ 0xf5, 0xfc, 0xf4, 0xcc, 0x34, 0x9b, 0x9a, 0x7f, 0x61, 0xaa, 0x18, 0x1c,
+ 0xe3, 0x54, 0x51, 0xb5, 0x0c, 0xe2, 0xa6, 0x90, 0x0b, 0x00, 0x00, 0x19,
+ 0x92, 0x07, 0x28, 0xc1, 0x79, 0xd1, 0xb2, 0xba, 0x4b, 0xcb, 0x7e, 0x85,
+ 0x67, 0x24, 0xab, 0x74, 0x63, 0xe8, 0x47, 0x4a, 0x30, 0x1c, 0x26, 0x18,
+ 0x98, 0x43, 0x16, 0xc6, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00
+//};
+//unsigned int sig_sha256_bsn0_msg0_revkey000_dat_len = 573;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey001.inc b/epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey001.inc
new file mode 100644
index 0000000..151527f
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey001.inc
@@ -0,0 +1,79 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data for revoked privrl.
+ *
+ * Type : Intel(R) EPID 1.1 Signature
+ * Group : grpX
+ * Signer : privrevoked->member001
+ * HashAlg : Sha256
+ * Message : "test message"
+ * Basename: "basename1"
+ * SigRl : groupx empty sigrl
+ */
+ //unsigned char sig_sha256_bsn0_msg0_revkey000_dat[] = {
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53,
+ 0xba, 0x1e, 0x1b, 0x0e, 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09,
+ 0x4f, 0xcd, 0xb6, 0xe6, 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72,
+ 0xfa, 0x85, 0x0f, 0x5c, 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64,
+ 0xda, 0xa9, 0x8e, 0xf5, 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb,
+ 0x0a, 0x9d, 0x02, 0xc0, 0x33, 0xec, 0x2a, 0x70, 0x26, 0xbb, 0xb1, 0x25,
+ 0x06, 0xa9, 0xaf, 0xff, 0x35, 0xc2, 0xb5, 0x36, 0x4b, 0xbd, 0x36, 0xc3,
+ 0x64, 0x50, 0x9a, 0x59, 0xf6, 0x50, 0x84, 0x70, 0xfd, 0xcd, 0xfb, 0x13,
+ 0x9a, 0x07, 0x32, 0x7b, 0xc7, 0x7c, 0xff, 0x33, 0x99, 0x8e, 0xb1, 0x86,
+ 0x45, 0xb6, 0xea, 0xc2, 0x90, 0x33, 0xdc, 0x1e, 0x63, 0x26, 0x26, 0xe1,
+ 0xe4, 0x57, 0x3d, 0x9c, 0x61, 0x3a, 0x50, 0x14, 0x3d, 0xbb, 0x22, 0x9b,
+ 0x00, 0xfc, 0x22, 0xec, 0x97, 0xe9, 0x65, 0xdd, 0x83, 0x81, 0xf3, 0xf2,
+ 0x21, 0x66, 0x73, 0xa3, 0x5a, 0x43, 0x9c, 0x0e, 0x00, 0x19, 0x89, 0x3b,
+ 0x0a, 0xad, 0xa1, 0xa8, 0xad, 0x86, 0x5c, 0xc2, 0x07, 0xd3, 0x9c, 0xa0,
+ 0xa7, 0x08, 0xb0, 0x5e, 0x01, 0xe2, 0xf9, 0xcc, 0x55, 0x3c, 0x13, 0x40,
+ 0x8c, 0x8f, 0x9f, 0x2d, 0x6d, 0xb0, 0x94, 0x5c, 0x7b, 0xb3, 0x2d, 0xea,
+ 0x12, 0xd4, 0x3f, 0x84, 0x03, 0x6d, 0x19, 0xbc, 0x4d, 0x29, 0x44, 0x8d,
+ 0xa5, 0x5c, 0xc2, 0x5e, 0x20, 0x1f, 0x1f, 0xdd, 0x1d, 0x02, 0x96, 0x4c,
+ 0x23, 0xa1, 0xe0, 0xe6, 0x66, 0x67, 0x41, 0x2f, 0xcb, 0xb7, 0x61, 0x60,
+ 0x05, 0xa9, 0x80, 0x8a, 0xd0, 0x7b, 0x4e, 0xb4, 0xc0, 0xdd, 0xf4, 0xd7,
+ 0xd1, 0x6d, 0x7f, 0xab, 0x50, 0xbf, 0xbc, 0x9b, 0x68, 0xf3, 0x4b, 0xd9,
+ 0xee, 0x25, 0x4e, 0x32, 0x93, 0xc2, 0x3d, 0x2d, 0x2e, 0xa8, 0xc8, 0x40,
+ 0xc6, 0xca, 0xa4, 0xb4, 0xf2, 0xb9, 0xc8, 0x76, 0xb0, 0x48, 0x71, 0xe3,
+ 0xf7, 0x2d, 0x55, 0x0b, 0xdb, 0x17, 0xc6, 0x15, 0x07, 0x96, 0x45, 0x65,
+ 0x4e, 0xd8, 0xb1, 0x08, 0xc4, 0xd6, 0x6b, 0x40, 0x1f, 0x6d, 0xb9, 0xc0,
+ 0x35, 0x31, 0x00, 0x00, 0x2b, 0x55, 0xb4, 0x60, 0x26, 0x2c, 0x5d, 0xab,
+ 0xf3, 0x66, 0x09, 0x2d, 0x33, 0xd6, 0x74, 0x34, 0x39, 0xba, 0x76, 0xfc,
+ 0xc3, 0xfd, 0x10, 0x3a, 0x72, 0x30, 0x53, 0x8d, 0x8b, 0x82, 0x00, 0x00,
+ 0x50, 0x41, 0x2f, 0x3f, 0x08, 0x27, 0x68, 0x63, 0x02, 0xdd, 0xb1, 0x1b,
+ 0x42, 0xd2, 0x2d, 0x26, 0x97, 0xa3, 0x13, 0x04, 0xe3, 0x6e, 0x8b, 0x19,
+ 0x5a, 0x14, 0xf9, 0x0d, 0xa2, 0x67, 0x00, 0xd0, 0x38, 0x85, 0x83, 0xf7,
+ 0x0b, 0x26, 0x97, 0x66, 0x91, 0x20, 0xbb, 0x27, 0x22, 0xaa, 0x6e, 0x6b,
+ 0x36, 0x1a, 0xa6, 0x1e, 0x0a, 0xb2, 0x83, 0x37, 0xf8, 0xea, 0xc2, 0x6c,
+ 0x35, 0xa5, 0x71, 0xfd, 0xec, 0x97, 0x69, 0x28, 0xa0, 0x22, 0xcd, 0x4a,
+ 0x2f, 0x7b, 0x64, 0x48, 0x5c, 0xfe, 0x6d, 0xdc, 0x71, 0x2d, 0x1e, 0x66,
+ 0xea, 0x89, 0x9f, 0x52, 0x0c, 0xc4, 0x48, 0x91, 0x7e, 0xae, 0x02, 0xbf,
+ 0x92, 0xe7, 0xa5, 0xcb, 0x38, 0xe7, 0xe1, 0x2a, 0xc2, 0x00, 0x00, 0x11,
+ 0x06, 0xe4, 0x48, 0x68, 0xe7, 0xe1, 0x35, 0x4c, 0xd5, 0x21, 0x1f, 0x47,
+ 0x3f, 0x1f, 0x60, 0xd3, 0x54, 0x8f, 0x5c, 0xf6, 0xba, 0x39, 0xaa, 0x3e,
+ 0x25, 0x83, 0x9c, 0xd2, 0xbe, 0x00, 0x00, 0x60, 0xda, 0xd4, 0xae, 0x6b,
+ 0xb3, 0x48, 0xbc, 0x59, 0x10, 0x01, 0x25, 0xe5, 0xe1, 0x8f, 0x24, 0x3f,
+ 0x32, 0x34, 0x29, 0x73, 0x42, 0x22, 0x6f, 0xa4, 0x32, 0x47, 0x8d, 0xde,
+ 0x82, 0x00, 0x00, 0x35, 0x27, 0x8b, 0xfb, 0x4d, 0x69, 0x4d, 0xb0, 0xcb,
+ 0xf0, 0x02, 0x19, 0xde, 0xe1, 0x64, 0x82, 0x66, 0xd6, 0x44, 0x51, 0x7c,
+ 0x25, 0x95, 0xf7, 0x6c, 0x1a, 0x68, 0xd9, 0xbf, 0x77, 0x00, 0x00, 0x66,
+ 0x94, 0x58, 0x4c, 0x22, 0x52, 0x46, 0xa5, 0x8c, 0x26, 0x13, 0xa1, 0xdd,
+ 0x3e, 0x2b, 0xd1, 0x81, 0x09, 0x64, 0xb9, 0xc3, 0x1a, 0x2e, 0xb7, 0xc6,
+ 0xee, 0xbc, 0x28, 0xc9, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00
+//};
+//unsigned int sig_sha256_bsn0_msg0_revkey000_dat_len = 573;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey002.inc b/epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey002.inc
new file mode 100644
index 0000000..c2ddb24
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey002.inc
@@ -0,0 +1,79 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data for revoked privrl.
+ *
+ * Type : Intel(R) EPID 1.1 Signature
+ * Group : grpX
+ * Signer : privrevoked->member002
+ * HashAlg : Sha256
+ * Message : "test message"
+ * Basename: "basename1"
+ * SigRl : groupx empty sigrl
+ */
+ //unsigned char sig_sha256_bsn0_msg0_revkey000_dat[] = {
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53,
+ 0xba, 0x1e, 0x1b, 0x0e, 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09,
+ 0x4f, 0xcd, 0xb6, 0xe6, 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72,
+ 0xfa, 0x85, 0x0f, 0x5c, 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64,
+ 0xda, 0xa9, 0x8e, 0xf5, 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb,
+ 0x0a, 0x9d, 0x02, 0xc0, 0x33, 0xec, 0x2a, 0x70, 0x09, 0xbd, 0x15, 0x9f,
+ 0x7f, 0x5f, 0x39, 0x6a, 0xe4, 0x92, 0x3b, 0x9c, 0x63, 0xed, 0xd4, 0x84,
+ 0xb7, 0xda, 0xff, 0xea, 0xb5, 0x5d, 0x17, 0xc2, 0xeb, 0x29, 0x16, 0xd8,
+ 0xbc, 0x59, 0x33, 0xd2, 0xd5, 0x6d, 0x89, 0xdf, 0xe4, 0x17, 0x8a, 0xa0,
+ 0x94, 0x9d, 0x29, 0xcb, 0xc7, 0x97, 0x63, 0x35, 0x5a, 0x50, 0xa4, 0x0d,
+ 0x93, 0x34, 0x39, 0x39, 0xf9, 0x46, 0xa1, 0xa8, 0x81, 0x18, 0xf7, 0xc9,
+ 0x05, 0xb5, 0x07, 0xcf, 0x2e, 0xa4, 0xbf, 0x69, 0x99, 0x98, 0x32, 0x2f,
+ 0xa9, 0x1d, 0x65, 0x0c, 0x48, 0x5f, 0xd8, 0x1f, 0x9f, 0xba, 0x21, 0x3a,
+ 0xf5, 0x34, 0xae, 0x30, 0xa7, 0xbc, 0xa0, 0x0a, 0x06, 0x9f, 0xfc, 0xe0,
+ 0x7c, 0xea, 0x0c, 0xc4, 0xbc, 0x59, 0x6e, 0x71, 0x90, 0x2e, 0x5d, 0x76,
+ 0x31, 0x12, 0x2d, 0x62, 0x05, 0xd1, 0x72, 0xe6, 0xb7, 0x5d, 0x11, 0x5f,
+ 0xd4, 0x67, 0x8e, 0x50, 0x02, 0x19, 0xb0, 0x26, 0x74, 0xdb, 0x7c, 0x21,
+ 0x8c, 0xd8, 0xff, 0x12, 0xb7, 0xa6, 0x49, 0xfc, 0x3f, 0x9a, 0xed, 0x8c,
+ 0x5e, 0x99, 0xfb, 0xa2, 0xd7, 0xff, 0x88, 0x54, 0x09, 0xd6, 0x26, 0x2c,
+ 0x04, 0xa6, 0x4d, 0xb3, 0xec, 0x6c, 0x76, 0xc1, 0x67, 0x2d, 0xfd, 0xa4,
+ 0xfb, 0x69, 0x61, 0x49, 0xf7, 0x38, 0x4d, 0x25, 0xd6, 0x93, 0x0b, 0xee,
+ 0x3d, 0x19, 0x92, 0xb4, 0x6b, 0x36, 0x4c, 0x63, 0x33, 0x90, 0x51, 0xc4,
+ 0x5e, 0x41, 0x0c, 0xe8, 0x4c, 0x3d, 0x50, 0xd9, 0x88, 0x27, 0xe7, 0xfb,
+ 0x40, 0xe6, 0x1d, 0x12, 0x0c, 0x6e, 0x63, 0x45, 0x46, 0xa2, 0x89, 0x60,
+ 0x14, 0x14, 0xc3, 0x75, 0xe0, 0xf1, 0x86, 0x74, 0x7d, 0x8d, 0xf4, 0x81,
+ 0xd7, 0x35, 0x00, 0x00, 0x35, 0x79, 0x11, 0x1d, 0xc0, 0x44, 0x4b, 0x09,
+ 0x72, 0x8d, 0x46, 0x63, 0xc7, 0xfa, 0x37, 0x4a, 0xe8, 0xcd, 0x9f, 0x1b,
+ 0x3e, 0xb6, 0x3b, 0x51, 0x46, 0x2a, 0x33, 0xde, 0xdd, 0x2a, 0x00, 0x00,
+ 0x3f, 0x8e, 0x95, 0xe4, 0x17, 0x26, 0xf4, 0x6a, 0x99, 0xf6, 0x19, 0x0b,
+ 0x4d, 0x44, 0x32, 0x63, 0x95, 0xff, 0x2b, 0x23, 0x79, 0xa4, 0xfe, 0xd7,
+ 0x16, 0x91, 0x5b, 0x88, 0x6d, 0x54, 0x00, 0x76, 0xae, 0xc3, 0xca, 0x2b,
+ 0x12, 0x25, 0x9a, 0x14, 0xde, 0x25, 0x96, 0x40, 0xdf, 0x54, 0x7b, 0x4c,
+ 0x79, 0x1e, 0xe0, 0x1d, 0x91, 0xdc, 0xd1, 0x90, 0x71, 0x52, 0x1a, 0x70,
+ 0xad, 0xd8, 0xc2, 0x53, 0x7e, 0xf1, 0x8c, 0xbd, 0x6b, 0x25, 0xab, 0x8e,
+ 0xd6, 0x93, 0x7a, 0xa9, 0x03, 0x96, 0xde, 0x7b, 0xad, 0x06, 0x5d, 0x26,
+ 0x5a, 0xdf, 0x9f, 0x1f, 0x2e, 0x57, 0xf9, 0x5d, 0xde, 0xe2, 0xe6, 0xf3,
+ 0x70, 0x2a, 0xac, 0xfd, 0x43, 0xa1, 0x8e, 0xc6, 0xf1, 0x00, 0x00, 0x72,
+ 0x7e, 0xb4, 0x6d, 0xbf, 0x32, 0x69, 0xeb, 0x71, 0x19, 0x03, 0x91, 0x9d,
+ 0xca, 0x98, 0xe9, 0x84, 0x34, 0xb7, 0xab, 0x33, 0x00, 0x1a, 0xf4, 0x4e,
+ 0x48, 0x0d, 0xc3, 0xe9, 0xe7, 0x00, 0x00, 0x08, 0x05, 0x73, 0xf4, 0xb0,
+ 0x38, 0xaa, 0xe1, 0xba, 0xd5, 0x11, 0x49, 0x21, 0xb2, 0x04, 0x8c, 0xba,
+ 0xd5, 0xb8, 0xcc, 0xf8, 0x29, 0x78, 0x4a, 0x80, 0xd8, 0x0e, 0xac, 0x04,
+ 0x00, 0x00, 0x00, 0x0c, 0xc1, 0xe7, 0xcd, 0xac, 0xb9, 0xea, 0x87, 0xae,
+ 0x15, 0xa2, 0x47, 0xf1, 0x4e, 0x28, 0x03, 0x38, 0x59, 0x11, 0xd5, 0x08,
+ 0xc0, 0x71, 0x23, 0xfe, 0x8e, 0x3e, 0xbc, 0x2d, 0xde, 0x00, 0x00, 0x05,
+ 0xd9, 0x48, 0xc2, 0x69, 0x3b, 0x6d, 0x03, 0x3b, 0x3b, 0xc5, 0xfe, 0x1d,
+ 0xd9, 0x7b, 0xb7, 0x20, 0x2f, 0xa8, 0x3c, 0x03, 0xc4, 0x5a, 0x74, 0xeb,
+ 0xed, 0x9b, 0x18, 0xb6, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00
+//};
+//unsigned int sig_sha256_bsn0_msg0_revkey000_dat_len = 573;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/privrl.inc b/epid/common-testhelper/1.1/testdata/grp_x/privrl.inc
new file mode 100644
index 0000000..3b55ca6
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/privrl.inc
@@ -0,0 +1,43 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 private-key based revocation list
+ * Group : grpX
+ */
+//unsigned char privrl_dat[] = {
+ // Group ID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RLver
+ 0x00, 0x00, 0x00, 0x03,
+ // n1
+ 0x00, 0x00, 0x00, 0x03,
+ // f[1]
+ 0x00, 0x00, 0x3f, 0x47, 0x7d, 0x79, 0x63, 0x82,
+ 0x72, 0x64, 0x0e, 0x44, 0xd4, 0x1a, 0x05, 0xae, 0xf0, 0x04, 0x15, 0x15,
+ 0xc7, 0x3f, 0x31, 0xdf, 0x1e, 0x57, 0x5b, 0x59, 0xcb, 0x85, 0xd4, 0xbd,
+ // f[2]
+ 0x00, 0x00, 0x47, 0xe5, 0xea, 0x2e, 0x35, 0x1c,
+ 0x6e, 0xcb, 0x99, 0xfc, 0xa6, 0x30, 0xd2, 0xf4, 0x31, 0x38, 0xc3, 0x6e,
+ 0x28, 0xee, 0xfb, 0x02, 0x5a, 0x33, 0xc1, 0xe7, 0xf7, 0x5c, 0xb4, 0xcf,
+ // f[3]
+ 0x00, 0x00, 0x06, 0x77, 0x9f, 0xc2, 0xf7, 0x86,
+ 0x3e, 0x45, 0x56, 0xfe, 0x8b, 0xd1, 0x03, 0x5a, 0x0d, 0xe5, 0xc5, 0x24,
+ 0x11, 0x4b, 0x22, 0x29, 0x04, 0x48, 0xa5, 0x7b, 0x09, 0xc9, 0x61, 0xcc,
+//};
+// unsigned int privrl_dat_len = 108;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/privrl_single_entry.inc b/epid/common-testhelper/1.1/testdata/grp_x/privrl_single_entry.inc
new file mode 100644
index 0000000..b7eb744
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/privrl_single_entry.inc
@@ -0,0 +1,35 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 private-key based revocation list
+ * Group : grpX
+ */
+//unsigned char privrl_dat[] = {
+ // Group ID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RLver
+ 0x00, 0x00, 0x00, 0x01,
+ // n1
+ 0x00, 0x00, 0x00, 0x01,
+ // f[1]
+ 0x00, 0x00, 0x3f, 0x47, 0x7d, 0x79, 0x63, 0x82,
+ 0x72, 0x64, 0x0e, 0x44, 0xd4, 0x1a, 0x05, 0xae, 0xf0, 0x04, 0x15, 0x15,
+ 0xc7, 0x3f, 0x31, 0xdf, 0x1e, 0x57, 0x5b, 0x59, 0xcb, 0x85, 0xd4, 0xbd,
+//};
+//unsigned int privrl_dat_len = 44;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/sig_sha256_bsnrnd_msg0.inc b/epid/common-testhelper/1.1/testdata/grp_x/sig_sha256_bsnrnd_msg0.inc
new file mode 100644
index 0000000..00a0d12
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/sig_sha256_bsnrnd_msg0.inc
@@ -0,0 +1,78 @@
+//unsigned char sig_sha256_bsnrnd_msg0_dat[] = {
+//Basic sig
+0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53,
+0xba, 0x1e, 0x1b, 0x0e, 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09,
+0x4f, 0xcd, 0xb6, 0xe6, 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72,
+0xfa, 0x85, 0x0f, 0x5c, 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64,
+0xda, 0xa9, 0x8e, 0xf5, 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb,
+0x0a, 0x9d, 0x02, 0xc0, 0x33, 0xec, 0x2a, 0x70, 0xaa, 0x5f, 0x63, 0xcf,
+0x9d, 0x40, 0x8b, 0xba, 0xe7, 0x33, 0xd7, 0x8b, 0xd4, 0x05, 0x91, 0x30,
+0x28, 0xcb, 0x41, 0xb6, 0x8c, 0x3a, 0x90, 0x10, 0x37, 0x06, 0x14, 0x17,
+0x5f, 0xfd, 0x56, 0x71, 0x66, 0xaf, 0x13, 0xc8, 0xfc, 0xdd, 0x9d, 0xf2,
+0x0d, 0xc2, 0x8a, 0x06, 0x5c, 0x6d, 0x0b, 0xf8, 0x25, 0xcd, 0xe2, 0x9e,
+0xad, 0x52, 0xf3, 0x29, 0x4e, 0xb0, 0x5b, 0x3f, 0x22, 0xe8, 0x1f, 0xb2,
+0x06, 0xc7, 0x32, 0x18, 0x81, 0xbf, 0xd4, 0x19, 0x03, 0xcc, 0x09, 0x78,
+0x72, 0xcc, 0x40, 0x88, 0x38, 0x27, 0x25, 0x14, 0x7a, 0x9b, 0x25, 0xb9,
+0x92, 0x67, 0x98, 0x92, 0x5d, 0x5c, 0xaf, 0x1d, 0x08, 0xc6, 0x26, 0xa5,
+0x68, 0xa3, 0x89, 0xc4, 0x28, 0x9f, 0x9c, 0x7a, 0x0e, 0x02, 0xcf, 0x34,
+0x3b, 0x37, 0x78, 0x5b, 0x1d, 0x64, 0x17, 0x47, 0x4f, 0x75, 0xb4, 0xcc,
+0x8b, 0x7d, 0xa7, 0xe1, 0x04, 0x3b, 0x70, 0x67, 0xfb, 0xae, 0x06, 0xb9,
+0x38, 0xdf, 0x13, 0x2e, 0x40, 0x95, 0x2c, 0x09, 0x2a, 0xca, 0xfd, 0x18,
+0x32, 0x1c, 0x8b, 0x11, 0x1e, 0x43, 0xd2, 0x1c, 0x25, 0xd9, 0x72, 0x0b,
+0x04, 0xb8, 0x46, 0x6d, 0xc5, 0xf9, 0xf8, 0x1c, 0xf2, 0x7b, 0xe6, 0x8a,
+0xec, 0xa8, 0x2f, 0xd8, 0x05, 0x1f, 0x82, 0x4f, 0x9f, 0xd7, 0xf7, 0x15,
+0x4e, 0xe2, 0xd2, 0x1b, 0xe0, 0xf7, 0xef, 0x90, 0x48, 0x77, 0x13, 0x24,
+0x5d, 0xcb, 0x79, 0x7d, 0x0f, 0xc0, 0x1e, 0x6e, 0x87, 0x79, 0x04, 0x41,
+0xcd, 0xfb, 0x4d, 0x47, 0xa6, 0x6c, 0x39, 0x10, 0xed, 0x45, 0x5f, 0xd1,
+0x5f, 0x18, 0x5d, 0x68, 0x1d, 0x80, 0xfd, 0x68, 0xf1, 0x7c, 0xaf, 0x9a,
+0xd7, 0x34, 0x00, 0x00, 0x75, 0xdb, 0xe0, 0x83, 0x3c, 0x49, 0x9d, 0x2e,
+0xd1, 0x6c, 0x94, 0x7e, 0x7d, 0xb7, 0x35, 0x63, 0x2f, 0x5a, 0x45, 0x6c,
+0x96, 0x9d, 0x97, 0x38, 0xf4, 0xa9, 0x99, 0xe9, 0x2c, 0x55, 0x00, 0x00,
+0x4d, 0x8d, 0xac, 0x38, 0x12, 0x22, 0x42, 0x2e, 0xdc, 0x38, 0x05, 0xa3,
+0xc8, 0x13, 0x81, 0x4c, 0x6d, 0x92, 0x13, 0x2e, 0x25, 0x95, 0x96, 0x81,
+0x61, 0xf3, 0xe5, 0x45, 0xa0, 0x85, 0x00, 0xa2, 0x2d, 0x0f, 0xc3, 0x4d,
+0xbe, 0xd9, 0x0a, 0xc0, 0x24, 0x48, 0xf4, 0x5e, 0xb3, 0x58, 0xd9, 0x2a,
+0x89, 0x1b, 0x2b, 0x83, 0x75, 0xea, 0xd7, 0x2d, 0x85, 0x7a, 0xa4, 0x06,
+0x4f, 0x2b, 0x9d, 0x0d, 0x32, 0xeb, 0x9f, 0x94, 0xe1, 0x68, 0xe5, 0x66,
+0x16, 0xc3, 0xf5, 0x75, 0xed, 0x66, 0xef, 0x97, 0xb5, 0x3f, 0x70, 0x20,
+0x23, 0x01, 0x0d, 0x0f, 0x56, 0xfd, 0x18, 0xe2, 0xe1, 0x18, 0x2d, 0xdc,
+0x83, 0xb9, 0x16, 0xd4, 0x4e, 0xc6, 0x3b, 0x29, 0x76, 0x00, 0x00, 0x85,
+0x6c, 0x54, 0x1b, 0x03, 0x74, 0xa7, 0x9f, 0xcf, 0x8c, 0x47, 0x02, 0xc9,
+0xcd, 0x59, 0xb3, 0xc9, 0x51, 0xf2, 0xf7, 0x1f, 0x48, 0x8d, 0x70, 0x7b,
+0x4d, 0xd3, 0xaf, 0xc4, 0x07, 0x00, 0x00, 0x87, 0xcc, 0x24, 0x58, 0x59,
+0x80, 0x79, 0x14, 0xff, 0xce, 0x74, 0xf2, 0xe6, 0x24, 0x5e, 0x5c, 0x41,
+0x9b, 0x5f, 0x9d, 0x64, 0x1b, 0x11, 0x60, 0x64, 0x77, 0x60, 0xd0, 0x52,
+0xac, 0x00, 0x00, 0x15, 0x44, 0x28, 0x8f, 0x55, 0xb0, 0x45, 0x5b, 0x82,
+0x40, 0x57, 0x8b, 0x45, 0xcf, 0x71, 0x79, 0x72, 0xc3, 0x47, 0x0e, 0x65,
+0x6e, 0xc8, 0x1a, 0x29, 0x87, 0xa7, 0xe3, 0x1f, 0x57, 0x00, 0x00, 0x64,
+0x32, 0xfc, 0xe8, 0x2a, 0x2e, 0x94, 0xbd, 0x62, 0xa0, 0xcc, 0xb2, 0x67,
+0x65, 0x57, 0xa6, 0x28, 0x8a, 0xd6, 0x46, 0x9d, 0xac, 0x08, 0xca, 0x3a,
+0x79, 0xe4, 0x04, 0x95, 0xb8,
+//RLver
+0x00, 0x00, 0x00, 0x02,
+//n2
+0x00, 0x00, 0x00, 0x01,
+//NrProof1 = 160
+ //T
+0x5e, 0xcc, 0x94, 0xe3, 0x67, 0x5d, 0xb5, 0x71, 0xe0, 0x28, 0x34,
+0x2e, 0xd1, 0x10, 0xff, 0x25, 0xc0, 0x3a, 0x1a, 0x2c, 0xde, 0x13, 0xe9,
+0x7e, 0x5a, 0xde, 0xc3, 0xa6, 0x04, 0x02, 0xbd, 0xf6, 0xaa, 0x4a, 0xf4,
+0xf9, 0x82, 0x31, 0xda, 0x8b, 0x44, 0xfb, 0x35, 0xcf, 0xb5, 0x4e, 0x5a,
+0x82, 0x5c, 0x11, 0xa6, 0xab, 0xdf, 0x13, 0xa9, 0x00, 0x2c, 0x95, 0xf9,
+0x9a, 0x2c, 0x9b, 0x12, 0x15,
+ //c
+0x1f, 0x7f, 0x9a, 0xc0, 0x84, 0xaa, 0x74,
+0x3e, 0x19, 0x8b, 0xb6, 0x10, 0xb6, 0xc3, 0x99, 0xaa, 0x02, 0x18, 0x62,
+0xc9, 0xa9, 0x0c, 0x26, 0x66, 0x9a, 0x1c, 0x9b, 0xc8, 0x6f, 0xaf, 0xac,
+0x06,
+ //smu
+0x9a, 0x84, 0xf4, 0xf0, 0x29, 0x48, 0x08, 0x6e, 0x43, 0xa8, 0x98,
+0xc6, 0x9f, 0x36, 0x91, 0x06, 0x25, 0x32, 0xa3, 0x57, 0x52, 0x68, 0x81,
+0x18, 0xac, 0xdc, 0xb8, 0xb4, 0x75, 0xa8, 0x85, 0xb0,
+ //snu
+0x5b, 0x3d, 0xd6,
+0xaa, 0x6e, 0xb7, 0x9a, 0x96, 0x01, 0x19, 0xb3, 0x36, 0xaa, 0x88, 0x91,
+0xff, 0x69, 0x5d, 0xf0, 0xa3, 0x9c, 0xfa, 0xd0, 0xcb, 0x60, 0xc8, 0xe7,
+0xeb, 0xab, 0xd4, 0x62, 0xff,
+//};
+//unsigned int sig_sha256_bsnrnd_msg0_dat_len = 733;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_first_entry.inc b/epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_first_entry.inc
new file mode 100644
index 0000000..bef6878
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_first_entry.inc
@@ -0,0 +1,68 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+/*!
+* \file
+* \brief Test data.
+*
+* Type : Intel(R) EPID 1.1 signature based revocation list
+* Group : grpX
+* Revoked signature : Member0/sig_sha256_bsn0_msg0 last entry
+*/
+//unsigned char epid_sigrevlist_dat[] = {
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RLver
+ 0x00, 0x00, 0x00, 0x03,
+ // n2
+ 0x00, 0x00, 0x00, 0x03,
+ // B, K - revoked signature to test
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x80, 0x85, 0x35, 0x04, 0x7b, 0xfc, 0x0a, 0x6c,
+ 0xb4, 0x10, 0x2d, 0x4a, 0xbe, 0x35, 0x78, 0x41, 0x3a, 0xc6, 0x01, 0x3a,
+ 0x59, 0x21, 0x17, 0x04, 0x60, 0x6a, 0x51, 0x6c, 0x84, 0xde, 0xc3, 0x3b,
+ 0x1e, 0x6a, 0xaf, 0x82, 0x5d, 0x81, 0xe2, 0x44, 0x25, 0x98, 0x89, 0xdb,
+ 0x82, 0x17, 0xe6, 0xb8, 0x9f, 0xfd, 0x03, 0x86, 0x63, 0x8c, 0xe1, 0x93,
+ 0x77, 0x61, 0x3c, 0xc2, 0x75, 0x14, 0xa1, 0xc2,
+ // B, K
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x6e, 0xdf, 0x9f, 0xe3, 0xe0, 0x8d, 0xe4, 0x0b,
+ 0xbb, 0x86, 0x12, 0xd7, 0xc5, 0xd8, 0x14, 0x5e, 0x67, 0xbd, 0x1d, 0xa5,
+ 0x0b, 0xdb, 0xf5, 0x87, 0x36, 0x6c, 0xda, 0x81, 0x2a, 0x8c, 0x2e, 0x78,
+ 0xef, 0x6c, 0x42, 0xb2, 0xcd, 0x40, 0xda, 0xd3, 0x22, 0xf4, 0xd9, 0x7e,
+ 0x34, 0x78, 0x49, 0x41, 0x0d, 0x1e, 0x64, 0xc1, 0x43, 0xa1, 0xb0, 0xe9,
+ 0x6c, 0x45, 0xe2, 0x2d, 0xc3, 0xeb, 0xc8, 0x14,
+ // B, K
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x95, 0x8b, 0x05, 0x1e, 0x8b, 0xa5, 0x21, 0xdd,
+ 0x63, 0xfd, 0x1a, 0x36, 0xb7, 0x42, 0x04, 0x92, 0x10, 0xe6, 0x29, 0x22,
+ 0xc8, 0x97, 0xb1, 0x28, 0x01, 0x45, 0x95, 0xf1, 0x2a, 0xa0, 0x86, 0x41,
+ 0xc4, 0x4c, 0xb6, 0x3b, 0x45, 0x23, 0x6e, 0x8d, 0x6e, 0x07, 0xc7, 0x5b,
+ 0xe5, 0x46, 0xca, 0xd0, 0x68, 0x99, 0xb6, 0x30, 0x7b, 0x70, 0xb0, 0x92,
+ 0x48, 0xc2, 0x89, 0xb6, 0x27, 0x3b, 0x95, 0x89,
+// };
+// unsigned int epid_sigrevlist_dat_len = 400;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_last_entry.inc b/epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_last_entry.inc
new file mode 100644
index 0000000..ebd42ab
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_last_entry.inc
@@ -0,0 +1,68 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+/*!
+* \file
+* \brief Test data.
+*
+* Type : Intel(R) EPID 1.1 signature based revocation list
+* Group : grpX
+* Revoked signature : Member0/sig_sha256_bsn0_msg0 last entry
+*/
+//unsigned char epid_sigrevlist_dat[] = {
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RLver
+ 0x00, 0x00, 0x00, 0x03,
+ // n2
+ 0x00, 0x00, 0x00, 0x03,
+ // B, K
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x6e, 0xdf, 0x9f, 0xe3, 0xe0, 0x8d, 0xe4, 0x0b,
+ 0xbb, 0x86, 0x12, 0xd7, 0xc5, 0xd8, 0x14, 0x5e, 0x67, 0xbd, 0x1d, 0xa5,
+ 0x0b, 0xdb, 0xf5, 0x87, 0x36, 0x6c, 0xda, 0x81, 0x2a, 0x8c, 0x2e, 0x78,
+ 0xef, 0x6c, 0x42, 0xb2, 0xcd, 0x40, 0xda, 0xd3, 0x22, 0xf4, 0xd9, 0x7e,
+ 0x34, 0x78, 0x49, 0x41, 0x0d, 0x1e, 0x64, 0xc1, 0x43, 0xa1, 0xb0, 0xe9,
+ 0x6c, 0x45, 0xe2, 0x2d, 0xc3, 0xeb, 0xc8, 0x14,
+ // B, K
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x95, 0x8b, 0x05, 0x1e, 0x8b, 0xa5, 0x21, 0xdd,
+ 0x63, 0xfd, 0x1a, 0x36, 0xb7, 0x42, 0x04, 0x92, 0x10, 0xe6, 0x29, 0x22,
+ 0xc8, 0x97, 0xb1, 0x28, 0x01, 0x45, 0x95, 0xf1, 0x2a, 0xa0, 0x86, 0x41,
+ 0xc4, 0x4c, 0xb6, 0x3b, 0x45, 0x23, 0x6e, 0x8d, 0x6e, 0x07, 0xc7, 0x5b,
+ 0xe5, 0x46, 0xca, 0xd0, 0x68, 0x99, 0xb6, 0x30, 0x7b, 0x70, 0xb0, 0x92,
+ 0x48, 0xc2, 0x89, 0xb6, 0x27, 0x3b, 0x95, 0x89,
+ // B, K - revoked signature to test
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x80, 0x85, 0x35, 0x04, 0x7b, 0xfc, 0x0a, 0x6c,
+ 0xb4, 0x10, 0x2d, 0x4a, 0xbe, 0x35, 0x78, 0x41, 0x3a, 0xc6, 0x01, 0x3a,
+ 0x59, 0x21, 0x17, 0x04, 0x60, 0x6a, 0x51, 0x6c, 0x84, 0xde, 0xc3, 0x3b,
+ 0x1e, 0x6a, 0xaf, 0x82, 0x5d, 0x81, 0xe2, 0x44, 0x25, 0x98, 0x89, 0xdb,
+ 0x82, 0x17, 0xe6, 0xb8, 0x9f, 0xfd, 0x03, 0x86, 0x63, 0x8c, 0xe1, 0x93,
+ 0x77, 0x61, 0x3c, 0xc2, 0x75, 0x14, 0xa1, 0xc2,
+// };
+// unsigned int epid_sigrevlist_dat_len = 400;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_middle_entry.inc b/epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_middle_entry.inc
new file mode 100644
index 0000000..c8c01c7
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_middle_entry.inc
@@ -0,0 +1,68 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+/*!
+* \file
+* \brief Test data.
+*
+* Type : Intel(R) EPID 1.1 signature based revocation list
+* Group : grpX
+* Revoked signature : Member0/sig_sha256_bsn0_msg0 last entry
+*/
+//unsigned char epid_sigrevlist_dat[] = {
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RLver
+ 0x00, 0x00, 0x00, 0x03,
+ // n2
+ 0x00, 0x00, 0x00, 0x03,
+ // B, K
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x6e, 0xdf, 0x9f, 0xe3, 0xe0, 0x8d, 0xe4, 0x0b,
+ 0xbb, 0x86, 0x12, 0xd7, 0xc5, 0xd8, 0x14, 0x5e, 0x67, 0xbd, 0x1d, 0xa5,
+ 0x0b, 0xdb, 0xf5, 0x87, 0x36, 0x6c, 0xda, 0x81, 0x2a, 0x8c, 0x2e, 0x78,
+ 0xef, 0x6c, 0x42, 0xb2, 0xcd, 0x40, 0xda, 0xd3, 0x22, 0xf4, 0xd9, 0x7e,
+ 0x34, 0x78, 0x49, 0x41, 0x0d, 0x1e, 0x64, 0xc1, 0x43, 0xa1, 0xb0, 0xe9,
+ 0x6c, 0x45, 0xe2, 0x2d, 0xc3, 0xeb, 0xc8, 0x14,
+ // B, K - revoked signature to test
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x80, 0x85, 0x35, 0x04, 0x7b, 0xfc, 0x0a, 0x6c,
+ 0xb4, 0x10, 0x2d, 0x4a, 0xbe, 0x35, 0x78, 0x41, 0x3a, 0xc6, 0x01, 0x3a,
+ 0x59, 0x21, 0x17, 0x04, 0x60, 0x6a, 0x51, 0x6c, 0x84, 0xde, 0xc3, 0x3b,
+ 0x1e, 0x6a, 0xaf, 0x82, 0x5d, 0x81, 0xe2, 0x44, 0x25, 0x98, 0x89, 0xdb,
+ 0x82, 0x17, 0xe6, 0xb8, 0x9f, 0xfd, 0x03, 0x86, 0x63, 0x8c, 0xe1, 0x93,
+ 0x77, 0x61, 0x3c, 0xc2, 0x75, 0x14, 0xa1, 0xc2,
+ // B, K
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x95, 0x8b, 0x05, 0x1e, 0x8b, 0xa5, 0x21, 0xdd,
+ 0x63, 0xfd, 0x1a, 0x36, 0xb7, 0x42, 0x04, 0x92, 0x10, 0xe6, 0x29, 0x22,
+ 0xc8, 0x97, 0xb1, 0x28, 0x01, 0x45, 0x95, 0xf1, 0x2a, 0xa0, 0x86, 0x41,
+ 0xc4, 0x4c, 0xb6, 0x3b, 0x45, 0x23, 0x6e, 0x8d, 0x6e, 0x07, 0xc7, 0x5b,
+ 0xe5, 0x46, 0xca, 0xd0, 0x68, 0x99, 0xb6, 0x30, 0x7b, 0x70, 0xb0, 0x92,
+ 0x48, 0xc2, 0x89, 0xb6, 0x27, 0x3b, 0x95, 0x89,
+// };
+// unsigned int epid_sigrevlist_dat_len = 400;
diff --git a/epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_single_entry.inc b/epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_single_entry.inc
new file mode 100644
index 0000000..aaa0a8b
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_single_entry.inc
@@ -0,0 +1,44 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 signature based revocation list
+ * Group : grpX
+ * Revoked signature : Member0/sig_sha256_bsn0_msg0 single entry
+ */
+//unsigned char sigrl_dat[] = {
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RLver
+ 0x00, 0x00, 0x00, 0x01,
+ // n2
+ 0x00, 0x00, 0x00, 0x01,
+ // B, K - revoked signature to test
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x80, 0x85, 0x35, 0x04, 0x7b, 0xfc, 0x0a, 0x6c,
+ 0xb4, 0x10, 0x2d, 0x4a, 0xbe, 0x35, 0x78, 0x41, 0x3a, 0xc6, 0x01, 0x3a,
+ 0x59, 0x21, 0x17, 0x04, 0x60, 0x6a, 0x51, 0x6c, 0x84, 0xde, 0xc3, 0x3b,
+ 0x1e, 0x6a, 0xaf, 0x82, 0x5d, 0x81, 0xe2, 0x44, 0x25, 0x98, 0x89, 0xdb,
+ 0x82, 0x17, 0xe6, 0xb8, 0x9f, 0xfd, 0x03, 0x86, 0x63, 0x8c, 0xe1, 0x93,
+ 0x77, 0x61, 0x3c, 0xc2, 0x75, 0x14, 0xa1, 0xc2,
+//};
+//unsigned int sigrl_dat_len = 140;
diff --git a/epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_first_entry.inc b/epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_first_entry.inc
new file mode 100644
index 0000000..c005e32
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_first_entry.inc
@@ -0,0 +1,38 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 group revocation list grpX revoked first entry
+ * 0 32 64 96 128 Bit
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | RLVer = 3 | n3 = 3 | gid[1] = 0x7b | gid[2] = 0x12 |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * 128 160 Bit
+ * +-+-+-+-+-+-+-+-+
+ * | gid[2] = 0x5f |
+ * +-+-+-+-+-+-+-+-+
+ *
+ * 0x7b is revoked gid
+ */
+//unsigned char grprl_dat[] = {
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x12,
+ 0x00, 0x00, 0x00, 0x5f
+//};
+//unsigned int grprl_dat_len = 20;
diff --git a/epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_last_entry.inc b/epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_last_entry.inc
new file mode 100644
index 0000000..c239ce2
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_last_entry.inc
@@ -0,0 +1,38 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 group revocation list grpX revoked last entry
+ * 0 32 64 96 128 Bit
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | RLVer = 3 | n3 = 3 | gid[1] = 0x4e | gid[2] = 0x12 |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * 128 160 Bit
+ * +-+-+-+-+-+-+-+-+
+ * | gid[2] = 0x7b |
+ * +-+-+-+-+-+-+-+-+
+ *
+ * 0x7b is revoked gid
+ */
+//unsigned char grprl_dat[] = {
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x12,
+ 0x00, 0x00, 0x00, 0x7b
+//};
+//unsigned int grprl_dat_len = 20;
diff --git a/epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_middle_entry.inc b/epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_middle_entry.inc
new file mode 100644
index 0000000..bbddb31
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_middle_entry.inc
@@ -0,0 +1,38 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 group revocation list grpX revoked middle entry
+ * 0 32 64 96 128 Bit
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | RLVer = 3 | n3 = 3 | gid[1] = 0x4e | gid[2] = 0x7b |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * 128 160 Bit
+ * +-+-+-+-+-+-+-+-+
+ * | gid[2] = 0x6c |
+ * +-+-+-+-+-+-+-+-+
+ *
+ * 0x7b is revoked gid
+ */
+//unsigned char grprl_dat[] = {
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x7b,
+ 0x00, 0x00, 0x00, 0x6c
+//};
+//unsigned int grprl_dat_len = 20;
diff --git a/epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_single_entry.inc b/epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_single_entry.inc
new file mode 100644
index 0000000..e25cce3
--- /dev/null
+++ b/epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_single_entry.inc
@@ -0,0 +1,32 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 group revocation list single entry grpX revoked
+ * 0 32 64 96 Bit
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | RLVer = 3 | n3 = 1 | gid[0] = 0x7b |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ * 0x7b is revoked gid
+ */
+//unsigned char grprl_dat[] = {
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x7b
+//};
+//unsigned int grprl_dat_len = 12;
diff --git a/epid/common-testhelper/1.1/verifier_wrapper-testhelper.cc b/epid/common-testhelper/1.1/verifier_wrapper-testhelper.cc
new file mode 100644
index 0000000..cea2e06
--- /dev/null
+++ b/epid/common-testhelper/1.1/verifier_wrapper-testhelper.cc
@@ -0,0 +1,54 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief EcGroup C++ wrapper implementation.
+ */
+#include <cstdio>
+#include <string>
+#include <stdexcept>
+
+#include "epid/common-testhelper/1.1/verifier_wrapper-testhelper.h"
+
+Epid11VerifierCtxObj::Epid11VerifierCtxObj(Epid11GroupPubKey const& pub_key)
+ : ctx_(nullptr) {
+ auto sts = Epid11VerifierCreate(&pub_key, nullptr, &ctx_);
+ if (kEpidNoErr != sts) {
+ printf("%s(%d): %s\n", __FILE__, __LINE__, "test defect:");
+ throw std::logic_error(std::string("Failed to call: ") +
+ "Epid11VerifierCreate()");
+ }
+}
+
+Epid11VerifierCtxObj::Epid11VerifierCtxObj(Epid11GroupPubKey const& pub_key,
+ Epid11VerifierPrecomp const& precomp)
+ : ctx_(nullptr) {
+ auto sts = Epid11VerifierCreate(&pub_key, &precomp, &ctx_);
+ if (kEpidNoErr != sts) {
+ printf("%s(%d): %s\n", __FILE__, __LINE__, "test defect:");
+ throw std::logic_error(std::string("Failed to call: ") +
+ "Epid11VerifierCreate()");
+ }
+}
+
+Epid11VerifierCtxObj::~Epid11VerifierCtxObj() { Epid11VerifierDelete(&ctx_); }
+
+Epid11VerifierCtx* Epid11VerifierCtxObj::ctx() const { return ctx_; }
+
+Epid11VerifierCtxObj::operator Epid11VerifierCtx*() const { return ctx_; }
+
+Epid11VerifierCtxObj::operator const Epid11VerifierCtx*() const { return ctx_; }
diff --git a/epid/common-testhelper/1.1/verifier_wrapper-testhelper.h b/epid/common-testhelper/1.1/verifier_wrapper-testhelper.h
new file mode 100644
index 0000000..f3c351a
--- /dev/null
+++ b/epid/common-testhelper/1.1/verifier_wrapper-testhelper.h
@@ -0,0 +1,56 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Verifier C++ wrapper interface.
+ */
+#ifndef EPID_COMMON_TESTHELPER_1_1_VERIFIER_WRAPPER_TESTHELPER_H_
+#define EPID_COMMON_TESTHELPER_1_1_VERIFIER_WRAPPER_TESTHELPER_H_
+
+extern "C" {
+#include "epid/verifier/1.1/api.h"
+}
+
+/// C++ Wrapper to manage memory for VerifierCtx via RAII
+class Epid11VerifierCtxObj {
+ public:
+ /// Create an Epid11VerifierCtx
+ explicit Epid11VerifierCtxObj(Epid11GroupPubKey const& pub_key);
+ /// Create an Epid11VerifierCtx given precomputation blob
+ Epid11VerifierCtxObj(Epid11GroupPubKey const& pub_key,
+ Epid11VerifierPrecomp const& precomp);
+
+ // This class instances are not meant to be copied.
+ // Explicitly delete copy constructor and assignment operator.
+ Epid11VerifierCtxObj(const Epid11VerifierCtxObj&) = delete;
+ Epid11VerifierCtxObj& operator=(const Epid11VerifierCtxObj&) = delete;
+
+ /// Destroy the Epid11VerifierCtx
+ ~Epid11VerifierCtxObj();
+ /// get a pointer to the stored Epid11VerifierCtx
+ Epid11VerifierCtx* ctx() const;
+ /// cast operator to get the pointer to the stored Epid11VerifierCtx
+ operator Epid11VerifierCtx*() const;
+ /// const cast operator to get the pointer to the stored Epid11VerifierCtx
+ operator const Epid11VerifierCtx*() const;
+
+ private:
+ /// The stored VerifierCtx
+ Epid11VerifierCtx* ctx_;
+};
+
+#endif // EPID_COMMON_TESTHELPER_1_1_VERIFIER_WRAPPER_TESTHELPER_H_
diff --git a/epid/common-testhelper/Makefile b/epid/common-testhelper/Makefile
new file mode 100644
index 0000000..d3a4d7f
--- /dev/null
+++ b/epid/common-testhelper/Makefile
@@ -0,0 +1,63 @@
+#!/usr/bin/make -f
+
+#define variables
+GTEST_INCLUDE_DIR = ../../ext
+TEST_INSTALL_DIR = $(epidinstalldir)/test/
+
+COMMON_TESTHELPER_INCLUDE_DIR = ../..
+COMMON_TESTHELPER_11_INCLUDE_DIR = ../../1.1
+COMMON_TESTHELPER_SRC = $(wildcard ./*.cc)
+COMMON_TESTHELPER_SRC += $(wildcard ./1.1/*.cc)
+COMMON_TESTHELPER_UTEST_SRC = $(wildcard ./unittests/*.cc)
+COMMON_TESTHELPER_OBJ = $(COMMON_TESTHELPER_SRC:.cc=.o)
+COMMON_TESTHELPER_UTEST_OBJ = $(COMMON_TESTHELPER_UTEST_SRC:.cc=.o)
+COMMON_TESTHELPER_LIB = ./libcommon-testhelper.a
+COMMON_TESTHELPER_UTEST_EXE = ./unittests/common-testhelper-utest
+
+LIB_COMMON_TESTHELPER_DIR = .
+LIB_COMMON_DIR = ../common
+LIB_IPPCP_DIR = ../../ext/ipp/sources/ippcp/src
+LIB_IPPCPEPID_DIR = ../../ext/ipp/sources/ippcpepid/src
+
+#set flags for linker
+LDFLAGS += -L$(GTEST_INCLUDE_DIR)/gtest -L$(LIB_COMMON_TESTHELPER_DIR) \
+ -L$(LIB_COMMON_DIR) -L$(LIB_IPPCPEPID_DIR) -L$(LIB_IPPCP_DIR) \
+ -lgtest -lcommon-testhelper -lcommon -lippcpepid -lippcp
+
+#target part
+$(COMMON_TESTHELPER_LIB): $(COMMON_TESTHELPER_OBJ)
+ $(AR) rc $(COMMON_TESTHELPER_LIB) $(COMMON_TESTHELPER_OBJ)
+ ranlib $(COMMON_TESTHELPER_LIB)
+
+$(COMMON_TESTHELPER_OBJ): %.o: %.cc
+ $(CXX) -o $@ $(CXXFLAGS) -I$(COMMON_TESTHELPER_INCLUDE_DIR) -c $^
+
+$(COMMON_TESTHELPER_UTEST_EXE): $(COMMON_TESTHELPER_UTEST_OBJ)
+ $(CXX) -o $@ $^ $(CXXFLAGS) $(LDFLAGS)
+
+$(COMMON_TESTHELPER_UTEST_OBJ): %.o: %.cc
+ $(CXX) -o $@ $(CXXFLAGS) -I$(COMMON_TESTHELPER_INCLUDE_DIR) \
+ -I$(COMMON_TESTHELPER_11_INCLUDE_DIR) -I$(GTEST_INCLUDE_DIR) -c $^
+
+build: all
+
+all: $(COMMON_TESTHELPER_LIB)
+
+install:
+#install tests if they exist
+ifneq (,$(wildcard $(COMMON_TESTHELPER_UTEST_EXE)))
+ mkdir -p '$(TEST_INSTALL_DIR)'
+ cp $(COMMON_TESTHELPER_UTEST_EXE) '$(TEST_INSTALL_DIR)'
+endif
+
+check: $(COMMON_TESTHELPER_UTEST_EXE) run
+
+run:
+ $(COMMON_TESTHELPER_UTEST_EXE) $(GTEST_FLAGS)
+
+clean:
+ rm -f $(COMMON_TESTHELPER_OBJ) \
+ $(COMMON_TESTHELPER_LIB) \
+ $(COMMON_TESTHELPER_UTEST_OBJ) \
+ $(COMMON_TESTHELPER_UTEST_EXE) \
+ *.xml
diff --git a/epid/common-testhelper/common-testhelper.parts b/epid/common-testhelper/common-testhelper.parts
index 2fdd765..99365c9 100644
--- a/epid/common-testhelper/common-testhelper.parts
+++ b/epid/common-testhelper/common-testhelper.parts
@@ -16,29 +16,54 @@
Import('*')
env.PartName('common-testhelper')
-
-
src_files = Pattern(src_dir='.',
includes=['*-testhelper.cc'],
excludes=[],
- recursive=True).files()
+ recursive=False).files()
inc_files = Pattern(src_dir='.',
includes=['*-testhelper.h'],
excludes=[],
- recursive=True).files()
-#unit tests
+ recursive=False).files()
+epid11_src_files = Pattern(src_dir='1.1',
+ includes=['*-testhelper.cc'],
+ excludes=[],
+ recursive=False).files()
+epid11_inc_files = Pattern(src_dir='1.1',
+ includes=['*-testhelper.h'],
+ excludes=[],
+ recursive=False).files()
+test_data_files = Pattern(src_dir='testdata',
+ includes=['*'],
+ excludes=[],
+ recursive=True)
+epid11_test_data_files = Pattern(src_dir='1.1/testdata',
+ includes=['*'],
+ excludes=[],
+ recursive=True)
+
+# unit tests
utest_files = Pattern(src_dir='.',
includes=['*-test.cc'],
excludes=[],
recursive=True).files()
-
if 'install_package' in env['MODE']:
- env.InstallTopLevel(src_files,sub_dir='epid/${PART_SHORT_NAME}')
- env.InstallTopLevel(inc_files,sub_dir='epid/${PART_SHORT_NAME}')
- env.InstallTopLevel(utest_files, sub_dir='epid/${PART_SHORT_NAME}/unittests')
+ env.InstallTopLevel(src_files, sub_dir='epid/${PART_SHORT_NAME}')
+ env.InstallTopLevel(inc_files, sub_dir='epid/${PART_SHORT_NAME}')
+ env.InstallTopLevel(utest_files,
+ sub_dir='epid/${PART_SHORT_NAME}/unittests')
+ env.InstallTopLevel(test_data_files,
+ sub_dir='epid/${PART_SHORT_NAME}/testdata')
+
+ env.InstallTopLevel(epid11_src_files, sub_dir='epid/${PART_SHORT_NAME}/1.1')
+ env.InstallTopLevel(epid11_inc_files, sub_dir='epid/${PART_SHORT_NAME}/1.1')
+ env.InstallTopLevel(epid11_test_data_files,
+ sub_dir='epid/${PART_SHORT_NAME}/1.1/testdata')
+
parts_file = ['common-testhelper.parts']
env.InstallTopLevel(parts_file, sub_dir='epid/${PART_SHORT_NAME}')
+ makefile = ['Makefile']
+ env.InstallTopLevel(makefile, sub_dir='epid/${PART_SHORT_NAME}')
else:
env.DependsOn([
Component('common'),
@@ -48,7 +73,7 @@ else:
testenv = env.Clone()
- outputs = env.Library('${PART_NAME}', src_files)
+ outputs = env.Library('${PART_NAME}', src_files + epid11_src_files)
env.Sdk(outputs)
testenv['UNIT_TEST_TARGET_NAME'] = "${PART_NAME}-${UNIT_TEST_TARGET}"
diff --git a/epid/common-testhelper/ecpoint_wrapper-testhelper.cc b/epid/common-testhelper/ecpoint_wrapper-testhelper.cc
index 9aef5d7..f1aa18c 100644
--- a/epid/common-testhelper/ecpoint_wrapper-testhelper.cc
+++ b/epid/common-testhelper/ecpoint_wrapper-testhelper.cc
@@ -86,6 +86,11 @@ EcPointObj::EcPointObj(EcGroupObj* group, G2ElemStr const& bytes)
init(group, (unsigned char*)&bytes, sizeof(bytes));
}
+EcPointObj::EcPointObj(EcGroupObj* group, Epid11G2ElemStr const& bytes)
+ : state_(new State) {
+ init(group, (unsigned char*)&bytes, sizeof(bytes));
+}
+
EcPointObj::EcPointObj(EcGroupObj* group,
std::vector<unsigned char> const& bytes)
: state_(new State) {
diff --git a/epid/common-testhelper/ecpoint_wrapper-testhelper.h b/epid/common-testhelper/ecpoint_wrapper-testhelper.h
index 0b2e1b7..87b3af2 100644
--- a/epid/common-testhelper/ecpoint_wrapper-testhelper.h
+++ b/epid/common-testhelper/ecpoint_wrapper-testhelper.h
@@ -27,6 +27,7 @@
extern "C" {
#include "epid/common/math/bignum.h"
#include "epid/common/math/ecgroup.h"
+#include "epid/common/1.1/types.h"
}
class EcGroupObj;
@@ -50,6 +51,8 @@ class EcPointObj {
/// Create an EcPoint
EcPointObj(EcGroupObj* group, G2ElemStr const& bytes);
/// Create an EcPoint
+ EcPointObj(EcGroupObj* group, Epid11G2ElemStr const& bytes);
+ /// Create an EcPoint
EcPointObj(EcGroupObj* group, std::vector<unsigned char> const& bytes);
/// Create an EcPoint
EcPointObj(EcGroupObj* group, void const* bytes, size_t size);
diff --git a/epid/common-testhelper/epid_params-testhelper.cc b/epid/common-testhelper/epid_params-testhelper.cc
index e281ab9..57fa53b 100644
--- a/epid/common-testhelper/epid_params-testhelper.cc
+++ b/epid/common-testhelper/epid_params-testhelper.cc
@@ -28,9 +28,9 @@
#include "epid/common-testhelper/finite_field_wrapper-testhelper.h"
extern "C" {
-#include "epid/common/math/ecgroup-internal.h"
-#include "epid/common/math/finitefield-internal.h"
-#include "epid/common/math/pairing-internal.h"
+#include "epid/common/math/src/ecgroup-internal.h"
+#include "epid/common/math/src/finitefield-internal.h"
+#include "epid/common/math/src/pairing-internal.h"
}
Epid20Params::Epid20Params() {
diff --git a/epid/common-testhelper/epid_params-testhelper.h b/epid/common-testhelper/epid_params-testhelper.h
index d3f0a56..42e2a5c 100644
--- a/epid/common-testhelper/epid_params-testhelper.h
+++ b/epid/common-testhelper/epid_params-testhelper.h
@@ -16,7 +16,7 @@
/*!
* \file
- * \brief Intel(R) EPID parameters C++ wrapper interface.
+ * \brief Intel(R) EPID 2.0 parameters C++ wrapper interface.
*/
#ifndef EPID_COMMON_TESTHELPER_EPID_PARAMS_TESTHELPER_H_
#define EPID_COMMON_TESTHELPER_EPID_PARAMS_TESTHELPER_H_
diff --git a/epid/common-testhelper/errors-testhelper.h b/epid/common-testhelper/errors-testhelper.h
index 8dcf4ef..f61de1b 100644
--- a/epid/common-testhelper/errors-testhelper.h
+++ b/epid/common-testhelper/errors-testhelper.h
@@ -34,7 +34,7 @@ extern "C" {
/// Macro used to indicate fatal error during unit test run
#define THROW_ON_EPIDERR(actual) \
if (kEpidNoErr != actual) { \
- printf("%s(%d): %s\n", __FILE__, __LINE__, "test defect:"); \
+ printf("%s(%d): error: %s\n", __FILE__, __LINE__, "test defect"); \
throw std::logic_error(std::string("Failed to call: ") + #actual); \
}
diff --git a/epid/common-testhelper/ffelement_wrapper-testhelper.cc b/epid/common-testhelper/ffelement_wrapper-testhelper.cc
index f7ce834..675142e 100644
--- a/epid/common-testhelper/ffelement_wrapper-testhelper.cc
+++ b/epid/common-testhelper/ffelement_wrapper-testhelper.cc
@@ -94,6 +94,11 @@ FfElementObj::FfElementObj(FiniteFieldObj* ff, Fq2ElemStr const& bytes)
init(ff, (unsigned char*)&bytes, sizeof(bytes));
}
+FfElementObj::FfElementObj(FiniteFieldObj* ff, Fq3ElemStr const& bytes)
+ : state_(new State) {
+ init(ff, (unsigned char*)&bytes, sizeof(bytes));
+}
+
FfElementObj::FfElementObj(FiniteFieldObj* ff, Fq6ElemStr const& bytes)
: state_(new State) {
init(ff, (unsigned char*)&bytes, sizeof(bytes));
diff --git a/epid/common-testhelper/ffelement_wrapper-testhelper.h b/epid/common-testhelper/ffelement_wrapper-testhelper.h
index 4a0bc5b..df09065 100644
--- a/epid/common-testhelper/ffelement_wrapper-testhelper.h
+++ b/epid/common-testhelper/ffelement_wrapper-testhelper.h
@@ -27,6 +27,7 @@
extern "C" {
#include "epid/common/math/bignum.h"
#include "epid/common/math/finitefield.h"
+#include "epid/common/1.1/types.h"
}
class FiniteFieldObj;
@@ -52,6 +53,8 @@ class FfElementObj {
/// Create a FfElement
FfElementObj(FiniteFieldObj* ff, Fq2ElemStr const& bytes);
/// Create a FfElement
+ FfElementObj(FiniteFieldObj* ff, Fq3ElemStr const& bytes);
+ /// Create a FfElement
FfElementObj(FiniteFieldObj* ff, Fq6ElemStr const& bytes);
/// Create a FfElement
FfElementObj(FiniteFieldObj* ff, Fq12ElemStr const& bytes);
diff --git a/epid/common-testhelper/finite_field_wrapper-testhelper.cc b/epid/common-testhelper/finite_field_wrapper-testhelper.cc
index 6240415..12bf5d3 100644
--- a/epid/common-testhelper/finite_field_wrapper-testhelper.cc
+++ b/epid/common-testhelper/finite_field_wrapper-testhelper.cc
@@ -42,8 +42,6 @@ struct FiniteFieldObj::State {
struct InnerState {
/// The ground field
FiniteFieldObj gf_;
- /// The ground element
- FfElementObj ge_;
};
/// Inner state
/*!
@@ -81,11 +79,10 @@ struct FiniteFieldObj::State {
}
/// setter for inner_state
- void SetInnerState(FiniteFieldObj const& gf, FfElementObj const& ge) {
+ void SetInnerState(FiniteFieldObj const& gf) {
if (!inner_state) {
inner_state = new InnerState;
inner_state->gf_ = gf;
- inner_state->ge_ = ge;
}
}
@@ -97,7 +94,6 @@ struct FiniteFieldObj::State {
}
if (!inner_state) {
inner_state->gf_ = state->gf_;
- inner_state->ge_ = state->ge_;
}
} else {
if (inner_state) {
@@ -148,13 +144,24 @@ FiniteFieldObj::FiniteFieldObj(FiniteFieldObj const& ground_field,
FfElementObj const& ground_element, int degree)
: state_(new State) {
FiniteField* temp = nullptr;
- state_->SetInnerState(ground_field, ground_element);
+ state_->SetInnerState(ground_field);
NewFiniteFieldViaBinomalExtension(ground_field, ground_element, degree,
&temp);
state_->ff_.reset(temp, finite_field_deleter);
state_->size_ = ground_field.GetElementMaxSize() * degree;
}
+FiniteFieldObj::FiniteFieldObj(FiniteFieldObj const& ground_field,
+ BigNumStr const* irr_polynomial, int degree)
+ : state_(new State) {
+ FiniteField* temp = nullptr;
+ state_->SetInnerState(ground_field);
+ NewFiniteFieldViaPolynomialExtension(ground_field, irr_polynomial, degree,
+ &temp);
+ state_->ff_.reset(temp, finite_field_deleter);
+ state_->size_ = ground_field.GetElementMaxSize() * degree;
+}
+
FiniteFieldObj::~FiniteFieldObj() {}
FiniteFieldObj::operator FiniteField*() { return state_->ff_.get(); }
diff --git a/epid/common-testhelper/finite_field_wrapper-testhelper.h b/epid/common-testhelper/finite_field_wrapper-testhelper.h
index f293bc7..ceebc4c 100644
--- a/epid/common-testhelper/finite_field_wrapper-testhelper.h
+++ b/epid/common-testhelper/finite_field_wrapper-testhelper.h
@@ -47,6 +47,9 @@ class FiniteFieldObj {
/// Create a FiniteField
FiniteFieldObj(FiniteFieldObj const& ground_field,
FfElementObj const& ground_element, int degree);
+ /// Create a FiniteField
+ FiniteFieldObj(FiniteFieldObj const& ground_field,
+ BigNumStr const* irr_polynomial, int degree);
/// Destroy the FiniteField
~FiniteFieldObj();
/// cast operator to get the pointer to the stored FiniteField
diff --git a/epid/common-testhelper/octstr-testhelper.cc b/epid/common-testhelper/octstr-testhelper.cc
index 2555e66..86ce193 100644
--- a/epid/common-testhelper/octstr-testhelper.cc
+++ b/epid/common-testhelper/octstr-testhelper.cc
@@ -20,7 +20,7 @@
*/
#include "epid/common-testhelper/octstr-testhelper.h"
extern "C" {
-#include "epid/common/memory.h"
+#include "epid/common/src/memory.h"
}
#include "ext/ipp/include/ippcp.h"
diff --git a/epid/common-testhelper/prng-testhelper.h b/epid/common-testhelper/prng-testhelper.h
index c44ff0f..f3008e1 100644
--- a/epid/common-testhelper/prng-testhelper.h
+++ b/epid/common-testhelper/prng-testhelper.h
@@ -53,23 +53,32 @@ class Prng {
static int __STDCALL Generate(unsigned int* random_data, int num_bits,
void* user_data) {
unsigned int num_bytes = num_bits / CHAR_BIT;
- int num_words = num_bytes / sizeof(unsigned int);
+ unsigned int num_words = num_bytes / sizeof(unsigned int);
+ unsigned int extra_bytes = num_bytes % sizeof(unsigned int);
if (!random_data) {
return kPrngBadArgErr;
}
if (num_bits <= 0) {
return kPrngBadArgErr;
}
- if (num_bytes < sizeof(unsigned int) ||
- num_bytes % sizeof(unsigned int) != 0) {
- return kPrngBadArgErr;
- }
Prng* myprng = (Prng*)user_data;
std::uniform_int_distribution<> dis(0x0, 0xffff);
- for (int n = 0; n < num_words; n++) {
- random_data[n] =
+ if (num_words > 0) {
+ for (unsigned int n = 0; n < num_words; n++) {
+ random_data[n] =
+ (dis(myprng->generator_) << 16) + dis(myprng->generator_);
+ }
+ }
+ if (extra_bytes > 0) {
+ unsigned int data =
(dis(myprng->generator_) << 16) + dis(myprng->generator_);
+ unsigned char* byte_data = (unsigned char*)&data;
+ unsigned char* random_bytes = (unsigned char*)&random_data[num_words];
+ for (unsigned int n = 0; n < extra_bytes; n++) {
+ random_bytes[n] = byte_data[n];
+ }
}
+
return kPrngNoErr;
}
diff --git a/epid/common/testdata/grp01/gpubkey.inc b/epid/common-testhelper/testdata/grp01/gpubkey.inc
index 0ed0ded..0ed0ded 100644
--- a/epid/common/testdata/grp01/gpubkey.inc
+++ b/epid/common-testhelper/testdata/grp01/gpubkey.inc
diff --git a/epid/common/testdata/grp01/member0/sig_test0_sha256_sigrl.inc b/epid/common-testhelper/testdata/grp01/member0/sig_test0_sha256_sigrl.inc
index c009b34..c009b34 100644
--- a/epid/common/testdata/grp01/member0/sig_test0_sha256_sigrl.inc
+++ b/epid/common-testhelper/testdata/grp01/member0/sig_test0_sha256_sigrl.inc
diff --git a/epid/common/testdata/grp01/member0/sig_test0_sha384_sigrl.inc b/epid/common-testhelper/testdata/grp01/member0/sig_test0_sha384_sigrl.inc
index c3e1b0a..c3e1b0a 100644
--- a/epid/common/testdata/grp01/member0/sig_test0_sha384_sigrl.inc
+++ b/epid/common-testhelper/testdata/grp01/member0/sig_test0_sha384_sigrl.inc
diff --git a/epid/common/testdata/grp01/member0/sig_test0_sha512_sigrl.inc b/epid/common-testhelper/testdata/grp01/member0/sig_test0_sha512_sigrl.inc
index 265b166..265b166 100644
--- a/epid/common/testdata/grp01/member0/sig_test0_sha512_sigrl.inc
+++ b/epid/common-testhelper/testdata/grp01/member0/sig_test0_sha512_sigrl.inc
diff --git a/epid/common/testdata/grp01/member0/sig_test1.inc b/epid/common-testhelper/testdata/grp01/member0/sig_test1.inc
index ee582e3..ee582e3 100644
--- a/epid/common/testdata/grp01/member0/sig_test1.inc
+++ b/epid/common-testhelper/testdata/grp01/member0/sig_test1.inc
diff --git a/epid/common/testdata/grp01/member0/sig_test1_basename1_sha256.inc b/epid/common-testhelper/testdata/grp01/member0/sig_test1_basename1_sha256.inc
index 9d2680f..9d2680f 100644
--- a/epid/common/testdata/grp01/member0/sig_test1_basename1_sha256.inc
+++ b/epid/common-testhelper/testdata/grp01/member0/sig_test1_basename1_sha256.inc
diff --git a/epid/common/testdata/grp01/member0/sig_test1_sha256.inc b/epid/common-testhelper/testdata/grp01/member0/sig_test1_sha256.inc
index b14d518..b14d518 100644
--- a/epid/common/testdata/grp01/member0/sig_test1_sha256.inc
+++ b/epid/common-testhelper/testdata/grp01/member0/sig_test1_sha256.inc
diff --git a/epid/common/testdata/grp01/member0/sig_test1_sha384.inc b/epid/common-testhelper/testdata/grp01/member0/sig_test1_sha384.inc
index 6191f5d..6191f5d 100644
--- a/epid/common/testdata/grp01/member0/sig_test1_sha384.inc
+++ b/epid/common-testhelper/testdata/grp01/member0/sig_test1_sha384.inc
diff --git a/epid/common/testdata/grp01/member0/sig_test1_sha512.inc b/epid/common-testhelper/testdata/grp01/member0/sig_test1_sha512.inc
index fe9eff1..fe9eff1 100644
--- a/epid/common/testdata/grp01/member0/sig_test1_sha512.inc
+++ b/epid/common-testhelper/testdata/grp01/member0/sig_test1_sha512.inc
diff --git a/epid/common/testdata/grp01/privrl.inc b/epid/common-testhelper/testdata/grp01/privrl.inc
index 3c373a1..3c373a1 100644
--- a/epid/common/testdata/grp01/privrl.inc
+++ b/epid/common-testhelper/testdata/grp01/privrl.inc
diff --git a/epid/common/testdata/grp01/sigrl.inc b/epid/common-testhelper/testdata/grp01/sigrl.inc
index 52de07b..52de07b 100644
--- a/epid/common/testdata/grp01/sigrl.inc
+++ b/epid/common-testhelper/testdata/grp01/sigrl.inc
diff --git a/epid/common/testdata/grp01/verrl.inc b/epid/common-testhelper/testdata/grp01/verrl.inc
index 36c5f92..36c5f92 100644
--- a/epid/common/testdata/grp01/verrl.inc
+++ b/epid/common-testhelper/testdata/grp01/verrl.inc
diff --git a/epid/common/testdata/grp_x/cmember9/cmpprivkey.inc b/epid/common-testhelper/testdata/grp_x/cmember9/cmpprivkey.inc
index 902ee73..902ee73 100644
--- a/epid/common/testdata/grp_x/cmember9/cmpprivkey.inc
+++ b/epid/common-testhelper/testdata/grp_x/cmember9/cmpprivkey.inc
diff --git a/epid/common/testdata/grp_x/cmember9/mprivkey.inc b/epid/common-testhelper/testdata/grp_x/cmember9/mprivkey.inc
index 58db4cd..58db4cd 100644
--- a/epid/common/testdata/grp_x/cmember9/mprivkey.inc
+++ b/epid/common-testhelper/testdata/grp_x/cmember9/mprivkey.inc
diff --git a/epid/common/testdata/grp_x/iprivkey.inc b/epid/common-testhelper/testdata/grp_x/iprivkey.inc
index b3adabd..b3adabd 100644
--- a/epid/common/testdata/grp_x/iprivkey.inc
+++ b/epid/common-testhelper/testdata/grp_x/iprivkey.inc
diff --git a/epid/common/testdata/grp_x/member0/mprivkey.inc b/epid/common-testhelper/testdata/grp_x/member0/mprivkey.inc
index 67f52a0..67f52a0 100644
--- a/epid/common/testdata/grp_x/member0/mprivkey.inc
+++ b/epid/common-testhelper/testdata/grp_x/member0/mprivkey.inc
diff --git a/epid/common/testdata/grp_x/member0/sig_sha256_bsn0_msg0.inc b/epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn0_msg0.inc
index 3b033ac..3b033ac 100644
--- a/epid/common/testdata/grp_x/member0/sig_sha256_bsn0_msg0.inc
+++ b/epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn0_msg0.inc
diff --git a/epid/common/testdata/grp_x/member0/sig_sha256_bsn0_msg0_rl_singleentry.inc b/epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn0_msg0_rl_singleentry.inc
index ba9b3f4..ba9b3f4 100644
--- a/epid/common/testdata/grp_x/member0/sig_sha256_bsn0_msg0_rl_singleentry.inc
+++ b/epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn0_msg0_rl_singleentry.inc
diff --git a/epid/common/testdata/grp_x/member0/sig_sha256_bsn0_msg1.inc b/epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn0_msg1.inc
index 28a6a45..28a6a45 100644
--- a/epid/common/testdata/grp_x/member0/sig_sha256_bsn0_msg1.inc
+++ b/epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn0_msg1.inc
diff --git a/epid/common/testdata/grp_x/member0/sig_sha256_bsn1_msg0.inc b/epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn1_msg0.inc
index fd1131e..fd1131e 100644
--- a/epid/common/testdata/grp_x/member0/sig_sha256_bsn1_msg0.inc
+++ b/epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn1_msg0.inc
diff --git a/epid/common/testdata/grp_x/member0/sig_sha256_rndbase_msg0.inc b/epid/common-testhelper/testdata/grp_x/member0/sig_sha256_rndbase_msg0.inc
index 824f0ef..824f0ef 100644
--- a/epid/common/testdata/grp_x/member0/sig_sha256_rndbase_msg0.inc
+++ b/epid/common-testhelper/testdata/grp_x/member0/sig_sha256_rndbase_msg0.inc
diff --git a/epid/common/testdata/grp_x/member0/sig_sha256_rndbase_msg1.inc b/epid/common-testhelper/testdata/grp_x/member0/sig_sha256_rndbase_msg1.inc
index 27de6e3..27de6e3 100644
--- a/epid/common/testdata/grp_x/member0/sig_sha256_rndbase_msg1.inc
+++ b/epid/common-testhelper/testdata/grp_x/member0/sig_sha256_rndbase_msg1.inc
diff --git a/epid/common/testdata/grp_x/member0/sig_sha384_bsn0_msg0.inc b/epid/common-testhelper/testdata/grp_x/member0/sig_sha384_bsn0_msg0.inc
index b9855f0..b9855f0 100644
--- a/epid/common/testdata/grp_x/member0/sig_sha384_bsn0_msg0.inc
+++ b/epid/common-testhelper/testdata/grp_x/member0/sig_sha384_bsn0_msg0.inc
diff --git a/epid/common/testdata/grp_x/member0/sig_sha384_rndbase_msg0.inc b/epid/common-testhelper/testdata/grp_x/member0/sig_sha384_rndbase_msg0.inc
index b3b5888..b3b5888 100644
--- a/epid/common/testdata/grp_x/member0/sig_sha384_rndbase_msg0.inc
+++ b/epid/common-testhelper/testdata/grp_x/member0/sig_sha384_rndbase_msg0.inc
diff --git a/epid/common/testdata/grp_x/member0/sig_sha512_bsn0_msg0.inc b/epid/common-testhelper/testdata/grp_x/member0/sig_sha512_bsn0_msg0.inc
index 072a224..072a224 100644
--- a/epid/common/testdata/grp_x/member0/sig_sha512_bsn0_msg0.inc
+++ b/epid/common-testhelper/testdata/grp_x/member0/sig_sha512_bsn0_msg0.inc
diff --git a/epid/common/testdata/grp_x/member0/sig_sha512_rndbase_msg0.inc b/epid/common-testhelper/testdata/grp_x/member0/sig_sha512_rndbase_msg0.inc
index e6a7db1..e6a7db1 100644
--- a/epid/common/testdata/grp_x/member0/sig_sha512_rndbase_msg0.inc
+++ b/epid/common-testhelper/testdata/grp_x/member0/sig_sha512_rndbase_msg0.inc
diff --git a/epid/common/testdata/grp_x/member1/mprivkey.inc b/epid/common-testhelper/testdata/grp_x/member1/mprivkey.inc
index 62a5e29..62a5e29 100644
--- a/epid/common/testdata/grp_x/member1/mprivkey.inc
+++ b/epid/common-testhelper/testdata/grp_x/member1/mprivkey.inc
diff --git a/epid/common/testdata/grp_x/member1/sig_sha256_bsn0_msg0.inc b/epid/common-testhelper/testdata/grp_x/member1/sig_sha256_bsn0_msg0.inc
index 0b729f5..0b729f5 100644
--- a/epid/common/testdata/grp_x/member1/sig_sha256_bsn0_msg0.inc
+++ b/epid/common-testhelper/testdata/grp_x/member1/sig_sha256_bsn0_msg0.inc
diff --git a/epid/common/testdata/grp_x/privrevoked/mprivatekey000.inc b/epid/common-testhelper/testdata/grp_x/privrevoked/mprivatekey000.inc
index 895fc7d..895fc7d 100644
--- a/epid/common/testdata/grp_x/privrevoked/mprivatekey000.inc
+++ b/epid/common-testhelper/testdata/grp_x/privrevoked/mprivatekey000.inc
diff --git a/epid/common/testdata/grp_x/privrevoked/mprivatekey001.inc b/epid/common-testhelper/testdata/grp_x/privrevoked/mprivatekey001.inc
index e9d5161..e9d5161 100644
--- a/epid/common/testdata/grp_x/privrevoked/mprivatekey001.inc
+++ b/epid/common-testhelper/testdata/grp_x/privrevoked/mprivatekey001.inc
diff --git a/epid/common/testdata/grp_x/privrevoked/mprivatekey002.inc b/epid/common-testhelper/testdata/grp_x/privrevoked/mprivatekey002.inc
index 8e9af9d..8e9af9d 100644
--- a/epid/common/testdata/grp_x/privrevoked/mprivatekey002.inc
+++ b/epid/common-testhelper/testdata/grp_x/privrevoked/mprivatekey002.inc
diff --git a/epid/common/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey000.inc b/epid/common-testhelper/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey000.inc
index 90166b7..a27ba10 100644
--- a/epid/common/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey000.inc
+++ b/epid/common-testhelper/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey000.inc
@@ -19,7 +19,7 @@
*
* Type : Intel(R) EPID 2.0 Signature
* Group : grpX
- * Signer : privrevoked\member000
+ * Signer : privrevoked/member000
* HashAlg : Sha256
* Message : "msg0"
* Basename: "bsn0"
diff --git a/epid/common/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey001.inc b/epid/common-testhelper/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey001.inc
index c65af47..5814422 100644
--- a/epid/common/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey001.inc
+++ b/epid/common-testhelper/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey001.inc
@@ -19,7 +19,7 @@
*
* Type : Intel(R) EPID 2.0 Signature
* Group : grpX
- * Signer : privrevoked\member001
+ * Signer : privrevoked/member001
* HashAlg : Sha256
* Message : "msg0"
* Basename: "bsn0"
diff --git a/epid/common/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey002.inc b/epid/common-testhelper/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey002.inc
index 704c6f9..2737b16 100644
--- a/epid/common/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey002.inc
+++ b/epid/common-testhelper/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey002.inc
@@ -19,7 +19,7 @@
*
* Type : Intel(R) EPID 2.0 Signature
* Group : grpX
- * Signer : privrevoked\member002
+ * Signer : privrevoked/member002
* HashAlg : Sha256
* Message : "msg0"
* Basename: "bsn0"
diff --git a/epid/common/testdata/grp_x/privrl.inc b/epid/common-testhelper/testdata/grp_x/privrl.inc
index a16a36a..a16a36a 100644
--- a/epid/common/testdata/grp_x/privrl.inc
+++ b/epid/common-testhelper/testdata/grp_x/privrl.inc
diff --git a/epid/common/testdata/grp_x/privrl_single_entry_revoked_key000.inc b/epid/common-testhelper/testdata/grp_x/privrl_single_entry_revoked_key000.inc
index abd8fb5..abd8fb5 100644
--- a/epid/common/testdata/grp_x/privrl_single_entry_revoked_key000.inc
+++ b/epid/common-testhelper/testdata/grp_x/privrl_single_entry_revoked_key000.inc
diff --git a/epid/common/testdata/grp_x/pubkey.inc b/epid/common-testhelper/testdata/grp_x/pubkey.inc
index a7d7484..a7d7484 100644
--- a/epid/common/testdata/grp_x/pubkey.inc
+++ b/epid/common-testhelper/testdata/grp_x/pubkey.inc
diff --git a/epid/common/testdata/grp_x/sigrevoked/mprivatekey000.inc b/epid/common-testhelper/testdata/grp_x/sigrevoked/mprivatekey000.inc
index d05d3b8..d05d3b8 100644
--- a/epid/common/testdata/grp_x/sigrevoked/mprivatekey000.inc
+++ b/epid/common-testhelper/testdata/grp_x/sigrevoked/mprivatekey000.inc
diff --git a/epid/common/testdata/grp_x/sigrevoked/mprivatekey001.inc b/epid/common-testhelper/testdata/grp_x/sigrevoked/mprivatekey001.inc
index e9d2877..e9d2877 100644
--- a/epid/common/testdata/grp_x/sigrevoked/mprivatekey001.inc
+++ b/epid/common-testhelper/testdata/grp_x/sigrevoked/mprivatekey001.inc
diff --git a/epid/common/testdata/grp_x/sigrevoked/mprivatekey002.inc b/epid/common-testhelper/testdata/grp_x/sigrevoked/mprivatekey002.inc
index 9bb5536..9bb5536 100644
--- a/epid/common/testdata/grp_x/sigrevoked/mprivatekey002.inc
+++ b/epid/common-testhelper/testdata/grp_x/sigrevoked/mprivatekey002.inc
diff --git a/epid/common/testdata/grp_x/sigrl.inc b/epid/common-testhelper/testdata/grp_x/sigrl.inc
index 6aba0eb..6aba0eb 100644
--- a/epid/common/testdata/grp_x/sigrl.inc
+++ b/epid/common-testhelper/testdata/grp_x/sigrl.inc
diff --git a/epid/common/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_first_entry.inc b/epid/common-testhelper/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_first_entry.inc
index 3ca0386..3ca0386 100644
--- a/epid/common/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_first_entry.inc
+++ b/epid/common-testhelper/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_first_entry.inc
diff --git a/epid/common/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_last_entry.inc b/epid/common-testhelper/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_last_entry.inc
index f92cde6..f92cde6 100644
--- a/epid/common/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_last_entry.inc
+++ b/epid/common-testhelper/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_last_entry.inc
diff --git a/epid/common/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_middle_entry.inc b/epid/common-testhelper/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_middle_entry.inc
index ecd9138..ecd9138 100644
--- a/epid/common/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_middle_entry.inc
+++ b/epid/common-testhelper/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_middle_entry.inc
diff --git a/epid/common/testdata/grp_x/sigrl_single_entry.inc b/epid/common-testhelper/testdata/grp_x/sigrl_single_entry.inc
index 95a6f0d..95a6f0d 100644
--- a/epid/common/testdata/grp_x/sigrl_single_entry.inc
+++ b/epid/common-testhelper/testdata/grp_x/sigrl_single_entry.inc
diff --git a/epid/common/testdata/grp_x/sigrl_ver_2.inc b/epid/common-testhelper/testdata/grp_x/sigrl_ver_2.inc
index d722684..d722684 100644
--- a/epid/common/testdata/grp_x/sigrl_ver_2.inc
+++ b/epid/common-testhelper/testdata/grp_x/sigrl_ver_2.inc
diff --git a/epid/common/testdata/grp_x/verrevoked/bsn0/mprivkey000.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/mprivkey000.inc
index 4dc89ff..4dc89ff 100644
--- a/epid/common/testdata/grp_x/verrevoked/bsn0/mprivkey000.inc
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/mprivkey000.inc
diff --git a/epid/common/testdata/grp_x/verrevoked/bsn0/mprivkey001.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/mprivkey001.inc
index c42eaad..c42eaad 100644
--- a/epid/common/testdata/grp_x/verrevoked/bsn0/mprivkey001.inc
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/mprivkey001.inc
diff --git a/epid/common/testdata/grp_x/verrevoked/bsn0/mprivkey002.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/mprivkey002.inc
index ef60d52..ef60d52 100644
--- a/epid/common/testdata/grp_x/verrevoked/bsn0/mprivkey002.inc
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/mprivkey002.inc
diff --git a/epid/common/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha256bsn0msg0.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha256bsn0msg0.inc
index 338a3b8..338a3b8 100644
--- a/epid/common/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha256bsn0msg0.inc
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha256bsn0msg0.inc
diff --git a/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha384bsn0msg0.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha384bsn0msg0.inc
new file mode 100644
index 0000000..51cbdfd
--- /dev/null
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha384bsn0msg0.inc
@@ -0,0 +1,60 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 2.0 Signature
+ * Group : grpX
+ * Signer : verrevoked/bsn0/mprivkey000
+ * HashAlg : Sha384
+ * Message : "msg0"
+ * Basename: "bsn0"
+ * SigRl : empty sigrl
+ */
+//unsigned char sig000_sha384_dat[] = {
+ 0x57, 0xe7, 0x8f, 0xfb, 0xf9, 0xa3, 0xba, 0x5e, 0xac, 0xec, 0xb3, 0xa4,
+ 0xf4, 0x13, 0x95, 0xa1, 0x1c, 0x1d, 0xe1, 0xaf, 0xea, 0x16, 0xba, 0x6d,
+ 0xde, 0x4c, 0x43, 0xf0, 0x89, 0x59, 0x5e, 0xfa, 0x0f, 0x18, 0xdd, 0x22,
+ 0xf6, 0xd6, 0xfc, 0xe5, 0x0f, 0xb2, 0x81, 0xb5, 0xa9, 0xa6, 0xe8, 0xee,
+ 0x14, 0x04, 0xec, 0x1b, 0x4e, 0x65, 0x82, 0x7f, 0x96, 0x53, 0xc4, 0x3b,
+ 0x29, 0x17, 0x39, 0xc0, 0x9d, 0x3e, 0x8e, 0xd2, 0x45, 0xfd, 0x1b, 0xcd,
+ 0x33, 0x6c, 0xdb, 0x1a, 0xda, 0x34, 0x59, 0x2e, 0x38, 0x72, 0x75, 0x17,
+ 0x25, 0xee, 0xa8, 0x9b, 0xf9, 0xd0, 0x1b, 0x15, 0x82, 0x03, 0x8c, 0x72,
+ 0x5d, 0xb7, 0x3c, 0x7c, 0x7e, 0x17, 0x81, 0x55, 0x52, 0x7d, 0x87, 0x7c,
+ 0x90, 0xd8, 0x17, 0xee, 0x35, 0xdb, 0xe1, 0x67, 0x59, 0xa4, 0xd6, 0xb3,
+ 0x24, 0x54, 0xd2, 0x70, 0x0f, 0xc0, 0x37, 0x39, 0x54, 0xfd, 0xce, 0xff,
+ 0x03, 0x33, 0xe4, 0xe9, 0x3d, 0x5e, 0xef, 0x0c, 0x2b, 0x7b, 0x54, 0xf4,
+ 0x9e, 0x45, 0x45, 0xe3, 0x7b, 0x41, 0xa5, 0x91, 0x68, 0x8a, 0x56, 0xca,
+ 0xdb, 0xb0, 0xb4, 0x2c, 0x62, 0x14, 0x5e, 0x29, 0xf9, 0x54, 0x03, 0xaa,
+ 0xb0, 0xff, 0x60, 0x2a, 0xc1, 0x41, 0xe6, 0x1c, 0xbc, 0xbc, 0x7d, 0xc5,
+ 0x40, 0x67, 0xae, 0x72, 0x81, 0xcb, 0xc7, 0x91, 0xaa, 0x57, 0xb2, 0x78,
+ 0xaf, 0xc2, 0x44, 0x85, 0x56, 0x6d, 0xcc, 0x42, 0x72, 0xdc, 0x0f, 0x6e,
+ 0x85, 0x47, 0xb6, 0x09, 0xa8, 0x7e, 0x10, 0x78, 0xe7, 0x37, 0xfd, 0xbe,
+ 0x9a, 0x80, 0x3b, 0x51, 0x48, 0x58, 0xa4, 0x36, 0xbd, 0x2b, 0xe5, 0xbf,
+ 0x1e, 0x0b, 0x10, 0xf4, 0xc1, 0xf1, 0xf8, 0x4d, 0xb0, 0x99, 0xba, 0xdb,
+ 0xc5, 0x61, 0xd1, 0x0d, 0x8a, 0x37, 0x9d, 0x97, 0x5d, 0x50, 0x26, 0x32,
+ 0x5b, 0x3d, 0x43, 0x11, 0xd7, 0xf1, 0x79, 0xf3, 0xf5, 0x7d, 0xd5, 0xe6,
+ 0xab, 0x60, 0xe5, 0xed, 0x27, 0x8f, 0x9f, 0xd8, 0x7e, 0x79, 0x51, 0x0a,
+ 0x11, 0x56, 0x94, 0x06, 0x49, 0x83, 0x74, 0xbe, 0x08, 0x3e, 0xbe, 0xc7,
+ 0x0b, 0x3e, 0xfe, 0x1b, 0x04, 0x1b, 0xd5, 0x8f, 0xd3, 0xee, 0xcc, 0xcd,
+ 0x13, 0xf3, 0x51, 0xae, 0xcd, 0x61, 0x02, 0x1f, 0x00, 0x00, 0xf9, 0x7d,
+ 0x19, 0xac, 0xee, 0x09, 0x84, 0xf9, 0x9d, 0x67, 0x1b, 0x7b, 0xe6, 0x60,
+ 0x8c, 0xfc, 0xa1, 0x66, 0xc4, 0xbf, 0x01, 0x75, 0x1a, 0x12, 0xfc, 0x9f,
+ 0x92, 0xd9, 0x47, 0x8b, 0x7f, 0x6a, 0x03, 0x93, 0x16, 0x5b, 0x76, 0xf8,
+ 0x62, 0x26, 0x3e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+//};
+//unsigned int sig000_sha384_dat_len = 360;
diff --git a/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha512bsn0msg0.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha512bsn0msg0.inc
new file mode 100644
index 0000000..e10dc03
--- /dev/null
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha512bsn0msg0.inc
@@ -0,0 +1,60 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 2.0 Signature
+ * Group : grpX
+ * Signer : verrevoked/bsn0/mprivkey000
+ * HashAlg : Sha512
+ * Message : "msg0"
+ * Basename: "bsn0"
+ * SigRl : empty sigrl
+ */
+//unsigned char sig000_sha512_dat[] = {
+ 0x72, 0xed, 0x4f, 0x01, 0xf2, 0xfe, 0xc9, 0xf4, 0x56, 0x4f, 0x11, 0x31,
+ 0x62, 0x07, 0x02, 0x0f, 0xed, 0xd0, 0x6b, 0xe8, 0xbf, 0xa9, 0x0b, 0x55,
+ 0xb8, 0xf7, 0xe9, 0x6e, 0xaa, 0x13, 0x2e, 0x6f, 0xa7, 0xd5, 0xec, 0x4b,
+ 0x3e, 0x23, 0x5f, 0x4f, 0x61, 0x44, 0x52, 0xc1, 0x75, 0x0b, 0x13, 0xad,
+ 0xa1, 0x53, 0x0d, 0x6a, 0x73, 0xed, 0x5e, 0x49, 0xa9, 0xed, 0x1d, 0x88,
+ 0xde, 0xa6, 0x93, 0x18, 0xe6, 0xec, 0xb1, 0xff, 0xca, 0xad, 0x04, 0x8a,
+ 0x1a, 0x04, 0xac, 0xf9, 0x6c, 0xe4, 0x7a, 0xa1, 0xfe, 0xe0, 0x7b, 0xd7,
+ 0xbb, 0x64, 0x25, 0xa7, 0x5b, 0xfa, 0x3c, 0xa4, 0xd6, 0x30, 0x9e, 0x25,
+ 0xa0, 0x85, 0xad, 0x9f, 0x81, 0x61, 0x87, 0x6f, 0x1b, 0x34, 0x01, 0x67,
+ 0x30, 0x31, 0xbc, 0x3c, 0x9f, 0x37, 0x62, 0x79, 0x51, 0x13, 0x57, 0x6d,
+ 0xa8, 0xd3, 0xca, 0x73, 0x8d, 0xe2, 0x76, 0x42, 0x68, 0xe0, 0x76, 0xb3,
+ 0xde, 0x5d, 0xeb, 0x23, 0x26, 0xdd, 0x41, 0xad, 0x4c, 0x67, 0x8c, 0x7d,
+ 0x35, 0x55, 0x2b, 0x5c, 0x1c, 0x68, 0xa6, 0x0e, 0x17, 0x1b, 0x9a, 0xa7,
+ 0x0a, 0x07, 0x21, 0xaf, 0x2b, 0x5a, 0x69, 0x06, 0x8e, 0x66, 0xe5, 0x18,
+ 0x85, 0x83, 0x5a, 0x20, 0x4b, 0x14, 0x0e, 0xfa, 0x62, 0x13, 0x1d, 0x7c,
+ 0x22, 0x6a, 0xd7, 0xff, 0x04, 0x19, 0x93, 0x06, 0x91, 0xc0, 0x83, 0x82,
+ 0xdc, 0x34, 0x2a, 0x66, 0x3a, 0x73, 0x49, 0x1f, 0xc8, 0x36, 0x1f, 0xa8,
+ 0x37, 0x6b, 0x93, 0xe2, 0x66, 0xb6, 0x91, 0xbe, 0xd8, 0xcc, 0xd3, 0x84,
+ 0xda, 0x09, 0x6b, 0xa9, 0xb3, 0xa5, 0x32, 0x8e, 0x92, 0x99, 0x61, 0xdc,
+ 0xa7, 0xbe, 0xbe, 0x59, 0x30, 0x44, 0x62, 0x96, 0x25, 0x2e, 0xcf, 0xcb,
+ 0x79, 0xf6, 0xb5, 0x9c, 0x38, 0xce, 0xac, 0x89, 0x76, 0x99, 0x7e, 0x50,
+ 0x7f, 0x46, 0xce, 0x61, 0xde, 0x4a, 0xd9, 0xa9, 0x72, 0x38, 0xa9, 0xe4,
+ 0x3b, 0x92, 0x83, 0x63, 0xe9, 0xf1, 0xea, 0x8c, 0x03, 0x1b, 0xba, 0xe4,
+ 0x63, 0xea, 0x52, 0x79, 0xad, 0x87, 0x8e, 0xad, 0x36, 0x7f, 0x35, 0x90,
+ 0x6b, 0xdb, 0x29, 0xf6, 0x1d, 0x2b, 0x55, 0x28, 0x15, 0x6e, 0xac, 0x72,
+ 0xb0, 0x60, 0x9c, 0x08, 0xc0, 0x76, 0xfe, 0x56, 0xa4, 0xc2, 0x4c, 0x58,
+ 0xcf, 0xd2, 0xb8, 0x79, 0xf2, 0x3c, 0x90, 0xfd, 0x79, 0x92, 0x17, 0x05,
+ 0x68, 0x5b, 0xce, 0x4d, 0xc3, 0x82, 0xca, 0xd9, 0x9b, 0x45, 0xc6, 0x3c,
+ 0xe5, 0xff, 0x17, 0x07, 0x47, 0x3c, 0x86, 0x3c, 0x38, 0x9a, 0x02, 0x18,
+ 0xdc, 0x87, 0xfc, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+//};
+//unsigned int sig000_sha512_dat_len = 360;
diff --git a/epid/common/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha256bsn0msg0.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha256bsn0msg0.inc
index b27b723..b27b723 100644
--- a/epid/common/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha256bsn0msg0.inc
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha256bsn0msg0.inc
diff --git a/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha384bsn0msg0.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha384bsn0msg0.inc
new file mode 100644
index 0000000..a1af060
--- /dev/null
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha384bsn0msg0.inc
@@ -0,0 +1,60 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 2.0 Signature
+ * Group : grpX
+ * Signer : verrevoked/bsn0/mprivkey001
+ * HashAlg : Sha384
+ * Message : "msg0"
+ * Basename: "bsn0"
+ * SigRl : empty sigrl
+ */
+//unsigned char sig001_sha384_dat[] = {
+ 0x57, 0xe7, 0x8f, 0xfb, 0xf9, 0xa3, 0xba, 0x5e, 0xac, 0xec, 0xb3, 0xa4,
+ 0xf4, 0x13, 0x95, 0xa1, 0x1c, 0x1d, 0xe1, 0xaf, 0xea, 0x16, 0xba, 0x6d,
+ 0xde, 0x4c, 0x43, 0xf0, 0x89, 0x59, 0x5e, 0xfa, 0x0f, 0x18, 0xdd, 0x22,
+ 0xf6, 0xd6, 0xfc, 0xe5, 0x0f, 0xb2, 0x81, 0xb5, 0xa9, 0xa6, 0xe8, 0xee,
+ 0x14, 0x04, 0xec, 0x1b, 0x4e, 0x65, 0x82, 0x7f, 0x96, 0x53, 0xc4, 0x3b,
+ 0x29, 0x17, 0x39, 0xc0, 0x40, 0x45, 0x1d, 0xa1, 0xe4, 0x5c, 0x0a, 0xc9,
+ 0x81, 0xd7, 0x52, 0xe2, 0x75, 0x49, 0xf8, 0x36, 0x2d, 0xf0, 0x60, 0xd2,
+ 0x18, 0x1f, 0xd0, 0x98, 0x5b, 0xde, 0xdb, 0x4a, 0x99, 0x05, 0xeb, 0xba,
+ 0xab, 0x56, 0x75, 0x7b, 0x76, 0xaa, 0xc8, 0x52, 0xa9, 0x90, 0x95, 0x01,
+ 0xda, 0xfb, 0x0f, 0x1b, 0xe3, 0x04, 0x96, 0x9c, 0x27, 0x9d, 0x2b, 0xb3,
+ 0xc2, 0x48, 0x16, 0x3f, 0x4c, 0xc3, 0xe6, 0x6f, 0x71, 0x8a, 0xc6, 0x62,
+ 0x1f, 0x41, 0xc0, 0xe1, 0x2f, 0xb6, 0xd9, 0xee, 0x20, 0x47, 0x43, 0xe0,
+ 0xbd, 0x24, 0x16, 0xf7, 0xd5, 0x5e, 0xb4, 0x28, 0xb9, 0x62, 0xb4, 0xb4,
+ 0x2f, 0x1c, 0xef, 0x0a, 0x26, 0x77, 0xd2, 0x11, 0xc7, 0xf0, 0xa4, 0x05,
+ 0xf7, 0xc3, 0x27, 0xaa, 0x5b, 0x1c, 0x5b, 0x46, 0xce, 0x4b, 0xea, 0xe0,
+ 0x94, 0xef, 0xeb, 0x6e, 0x55, 0xa4, 0x57, 0xd8, 0xa8, 0x18, 0x8b, 0xf4,
+ 0x86, 0xc7, 0x2b, 0x9e, 0xce, 0xef, 0x1c, 0x30, 0x10, 0x18, 0x56, 0x2b,
+ 0xcf, 0x94, 0x21, 0x24, 0xaf, 0x8e, 0xd4, 0xb7, 0x40, 0xdf, 0xab, 0x14,
+ 0x3f, 0x55, 0x65, 0x72, 0x9f, 0xaf, 0x99, 0xed, 0xe1, 0x0a, 0x6d, 0x95,
+ 0x71, 0x1d, 0x38, 0x83, 0x4e, 0xba, 0xb3, 0x7e, 0xed, 0xe5, 0x9e, 0xfd,
+ 0xd0, 0xbf, 0xb4, 0x6a, 0x5f, 0xeb, 0x12, 0x94, 0xb2, 0xac, 0x27, 0x55,
+ 0x34, 0xa8, 0x2d, 0x77, 0x06, 0x0d, 0x7c, 0x56, 0x8b, 0x96, 0x3c, 0xc5,
+ 0xa2, 0xcf, 0x14, 0x52, 0x0c, 0x1f, 0x40, 0xcf, 0x0f, 0x46, 0x55, 0x0a,
+ 0x4a, 0x2b, 0x8f, 0xe0, 0xe7, 0xa3, 0xd5, 0xf5, 0x29, 0x10, 0x2a, 0x7d,
+ 0xd6, 0x43, 0xf3, 0x13, 0x7a, 0x77, 0x29, 0x2a, 0x56, 0x4b, 0x8c, 0x90,
+ 0x73, 0x73, 0x3e, 0x19, 0x58, 0x81, 0x3c, 0x69, 0x98, 0x4e, 0x96, 0x50,
+ 0xdd, 0xe8, 0x7e, 0x6b, 0x94, 0x45, 0xc4, 0xc5, 0x3d, 0xcb, 0x0c, 0x42,
+ 0xd9, 0x69, 0x29, 0x6c, 0x8d, 0xeb, 0x9e, 0x6a, 0xda, 0x8a, 0x4c, 0xfb,
+ 0x2d, 0xb7, 0x33, 0xe8, 0xe8, 0xeb, 0x05, 0x6a, 0x9e, 0x12, 0xb5, 0xb1,
+ 0x21, 0x39, 0xbc, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+//};
+//unsigned int sig001_sha384_dat_len = 360;
diff --git a/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha512bsn0msg0.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha512bsn0msg0.inc
new file mode 100644
index 0000000..370251a
--- /dev/null
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha512bsn0msg0.inc
@@ -0,0 +1,60 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 2.0 Signature
+ * Group : grpX
+ * Signer : verrevoked/bsn0/mprivkey001
+ * HashAlg : Sha512
+ * Message : "msg0"
+ * Basename: "bsn0"
+ * SigRl : empty sigrl
+ */
+//unsigned char sig001_sha512_dat[] = {
+ 0x72, 0xed, 0x4f, 0x01, 0xf2, 0xfe, 0xc9, 0xf4, 0x56, 0x4f, 0x11, 0x31,
+ 0x62, 0x07, 0x02, 0x0f, 0xed, 0xd0, 0x6b, 0xe8, 0xbf, 0xa9, 0x0b, 0x55,
+ 0xb8, 0xf7, 0xe9, 0x6e, 0xaa, 0x13, 0x2e, 0x6f, 0xa7, 0xd5, 0xec, 0x4b,
+ 0x3e, 0x23, 0x5f, 0x4f, 0x61, 0x44, 0x52, 0xc1, 0x75, 0x0b, 0x13, 0xad,
+ 0xa1, 0x53, 0x0d, 0x6a, 0x73, 0xed, 0x5e, 0x49, 0xa9, 0xed, 0x1d, 0x88,
+ 0xde, 0xa6, 0x93, 0x18, 0xe1, 0xd0, 0x28, 0x79, 0xa1, 0xb8, 0xfb, 0x8d,
+ 0x5b, 0xcf, 0xd8, 0x53, 0x7b, 0x27, 0xcf, 0xf0, 0x7b, 0x3c, 0xfd, 0xec,
+ 0x2d, 0x32, 0x75, 0xa9, 0xb0, 0x12, 0xf7, 0xb5, 0x04, 0x9b, 0x4a, 0x89,
+ 0x09, 0xd5, 0xc2, 0xf9, 0x81, 0x3b, 0x02, 0x38, 0x18, 0x7a, 0x8e, 0x0a,
+ 0x94, 0x22, 0x22, 0x32, 0x20, 0xf9, 0x41, 0x12, 0x02, 0x11, 0xbc, 0x0e,
+ 0x43, 0x94, 0x7e, 0x3d, 0x35, 0x98, 0xe8, 0xac, 0xf2, 0x6b, 0xcf, 0xdf,
+ 0xf8, 0x4f, 0x0e, 0x42, 0x5b, 0xaa, 0x07, 0xb9, 0x55, 0x2b, 0xad, 0xb4,
+ 0xbc, 0x3c, 0x2f, 0xc7, 0xc9, 0x5b, 0xe2, 0xaa, 0x9b, 0xca, 0x80, 0xf4,
+ 0x92, 0x58, 0xbe, 0x3b, 0x43, 0xea, 0xaf, 0xb6, 0x1b, 0xd2, 0x6a, 0xda,
+ 0x6f, 0xd8, 0x89, 0x88, 0xbf, 0xbd, 0x7c, 0x8e, 0xa9, 0x47, 0x62, 0x7d,
+ 0xd5, 0x88, 0x7c, 0xb0, 0x24, 0x20, 0xfe, 0x71, 0x8f, 0xc6, 0x3a, 0xfb,
+ 0x44, 0xe1, 0xe8, 0x33, 0x45, 0x26, 0x12, 0x72, 0xe9, 0x2e, 0xbe, 0xf2,
+ 0xea, 0x0a, 0x21, 0x68, 0xc7, 0x1c, 0xea, 0x18, 0x7c, 0x3c, 0x01, 0x44,
+ 0xf1, 0xb5, 0xf7, 0xc6, 0x4b, 0xd7, 0xeb, 0x33, 0x1e, 0x1e, 0x7a, 0xe5,
+ 0xce, 0x76, 0xd6, 0x2b, 0x28, 0xe6, 0xb0, 0xfb, 0xc5, 0xda, 0x0b, 0xc0,
+ 0xbe, 0x39, 0xc1, 0x52, 0x9f, 0x69, 0xb3, 0xc7, 0xd7, 0x90, 0xc5, 0x63,
+ 0x07, 0xd1, 0x22, 0xa2, 0x25, 0x21, 0x8b, 0x12, 0x7a, 0x0c, 0xc7, 0xbb,
+ 0xad, 0xc2, 0xf7, 0xd2, 0xfa, 0x6f, 0x63, 0x04, 0x4d, 0x98, 0x74, 0x7a,
+ 0x96, 0x47, 0x9c, 0x3c, 0x5d, 0xbf, 0x1b, 0x58, 0x79, 0xee, 0xe2, 0x76,
+ 0xae, 0x6b, 0x23, 0xbe, 0xb1, 0x7c, 0xd5, 0x24, 0xe9, 0xae, 0xee, 0x34,
+ 0xf1, 0x73, 0x8b, 0x0e, 0x71, 0xcb, 0x0a, 0xd0, 0xae, 0x16, 0xc3, 0x4a,
+ 0x5a, 0x6c, 0xed, 0x3c, 0x1e, 0xaa, 0x7f, 0x48, 0xca, 0x6b, 0x20, 0x67,
+ 0x16, 0x93, 0xc8, 0xd9, 0x26, 0x21, 0xe9, 0x05, 0x0d, 0x4a, 0x6d, 0x30,
+ 0x86, 0xdd, 0x90, 0x95, 0x53, 0xd3, 0x73, 0x88, 0x6b, 0xec, 0x50, 0x25,
+ 0x29, 0x05, 0xeb, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+//};
+//unsigned int sig001_sha512_dat_len = 360;
diff --git a/epid/common/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha256bsn0msg0.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha256bsn0msg0.inc
index 5dc82aa..5dc82aa 100644
--- a/epid/common/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha256bsn0msg0.inc
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha256bsn0msg0.inc
diff --git a/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha384bsn0msg0.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha384bsn0msg0.inc
new file mode 100644
index 0000000..8bc7618
--- /dev/null
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha384bsn0msg0.inc
@@ -0,0 +1,60 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 2.0 Signature
+ * Group : grpX
+ * Signer : verrevoked/bsn0/mprivkey002
+ * HashAlg : Sha384
+ * Message : "msg0"
+ * Basename: "bsn0"
+ * SigRl : empty sigrl
+ */
+//unsigned char sig002_sha384_dat[] = {
+ 0x57, 0xe7, 0x8f, 0xfb, 0xf9, 0xa3, 0xba, 0x5e, 0xac, 0xec, 0xb3, 0xa4,
+ 0xf4, 0x13, 0x95, 0xa1, 0x1c, 0x1d, 0xe1, 0xaf, 0xea, 0x16, 0xba, 0x6d,
+ 0xde, 0x4c, 0x43, 0xf0, 0x89, 0x59, 0x5e, 0xfa, 0x0f, 0x18, 0xdd, 0x22,
+ 0xf6, 0xd6, 0xfc, 0xe5, 0x0f, 0xb2, 0x81, 0xb5, 0xa9, 0xa6, 0xe8, 0xee,
+ 0x14, 0x04, 0xec, 0x1b, 0x4e, 0x65, 0x82, 0x7f, 0x96, 0x53, 0xc4, 0x3b,
+ 0x29, 0x17, 0x39, 0xc0, 0x9c, 0x72, 0x76, 0x06, 0xe0, 0xbd, 0x59, 0xba,
+ 0xc5, 0x0b, 0x58, 0x76, 0xf9, 0x32, 0xb7, 0xd1, 0x62, 0x68, 0x66, 0x97,
+ 0xc3, 0xaf, 0xfd, 0xa4, 0x76, 0x62, 0x40, 0xed, 0x19, 0xaa, 0x75, 0x54,
+ 0x17, 0x8b, 0xb4, 0x6a, 0xce, 0x16, 0x43, 0x46, 0xb4, 0xe0, 0x5d, 0xac,
+ 0xcf, 0xf8, 0xa8, 0xcf, 0x23, 0x6b, 0x08, 0x95, 0x28, 0xb4, 0x07, 0x44,
+ 0xc5, 0xe9, 0x7f, 0x16, 0x60, 0x2a, 0x1d, 0x23, 0xaf, 0x23, 0x6b, 0xe5,
+ 0x0f, 0x85, 0x6f, 0x62, 0x06, 0x26, 0xec, 0xaa, 0x08, 0x88, 0x39, 0x79,
+ 0x6c, 0xa4, 0x45, 0xf2, 0xda, 0xac, 0x08, 0x7d, 0x1c, 0xe3, 0x75, 0xa9,
+ 0xd4, 0x56, 0x18, 0x27, 0xa5, 0xc2, 0xbf, 0x5d, 0x9c, 0x98, 0x1c, 0xa6,
+ 0xec, 0x4e, 0x21, 0x20, 0x88, 0x1d, 0x53, 0x51, 0x4d, 0x1f, 0x86, 0xa3,
+ 0x67, 0x54, 0xc4, 0xfd, 0x43, 0xb9, 0x06, 0xcb, 0x0d, 0xb8, 0x06, 0x48,
+ 0x83, 0xe8, 0x80, 0x94, 0x04, 0x11, 0xe6, 0xd3, 0xbe, 0xb6, 0x28, 0x94,
+ 0x6e, 0x5b, 0x2b, 0xa4, 0x48, 0x4d, 0x7b, 0xef, 0xab, 0x90, 0x8b, 0x59,
+ 0x25, 0xcc, 0xcb, 0x0f, 0x51, 0x8a, 0x49, 0xcf, 0x58, 0xd3, 0x80, 0xc8,
+ 0xb0, 0xea, 0x84, 0x23, 0x65, 0xe4, 0x6f, 0x49, 0xc1, 0x64, 0x30, 0x44,
+ 0xf3, 0x4f, 0x96, 0x46, 0x96, 0x46, 0xd9, 0x5a, 0xce, 0xb0, 0xac, 0x59,
+ 0xc3, 0xa4, 0xbe, 0x47, 0x9c, 0x50, 0xb9, 0xb2, 0x9d, 0x60, 0xcb, 0x63,
+ 0x15, 0x44, 0x3a, 0x3d, 0xee, 0x8e, 0xf4, 0x05, 0xaf, 0x8b, 0xa5, 0xa8,
+ 0x76, 0x4e, 0x9f, 0xf9, 0x89, 0x4c, 0x94, 0x98, 0xfa, 0x05, 0xf3, 0xb5,
+ 0x5c, 0xe2, 0x10, 0xdd, 0x0a, 0x4c, 0x10, 0x95, 0x69, 0xc8, 0xe0, 0xbf,
+ 0x8e, 0x65, 0x79, 0x90, 0x2c, 0x9b, 0x5f, 0x00, 0x27, 0x04, 0x3f, 0x09,
+ 0x3a, 0xce, 0x8d, 0x0e, 0x6a, 0x4e, 0x53, 0x6b, 0x67, 0x87, 0xf7, 0x3b,
+ 0xe1, 0x15, 0x05, 0xe1, 0x93, 0x77, 0x53, 0x1b, 0x6b, 0xfa, 0xdb, 0xd4,
+ 0xee, 0x57, 0x1e, 0xe2, 0xd8, 0xc8, 0x41, 0x89, 0xc0, 0x71, 0x47, 0x80,
+ 0x2e, 0x6d, 0x8d, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+//};
+//unsigned int sig002_sha384_dat_len = 360;
diff --git a/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha512bsn0msg0.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha512bsn0msg0.inc
new file mode 100644
index 0000000..eb022fa
--- /dev/null
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha512bsn0msg0.inc
@@ -0,0 +1,60 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 2.0 Signature
+ * Group : grpX
+ * Signer : verrevoked/bsn0/mprivkey002
+ * HashAlg : Sha512
+ * Message : "msg0"
+ * Basename: "bsn0"
+ * SigRl : empty sigrl
+ */
+//unsigned char sig002_sha512_dat[] = {
+ 0x72, 0xed, 0x4f, 0x01, 0xf2, 0xfe, 0xc9, 0xf4, 0x56, 0x4f, 0x11, 0x31,
+ 0x62, 0x07, 0x02, 0x0f, 0xed, 0xd0, 0x6b, 0xe8, 0xbf, 0xa9, 0x0b, 0x55,
+ 0xb8, 0xf7, 0xe9, 0x6e, 0xaa, 0x13, 0x2e, 0x6f, 0xa7, 0xd5, 0xec, 0x4b,
+ 0x3e, 0x23, 0x5f, 0x4f, 0x61, 0x44, 0x52, 0xc1, 0x75, 0x0b, 0x13, 0xad,
+ 0xa1, 0x53, 0x0d, 0x6a, 0x73, 0xed, 0x5e, 0x49, 0xa9, 0xed, 0x1d, 0x88,
+ 0xde, 0xa6, 0x93, 0x18, 0x5b, 0x0a, 0xb1, 0xd7, 0x8e, 0x50, 0xf3, 0x3c,
+ 0xed, 0x19, 0x00, 0xdb, 0x98, 0xdf, 0x1d, 0x5a, 0xf2, 0x2a, 0x54, 0x57,
+ 0xfd, 0x1f, 0xdb, 0xbd, 0x64, 0x83, 0xe0, 0x1e, 0x1d, 0x08, 0x14, 0x59,
+ 0x3a, 0xf6, 0xd2, 0x6a, 0xd7, 0xba, 0x42, 0x7f, 0xca, 0xb4, 0xe9, 0x06,
+ 0x24, 0x9b, 0xbf, 0x67, 0xed, 0x56, 0x3c, 0x65, 0xd6, 0x7f, 0xcf, 0x7c,
+ 0x17, 0xa5, 0x5f, 0x90, 0x22, 0x71, 0x05, 0x00, 0x05, 0x3a, 0x09, 0x77,
+ 0x8a, 0x0f, 0xca, 0x75, 0x10, 0xb5, 0xdf, 0xc6, 0x86, 0x3a, 0xf6, 0x0d,
+ 0x9e, 0xb8, 0x28, 0xae, 0x53, 0x93, 0x4d, 0x8a, 0x4a, 0x91, 0x77, 0xdf,
+ 0x5b, 0xeb, 0x08, 0x39, 0xab, 0x96, 0x72, 0x32, 0x5c, 0x8b, 0x8d, 0xb4,
+ 0x6b, 0xcc, 0x94, 0x62, 0x69, 0xd3, 0x73, 0xf5, 0x96, 0x49, 0xfe, 0x92,
+ 0x46, 0xe9, 0x0e, 0xae, 0x05, 0xc3, 0xc8, 0xd2, 0x35, 0x86, 0x98, 0xec,
+ 0x86, 0x56, 0xec, 0x74, 0xa3, 0x52, 0x2f, 0x5a, 0xc8, 0x0c, 0x26, 0xb5,
+ 0x9c, 0xd6, 0xab, 0xcf, 0xc0, 0x4f, 0xcb, 0xa4, 0xee, 0xe8, 0xd9, 0xc3,
+ 0x6e, 0xb4, 0x6f, 0x2d, 0x2e, 0x94, 0x7a, 0xb2, 0x99, 0xe2, 0x3f, 0x26,
+ 0x89, 0x10, 0x20, 0x72, 0x24, 0x9e, 0xbe, 0xbc, 0xcd, 0x81, 0xaa, 0x42,
+ 0x09, 0x4f, 0x02, 0x8e, 0x09, 0xff, 0x40, 0x9e, 0x52, 0xae, 0x0d, 0x01,
+ 0xf8, 0x0b, 0x39, 0x55, 0x68, 0x27, 0xf6, 0xb5, 0x93, 0xc5, 0x19, 0x13,
+ 0x4b, 0xa9, 0x9e, 0x91, 0xa2, 0xf8, 0x49, 0xb5, 0xbe, 0x6c, 0x13, 0x5a,
+ 0x97, 0x5f, 0x33, 0x85, 0x2b, 0xbd, 0x79, 0xea, 0xe2, 0x35, 0xb8, 0x60,
+ 0x27, 0xa1, 0x87, 0x88, 0x68, 0x92, 0x98, 0x96, 0xcd, 0x0b, 0x4f, 0x9c,
+ 0x99, 0x27, 0x0d, 0xb7, 0x85, 0x88, 0x5e, 0x9d, 0x61, 0x3b, 0x66, 0x94,
+ 0x1e, 0x97, 0xd4, 0x4f, 0x3b, 0xb7, 0xba, 0x0e, 0xaa, 0x31, 0x5b, 0x10,
+ 0x70, 0x2d, 0x5b, 0x28, 0x95, 0xe9, 0xb8, 0x40, 0x90, 0x12, 0x1e, 0x02,
+ 0xa8, 0x41, 0x0a, 0xc4, 0x05, 0x94, 0xf4, 0x99, 0x74, 0x0b, 0xed, 0x27,
+ 0xb9, 0x74, 0x3a, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+//};
+//unsigned int sig002_sha512_dat_len = 360;
diff --git a/epid/common/testdata/grp_x/verrevoked/bsn0/verrl.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl.inc
index df8d6bd..468c0ec 100644
--- a/epid/common/testdata/grp_x/verrevoked/bsn0/verrl.inc
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl.inc
@@ -20,6 +20,7 @@
* Type : Intel(R) EPID 2.0 verifier revocation list
* Group : grpX
* Bsn : "bsn0"
+ * HashAlg : Sha256
* Revoked : verrevoked/mprivatekey000
* verrevoked/mprivatekey001
* verrevoked/mprivatekey002
diff --git a/epid/common/testdata/grp_x/verrevoked/bsn0/verrl_1entry.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl_1entry.inc
index 538d663..aa2b295 100644
--- a/epid/common/testdata/grp_x/verrevoked/bsn0/verrl_1entry.inc
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl_1entry.inc
@@ -20,6 +20,7 @@
* Type : Intel(R) EPID 2.0 verifier revocation list
* Group : grpX
* Bsn : "bsn0"
+ * HashAlg : Sha256
* Revoked : verrevoked/mprivatekey000
* verrevoked/mprivatekey001
* verrevoked/mprivatekey002
diff --git a/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl_sha384.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl_sha384.inc
new file mode 100644
index 0000000..ee7eccb
--- /dev/null
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl_sha384.inc
@@ -0,0 +1,69 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 2.0 verifier revocation list
+ * Group : grpX
+ * Bsn : "bsn0"
+ * HashAlg : Sha384
+ * Revoked : verrevoked/mprivatekey000
+ * verrevoked/mprivatekey001
+ * verrevoked/mprivatekey002
+ */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xee,
+
+// B
+ 0x57, 0xe7, 0x8f, 0xfb, 0xf9, 0xa3, 0xba, 0x5e,
+ 0xac, 0xec, 0xb3, 0xa4, 0xf4, 0x13, 0x95, 0xa1,
+ 0x1c, 0x1d, 0xe1, 0xaf, 0xea, 0x16, 0xba, 0x6d,
+ 0xde, 0x4c, 0x43, 0xf0, 0x89, 0x59, 0x5e, 0xfa,
+ 0x0f, 0x18, 0xdd, 0x22, 0xf6, 0xd6, 0xfc, 0xe5,
+ 0x0f, 0xb2, 0x81, 0xb5, 0xa9, 0xa6, 0xe8, 0xee,
+ 0x14, 0x04, 0xec, 0x1b, 0x4e, 0x65, 0x82, 0x7f,
+ 0x96, 0x53, 0xc4, 0x3b, 0x29, 0x17, 0x39, 0xc0,
+
+// version | n4
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03,
+
+ 0x9d, 0x3e, 0x8e, 0xd2, 0x45, 0xfd, 0x1b, 0xcd,
+ 0x33, 0x6c, 0xdb, 0x1a, 0xda, 0x34, 0x59, 0x2e,
+ 0x38, 0x72, 0x75, 0x17, 0x25, 0xee, 0xa8, 0x9b,
+ 0xf9, 0xd0, 0x1b, 0x15, 0x82, 0x03, 0x8c, 0x72,
+ 0x5d, 0xb7, 0x3c, 0x7c, 0x7e, 0x17, 0x81, 0x55,
+ 0x52, 0x7d, 0x87, 0x7c, 0x90, 0xd8, 0x17, 0xee,
+ 0x35, 0xdb, 0xe1, 0x67, 0x59, 0xa4, 0xd6, 0xb3,
+ 0x24, 0x54, 0xd2, 0x70, 0x0f, 0xc0, 0x37, 0x39,
+
+ 0x40, 0x45, 0x1d, 0xa1, 0xe4, 0x5c, 0x0a, 0xc9,
+ 0x81, 0xd7, 0x52, 0xe2, 0x75, 0x49, 0xf8, 0x36,
+ 0x2d, 0xf0, 0x60, 0xd2, 0x18, 0x1f, 0xd0, 0x98,
+ 0x5b, 0xde, 0xdb, 0x4a, 0x99, 0x05, 0xeb, 0xba,
+ 0xab, 0x56, 0x75, 0x7b, 0x76, 0xaa, 0xc8, 0x52,
+ 0xa9, 0x90, 0x95, 0x01, 0xda, 0xfb, 0x0f, 0x1b,
+ 0xe3, 0x04, 0x96, 0x9c, 0x27, 0x9d, 0x2b, 0xb3,
+ 0xc2, 0x48, 0x16, 0x3f, 0x4c, 0xc3, 0xe6, 0x6f,
+
+ 0x9c, 0x72, 0x76, 0x06, 0xe0, 0xbd, 0x59, 0xba,
+ 0xc5, 0x0b, 0x58, 0x76, 0xf9, 0x32, 0xb7, 0xd1,
+ 0x62, 0x68, 0x66, 0x97, 0xc3, 0xaf, 0xfd, 0xa4,
+ 0x76, 0x62, 0x40, 0xed, 0x19, 0xaa, 0x75, 0x54,
+ 0x17, 0x8b, 0xb4, 0x6a, 0xce, 0x16, 0x43, 0x46,
+ 0xb4, 0xe0, 0x5d, 0xac, 0xcf, 0xf8, 0xa8, 0xcf,
+ 0x23, 0x6b, 0x08, 0x95, 0x28, 0xb4, 0x07, 0x44,
+ 0xc5, 0xe9, 0x7f, 0x16, 0x60, 0x2a, 0x1d, 0x23,
diff --git a/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl_sha512.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl_sha512.inc
new file mode 100644
index 0000000..7b8fbfc
--- /dev/null
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl_sha512.inc
@@ -0,0 +1,69 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 2.0 verifier revocation list
+ * Group : grpX
+ * Bsn : "bsn0"
+ * HashAlg : Sha512
+ * Revoked : verrevoked/mprivatekey000
+ * verrevoked/mprivatekey001
+ * verrevoked/mprivatekey002
+ */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xee,
+
+// B
+ 0x72, 0xed, 0x4f, 0x01, 0xf2, 0xfe, 0xc9, 0xf4,
+ 0x56, 0x4f, 0x11, 0x31, 0x62, 0x07, 0x02, 0x0f,
+ 0xed, 0xd0, 0x6b, 0xe8, 0xbf, 0xa9, 0x0b, 0x55,
+ 0xb8, 0xf7, 0xe9, 0x6e, 0xaa, 0x13, 0x2e, 0x6f,
+ 0xa7, 0xd5, 0xec, 0x4b, 0x3e, 0x23, 0x5f, 0x4f,
+ 0x61, 0x44, 0x52, 0xc1, 0x75, 0x0b, 0x13, 0xad,
+ 0xa1, 0x53, 0x0d, 0x6a, 0x73, 0xed, 0x5e, 0x49,
+ 0xa9, 0xed, 0x1d, 0x88, 0xde, 0xa6, 0x93, 0x18,
+
+// version | n4
+ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03,
+
+ 0xe6, 0xec, 0xb1, 0xff, 0xca, 0xad, 0x04, 0x8a,
+ 0x1a, 0x04, 0xac, 0xf9, 0x6c, 0xe4, 0x7a, 0xa1,
+ 0xfe, 0xe0, 0x7b, 0xd7, 0xbb, 0x64, 0x25, 0xa7,
+ 0x5b, 0xfa, 0x3c, 0xa4, 0xd6, 0x30, 0x9e, 0x25,
+ 0xa0, 0x85, 0xad, 0x9f, 0x81, 0x61, 0x87, 0x6f,
+ 0x1b, 0x34, 0x01, 0x67, 0x30, 0x31, 0xbc, 0x3c,
+ 0x9f, 0x37, 0x62, 0x79, 0x51, 0x13, 0x57, 0x6d,
+ 0xa8, 0xd3, 0xca, 0x73, 0x8d, 0xe2, 0x76, 0x42,
+
+ 0xe1, 0xd0, 0x28, 0x79, 0xa1, 0xb8, 0xfb, 0x8d,
+ 0x5b, 0xcf, 0xd8, 0x53, 0x7b, 0x27, 0xcf, 0xf0,
+ 0x7b, 0x3c, 0xfd, 0xec, 0x2d, 0x32, 0x75, 0xa9,
+ 0xb0, 0x12, 0xf7, 0xb5, 0x04, 0x9b, 0x4a, 0x89,
+ 0x09, 0xd5, 0xc2, 0xf9, 0x81, 0x3b, 0x02, 0x38,
+ 0x18, 0x7a, 0x8e, 0x0a, 0x94, 0x22, 0x22, 0x32,
+ 0x20, 0xf9, 0x41, 0x12, 0x02, 0x11, 0xbc, 0x0e,
+ 0x43, 0x94, 0x7e, 0x3d, 0x35, 0x98, 0xe8, 0xac,
+
+ 0x5b, 0x0a, 0xb1, 0xd7, 0x8e, 0x50, 0xf3, 0x3c,
+ 0xed, 0x19, 0x00, 0xdb, 0x98, 0xdf, 0x1d, 0x5a,
+ 0xf2, 0x2a, 0x54, 0x57, 0xfd, 0x1f, 0xdb, 0xbd,
+ 0x64, 0x83, 0xe0, 0x1e, 0x1d, 0x08, 0x14, 0x59,
+ 0x3a, 0xf6, 0xd2, 0x6a, 0xd7, 0xba, 0x42, 0x7f,
+ 0xca, 0xb4, 0xe9, 0x06, 0x24, 0x9b, 0xbf, 0x67,
+ 0xed, 0x56, 0x3c, 0x65, 0xd6, 0x7f, 0xcf, 0x7c,
+ 0x17, 0xa5, 0x5f, 0x90, 0x22, 0x71, 0x05, 0x00,
diff --git a/epid/common/testdata/grp_x/verrevoked/bsn1/mprivkey003.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/mprivkey003.inc
index 3009049..3009049 100644
--- a/epid/common/testdata/grp_x/verrevoked/bsn1/mprivkey003.inc
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/mprivkey003.inc
diff --git a/epid/common/testdata/grp_x/verrevoked/bsn1/mprivkey004.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/mprivkey004.inc
index 253228e..253228e 100644
--- a/epid/common/testdata/grp_x/verrevoked/bsn1/mprivkey004.inc
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/mprivkey004.inc
diff --git a/epid/common/testdata/grp_x/verrevoked/bsn1/mprivkey005.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/mprivkey005.inc
index 0bf76c8..0bf76c8 100644
--- a/epid/common/testdata/grp_x/verrevoked/bsn1/mprivkey005.inc
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/mprivkey005.inc
diff --git a/epid/common/testdata/grp_x/verrevoked/bsn1/sig_revoked3sha256bsn1msg0.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/sig_revoked3sha256bsn1msg0.inc
index 25a00f8..25a00f8 100644
--- a/epid/common/testdata/grp_x/verrevoked/bsn1/sig_revoked3sha256bsn1msg0.inc
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/sig_revoked3sha256bsn1msg0.inc
diff --git a/epid/common/testdata/grp_x/verrevoked/bsn1/verrl.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/verrl.inc
index 16c9616..3f1b784 100644
--- a/epid/common/testdata/grp_x/verrevoked/bsn1/verrl.inc
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/verrl.inc
@@ -20,6 +20,7 @@
* Type : Intel(R) EPID 2.0 verifier revocation list
* Group : grpX
* Bsn : "bsn1"
+ * HashAlg : Sha256
* Revoked : verrevoked/mprivatekey003
* verrevoked/mprivatekey004
* verrevoked/mprivatekey005
diff --git a/epid/common/testdata/grp_x/verrevoked/bsn1/verrl_012revoked.inc b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/verrl_012revoked.inc
index 906f5d7..dc6e732 100644
--- a/epid/common/testdata/grp_x/verrevoked/bsn1/verrl_012revoked.inc
+++ b/epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/verrl_012revoked.inc
@@ -20,6 +20,7 @@
* Type : Intel(R) EPID 2.0 verifier revocation list
* Group : grpX
* Bsn : "bsn1"
+ * HashAlg : Sha256
* Revoked : verrevoked/mprivatekey000
* verrevoked/mprivatekey001
* verrevoked/mprivatekey002
diff --git a/epid/common/testdata/grp_y/cmember9/cmpprivkey.dat b/epid/common-testhelper/testdata/grp_y/cmember9/cmpprivkey.dat
index 9c0f0a4..9c0f0a4 100644
--- a/epid/common/testdata/grp_y/cmember9/cmpprivkey.dat
+++ b/epid/common-testhelper/testdata/grp_y/cmember9/cmpprivkey.dat
Binary files differ
diff --git a/epid/common/testdata/grp_y/cmember9/cmpprivkey.inc b/epid/common-testhelper/testdata/grp_y/cmember9/cmpprivkey.inc
index c1fc635..c1fc635 100644
--- a/epid/common/testdata/grp_y/cmember9/cmpprivkey.inc
+++ b/epid/common-testhelper/testdata/grp_y/cmember9/cmpprivkey.inc
diff --git a/epid/common/testdata/grp_y/iprivkey.inc b/epid/common-testhelper/testdata/grp_y/iprivkey.inc
index d5444a8..d5444a8 100644
--- a/epid/common/testdata/grp_y/iprivkey.inc
+++ b/epid/common-testhelper/testdata/grp_y/iprivkey.inc
diff --git a/epid/common/testdata/grp_y/pubkey.inc b/epid/common-testhelper/testdata/grp_y/pubkey.inc
index 592241a..592241a 100644
--- a/epid/common/testdata/grp_y/pubkey.inc
+++ b/epid/common-testhelper/testdata/grp_y/pubkey.inc
diff --git a/epid/common/testdata/grprl.inc b/epid/common-testhelper/testdata/grprl.inc
index 3968e0d..3968e0d 100644
--- a/epid/common/testdata/grprl.inc
+++ b/epid/common-testhelper/testdata/grprl.inc
diff --git a/epid/common/testdata/grprl_revoked_grp_x_first_entry.inc b/epid/common-testhelper/testdata/grprl_revoked_grp_x_first_entry.inc
index 5cad583..5cad583 100644
--- a/epid/common/testdata/grprl_revoked_grp_x_first_entry.inc
+++ b/epid/common-testhelper/testdata/grprl_revoked_grp_x_first_entry.inc
diff --git a/epid/common/testdata/grprl_revoked_grp_x_last_entry.inc b/epid/common-testhelper/testdata/grprl_revoked_grp_x_last_entry.inc
index 0c9dcad..0c9dcad 100644
--- a/epid/common/testdata/grprl_revoked_grp_x_last_entry.inc
+++ b/epid/common-testhelper/testdata/grprl_revoked_grp_x_last_entry.inc
diff --git a/epid/common/testdata/grprl_revoked_grp_x_middle_entry.inc b/epid/common-testhelper/testdata/grprl_revoked_grp_x_middle_entry.inc
index 258273e..258273e 100644
--- a/epid/common/testdata/grprl_revoked_grp_x_middle_entry.inc
+++ b/epid/common-testhelper/testdata/grprl_revoked_grp_x_middle_entry.inc
diff --git a/epid/common/testdata/grprl_single_entry_revoked_grp_x.inc b/epid/common-testhelper/testdata/grprl_single_entry_revoked_grp_x.inc
index 17573e4..17573e4 100644
--- a/epid/common/testdata/grprl_single_entry_revoked_grp_x.inc
+++ b/epid/common-testhelper/testdata/grprl_single_entry_revoked_grp_x.inc
diff --git a/epid/common/testdata/ikgf/groupa/member0/mprecomp.inc b/epid/common-testhelper/testdata/ikgf/groupa/member0/mprecomp.inc
index 2195797..2195797 100644
--- a/epid/common/testdata/ikgf/groupa/member0/mprecomp.inc
+++ b/epid/common-testhelper/testdata/ikgf/groupa/member0/mprecomp.inc
diff --git a/epid/common/testdata/ikgf/groupa/member0/mprivkey.inc b/epid/common-testhelper/testdata/ikgf/groupa/member0/mprivkey.inc
index 2017fa0..2017fa0 100644
--- a/epid/common/testdata/ikgf/groupa/member0/mprivkey.inc
+++ b/epid/common-testhelper/testdata/ikgf/groupa/member0/mprivkey.inc
diff --git a/epid/common/testdata/ikgf/groupa/privrl.inc b/epid/common-testhelper/testdata/ikgf/groupa/privrl.inc
index 2b2edc3..2b2edc3 100644
--- a/epid/common/testdata/ikgf/groupa/privrl.inc
+++ b/epid/common-testhelper/testdata/ikgf/groupa/privrl.inc
diff --git a/epid/common-testhelper/testdata/ikgf/groupa/privrl_empty.inc b/epid/common-testhelper/testdata/ikgf/groupa/privrl_empty.inc
new file mode 100644
index 0000000..cf9237e
--- /dev/null
+++ b/epid/common-testhelper/testdata/ikgf/groupa/privrl_empty.inc
@@ -0,0 +1,27 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 2.0 private-key based revocation list
+ * Group : GroupA
+ * Issuer : iKGF
+ */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00
+
diff --git a/epid/common/testdata/ikgf/groupa/pubkey.inc b/epid/common-testhelper/testdata/ikgf/groupa/pubkey.inc
index 00fabe2..00fabe2 100644
--- a/epid/common/testdata/ikgf/groupa/pubkey.inc
+++ b/epid/common-testhelper/testdata/ikgf/groupa/pubkey.inc
diff --git a/epid/common/testdata/ikgf/groupa/sig_msg0_sha256_sigrl.inc b/epid/common-testhelper/testdata/ikgf/groupa/sig_msg0_sha256_sigrl.inc
index 0cc91af..0cc91af 100644
--- a/epid/common/testdata/ikgf/groupa/sig_msg0_sha256_sigrl.inc
+++ b/epid/common-testhelper/testdata/ikgf/groupa/sig_msg0_sha256_sigrl.inc
diff --git a/epid/common/testdata/ikgf/groupa/sig_sha256_bsn0_msg0.inc b/epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0.inc
index 0feea00..0feea00 100644
--- a/epid/common/testdata/ikgf/groupa/sig_sha256_bsn0_msg0.inc
+++ b/epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0.inc
diff --git a/epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_empty_sigrl.inc b/epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_empty_sigrl.inc
new file mode 100644
index 0000000..e48b648
--- /dev/null
+++ b/epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_empty_sigrl.inc
@@ -0,0 +1,58 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+ /*!
+ * \file
+ * \brief Test data.
+ *
+ * Type: Intel(R) EPID 2.0 Signature
+ * Group: groupA
+ * Issuer : iKGF
+ * Signer: member0
+ * HashAlg: Sha256
+ * Message: "msg0"
+ * Basename: "bsn0"
+ * SigRl: Empty SigRl of group
+ */
+ 0x70, 0x91, 0x63, 0x2c, 0xbb, 0xfe, 0x06, 0x26, 0x5f, 0x20, 0xbd, 0x9e,
+ 0x49, 0x11, 0x31, 0xe0, 0x7c, 0x99, 0x5e, 0xa0, 0x58, 0x4f, 0x1b, 0x3f,
+ 0xb4, 0x6e, 0xcd, 0x17, 0x61, 0x79, 0xa0, 0xfd, 0x64, 0x60, 0xa4, 0xf8,
+ 0x17, 0x81, 0xc3, 0x0a, 0x4b, 0x6a, 0x72, 0x86, 0x96, 0xe3, 0xfa, 0x95,
+ 0x47, 0x45, 0xfb, 0x57, 0xef, 0xca, 0x82, 0x99, 0x72, 0xdc, 0xe6, 0x78,
+ 0xe3, 0x70, 0xa8, 0x28, 0x1f, 0x63, 0x25, 0xf1, 0xb0, 0x2f, 0x03, 0x92,
+ 0xc7, 0x15, 0x23, 0x27, 0xd7, 0xb3, 0x16, 0x3f, 0x91, 0x29, 0xa1, 0x72,
+ 0x1d, 0xb7, 0x74, 0x34, 0xc2, 0xe4, 0x8d, 0x71, 0x4f, 0x43, 0xcd, 0x48,
+ 0x73, 0x72, 0xaa, 0x7d, 0x58, 0x7a, 0x91, 0x17, 0x42, 0x56, 0x5c, 0xe1,
+ 0x50, 0x6b, 0x13, 0x39, 0x7a, 0x54, 0x7b, 0x0c, 0xa4, 0xe4, 0xaa, 0xc0,
+ 0x98, 0x20, 0xb8, 0x29, 0xb3, 0x2f, 0x9b, 0x40, 0x95, 0x66, 0x30, 0x8d,
+ 0xd8, 0x4c, 0xfc, 0xd5, 0xb4, 0x51, 0xcf, 0x6f, 0xd1, 0x25, 0xf0, 0xe4,
+ 0x2f, 0xe1, 0x2f, 0x85, 0x7d, 0x84, 0x10, 0x35, 0xe0, 0x29, 0xa9, 0x0f,
+ 0xc2, 0x92, 0x93, 0x40, 0x67, 0xc1, 0x34, 0x23, 0xb8, 0xe0, 0xf6, 0x5e,
+ 0x68, 0xde, 0xe7, 0x50, 0xed, 0x2d, 0xfc, 0xe1, 0x45, 0x27, 0x19, 0x66,
+ 0xf3, 0xe7, 0xb9, 0x2e, 0x3d, 0xc7, 0xfa, 0xa9, 0xd9, 0x7c, 0x51, 0xc0,
+ 0x80, 0x9e, 0x3d, 0x64, 0x73, 0x37, 0xa0, 0x14, 0x3e, 0xa6, 0x8c, 0xfa,
+ 0xec, 0x11, 0x64, 0x7e, 0x4f, 0xcf, 0x04, 0x5d, 0x5e, 0x30, 0xaa, 0x23,
+ 0xd6, 0xcf, 0x5e, 0xc5, 0x78, 0x26, 0x28, 0x24, 0x21, 0xcf, 0xdb, 0x6c,
+ 0x4a, 0x58, 0x82, 0x44, 0x6e, 0xda, 0xed, 0x24, 0xe3, 0x2a, 0x80, 0xa7,
+ 0x28, 0x69, 0x93, 0x3b, 0x71, 0xe1, 0x8c, 0x77, 0x3c, 0x90, 0x5b, 0x96,
+ 0x17, 0x95, 0x3e, 0x5f, 0xf0, 0xda, 0xab, 0x1c, 0xc0, 0x04, 0x6f, 0x29,
+ 0x13, 0xe7, 0x89, 0x51, 0x20, 0xc8, 0xeb, 0x90, 0xee, 0x8f, 0x84, 0x1e,
+ 0xd7, 0x9c, 0x1e, 0x15, 0x3d, 0x50, 0x11, 0x91, 0x29, 0x58, 0xde, 0xa6,
+ 0x6a, 0x35, 0x08, 0xc1, 0x17, 0x85, 0x67, 0xa8, 0xe2, 0x0a, 0x13, 0xb2,
+ 0x8e, 0x64, 0xd6, 0xb6, 0xdb, 0x5d, 0xfe, 0xcd, 0x09, 0x37, 0x68, 0xea,
+ 0x4c, 0x9e, 0x16, 0x29, 0x80, 0x9d, 0x32, 0x5a, 0xd3, 0x7a, 0x26, 0xf2,
+ 0x5e, 0x49, 0x64, 0xb9, 0xd2, 0x71, 0x1f, 0x68, 0xab, 0xdf, 0x62, 0xa7,
+ 0x3c, 0xf7, 0xdd, 0x54, 0x8f, 0xa7, 0x14, 0xa5, 0x99, 0xce, 0xc8, 0x93,
+ 0xa2, 0xf9, 0xd8, 0x74, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00
diff --git a/epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_nosigrl.inc b/epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_nosigrl.inc
new file mode 100644
index 0000000..c0c37bc
--- /dev/null
+++ b/epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_nosigrl.inc
@@ -0,0 +1,58 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+ /*!
+ * \file
+ * \brief Test data.
+ *
+ * Type: Intel(R) EPID 2.0 Signature
+ * Group: groupA
+ * Issuer : iKGF
+ * Signer: member0
+ * HashAlg: Sha256
+ * Message: "msg0"
+ * Basename: "bsn0"
+ * SigRl: no SigRl
+ */
+ 0x70, 0x91, 0x63, 0x2c, 0xbb, 0xfe, 0x06, 0x26, 0x5f, 0x20, 0xbd, 0x9e,
+ 0x49, 0x11, 0x31, 0xe0, 0x7c, 0x99, 0x5e, 0xa0, 0x58, 0x4f, 0x1b, 0x3f,
+ 0xb4, 0x6e, 0xcd, 0x17, 0x61, 0x79, 0xa0, 0xfd, 0x64, 0x60, 0xa4, 0xf8,
+ 0x17, 0x81, 0xc3, 0x0a, 0x4b, 0x6a, 0x72, 0x86, 0x96, 0xe3, 0xfa, 0x95,
+ 0x47, 0x45, 0xfb, 0x57, 0xef, 0xca, 0x82, 0x99, 0x72, 0xdc, 0xe6, 0x78,
+ 0xe3, 0x70, 0xa8, 0x28, 0x1f, 0x63, 0x25, 0xf1, 0xb0, 0x2f, 0x03, 0x92,
+ 0xc7, 0x15, 0x23, 0x27, 0xd7, 0xb3, 0x16, 0x3f, 0x91, 0x29, 0xa1, 0x72,
+ 0x1d, 0xb7, 0x74, 0x34, 0xc2, 0xe4, 0x8d, 0x71, 0x4f, 0x43, 0xcd, 0x48,
+ 0x73, 0x72, 0xaa, 0x7d, 0x58, 0x7a, 0x91, 0x17, 0x42, 0x56, 0x5c, 0xe1,
+ 0x50, 0x6b, 0x13, 0x39, 0x7a, 0x54, 0x7b, 0x0c, 0xa4, 0xe4, 0xaa, 0xc0,
+ 0x98, 0x20, 0xb8, 0x29, 0xb3, 0x2f, 0x9b, 0x40, 0xc8, 0x62, 0x1b, 0x96,
+ 0xe6, 0xfb, 0x4f, 0x62, 0xcb, 0xbd, 0x35, 0xae, 0xa6, 0x2f, 0x5f, 0x8c,
+ 0x3a, 0x49, 0x52, 0x6c, 0x35, 0xfa, 0x00, 0xf8, 0x7d, 0x30, 0xbb, 0x9a,
+ 0x62, 0x7e, 0xfa, 0x0a, 0xcf, 0x57, 0xce, 0x2a, 0x17, 0x41, 0x10, 0x89,
+ 0x89, 0x8f, 0x65, 0x31, 0x69, 0xaf, 0x0b, 0x96, 0xd2, 0x19, 0x78, 0x5f,
+ 0x7a, 0x32, 0x0c, 0x13, 0x58, 0xde, 0x00, 0x32, 0x0a, 0xd6, 0xc5, 0x22,
+ 0x14, 0xbf, 0x63, 0xa0, 0x21, 0x94, 0x65, 0x04, 0x4e, 0x7e, 0x75, 0xdd,
+ 0xd0, 0x9f, 0xeb, 0x01, 0xe6, 0xdc, 0x1f, 0x88, 0x34, 0xc9, 0xc1, 0xef,
+ 0xea, 0xc9, 0xe1, 0x55, 0x89, 0x8d, 0x20, 0xc2, 0x46, 0xc9, 0x67, 0xd8,
+ 0x97, 0x2e, 0x84, 0x63, 0x2e, 0x38, 0x76, 0xaa, 0xcf, 0x02, 0xcb, 0x17,
+ 0xbc, 0xfa, 0xf8, 0x80, 0xb1, 0x16, 0x1f, 0x05, 0x1c, 0xa7, 0x92, 0x6b,
+ 0xe9, 0x1a, 0xf0, 0x7e, 0x33, 0x24, 0x22, 0xde, 0x8c, 0xb0, 0xa6, 0xb1,
+ 0x74, 0x65, 0x83, 0x44, 0x55, 0xe0, 0xc7, 0xa5, 0x1a, 0x76, 0xba, 0x04,
+ 0x66, 0xca, 0x12, 0xf5, 0x9d, 0x52, 0x8a, 0xeb, 0x52, 0xaf, 0xed, 0xeb,
+ 0x28, 0xbd, 0x27, 0xd2, 0x72, 0xa4, 0xe5, 0x3f, 0x47, 0x82, 0x04, 0x91,
+ 0x10, 0xfc, 0xc2, 0xfc, 0x07, 0x56, 0x77, 0x99, 0x4e, 0xf5, 0xb4, 0xc6,
+ 0x5a, 0x0c, 0x86, 0xd4, 0x4c, 0xc3, 0xd2, 0x2f, 0x6d, 0x30, 0x3e, 0xff,
+ 0xd7, 0xfe, 0x90, 0x8a, 0x12, 0xb9, 0x77, 0x29, 0x16, 0x39, 0xe1, 0xe4,
+ 0x9b, 0xeb, 0xcc, 0x1c, 0xac, 0x8e, 0x64, 0x59, 0xfb, 0x1f, 0xd6, 0x5c,
+ 0xde, 0x2b, 0xd9, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
diff --git a/epid/common/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_revkey.inc b/epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_revkey.inc
index c3f1160..c3f1160 100644
--- a/epid/common/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_revkey.inc
+++ b/epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_revkey.inc
diff --git a/epid/common/testdata/ikgf/groupa/sig_sha256_rndbase_msg0.inc b/epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_rndbase_msg0.inc
index d8a19f2..d8a19f2 100644
--- a/epid/common/testdata/ikgf/groupa/sig_sha256_rndbase_msg0.inc
+++ b/epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_rndbase_msg0.inc
diff --git a/epid/common/testdata/ikgf/groupa/sig_sigrevoked_sha256_bsn0_msg0.inc b/epid/common-testhelper/testdata/ikgf/groupa/sig_sigrevoked_sha256_bsn0_msg0.inc
index a65e1c3..a65e1c3 100644
--- a/epid/common/testdata/ikgf/groupa/sig_sigrevoked_sha256_bsn0_msg0.inc
+++ b/epid/common-testhelper/testdata/ikgf/groupa/sig_sigrevoked_sha256_bsn0_msg0.inc
diff --git a/epid/common/testdata/ikgf/groupa/sig_test1_basename1_sha256.inc b/epid/common-testhelper/testdata/ikgf/groupa/sig_test1_basename1_sha256.inc
index a7a956b..a7a956b 100644
--- a/epid/common/testdata/ikgf/groupa/sig_test1_basename1_sha256.inc
+++ b/epid/common-testhelper/testdata/ikgf/groupa/sig_test1_basename1_sha256.inc
diff --git a/epid/common/testdata/ikgf/groupa/sigrevokedmember0/mprivkey.inc b/epid/common-testhelper/testdata/ikgf/groupa/sigrevokedmember0/mprivkey.inc
index e8059b8..e8059b8 100644
--- a/epid/common/testdata/ikgf/groupa/sigrevokedmember0/mprivkey.inc
+++ b/epid/common-testhelper/testdata/ikgf/groupa/sigrevokedmember0/mprivkey.inc
diff --git a/epid/common/testdata/ikgf/groupa/sigrl.inc b/epid/common-testhelper/testdata/ikgf/groupa/sigrl.inc
index e0b631f..e0b631f 100644
--- a/epid/common/testdata/ikgf/groupa/sigrl.inc
+++ b/epid/common-testhelper/testdata/ikgf/groupa/sigrl.inc
diff --git a/epid/common-testhelper/testdata/ikgf/groupa/sigrl_empty.inc b/epid/common-testhelper/testdata/ikgf/groupa/sigrl_empty.inc
new file mode 100644
index 0000000..54dbb94
--- /dev/null
+++ b/epid/common-testhelper/testdata/ikgf/groupa/sigrl_empty.inc
@@ -0,0 +1,30 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+ /*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 2.0 signature based revocation list
+ * Group : GroupA
+ * Issuer : iKGF
+ */
+ // GID
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ // RL ver
+ 0x00, 0x00, 0x00, 0x01,
+ // n2
+ 0x00, 0x00, 0x00, 0x00
diff --git a/epid/common/testdata/ikgf/groupb/member0/mprivkey.inc b/epid/common-testhelper/testdata/ikgf/groupb/member0/mprivkey.inc
index 33408c9..33408c9 100644
--- a/epid/common/testdata/ikgf/groupb/member0/mprivkey.inc
+++ b/epid/common-testhelper/testdata/ikgf/groupb/member0/mprivkey.inc
diff --git a/epid/common/testdata/ikgf/groupb/sig_grouprevoked_sha256_bsn0_msg0.inc b/epid/common-testhelper/testdata/ikgf/groupb/sig_grouprevoked_sha256_bsn0_msg0.inc
index ecdbeb7..ecdbeb7 100644
--- a/epid/common/testdata/ikgf/groupb/sig_grouprevoked_sha256_bsn0_msg0.inc
+++ b/epid/common-testhelper/testdata/ikgf/groupb/sig_grouprevoked_sha256_bsn0_msg0.inc
diff --git a/epid/common/testdata/ikgf/grprl.inc b/epid/common-testhelper/testdata/ikgf/grprl.inc
index 4059011..4059011 100644
--- a/epid/common/testdata/ikgf/grprl.inc
+++ b/epid/common-testhelper/testdata/ikgf/grprl.inc
diff --git a/epid/common-testhelper/unittests/bignum_wrapper-test.cc b/epid/common-testhelper/unittests/bignum_wrapper-test.cc
index b5aa34c..83dba24 100644
--- a/epid/common-testhelper/unittests/bignum_wrapper-test.cc
+++ b/epid/common-testhelper/unittests/bignum_wrapper-test.cc
@@ -26,7 +26,7 @@
extern "C" {
#include "epid/common/math/bignum.h"
-#include "epid/common/memory.h"
+#include "epid/common/src/memory.h"
}
namespace {
diff --git a/epid/common-testhelper/unittests/ecgroup_wrapper-test.cc b/epid/common-testhelper/unittests/ecgroup_wrapper-test.cc
index ad496d4..4cc399c 100644
--- a/epid/common-testhelper/unittests/ecgroup_wrapper-test.cc
+++ b/epid/common-testhelper/unittests/ecgroup_wrapper-test.cc
@@ -30,7 +30,6 @@
extern "C" {
#include "epid/common/math/bignum.h"
-#include "epid/common/memory.h"
#include "epid/common/types.h"
}
diff --git a/epid/common-testhelper/unittests/ecpoint_wrapper-test.cc b/epid/common-testhelper/unittests/ecpoint_wrapper-test.cc
index 840521b..780b70f 100644
--- a/epid/common-testhelper/unittests/ecpoint_wrapper-test.cc
+++ b/epid/common-testhelper/unittests/ecpoint_wrapper-test.cc
@@ -27,7 +27,6 @@
extern "C" {
#include "epid/common/math/bignum.h"
-#include "epid/common/memory.h"
}
namespace {
diff --git a/epid/common-testhelper/unittests/ffelement_wrapper-test.cc b/epid/common-testhelper/unittests/ffelement_wrapper-test.cc
index 2e7bda6..6f835ca 100644
--- a/epid/common-testhelper/unittests/ffelement_wrapper-test.cc
+++ b/epid/common-testhelper/unittests/ffelement_wrapper-test.cc
@@ -27,7 +27,6 @@
extern "C" {
#include "epid/common/math/bignum.h"
-#include "epid/common/memory.h"
}
namespace {
diff --git a/epid/common-testhelper/unittests/finite_field_wrapper-test.cc b/epid/common-testhelper/unittests/finite_field_wrapper-test.cc
index 1792e72..1ce59d0 100644
--- a/epid/common-testhelper/unittests/finite_field_wrapper-test.cc
+++ b/epid/common-testhelper/unittests/finite_field_wrapper-test.cc
@@ -27,7 +27,6 @@
extern "C" {
#include "epid/common/math/bignum.h"
-#include "epid/common/memory.h"
#include "epid/common/types.h"
}
diff --git a/epid/common-testhelper/verifier_wrapper-testhelper.cc b/epid/common-testhelper/verifier_wrapper-testhelper.cc
index 9afa273..ef9ba8b 100644
--- a/epid/common-testhelper/verifier_wrapper-testhelper.cc
+++ b/epid/common-testhelper/verifier_wrapper-testhelper.cc
@@ -16,7 +16,7 @@
/*!
* \file
- * \brief EcGroup C++ wrapper implementation.
+ * \brief Verifier C++ wrapper implementation.
*/
#include <cstdio>
#include <string>
diff --git a/epid/common/1.1/file_parser.h b/epid/common/1.1/file_parser.h
new file mode 100644
index 0000000..d6d5c89
--- /dev/null
+++ b/epid/common/1.1/file_parser.h
@@ -0,0 +1,219 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/// Epid 1.1 issuer material parsing utilities.
+/*!
+ * \file
+ */
+#ifndef EPID_COMMON_1_1_FILE_PARSER_H_
+#define EPID_COMMON_1_1_FILE_PARSER_H_
+
+#include <stddef.h>
+
+#include "epid/common/1.1/types.h"
+#include "epid/common/errors.h"
+#include "epid/common/file_parser.h"
+
+/// Parser for 1.1 issuer material
+/*!
+ \defgroup Epid11FileParserModule EPID 1.1 support
+
+ Defines the APIs needed to parse Intel(R) EPID 1.1 issuer material.
+
+ \ingroup FileParser
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+support</b></a>
+ @{
+*/
+
+/// 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.
+
+ \param[in] buf
+ Pointer to buffer containing public key to extract.
+
+ \param[in] len
+ The size of buf in bytes.
+
+ \param[in] cert
+ The issuing CA public key certificate.
+
+ \param[out] pubkey
+ The extracted group public key.
+
+ \returns ::EpidStatus
+
+ \retval ::kEpidSigInvalid
+ Parsing failed due to data authentication failure.
+
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+ support</b></a>
+
+ */
+EpidStatus Epid11ParseGroupPubKeyFile(void const* buf, size_t len,
+ EpidCaCertificate const* cert,
+ Epid11GroupPubKey* pubkey);
+
+/// 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.
+
+ \param[in] buf
+ Pointer to buffer containing the revocation list to extract.
+
+ \param[in] len
+ The size of buf in bytes.
+
+ \param[in] cert
+ The issuing CA public key certificate.
+
+ \param[out] rl
+ The extracted revocation list. If Null, rl_len is filled with
+ the required output buffer size.
+
+ \param[in,out] rl_len
+ The size of rl in bytes.
+
+ \returns ::EpidStatus
+
+ \retval ::kEpidSigInvalid
+ Parsing failed due to data authentication failure.
+
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+ support</b></a>
+
+ */
+EpidStatus Epid11ParsePrivRlFile(void const* buf, size_t len,
+ EpidCaCertificate const* cert,
+ Epid11PrivRl* rl, 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.
+
+ \param[in] buf
+ Pointer to buffer containing the revocation list to extract.
+
+ \param[in] len
+ The size of buf in bytes.
+
+ \param[in] cert
+ The issuing CA public key certificate.
+
+ \param[out] rl
+ The extracted revocation list. If Null, rl_len is filled with
+ the required output buffer size.
+
+ \param[in,out] rl_len
+ The size of rl in bytes.
+
+ \returns ::EpidStatus
+
+ \retval ::kEpidSigInvalid
+ Parsing failed due to data authentication failure.
+
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+ support</b></a>
+
+ */
+EpidStatus Epid11ParseSigRlFile(void const* buf, size_t len,
+ EpidCaCertificate const* cert, Epid11SigRl* rl,
+ 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.
+
+ \param[in] buf
+ Pointer to buffer containing the revocation list to extract.
+
+ \param[in] len
+ The size of buf in bytes.
+
+ \param[in] cert
+ The issuing CA public key certificate.
+
+ \param[out] rl
+ The extracted revocation list. If Null, rl_len is filled with
+ the required output buffer size.
+
+ \param[in,out] rl_len
+ The size of rl in bytes.
+
+ \returns ::EpidStatus
+
+ \retval ::kEpidSigInvalid
+ Parsing failed due to data authentication failure.
+
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+ support</b></a>
+
+ */
+EpidStatus Epid11ParseGroupRlFile(void const* buf, size_t len,
+ EpidCaCertificate const* cert,
+ Epid11GroupRl* rl, size_t* rl_len);
+
+/*!
+ @}
+*/
+
+#endif // EPID_COMMON_1_1_FILE_PARSER_H_
diff --git a/epid/common/1.1/src/commitment.c b/epid/common/1.1/src/commitment.c
new file mode 100644
index 0000000..7749fa6
--- /dev/null
+++ b/epid/common/1.1/src/commitment.c
@@ -0,0 +1,135 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Commitment hash implementation.
+ */
+#include <stdio.h>
+#include <limits.h>
+#include "epid/common/1.1/src/commitment.h"
+#include "epid/common/src/memory.h"
+#include "epid/common/math/bignum.h"
+#include "epid/common/math/src/bignum-internal.h"
+#include "epid/common/src/endian_convert.h"
+
+EpidStatus SetKeySpecificEpid11CommitValues(Epid11GroupPubKey const* pub_key,
+ Epid11CommitValues* values) {
+ static const Epid11Params params = {
+#include "epid/common/1.1/src/epid11params_tate.inc"
+ };
+
+ if (!pub_key || !values) return kEpidBadArgErr;
+
+ values->p = params.p;
+ values->g1 = params.g1;
+ values->g2 = params.g2;
+ values->g3 = params.g3;
+ values->h1 = pub_key->h1;
+ values->h2 = pub_key->h2;
+ values->w = pub_key->w;
+
+ return kEpidNoErr;
+}
+
+EpidStatus SetCalculatedEpid11CommitValues(
+ Epid11G3ElemStr const* B, Epid11G3ElemStr const* K,
+ Epid11G1ElemStr const* T1, Epid11G1ElemStr const* T2, EcPoint const* R1,
+ EcPoint const* R2, EcPoint const* R3, FfElement const* R4, EcGroup* G1,
+ EcGroup* G3, FiniteField* GT, Epid11CommitValues* values) {
+ EpidStatus result;
+ if (!B || !K || !T1 || !T2 || !R1 || !R2 || !R3 || !R4 || !G1 || !G3 || !GT ||
+ !values) {
+ return kEpidBadArgErr;
+ }
+
+ values->B = *B;
+ values->K = *K;
+ values->T1 = *T1;
+ values->T2 = *T2;
+
+ result = WriteEcPoint(G1, R1, &values->R1, sizeof(values->R1));
+ if (kEpidNoErr != result) return result;
+ result = WriteEcPoint(G1, R2, &values->R2, sizeof(values->R2));
+ if (kEpidNoErr != result) return result;
+ result = WriteEcPoint(G3, R3, &values->R3, sizeof(values->R3));
+ if (kEpidNoErr != result) return result;
+ result = WriteFfElement(GT, R4, &values->R4, sizeof(values->R4));
+ if (kEpidNoErr != result) return result;
+
+ return kEpidNoErr;
+}
+
+EpidStatus CalculateEpid11CommitmentHash(Epid11CommitValues const* values,
+ void const* msg, uint32_t msg_len,
+ OctStr80 const* nd, Sha256Digest* c) {
+ EpidStatus result;
+
+#pragma pack(1)
+ struct {
+ Sha256Digest t4;
+ OctStr80 nd;
+ uint32_t msg_len;
+ uint8_t msg[1];
+ }* t4mconcat_buf = NULL;
+#pragma pack()
+ size_t max_msg_len =
+ SIZE_MAX - (sizeof(*t4mconcat_buf) - sizeof(t4mconcat_buf->msg));
+ size_t t4mconcat_size =
+ sizeof(*t4mconcat_buf) - sizeof(t4mconcat_buf->msg) + msg_len;
+
+ if (!values || !nd || !c) return kEpidBadArgErr;
+ if (!msg && (0 != msg_len)) {
+ // if message is non-empty it must have both length and content
+ return kEpidBadArgErr;
+ }
+ if (max_msg_len < (size_t)msg_len) {
+ return kEpidBadArgErr;
+ }
+
+ do {
+ // compute c = H(t4 || nd || msg_len || msg).
+ t4mconcat_buf = SAFE_ALLOC(t4mconcat_size);
+ if (!t4mconcat_buf) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+ // Calculate c = Hash(t4 || nd || mSize || m) where t4 is Hash(p || g1 || g2
+ // || g3 || h1 || h2 || w || B || K || T1 || T2 || R1 || R2 || R3 || R4).
+ result = Sha256MessageDigest(values, sizeof(*values), &t4mconcat_buf->t4);
+ if (kEpidNoErr != result) break;
+ t4mconcat_buf->nd = *nd;
+ t4mconcat_buf->msg_len = ntohl(msg_len);
+ // place variable length msg into t4mconcat_buf
+ if (msg) {
+ if (0 != memcpy_S(&t4mconcat_buf->msg[0],
+ t4mconcat_size - sizeof(*t4mconcat_buf) +
+ sizeof(t4mconcat_buf->msg),
+ msg, msg_len)) {
+ result = kEpidBadArgErr;
+ break;
+ }
+ }
+ result = Sha256MessageDigest(t4mconcat_buf, t4mconcat_size, c);
+ if (kEpidNoErr != result) break;
+
+ result = kEpidNoErr;
+ } while (0);
+
+ SAFE_FREE(t4mconcat_buf);
+
+ return result;
+}
diff --git a/epid/common/1.1/src/commitment.h b/epid/common/1.1/src/commitment.h
new file mode 100644
index 0000000..b606590
--- /dev/null
+++ b/epid/common/1.1/src/commitment.h
@@ -0,0 +1,137 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+#ifndef EPID_COMMON_1_1_SRC_COMMITMENT_H_
+#define EPID_COMMON_1_1_SRC_COMMITMENT_H_
+/*!
+ * \file
+ * \brief Commitment hash interface.
+ * \addtogroup EpidCommon
+ * @{
+ */
+#include "epid/common/errors.h"
+#include "epid/common/1.1/types.h"
+#include "epid/common/math/ecgroup.h"
+#include "epid/common/math/finitefield.h"
+#include "epid/common/math/hash.h"
+
+#pragma pack(1)
+/// Storage for values to create Intel(R) EPID 1.1 commitment in Sign and Verify
+/// algorithms
+typedef struct Epid11CommitValues {
+ BigNumStr p; ///< Intel(R) EPID 1.1 parameter p
+ Epid11G1ElemStr g1; ///< Intel(R) EPID 1.1 parameter g1
+ Epid11G2ElemStr g2; ///< Intel(R) EPID 1.1 parameter g2
+ Epid11G1ElemStr g3; ///< Intel(R) EPID 1.1 parameter g3
+ Epid11G1ElemStr h1; ///< Group public key value h1
+ Epid11G1ElemStr h2; ///< Group public key value h2
+ Epid11G2ElemStr w; ///< Group public key value w
+ Epid11G3ElemStr B; ///< Variable B computed in algorithm
+ Epid11G3ElemStr K; ///< Variable K computed in algorithm
+ Epid11G1ElemStr T1; ///< Variable T1 computed in algorithm
+ Epid11G1ElemStr T2; ///< Variable T2 computed in algorithm
+ Epid11G1ElemStr R1; ///< Variable R1 computed in algorithm
+ Epid11G1ElemStr R2; ///< Variable R2 computed in algorithm
+ Epid11G3ElemStr R3; ///< Variable R3 computed in algorithm
+ Epid11GtElemStr R4; ///< Variable R4 computed in algorithm
+} Epid11CommitValues;
+#pragma pack()
+
+/// Set Intel(R) EPID 1.1 group public key related fields to Epid11CommitValues
+/// structure
+/*!
+ Set p, g1, g2, g3, h1, h2 and w fields of values argument.
+
+ \param[in] pub_key
+ Intel(R) EPID 1.1 Group public key
+ \param[out] values
+ Pointer to Epid11CommitValues structure to fill.
+
+ \returns ::EpidStatus
+
+ \see CalculateCommitmentHash
+*/
+EpidStatus SetKeySpecificEpid11CommitValues(Epid11GroupPubKey const* pub_key,
+ Epid11CommitValues* values);
+
+/// Set Epid11CommitValues structure fields calculated in Intel(R) EPID 1.1 Sign
+/// or Verify algorithm
+/*!
+ Set B, K, T1, T2, R1, R2, R3 and R4 fields of values argument.
+
+ \param[in] B
+ Value of B to set
+ \param[in] K
+ Value of K to set
+ \param[in] T1
+ Value of T1 to set
+ \param[in] T2
+ Value of T2 to set
+ \param[in] R1
+ Value of R1 to set
+ \param[in] R2
+ Value of R2 to set
+ \param[in] R3
+ Value of R3 to set
+ \param[in] R4
+ Value of R4 to set
+ \param[in] G1
+ EcGroup containing element R1, R2
+ \param[in] G3
+ EcGroup containing element R3
+ \param[in] GT
+ FiniteField containing element R4
+ \param[out] values
+ Pointer to CommitValues structure to fill.
+
+ \returns ::EpidStatus
+
+ \see CalculateCommitmentHash
+*/
+EpidStatus SetCalculatedEpid11CommitValues(
+ Epid11G3ElemStr const* B, Epid11G3ElemStr const* K,
+ Epid11G1ElemStr const* T1, Epid11G1ElemStr const* T2, EcPoint const* R1,
+ EcPoint const* R2, EcPoint const* R3, FfElement const* R4, EcGroup* G1,
+ EcGroup* G3, FiniteField* GT, Epid11CommitValues* values);
+
+/// Calculate Hash(t4 || nd || mSize || m) for Intel(R) EPID 1.1 Sign and Verfiy
+/// algorithms
+/*!
+ Calculate c = Hash(t4 || nd || mSize || m) where t4 is
+ Hash(p || g1 || g2 || g3 || h1 || h2 || w || B || K || T1 || T2 || R1 || R2 ||
+ R3 || R4).
+
+ \param[in] values
+ Commit values to hash
+ \param[in] msg
+ Message to hash
+ \param[in] msg_len
+ Size of msg buffer in bytes
+ \param[in] nd
+ 80-bit big integer
+ \param[out] c
+ Result of calculation
+
+ \returns ::EpidStatus
+
+ \see SetKeySpecificCommitValues
+ \see SetCalculatedCommitValues
+*/
+EpidStatus CalculateEpid11CommitmentHash(Epid11CommitValues const* values,
+ void const* msg, uint32_t msg_len,
+ OctStr80 const* nd, Sha256Digest* c);
+
+/*! @} */
+#endif // EPID_COMMON_1_1_SRC_COMMITMENT_H_
diff --git a/epid/common/1.1/src/epid11params.c b/epid/common/1.1/src/epid11params.c
new file mode 100644
index 0000000..0a1e620
--- /dev/null
+++ b/epid/common/1.1/src/epid11params.c
@@ -0,0 +1,469 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+
+/*!
+* \file
+* \brief Intel(R) EPID 1.1 constant parameters implementation.
+*/
+#include "epid/common/1.1/src/epid11params.h"
+#include "epid/common/src/memory.h"
+#include "epid/common/math/tatepairing.h"
+
+/// Handle SDK Error with Break
+#define BREAK_ON_EPID_ERROR(ret) \
+ if (kEpidNoErr != (ret)) { \
+ break; \
+ }
+
+/// Count of elements in array
+#define COUNT_OF(a) (sizeof(a) / sizeof((a)[0]))
+
+/// create a new Finite Field Fqd
+static EpidStatus NewFqd(Epid11Params const* params, FiniteField* Fq,
+ FiniteField** Fqd);
+
+/// create a new Finite Field Fqk
+EpidStatus NewFqk(Epid11Params const* params, FiniteField* Fq, FiniteField* Fqd,
+ FiniteField** Fqk);
+
+/// create a new Elliptic curve group G1 over Fq
+static EpidStatus NewG1(Epid11Params const* params, FiniteField* Fq,
+ EcGroup** G1);
+
+/// create a new Elliptic curve group G2 over Fqd
+static EpidStatus NewG2(Epid11Params const* params, FiniteField* Fq,
+ FiniteField* Fqd, EcGroup** G2);
+
+/// create a new Elliptic curve group G3 over Fq'
+static EpidStatus NewG3(Epid11Params const* params, FiniteField* Fq_tick,
+ EcGroup** G3);
+
+EpidStatus CreateEpid11Params(Epid11Params_** params) {
+ EpidStatus result = kEpidErr;
+ Epid11Params_* _params = NULL;
+ Epid11Params params_str = {
+#include "epid/common/1.1/src/epid11params_tate.inc"
+ };
+
+ if (!params) return kEpidBadArgErr;
+
+ do {
+ _params = SAFE_ALLOC(sizeof(Epid11Params_));
+ if (!_params) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+
+ // BigNum* p;
+ result = NewBigNum(sizeof(params_str.p), &_params->p);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadBigNum(&params_str.p, sizeof(params_str.p), _params->p);
+ BREAK_ON_EPID_ERROR(result);
+ // BigNum* p_tick;
+ result = NewBigNum(sizeof(params_str.p_tick), &_params->p_tick);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadBigNum(&params_str.p_tick, sizeof(params_str.p_tick),
+ _params->p_tick);
+ BREAK_ON_EPID_ERROR(result);
+
+ // FiniteField* Fp;
+ result = NewFiniteField(&params_str.p, &_params->Fp);
+ BREAK_ON_EPID_ERROR(result);
+ // FiniteField* Fq;
+ result = NewFiniteField(&params_str.q, &_params->Fq);
+ BREAK_ON_EPID_ERROR(result);
+ // FiniteField* Fp_tick;
+ result = NewFiniteField(&params_str.p_tick, &_params->Fp_tick);
+ BREAK_ON_EPID_ERROR(result);
+ // FiniteField* Fq_tick;
+ result = NewFiniteField(&params_str.q_tick, &_params->Fq_tick);
+ BREAK_ON_EPID_ERROR(result);
+ // FiniteField* Fqd;
+ result = NewFqd(&params_str, _params->Fq, &_params->Fqd);
+ BREAK_ON_EPID_ERROR(result);
+
+ // EcGroup* G1;
+ result = NewG1(&params_str, _params->Fq, &_params->G1);
+ BREAK_ON_EPID_ERROR(result);
+ // EcGroup* G2;
+ result = NewG2(&params_str, _params->Fq, _params->Fqd, &_params->G2);
+ BREAK_ON_EPID_ERROR(result);
+ // EcGroup* G3;
+ result = NewG3(&params_str, _params->Fq_tick, &_params->G3);
+ BREAK_ON_EPID_ERROR(result);
+ // FiniteField* GT;
+ result = NewFqk(&params_str, _params->Fq, _params->Fqd, &_params->GT);
+ BREAK_ON_EPID_ERROR(result);
+
+ // EcPoint* g1;
+ result = NewEcPoint(_params->G1, &_params->g1);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadEcPoint(_params->G1, &params_str.g1, sizeof(params_str.g1),
+ _params->g1);
+ BREAK_ON_EPID_ERROR(result);
+ // EcPoint* g2;
+ result = NewEcPoint(_params->G2, &_params->g2);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadEcPoint(_params->G2, &params_str.g2, sizeof(params_str.g2),
+ _params->g2);
+ BREAK_ON_EPID_ERROR(result);
+ // EcPoint* g3;
+ result = NewEcPoint(_params->G3, &_params->g3);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadEcPoint(_params->G3, &params_str.g3, sizeof(params_str.g3),
+ _params->g3);
+ BREAK_ON_EPID_ERROR(result);
+
+ // Epid11PairingState* pairing_state;
+ result = NewEpid11PairingState(_params->G1, _params->G2, _params->GT,
+ &_params->pairing_state);
+ BREAK_ON_EPID_ERROR(result);
+
+ *params = _params;
+ result = kEpidNoErr;
+ } while (0);
+
+ if (kEpidNoErr != result && _params) {
+ DeleteEpid11PairingState(&_params->pairing_state);
+
+ DeleteBigNum(&_params->p);
+ DeleteBigNum(&_params->p_tick);
+ DeleteEcPoint(&_params->g1);
+ DeleteEcPoint(&_params->g2);
+ DeleteEcPoint(&_params->g3);
+
+ DeleteFiniteField(&_params->Fp);
+ DeleteFiniteField(&_params->Fq);
+ DeleteFiniteField(&_params->Fp_tick);
+ DeleteFiniteField(&_params->Fq_tick);
+ DeleteFiniteField(&_params->Fqd);
+ DeleteFiniteField(&_params->GT);
+
+ DeleteEcGroup(&_params->G1);
+ DeleteEcGroup(&_params->G2);
+ DeleteEcGroup(&_params->G3);
+ SAFE_FREE(_params);
+ }
+ return result;
+}
+
+void DeleteEpid11Params(Epid11Params_** params) {
+ if (params && *params) {
+ DeleteEpid11PairingState(&(*params)->pairing_state);
+
+ DeleteBigNum(&(*params)->p);
+ DeleteBigNum(&(*params)->p_tick);
+ DeleteEcPoint(&(*params)->g1);
+ DeleteEcPoint(&(*params)->g2);
+ DeleteEcPoint(&(*params)->g3);
+
+ DeleteFiniteField(&(*params)->Fp);
+ DeleteFiniteField(&(*params)->Fq);
+ DeleteFiniteField(&(*params)->Fp_tick);
+ DeleteFiniteField(&(*params)->Fq_tick);
+ DeleteFiniteField(&(*params)->Fqd);
+ DeleteFiniteField(&(*params)->GT);
+
+ DeleteEcGroup(&(*params)->G1);
+ DeleteEcGroup(&(*params)->G2);
+ DeleteEcGroup(&(*params)->G3);
+
+ SAFE_FREE(*params);
+ }
+}
+
+EpidStatus NewFqd(Epid11Params const* params, FiniteField* Fq,
+ FiniteField** Fqd) {
+ if (!params || !Fq || !Fqd) return kEpidBadArgErr;
+
+ return NewFiniteFieldViaPolynomialExtension(Fq, params->coeff, 3, Fqd);
+}
+
+EpidStatus NewFqk(Epid11Params const* params, FiniteField* Fq, FiniteField* Fqd,
+ FiniteField** Fqk) {
+ EpidStatus result = kEpidNoErr;
+ FfElement* qnr = NULL;
+ FfElement* neg_qnr = NULL;
+ FfElement* ground_element = NULL;
+ Fq3ElemStr ground_element_str = {0};
+
+ if (!params || !Fq || !Fqd || !Fqk) return kEpidBadArgErr;
+
+ do {
+ result = NewFfElement(Fq, &qnr);
+ BREAK_ON_EPID_ERROR(result);
+
+ result = ReadFfElement(Fq, &(params->qnr), sizeof(params->qnr), qnr);
+ BREAK_ON_EPID_ERROR(result);
+
+ result = NewFfElement(Fq, &neg_qnr);
+ BREAK_ON_EPID_ERROR(result);
+
+ result = FfNeg(Fq, qnr, neg_qnr);
+ BREAK_ON_EPID_ERROR(result);
+
+ result = WriteFfElement(Fq, neg_qnr, &ground_element_str.a[0],
+ sizeof(ground_element_str.a[0]));
+ BREAK_ON_EPID_ERROR(result);
+
+ result = NewFfElement(Fqd, &ground_element);
+ BREAK_ON_EPID_ERROR(result);
+
+ result = ReadFfElement(Fqd, &(ground_element_str),
+ sizeof(ground_element_str), ground_element);
+ BREAK_ON_EPID_ERROR(result);
+
+ result = NewFiniteFieldViaBinomalExtension(Fqd, ground_element, 2, Fqk);
+ BREAK_ON_EPID_ERROR(result);
+ } while (0);
+
+ DeleteFfElement(&qnr);
+ DeleteFfElement(&neg_qnr);
+ DeleteFfElement(&ground_element);
+
+ return result;
+}
+
+EpidStatus NewG1(Epid11Params const* params, FiniteField* Fq, EcGroup** G1) {
+ EpidStatus result = kEpidErr;
+ EcGroup* ec = NULL;
+ FfElement* fq_a = NULL;
+ FfElement* fq_b = NULL;
+ FfElement* g1_x = NULL;
+ FfElement* g1_y = NULL;
+ BigNum* order = NULL;
+ BigNum* h = NULL;
+
+ if (!params || !Fq || !G1) return kEpidBadArgErr;
+
+ do {
+ // Create G1
+ // G1 is an elliptic curve group E(Fq).It can be initialized as follows:
+ // 1. Set G1 = E(Fq).init(p, q, h, a, b, g1.x, g1.y).
+ // a
+ result = NewFfElement(Fq, &fq_a);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(Fq, &params->a, sizeof(params->a), fq_a);
+ BREAK_ON_EPID_ERROR(result);
+ // b
+ result = NewFfElement(Fq, &fq_b);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(Fq, &params->b, sizeof(params->b), fq_b);
+ BREAK_ON_EPID_ERROR(result);
+ // g1.x
+ result = NewFfElement(Fq, &g1_x);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(Fq, &params->g1.x, sizeof(params->g1.x), g1_x);
+ BREAK_ON_EPID_ERROR(result);
+ // g1.y
+ result = NewFfElement(Fq, &g1_y);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(Fq, &params->g1.y, sizeof(params->g1.y), g1_y);
+ BREAK_ON_EPID_ERROR(result);
+ // order
+ result = NewBigNum(sizeof(BigNumStr), &order);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadBigNum(&params->p, sizeof(params->p), order);
+ BREAK_ON_EPID_ERROR(result);
+ // h
+ result = NewBigNum(sizeof(BigNumStr), &h);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadBigNum(&params->h, sizeof(params->h), h);
+ BREAK_ON_EPID_ERROR(result);
+
+ result = NewEcGroup(Fq, fq_a, fq_b, g1_x, g1_y, order, h, &ec);
+ BREAK_ON_EPID_ERROR(result);
+ *G1 = ec;
+ result = kEpidNoErr;
+ } while (0);
+
+ DeleteBigNum(&h);
+ DeleteBigNum(&order);
+ DeleteFfElement(&g1_y);
+ DeleteFfElement(&g1_x);
+ DeleteFfElement(&fq_b);
+ DeleteFfElement(&fq_a);
+
+ return result;
+}
+
+EpidStatus NewG3(Epid11Params const* params, FiniteField* Fq_dash,
+ EcGroup** G3) {
+ EpidStatus result = kEpidErr;
+ EcGroup* ec = NULL;
+ FfElement* fq_a = NULL;
+ FfElement* fq_b = NULL;
+ FfElement* g3_x = NULL;
+ FfElement* g3_y = NULL;
+ BigNum* order = NULL;
+ BigNum* h_tick = NULL;
+
+ if (!params || !Fq_dash || !G3) return kEpidBadArgErr;
+
+ do {
+ // Create G3
+ // G3 is an elliptic curve group E(Fq').It can be initialized as follows:
+ // 1. Set G3 = E(Fq').init(p', q', h', a', b', g3.x, g3.y).
+ // a'
+ result = NewFfElement(Fq_dash, &fq_a);
+ BREAK_ON_EPID_ERROR(result);
+ result =
+ ReadFfElement(Fq_dash, &params->a_tick, sizeof(params->a_tick), fq_a);
+ BREAK_ON_EPID_ERROR(result);
+ // b'
+ result = NewFfElement(Fq_dash, &fq_b);
+ BREAK_ON_EPID_ERROR(result);
+ result =
+ ReadFfElement(Fq_dash, &params->b_tick, sizeof(params->b_tick), fq_b);
+ BREAK_ON_EPID_ERROR(result);
+ // g3.x
+ result = NewFfElement(Fq_dash, &g3_x);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(Fq_dash, &params->g3.x, sizeof(params->g3.x), g3_x);
+ BREAK_ON_EPID_ERROR(result);
+ // g3.y
+ result = NewFfElement(Fq_dash, &g3_y);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(Fq_dash, &params->g3.y, sizeof(params->g3.y), g3_y);
+ BREAK_ON_EPID_ERROR(result);
+ // order
+ result = NewBigNum(sizeof(BigNumStr), &order);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadBigNum(&params->p_tick, sizeof(params->p_tick), order);
+ BREAK_ON_EPID_ERROR(result);
+ // h'
+ result = NewBigNum(sizeof(BigNumStr), &h_tick);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadBigNum(&params->h_tick, sizeof(params->h_tick), h_tick);
+ BREAK_ON_EPID_ERROR(result);
+
+ result = NewEcGroup(Fq_dash, fq_a, fq_b, g3_x, g3_y, order, h_tick, &ec);
+ BREAK_ON_EPID_ERROR(result);
+ *G3 = ec;
+ result = kEpidNoErr;
+ } while (0);
+
+ DeleteBigNum(&h_tick);
+ DeleteBigNum(&order);
+ DeleteFfElement(&g3_y);
+ DeleteFfElement(&g3_x);
+ DeleteFfElement(&fq_b);
+ DeleteFfElement(&fq_a);
+
+ return result;
+}
+
+EpidStatus NewG2(Epid11Params const* params, FiniteField* Fq, FiniteField* Fqd,
+ EcGroup** G2) {
+ EpidStatus result = kEpidErr;
+ EcGroup* ec = NULL;
+ FfElement* fq_twista = NULL;
+ FfElement* fq_twistb = NULL;
+ FfElement* fqd_twista = NULL;
+ FfElement* fqd_twistb = NULL;
+ FfElement* g2_x = NULL;
+ FfElement* g2_y = NULL;
+ FfElement* qnr = NULL;
+ BigNum* order = NULL;
+ BigNum* h = NULL;
+ Fq3ElemStr tmp_Fq3_str = {0};
+
+ if (!params || !Fq || !Fqd || !G2) return kEpidBadArgErr;
+
+ do {
+ // Create G2
+ // G2 is an elliptic curve group E(Fqd).It can be initialized as follows:
+ // 2. Set g2.x = (g2.x[0], g2.x[1], g2.x[2]) an element of Fqd
+ result = NewFfElement(Fqd, &g2_x);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(Fqd, &params->g2.x, sizeof(params->g2.x), g2_x);
+ BREAK_ON_EPID_ERROR(result);
+ // 3. Set g2.y = (g2.y[0], g2.y[1], g2.y[2]) an element of Fqd
+ result = NewFfElement(Fqd, &g2_y);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(Fqd, &params->g2.y, sizeof(params->g2.y), g2_y);
+ BREAK_ON_EPID_ERROR(result);
+ // qnr
+ result = NewFfElement(Fq, &qnr);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(Fq, &params->qnr, sizeof(params->qnr), qnr);
+ BREAK_ON_EPID_ERROR(result);
+ // 4. twista = (a * qnr * qnr) mod q
+ result = NewFfElement(Fq, &fq_twista);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(Fq, &params->a, sizeof(params->a), fq_twista);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(Fq, fq_twista, qnr, fq_twista);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(Fq, fq_twista, qnr, fq_twista);
+ BREAK_ON_EPID_ERROR(result);
+ // twista = {twista, 0, 0}
+ result = WriteFfElement(Fq, fq_twista, &(tmp_Fq3_str.a[0]),
+ sizeof(tmp_Fq3_str.a[0]));
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(Fqd, &fqd_twista);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(Fqd, &tmp_Fq3_str, sizeof(tmp_Fq3_str), fqd_twista);
+ BREAK_ON_EPID_ERROR(result);
+ // 5. twistb = (b * qnr * qnr * qnr) mod q
+ result = NewFfElement(Fq, &fq_twistb);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(Fq, &params->b, sizeof(params->b), fq_twistb);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(Fq, fq_twistb, qnr, fq_twistb);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(Fq, fq_twistb, qnr, fq_twistb);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(Fq, fq_twistb, qnr, fq_twistb);
+ BREAK_ON_EPID_ERROR(result);
+ // twistb = {twistb, 0, 0}
+ result = WriteFfElement(Fq, fq_twistb, &(tmp_Fq3_str.a[0]),
+ sizeof(tmp_Fq3_str.a[0]));
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(Fqd, &fqd_twistb);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(Fqd, &tmp_Fq3_str, sizeof(tmp_Fq3_str), fqd_twistb);
+ BREAK_ON_EPID_ERROR(result);
+ // order
+ result = NewBigNum(3 * sizeof(BigNumStr), &order);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadBigNum(&params->orderG2, sizeof(params->orderG2), order);
+ BREAK_ON_EPID_ERROR(result);
+ // h
+ result = NewBigNum(sizeof(BigNumStr), &h);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadBigNum(&params->h, sizeof(params->h), h);
+ BREAK_ON_EPID_ERROR(result);
+
+ // 6. Set G2 = E(Fqd).init(orderG2, param(Fqd), twista, twistb, g2.x, g2.y)
+ result = NewEcGroup(Fqd, fqd_twista, fqd_twistb, g2_x, g2_y, order, h, &ec);
+ BREAK_ON_EPID_ERROR(result);
+ *G2 = ec;
+ result = kEpidNoErr;
+ } while (0);
+
+ DeleteBigNum(&h);
+ DeleteBigNum(&order);
+ DeleteFfElement(&qnr);
+ DeleteFfElement(&fqd_twistb);
+ DeleteFfElement(&fq_twistb);
+ DeleteFfElement(&fqd_twista);
+ DeleteFfElement(&fq_twista);
+ DeleteFfElement(&g2_y);
+ DeleteFfElement(&g2_x);
+
+ return result;
+}
diff --git a/epid/common/1.1/src/epid11params.h b/epid/common/1.1/src/epid11params.h
new file mode 100644
index 0000000..c00af22
--- /dev/null
+++ b/epid/common/1.1/src/epid11params.h
@@ -0,0 +1,75 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+#ifndef EPID_COMMON_1_1_SRC_EPID11PARAMS_H_
+#define EPID_COMMON_1_1_SRC_EPID11PARAMS_H_
+/*!
+ * \file
+ * \brief Intel(R) EPID 1.1 constant parameters interface.
+ * \addtogroup EpidCommon
+ * @{
+ */
+#include "epid/common/1.1/types.h"
+#include "epid/common/math/bignum.h"
+#include "epid/common/math/ecgroup.h"
+#include "epid/common/math/finitefield.h"
+#include "epid/common/math/tatepairing.h"
+
+/// Internal representation of Epid11Params
+typedef struct Epid11Params_ {
+ BigNum* p; ///< a prime
+ BigNum* p_tick; ///< a prime
+ EcPoint* g1; ///< a generator (an element) of G1
+ EcPoint* g2; ///< a generator (an element) of G2
+ EcPoint* g3; ///< a generator (an element) of G3
+
+ FiniteField* Fp; ///< Finite field Fp
+ FiniteField* Fq; ///< Finite field Fq
+ FiniteField* Fp_tick; ///< Finite field Fp'
+ FiniteField* Fq_tick; ///< Finite field Fq'
+ FiniteField* Fqd; ///< Finite field Fqd, an extension of Fq
+ FiniteField* GT; ///< GT is a quadratic field extension Fqk of Fqd
+
+ EcGroup* G1; ///< Elliptic curve group over finite field Fq
+ EcGroup* G2; ///< Elliptic curve group over finite field Fqd
+ EcGroup* G3; ///< Elliptic curve group over finite field Fq'
+
+ Epid11PairingState* pairing_state; ///< Pairing state
+} Epid11Params_;
+
+/// Constructs the internal representation of Epid11Params
+/*!
+ Allocates memory for the internal representation of Epid11Params. Initialize
+ the Epid11Params. Use DeleteEpid11Params() to deallocate memory.
+
+ \param[in,out] params
+ Internal Epid11Params
+
+ \returns ::EpidStatus
+ \see DeleteEpid11Params
+*/
+EpidStatus CreateEpid11Params(Epid11Params_** params);
+/// Deallocates storage for internal representation of Epid11Params
+/*!
+ Frees the memory and nulls the pointer.
+
+ \param[in,out] params
+ params to be deallocated
+
+ \see CreateEpid11Params
+*/
+void DeleteEpid11Params(Epid11Params_** params);
+/*! @} */
+#endif // EPID_COMMON_1_1_SRC_EPID11PARAMS_H_
diff --git a/epid/common/1.1/src/epid11params_tate.inc b/epid/common/1.1/src/epid11params_tate.inc
new file mode 100644
index 0000000..248b271
--- /dev/null
+++ b/epid/common/1.1/src/epid11params_tate.inc
@@ -0,0 +1,160 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ *
+ * \brief Intel(R) EPID 1.1 constant parameters data.
+ *
+ */
+ {{{ // p
+ 0x00, 0x00, 0x89, 0x57, 0x3F, 0x17, 0x47, 0x30, 0x8C, 0x43, 0xD5, 0xEE,
+ 0x41, 0x97, 0x96, 0x19, 0x72, 0xBB, 0x86, 0x88, 0xED, 0x4B, 0xEF, 0x04,
+ 0xAB, 0xAE, 0xC3, 0x8E, 0xEC, 0x51, 0xC3, 0xD3
+ }}},
+ {{{ // q
+ 0x09, 0xF9, 0x24, 0xE5, 0xD9, 0xBC, 0x67, 0x7F, 0x81, 0x0D, 0xF0, 0x25,
+ 0x58, 0xF7, 0x53, 0x13, 0xA9, 0x8A, 0xA6, 0x10, 0x47, 0x65, 0x5D, 0x73,
+ 0x9E, 0xF1, 0x94, 0xEB, 0x05, 0xB1, 0xA7, 0x11
+ }}},
+ {{ // h
+ 0x00, 0x00, 0x12, 0x97
+ }},
+ {{{ // a
+ 0x05, 0x53, 0xD7, 0xC8, 0x81, 0xF7, 0x78, 0xC2, 0x2C, 0x37, 0xB6, 0xC0,
+ 0x16, 0x3E, 0x68, 0x24, 0x3A, 0x84, 0x78, 0x1C, 0x0A, 0xDF, 0x9B, 0xB3,
+ 0xED, 0x21, 0xC4, 0x46, 0xE5, 0xA7, 0xA3, 0x92
+ }}},
+ {{{ // b
+ 0x00, 0x3A, 0x2E, 0x39, 0x0E, 0x10, 0xD8, 0xAC, 0x47, 0xCB, 0x29, 0xC8,
+ 0xF1, 0x2C, 0x7F, 0x11, 0x99, 0x2A, 0x18, 0xB7, 0xEF, 0x73, 0x48, 0xA6,
+ 0xBE, 0x70, 0xA6, 0x8B, 0x97, 0x34, 0x8A, 0xB1
+ }}},
+ { // coeff
+ {{{ // coeff[0]
+ 0x02, 0x16, 0x7A, 0x61, 0x53, 0xDD, 0xF6, 0xE2, 0x89, 0x15, 0xA0, 0x94,
+ 0xF1, 0xB5, 0xDC, 0x65, 0x21, 0x15, 0x62, 0xE1, 0x7D, 0xC5, 0x43, 0x89,
+ 0xEE, 0xB4, 0xEF, 0xC8, 0xA0, 0x8E, 0x34, 0x0F
+ }}},
+ {{{ // coeff[1]
+ 0x04, 0x82, 0x27, 0xE1, 0xEB, 0x98, 0x64, 0xC2, 0x8D, 0x8F, 0xDD, 0x0E,
+ 0x82, 0x40, 0xAE, 0xD4, 0x31, 0x63, 0xD6, 0x46, 0x32, 0x16, 0x85, 0x7A,
+ 0xB7, 0x18, 0x68, 0xB8, 0x17, 0x02, 0x81, 0xA6
+ }}},
+ {{{ // coeff[2]
+ 0x06, 0x20, 0x76, 0xE8, 0x54, 0x54, 0x53, 0xB4, 0xA9, 0xD8, 0x44, 0x4B,
+ 0xAA, 0xFB, 0x1C, 0xFD, 0xAE, 0x15, 0xCA, 0x29, 0x79, 0xA6, 0x24, 0xA4,
+ 0x0A, 0xF6, 0x1E, 0xAC, 0xED, 0xFB, 0x10, 0x41
+ }}},
+ },
+ {{{ // qnr
+ 0x08, 0x66, 0xA7, 0x67, 0x36, 0x6E, 0x62, 0x71, 0xB7, 0xA6, 0x52, 0x94,
+ 0x8F, 0xFB, 0x25, 0x9E, 0xE6, 0x4F, 0x25, 0xE5, 0x26, 0x9A, 0x2B, 0x6E,
+ 0x7E, 0xF8, 0xA6, 0x39, 0xAE, 0x46, 0xAA, 0x24
+ }}},
+ {{ // orderG2
+ 0x00, 0x03, 0xDF, 0xFC, 0xBE, 0x2F, 0x5C, 0x2E, 0x45, 0x49, 0x7A, 0x2A,
+ 0x91, 0xBA, 0xD1, 0x3E, 0x01, 0xEC, 0x5F, 0xC2, 0x15, 0x14, 0x10, 0xB3,
+ 0x28, 0x5E, 0x56, 0xCC, 0x26, 0x51, 0x24, 0x93, 0x0E, 0x6C, 0x99, 0x96,
+ 0x38, 0xE0, 0x7D, 0x68, 0x8C, 0xB7, 0x97, 0x23, 0xF4, 0xAC, 0x4D, 0xBC,
+ 0x5E, 0x01, 0x15, 0xFF, 0x45, 0x60, 0x08, 0x13, 0xCD, 0x59, 0xD7, 0x73,
+ 0xB0, 0x0C, 0x20, 0x5E, 0xAB, 0xAA, 0x24, 0x31, 0xE2, 0x2A, 0xA2, 0x53,
+ 0x8A, 0xF7, 0x86, 0xD5, 0x19, 0x78, 0xC5, 0x55, 0x9C, 0x08, 0xB7, 0xE2,
+ 0xF4, 0xD0, 0x37, 0x74, 0x93, 0x56, 0x62, 0x7B, 0x95, 0xCC, 0x2C, 0xB0
+ }},
+ {{{ // p_tick
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xBC, 0xE6, 0xFA, 0xAD, 0xA7, 0x17, 0x9E, 0x84,
+ 0xF3, 0xB9, 0xCA, 0xC2, 0xFC, 0x63, 0x25, 0x51
+ }}},
+ {{{ // q_tick
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
+ }}},
+ {{ // h_tick
+ 0x00, 0x00, 0x00, 0x01
+ }},
+ {{{ // a_tick
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC
+ }}},
+ {{{ // b_tick
+ 0x5A, 0xC6, 0x35, 0xD8, 0xAA, 0x3A, 0x93, 0xE7, 0xB3, 0xEB, 0xBD, 0x55,
+ 0x76, 0x98, 0x86, 0xBC, 0x65, 0x1D, 0x06, 0xB0, 0xCC, 0x53, 0xB0, 0xF6,
+ 0x3B, 0xCE, 0x3C, 0x3E, 0x27, 0xD2, 0x60, 0x4B
+ }}},
+ { // g1
+ {{{ // x
+ 0x07, 0x78, 0x3B, 0x0D, 0xFE, 0x4A, 0xA3, 0x19, 0x49, 0xB0, 0xCE, 0xAF,
+ 0x3F, 0x74, 0x0F, 0x32, 0x16, 0x0C, 0x8B, 0x46, 0x94, 0x5B, 0xA5, 0xB0,
+ 0xE4, 0x8A, 0xDA, 0xD8, 0x88, 0x32, 0x90, 0x53
+ }}},
+ {{{ // y
+ 0x08, 0xF7, 0xA2, 0xAA, 0xBA, 0x62, 0xB3, 0xFE, 0x29, 0x80, 0xC9, 0x5B,
+ 0x63, 0x53, 0xC8, 0x24, 0x3C, 0x7C, 0x1F, 0x4C, 0xDA, 0xCD, 0xE5, 0x5F,
+ 0xA2, 0x36, 0x93, 0x04, 0x3C, 0x3A, 0xBC, 0x2E
+ }}},
+ },
+ { // g2
+ { // x
+ {{{ // x[0]
+ 0x02, 0x10, 0x9A, 0xF4, 0x06, 0x32, 0x30, 0x89, 0xCB, 0x95, 0xE9, 0x55,
+ 0x0E, 0x9D, 0xAF, 0x0E, 0x98, 0xCD, 0xCA, 0xDC, 0xB1, 0xFF, 0xFC, 0xD1,
+ 0x45, 0x66, 0xBB, 0x86, 0x46, 0x1E, 0x8C, 0x30
+ }}},
+ {{{ // x[1]
+ 0x04, 0x78, 0x53, 0xE1, 0x3F, 0x96, 0xC5, 0xE4, 0x15, 0x23, 0x7B, 0x1F,
+ 0x3F, 0x2C, 0xD3, 0x95, 0x40, 0xBC, 0x7A, 0x31, 0x1F, 0x14, 0x38, 0x9E,
+ 0x1A, 0xA5, 0xD6, 0x63, 0x10, 0x91, 0xE4, 0xD3
+ }}},
+ {{{ // x[2]
+ 0x00, 0xB4, 0x02, 0xBC, 0x47, 0xFA, 0xA6, 0x29, 0x82, 0x0B, 0xB1, 0xD5,
+ 0xFF, 0xF2, 0xE6, 0xB0, 0xC6, 0xAE, 0xE8, 0x7B, 0x91, 0xD9, 0xEE, 0x66,
+ 0x07, 0x1F, 0xFD, 0xA2, 0xE7, 0x02, 0x66, 0xDD
+ }}},
+ },
+ { // y
+ {{{ // y[0]
+ 0x05, 0x2E, 0xF8, 0xC6, 0xC1, 0x6A, 0xEF, 0x3C, 0xC1, 0x95, 0xF6, 0x26,
+ 0xCE, 0x5E, 0x55, 0xD1, 0x64, 0x13, 0x28, 0xB1, 0x18, 0x57, 0xD8, 0x1B,
+ 0x84, 0xFA, 0xEC, 0x7E, 0x5D, 0x99, 0x06, 0x49
+ }}},
+ {{{ // y[1]
+ 0x05, 0x73, 0x35, 0xA9, 0xA7, 0xF2, 0xA1, 0x92, 0x5F, 0x3E, 0x7C, 0xDF,
+ 0xAC, 0xFE, 0x0F, 0xF5, 0x08, 0xD0, 0x3C, 0xAE, 0xCD, 0x58, 0x00, 0x5F,
+ 0xD0, 0x84, 0x7E, 0xEA, 0x63, 0x57, 0xFE, 0xC6
+ }}},
+ {{{ // y[2]
+ 0x01, 0x56, 0xDA, 0xF3, 0x72, 0x61, 0xDA, 0xC6, 0x93, 0xB0, 0xAC, 0xEF,
+ 0xAA, 0xD4, 0x51, 0x6D, 0xCA, 0x71, 0x1E, 0x06, 0x73, 0xEA, 0x83, 0xB2,
+ 0xB1, 0x99, 0x4A, 0x4D, 0x4A, 0x0D, 0x35, 0x07
+ }}},
+ },
+ },
+ { // g3
+ {{{ // x
+ 0x6B, 0x17, 0xD1, 0xF2, 0xE1, 0x2C, 0x42, 0x47, 0xF8, 0xBC, 0xE6, 0xE5,
+ 0x63, 0xA4, 0x40, 0xF2, 0x77, 0x03, 0x7D, 0x81, 0x2D, 0xEB, 0x33, 0xA0,
+ 0xF4, 0xA1, 0x39, 0x45, 0xD8, 0x98, 0xC2, 0x96
+ }}},
+ {{{ // y
+ 0x4F, 0xE3, 0x42, 0xE2, 0xFE, 0x1A, 0x7F, 0x9B, 0x8E, 0xE7, 0xEB, 0x4A,
+ 0x7C, 0x0F, 0x9E, 0x16, 0x2B, 0xCE, 0x33, 0x57, 0x6B, 0x31, 0x5E, 0xCE,
+ 0xCB, 0xB6, 0x40, 0x68, 0x37, 0xBF, 0x51, 0xF5
+ }}},
+ }
diff --git a/epid/common/1.1/src/file_parser.c b/epid/common/1.1/src/file_parser.c
new file mode 100644
index 0000000..bf3d79d
--- /dev/null
+++ b/epid/common/1.1/src/file_parser.c
@@ -0,0 +1,187 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/// Implementation of 1.1 issuer material file parsing utilities.
+/*!
+ * \file
+ */
+#include "epid/common/1.1/file_parser.h"
+#include <string.h>
+
+#include "epid/common/math/ecdsa.h"
+#include "epid/common/src/memory.h"
+#include "epid/common/src/file_parser-internal.h"
+
+/// Intel(R) EPID 1.1 Group Public Key binary format
+typedef struct Epid11GroupPubKeyCertificate {
+ EpidFileHeader header; ///< Intel(R) EPID binary file header
+ Epid11GroupId gid; ///< group ID
+ Epid11G1ElemStr h1; ///< an element in G1
+ Epid11G1ElemStr h2; ///< an element in G1
+ Epid11G2ElemStr w; ///< an element in G2
+ EcdsaSignature signature; ///< ECDSA Signature on SHA-256 of above values
+} Epid11GroupPubKeyCertificate;
+
+/// Parse a file with a revocation list of any type
+static EpidStatus Epid11ParseRlFile(void const* buf, size_t len,
+ EpidCaCertificate const* cert, void* rl,
+ size_t* rl_len, EpidFileType file_type) {
+ size_t min_rl_file_size = 0;
+ size_t empty_rl_size = 0;
+ size_t rl_entry_size = 0;
+ EpidStatus result = kEpidErr;
+ EpidFileHeader const* file_header = (EpidFileHeader*)buf;
+ void const* buf_rl =
+ (void const*)((unsigned char*)buf + sizeof(EpidFileHeader));
+ size_t buf_rl_len = 0;
+ EcdsaSignature const* signature = NULL;
+
+ if (!buf || !cert || !rl_len) return kEpidBadArgErr;
+
+ switch (file_type) {
+ case kPrivRlFile:
+ empty_rl_size = sizeof(Epid11PrivRl) - sizeof(((Epid11PrivRl*)0)->f[0]);
+ rl_entry_size = sizeof(((Epid11PrivRl*)0)->f[0]);
+ min_rl_file_size = sizeof(EpidFileHeader) + sizeof(Epid11PrivRl) -
+ sizeof(((Epid11PrivRl*)0)->f[0]) +
+ sizeof(EcdsaSignature);
+ break;
+ case kSigRlFile:
+ empty_rl_size = sizeof(Epid11SigRl) - sizeof(((Epid11SigRl*)0)->bk[0]);
+ rl_entry_size = sizeof(((Epid11SigRl*)0)->bk[0]);
+ min_rl_file_size = sizeof(EpidFileHeader) + sizeof(Epid11SigRl) -
+ sizeof(((Epid11SigRl*)0)->bk[0]) +
+ sizeof(EcdsaSignature);
+ break;
+ case kGroupRlFile:
+ empty_rl_size =
+ sizeof(Epid11GroupRl) - sizeof(((Epid11GroupRl*)0)->gid[0]);
+ rl_entry_size = sizeof(((Epid11GroupRl*)0)->gid[0]);
+ min_rl_file_size = sizeof(EpidFileHeader) + sizeof(Epid11GroupRl) -
+ sizeof(((Epid11GroupRl*)0)->gid[0]) +
+ sizeof(EcdsaSignature);
+ break;
+ default:
+ return kEpidErr;
+ }
+
+ if (min_rl_file_size > len) return kEpidBadArgErr;
+
+ // Verify that Intel(R) EPID file header in the buffer is correct
+ if (0 != memcmp(&file_header->epid_version, &kEpidVersionCode[kEpid1x],
+ sizeof(kEpidVersionCode[kEpid1x]))) {
+ return kEpidBadArgErr;
+ }
+ if (0 != memcmp(&file_header->file_type, &kEpidFileTypeCode[file_type],
+ sizeof(file_header->file_type))) {
+ return kEpidBadArgErr;
+ }
+
+ // Verify that CA certificate is correct
+ result = EpidVerifyCaCertificate(cert);
+ if (kEpidNoErr != result) return result;
+
+ // Verify that RL in file buffer contains of integer number of entries
+ buf_rl_len = len - sizeof(EpidFileHeader) - sizeof(EcdsaSignature);
+ if (0 != ((buf_rl_len - empty_rl_size) % rl_entry_size)) {
+ return kEpidBadArgErr;
+ }
+
+ signature =
+ (EcdsaSignature*)((unsigned char*)buf + len - sizeof(EcdsaSignature));
+ // Authenticate signature for buffer
+ result = EcdsaVerifyBuffer(buf, len - sizeof(EcdsaSignature),
+ (EcdsaPublicKey*)&cert->pubkey, signature);
+ if (kEpidSigValid != result) return result;
+
+ buf_rl_len = len - sizeof(EpidFileHeader) - sizeof(EcdsaSignature);
+
+ // If pointer to output buffer is NULL it should return required size of RL
+ if (!rl) {
+ *rl_len = buf_rl_len;
+ return kEpidNoErr;
+ }
+
+ if (*rl_len < buf_rl_len) return kEpidBadArgErr;
+ *rl_len = buf_rl_len;
+
+ // Copy revocation list from file buffer to output
+ // Memory copy is used to copy a revocation list of variable length
+ if (0 != memcpy_S(rl, *rl_len, buf_rl, buf_rl_len)) return kEpidBadArgErr;
+
+ return kEpidNoErr;
+}
+
+EpidStatus Epid11ParseGroupPubKeyFile(void const* buf, size_t len,
+ EpidCaCertificate const* cert,
+ Epid11GroupPubKey* pubkey) {
+ EpidStatus result = kEpidErr;
+ Epid11GroupPubKeyCertificate* buf_pubkey = (Epid11GroupPubKeyCertificate*)buf;
+
+ if (!buf || !cert || !pubkey) {
+ return kEpidBadArgErr;
+ }
+
+ if (sizeof(Epid11GroupPubKeyCertificate) > len) {
+ return kEpidBadArgErr;
+ }
+
+ // Verify that Intel(R) EPID file header in the buffer is correct
+ if (0 != memcmp(&buf_pubkey->header.epid_version, &kEpidVersionCode[kEpid1x],
+ sizeof(buf_pubkey->header.epid_version))) {
+ return kEpidBadArgErr;
+ }
+ if (0 != memcmp(&buf_pubkey->header.file_type,
+ &kEpidFileTypeCode[kGroupPubKeyFile],
+ sizeof(buf_pubkey->header.file_type))) {
+ return kEpidBadArgErr;
+ }
+
+ // Verify that CA certificate is correct
+ result = EpidVerifyCaCertificate(cert);
+ if (kEpidNoErr != result) return result;
+
+ // Authenticate signature for buffer
+ result = EcdsaVerifyBuffer(
+ buf_pubkey, sizeof(Epid11GroupPubKeyCertificate) - sizeof(EcdsaSignature),
+ (EcdsaPublicKey*)&cert->pubkey, &buf_pubkey->signature);
+ if (kEpidSigValid != result) return result;
+
+ // Copy group public key from the buffer to output
+ pubkey->gid = buf_pubkey->gid;
+ pubkey->h1 = buf_pubkey->h1;
+ pubkey->h2 = buf_pubkey->h2;
+ pubkey->w = buf_pubkey->w;
+
+ return kEpidNoErr;
+}
+
+EpidStatus Epid11ParsePrivRlFile(void const* buf, size_t len,
+ EpidCaCertificate const* cert,
+ Epid11PrivRl* rl, size_t* rl_len) {
+ return Epid11ParseRlFile(buf, len, cert, rl, rl_len, kPrivRlFile);
+}
+
+EpidStatus Epid11ParseSigRlFile(void const* buf, size_t len,
+ EpidCaCertificate const* cert, Epid11SigRl* rl,
+ size_t* rl_len) {
+ return Epid11ParseRlFile(buf, len, cert, rl, rl_len, kSigRlFile);
+}
+
+EpidStatus Epid11ParseGroupRlFile(void const* buf, size_t len,
+ EpidCaCertificate const* cert,
+ Epid11GroupRl* rl, size_t* rl_len) {
+ return Epid11ParseRlFile(buf, len, cert, rl, rl_len, kGroupRlFile);
+}
diff --git a/epid/common/1.1/src/grouppubkey.c b/epid/common/1.1/src/grouppubkey.c
new file mode 100644
index 0000000..790e5bc
--- /dev/null
+++ b/epid/common/1.1/src/grouppubkey.c
@@ -0,0 +1,82 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Intel(R) EPID 1.1 group public key implementation.
+ */
+#include "epid/common/1.1/src/grouppubkey.h"
+#include "epid/common/src/memory.h"
+
+/// Handle SDK Error with Break
+#define BREAK_ON_EPID_ERROR(ret) \
+ \
+ if (kEpidNoErr != (ret)) { \
+ break; \
+ }
+
+EpidStatus CreateEpid11GroupPubKey(Epid11GroupPubKey const* pub_key_str,
+ EcGroup* G1, EcGroup* G2,
+ Epid11GroupPubKey_** pub_key) {
+ EpidStatus result = kEpidErr;
+ Epid11GroupPubKey_* pubkey = NULL;
+ if (!pub_key_str || !G1 || !G2 || !pub_key) {
+ return kEpidBadArgErr;
+ }
+ do {
+ pubkey = SAFE_ALLOC(sizeof(Epid11GroupPubKey_));
+ if (!pubkey) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+ result = NewEcPoint(G1, &pubkey->h1);
+ BREAK_ON_EPID_ERROR(result);
+ result =
+ ReadEcPoint(G1, &pub_key_str->h1, sizeof(pub_key_str->h1), pubkey->h1);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewEcPoint(G1, &pubkey->h2);
+ BREAK_ON_EPID_ERROR(result);
+ result =
+ ReadEcPoint(G1, &pub_key_str->h2, sizeof(pub_key_str->h2), pubkey->h2);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewEcPoint(G2, &pubkey->w);
+ BREAK_ON_EPID_ERROR(result);
+ result =
+ ReadEcPoint(G2, &pub_key_str->w, sizeof(pub_key_str->w), pubkey->w);
+ BREAK_ON_EPID_ERROR(result);
+ pubkey->gid = pub_key_str->gid;
+ *pub_key = pubkey;
+ result = kEpidNoErr;
+ } while (0);
+
+ if (kEpidNoErr != result && pubkey) {
+ DeleteEcPoint(&pubkey->w);
+ DeleteEcPoint(&pubkey->h2);
+ DeleteEcPoint(&pubkey->h1);
+ SAFE_FREE(pubkey);
+ }
+ return result;
+}
+
+void DeleteEpid11GroupPubKey(Epid11GroupPubKey_** pub_key) {
+ if (pub_key && *pub_key) {
+ DeleteEcPoint(&(*pub_key)->w);
+ DeleteEcPoint(&(*pub_key)->h2);
+ DeleteEcPoint(&(*pub_key)->h1);
+
+ SAFE_FREE(*pub_key);
+ }
+}
diff --git a/epid/common/1.1/src/grouppubkey.h b/epid/common/1.1/src/grouppubkey.h
new file mode 100644
index 0000000..49db330
--- /dev/null
+++ b/epid/common/1.1/src/grouppubkey.h
@@ -0,0 +1,69 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+#ifndef EPID_COMMON_1_1_SRC_GROUPPUBKEY_H_
+#define EPID_COMMON_1_1_SRC_GROUPPUBKEY_H_
+/*!
+ * \file
+ * \brief Intel(R) EPID 1.1 group public key interface.
+ * \addtogroup EpidCommon
+ * @{
+ */
+#include "epid/common/errors.h"
+#include "epid/common/math/ecgroup.h"
+#include "epid/common/1.1/types.h"
+
+/// Internal representation of Epid11GroupPubKey
+typedef struct Epid11GroupPubKey_ {
+ Epid11GroupId gid; ///< group ID
+ EcPoint* h1; ///< an element in G1
+ EcPoint* h2; ///< an element in G1
+ EcPoint* w; ///< an element in G2
+} Epid11GroupPubKey_;
+
+/// Constructs internal representation of Intel(R) EPID 1.1 group public key
+/*!
+ Allocates memory and initializes gid, h1, h2, w parameters. Use
+ DeleteEpid11GroupPubKey() to deallocate memory
+
+ \param[in] pub_key_str
+ Oct string representation of group public key
+ \param[in] G1
+ EcGroup containing elements h1 and h2
+ \param[in] G2
+ EcGroup containing element w
+ \param[out] pub_key
+ Group public key: (gid, h1, h2, w)
+
+ \returns ::EpidStatus
+ \see DeleteEpid11GroupPubKey
+*/
+EpidStatus CreateEpid11GroupPubKey(Epid11GroupPubKey const* pub_key_str,
+ EcGroup* G1, EcGroup* G2,
+ Epid11GroupPubKey_** pub_key);
+
+/// Deallocates storage for internal representation Intel(R) EPID 1.1 group
+/// public key
+/*!
+ Frees memory pointed to by Epid11GroupPubKey. Nulls the pointer.
+
+ \param[in] pub_key
+ Epid11GroupPubKey to be freed
+
+ \see CreateEpid11GroupPubKey
+*/
+void DeleteEpid11GroupPubKey(Epid11GroupPubKey_** pub_key);
+/*! @} */
+#endif // EPID_COMMON_1_1_SRC_GROUPPUBKEY_H_
diff --git a/epid/common/1.1/types.h b/epid/common/1.1/types.h
new file mode 100644
index 0000000..af534d9
--- /dev/null
+++ b/epid/common/1.1/types.h
@@ -0,0 +1,207 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+#ifndef EPID_COMMON_1_1_TYPES_H_
+#define EPID_COMMON_1_1_TYPES_H_
+
+/*!
+* \file
+* \brief SDK data types for Intel(R) EPID 1.1.
+*/
+
+#include <limits.h> // for CHAR_BIT
+
+#include "epid/common/types.h"
+
+/// Intel(R) EPID 1.1 specific data types.
+/*!
+\defgroup Epid11Types EPID 1.1 specific 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.
+
+\ingroup EpidTypes
+\see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+support</b></a>
+@{
+*/
+
+#pragma pack(1)
+
+/// 80 bit octet string
+typedef struct OctStr80 {
+ unsigned char data[80 / CHAR_BIT]; ///< 80 bit data
+} OctStr80;
+
+/// 600 bit octet string
+typedef struct OctSt600 {
+ unsigned char data[600 / CHAR_BIT]; ///< 600 bit data
+} OctStr600;
+
+/// 768 bit octet string
+typedef struct OctStr768 {
+ unsigned char data[768 / CHAR_BIT]; ///< 768 bit data
+} OctStr768;
+
+/// Serialized Fq3 element
+typedef struct Fq3ElemStr {
+ FqElemStr a[3]; ///< polynomial coefficient
+} Fq3ElemStr;
+
+/// Serialized Intel(R) EPID 1.1 G1 element
+typedef G1ElemStr Epid11G1ElemStr;
+
+/// Serialized Intel(R) EPID 1.1 G3 element
+typedef G1ElemStr Epid11G3ElemStr;
+
+/// Serialized Intel(R) EPID 1.1 G2 element
+typedef struct Epid11G2ElemStr {
+ FqElemStr x[3]; ///< an integer between [0, q-1]
+ FqElemStr y[3]; ///< an integer between [0, q-1]
+} Epid11G2ElemStr;
+
+/// Serialized Intel(R) EPID 1.1 GT element
+typedef struct Epid11GtElemStr {
+ Fq3ElemStr a[2]; ///< an element in Fq3
+} Epid11GtElemStr;
+
+/// Intel(R) EPID 1.1 Parameters.
+/*!
+Intel(R) EPID 1.1 parameters are: (p, q, h, a, b, coeff, qnr, orderG2, p', q',
+h', a', b', g1, g2, g3). The size of the Intel(R) EPID public parameters of G1,
+G2, G3, and GT is 6464 bits or 808 bytes.
+*/
+typedef struct Epid11Params {
+ BigNumStr p; ///< a prime
+ BigNumStr q; ///< a prime
+ OctStr32 h; ///< a small integer, also denoted as cofactor
+ FqElemStr a; ///< an integer between [0, q-1]
+ FqElemStr b; ///< an integer between [0, q-1]
+ /*! the coefficients of an irreducible polynomial
+ coeff[0], coeff[1], coeff[2] are 256-bit integers between [0, q - 1]*/
+ BigNumStr coeff[3];
+ FqElemStr qnr; ///< a quadratic non-residue (an integer between [0, q-1])
+ OctStr768 orderG2; ///< the total number of points in G2 elliptic curve
+ BigNumStr p_tick; ///< a prime
+ BigNumStr q_tick; ///< a prime
+ OctStr32 h_tick; ///< a small integer, also denoted as cofactor
+ FqElemStr a_tick; ///< an integer between [0, q-1]
+ FqElemStr b_tick; ///< an integer between [0, q-1]
+ Epid11G1ElemStr g1; ///< a generator(an element) of G1
+ Epid11G2ElemStr g2; ///< a generator (an element) of G2
+ Epid11G1ElemStr g3; ///< a generator (an element) of G3
+} Epid11Params;
+
+/// Intel(R) EPID 1.1 group ID
+typedef OctStr32 Epid11GroupId;
+
+/// Intel(R) EPID 1.1 group public key
+/*!
+* Group public key: (gid, h1, h2, w)
+*/
+typedef struct Epid11GroupPubKey {
+ Epid11GroupId gid; ///< group ID
+ Epid11G1ElemStr h1; ///< an element in G1
+ Epid11G1ElemStr h2; ///< an element in G1
+ Epid11G2ElemStr w; ///< an element in G2
+} Epid11GroupPubKey;
+
+/// Intel(R) EPID 1.1 basic signature.
+/*!
+* Basic signature: (B, K, T1, T2, c, nd, sx, sy, sf, sa, sb, salpha, sbeta)
+*/
+typedef struct Epid11BasicSignature {
+ Epid11G3ElemStr B; ///< an element in G3
+ Epid11G3ElemStr K; ///< an element in G3
+ Epid11G1ElemStr T1; ///< an element in G1
+ Epid11G1ElemStr T2; ///< an element in G1
+ OctStr256 c; ///< a 256-bit integer
+ OctStr80 nd; ///< an 80-bit integer
+ FpElemStr sx; ///< an integer between [0, p-1]
+ FpElemStr sy; ///< an integer between [0, p-1]
+ OctStr600 sf; ///< a 593-bit integer
+ FpElemStr sa; ///< an integer between [0, p-1]
+ FpElemStr sb; ///< an integer between [0, p-1]
+ FpElemStr salpha; ///< an integer between [0, p-1]
+ FpElemStr sbeta; ///< an integer between [0, p-1]
+} Epid11BasicSignature;
+
+/// Intel(R) EPID 1.1 non-revoked Proof
+/*!
+* Non-revoked Proof: (T, c, smu, snu)
+*/
+typedef struct Epid11NrProof {
+ Epid11G3ElemStr T; ///< an element in G3
+ OctStr256 c; ///< a 256-bit integer
+ FpElemStr smu; ///< an integer between [0, p'-1]
+ FpElemStr snu; ///< an integer between [0, p'-1]
+} Epid11NrProof;
+
+/// Intel(R) EPID 1.1 Signature
+/*!
+* Signature: (sigma0, RLver, n2, sigma[0], ..., sigma[n2-1])
+*/
+typedef struct Epid11Signature {
+ Epid11BasicSignature sigma0; ///< basic signature
+ OctStr32 rl_ver; ///< revocation list version number
+ OctStr32 n2; ///< number of entries in SigRL
+ Epid11NrProof sigma[1]; ///< array of non-revoked proofs (flexible array)
+} Epid11Signature;
+
+/// Intel(R) EPID 1.1 private-key based revocation list
+/*!
+* Private-key based revocation list PrivRL: (gid, RLver, n1, f[0],
+* ..., f[n1-1])
+*/
+typedef struct Epid11PrivRl {
+ Epid11GroupId gid; ///< group ID
+ OctStr32 version; ///< revocation list version number
+ OctStr32 n1; ///< number of entries in PrivRL
+ FpElemStr f[1]; ///< integers between [1, p-1] (flexible array)
+} Epid11PrivRl;
+
+/// Intel(R) EPID 1.1 entry in SigRL (B,K)
+typedef struct Epid11SigRlEntry {
+ Epid11G3ElemStr b; ///< an element of G1
+ Epid11G3ElemStr k; ///< an element of G1
+} Epid11SigRlEntry;
+
+/// Intel(R) EPID 1.1 signature based revocation list
+/*!
+* Signature based revocation list SigRL: (gid, RLver, n2, B[0],
+* K[0], ..., B[n2-1], K[n2-1])
+*/
+typedef struct Epid11SigRl {
+ Epid11GroupId gid; ///< group ID
+ OctStr32 version; ///< revocation list version number
+ OctStr32 n2; ///< number of entries in SigRL
+ Epid11SigRlEntry bk[1]; ///< revoked Bs and Ks (flexible array)
+} Epid11SigRl;
+
+/// Intel(R) EPID 1.1 group revocation list
+/*!
+* Group revocation list GroupRL: (RLver, n3, gid[0], ...,
+* gid[n3-1])
+*/
+typedef struct Epid11GroupRl {
+ OctStr32 version; ///< revocation list version number
+ OctStr32 n3; ///< number of entries in GroupRL
+ Epid11GroupId gid[1]; ///< revoked group IDs (flexible array)
+} Epid11GroupRl;
+
+#pragma pack()
+
+/*! @} */
+#endif // EPID_COMMON_1_1_TYPES_H_
diff --git a/epid/common/1.1/unittests/file_parser-test.cc b/epid/common/1.1/unittests/file_parser-test.cc
new file mode 100644
index 0000000..59d1541
--- /dev/null
+++ b/epid/common/1.1/unittests/file_parser-test.cc
@@ -0,0 +1,1426 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/// 1.1 issuer material file parsing unit tests.
+/*!
+ * \file
+ */
+#include <cstdint>
+#include <vector>
+
+#include "gtest/gtest.h"
+extern "C" {
+#include "epid/common/1.1/file_parser.h"
+}
+
+namespace {
+
+/// Test fixture class for Epid11FileParser
+class Epid11FileParser : public ::testing::Test {
+ public:
+ /// Cert used to sign legitimate test data
+ static const EpidCaCertificate kCert;
+
+ /// A file with Epid11GroupPublicKey signed with kCert
+ static const std::vector<uint8_t> kGroupPublicKeyFile;
+ /// A file with two Epid11GroupPublicKey signed with kCert
+ static const std::vector<uint8_t> kGroupMultiPublicKeyFile;
+ /// Expected Epid11GroupPublicKey
+ static const std::vector<uint8_t> kGroupPublicKey;
+
+ /// A file with empty privrl signed with kCert
+ static const std::vector<uint8_t> kEmptyPrivRlFile;
+ /// Expected empty privrl
+ static const std::vector<uint8_t> kEmptyPrivRl;
+ /// A file with short privrl signed with kCert
+ static const std::vector<uint8_t> kShortPrivRlFile;
+ /// Expected short privrl
+ static const std::vector<uint8_t> kShortPrivRl;
+
+ /// A file with empty SigRl signed with kCert
+ static const std::vector<uint8_t> kEmptySigRlFile;
+ /// Expected empty SigRl
+ static const std::vector<uint8_t> kEmptySigRl;
+ /// A file with short SigRl signed with kCert
+ static const std::vector<uint8_t> kShortSigRlFile;
+ /// Expected short SigRl
+ static const std::vector<uint8_t> kShortSigRl;
+
+ /// A file with empty GroupRl signed with kCert
+ static const std::vector<uint8_t> kEmptyGroupRlFile;
+ /// Expected empty GroupRl
+ static const std::vector<uint8_t> kEmptyGroupRl;
+ /// A file with short GroupRl signed with kCert
+ static const std::vector<uint8_t> kShortGroupRlFile;
+ /// Expected short GroupRl
+ static const std::vector<uint8_t> kShortGroupRl;
+};
+const EpidCaCertificate Epid11FileParser::kCert = {
+ // EpidFileHeader::epid_version
+ 0x02, 0x00,
+ // EpidFileHeader::file_type
+ 0x00, 0x11,
+ // pubkey
+ 0x24, 0x42, 0xa5, 0xcc, 0x0e, 0xcd, 0x01, 0x5f, 0xa3, 0xca, 0x31, 0xdc,
+ 0x8e, 0x2b, 0xbc, 0x70, 0xbf, 0x42, 0xd6, 0x0c, 0xbc, 0xa2, 0x00, 0x85,
+ 0xe0, 0x82, 0x2c, 0xb0, 0x42, 0x35, 0xe9, 0x70, 0x6f, 0xc9, 0x8b, 0xd7,
+ 0xe5, 0x02, 0x11, 0xa4, 0xa2, 0x71, 0x02, 0xfa, 0x35, 0x49, 0xdf, 0x79,
+ 0xeb, 0xcb, 0x4b, 0xf2, 0x46, 0xb8, 0x09, 0x45, 0xcd, 0xdf, 0xe7, 0xd5,
+ 0x09, 0xbb, 0xfd, 0x7d,
+ // prime
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ // a
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
+ // b
+ 0x5a, 0xc6, 0x35, 0xd8, 0xaa, 0x3a, 0x93, 0xe7, 0xb3, 0xeb, 0xbd, 0x55,
+ 0x76, 0x98, 0x86, 0xbc, 0x65, 0x1d, 0x06, 0xb0, 0xcc, 0x53, 0xb0, 0xf6,
+ 0x3b, 0xce, 0x3c, 0x3e, 0x27, 0xd2, 0x60, 0x4b,
+ // x
+ 0x6b, 0x17, 0xd1, 0xf2, 0xe1, 0x2c, 0x42, 0x47, 0xf8, 0xbc, 0xe6, 0xe5,
+ 0x63, 0xa4, 0x40, 0xf2, 0x77, 0x03, 0x7d, 0x81, 0x2d, 0xeb, 0x33, 0xa0,
+ 0xf4, 0xa1, 0x39, 0x45, 0xd8, 0x98, 0xc2, 0x96,
+ // y
+ 0x4f, 0xe3, 0x42, 0xe2, 0xfe, 0x1a, 0x7f, 0x9b, 0x8e, 0xe7, 0xeb, 0x4a,
+ 0x7c, 0x0f, 0x9e, 0x16, 0x2b, 0xce, 0x33, 0x57, 0x6b, 0x31, 0x5e, 0xce,
+ 0xcb, 0xb6, 0x40, 0x68, 0x37, 0xbf, 0x51, 0xf5,
+ // r
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xbc, 0xe6, 0xfa, 0xad, 0xa7, 0x17, 0x9e, 0x84,
+ 0xf3, 0xb9, 0xca, 0xc2, 0xfc, 0x63, 0x25, 0x51,
+ // signature::x
+ 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71, 0xed, 0x2a,
+ 0x9b, 0x88, 0x99, 0x5b, 0x85, 0x3b, 0xdf, 0xf9, 0x70, 0x2a, 0x6c, 0x06,
+ 0x3b, 0x72, 0x02, 0x32, 0xb9, 0x3a, 0x76, 0xe7,
+ // signature::y
+ 0x94, 0x03, 0x1d, 0x90, 0x6b, 0x6f, 0xcd, 0x99, 0xef, 0x2c, 0xdb, 0x8b,
+ 0xa9, 0x8a, 0xef, 0x7e, 0xf0, 0x77, 0xba, 0xb5, 0x11, 0x43, 0x0d, 0x28,
+ 0x1c, 0x01, 0x5b, 0xc9, 0x08, 0xce, 0x3e, 0x68};
+
+const std::vector<uint8_t> Epid11FileParser::kGroupPublicKeyFile = {
+ // Epid Version
+ 0x01, 0x00,
+ // Epid type
+ 0x00, 0x0c,
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // h1
+ 0x08, 0x4a, 0x9d, 0x2e, 0xf9, 0x4f, 0x78, 0x02, 0xd7, 0x89, 0x75, 0xb4,
+ 0xe7, 0x25, 0x26, 0x9f, 0x00, 0x57, 0xad, 0x33, 0x30, 0xea, 0xa9, 0x6c,
+ 0x00, 0x9e, 0x8b, 0xc8, 0x13, 0x23, 0xcb, 0x06, 0x04, 0xbe, 0x42, 0x74,
+ 0x11, 0x07, 0xb1, 0x06, 0xd7, 0xef, 0x5f, 0x66, 0x87, 0xd9, 0xfa, 0xdd,
+ 0x53, 0xae, 0xd7, 0xf4, 0x54, 0xf8, 0xd0, 0x21, 0x75, 0xe0, 0x07, 0x44,
+ 0xc9, 0xc3, 0x4e, 0xf7,
+ // h2
+ 0x06, 0xd8, 0xa9, 0x90, 0x02, 0x8f, 0xca, 0xa5, 0x73, 0x36, 0x24, 0x03,
+ 0xc9, 0xa8, 0x7e, 0x9d, 0x64, 0x12, 0xac, 0xa7, 0xbd, 0x17, 0x7f, 0x7c,
+ 0x96, 0x8d, 0x2e, 0x13, 0xd9, 0xb2, 0x69, 0x47, 0x09, 0xdb, 0xe3, 0xbf,
+ 0xbc, 0xa1, 0x34, 0x0f, 0xc6, 0xe2, 0x00, 0x3d, 0x98, 0xa3, 0x7d, 0xab,
+ 0xd4, 0x0e, 0xec, 0xde, 0x4f, 0x97, 0xa9, 0xbb, 0xdd, 0x60, 0x94, 0x24,
+ 0x7b, 0xb3, 0xf5, 0x94,
+ // w
+ 0x02, 0x43, 0x78, 0x9f, 0x54, 0xc1, 0x21, 0x3a, 0x2b, 0x4d, 0x12, 0x65,
+ 0x2f, 0x51, 0x94, 0xc6, 0x34, 0x24, 0xd9, 0x7b, 0x06, 0x3a, 0xc4, 0xf5,
+ 0x56, 0xeb, 0x32, 0xe3, 0xee, 0x7b, 0xad, 0x6b, 0x04, 0x90, 0x86, 0x31,
+ 0x18, 0x2a, 0xa4, 0xcf, 0xa3, 0x90, 0xa5, 0x80, 0x7b, 0xae, 0x3b, 0xb1,
+ 0x77, 0x03, 0xe7, 0x7e, 0xf2, 0xfc, 0x6d, 0x3a, 0xab, 0x8f, 0xbf, 0x95,
+ 0x40, 0xed, 0x08, 0x03, 0x01, 0x05, 0x86, 0xf5, 0x42, 0xea, 0x4d, 0xf7,
+ 0x4f, 0xef, 0x46, 0xdf, 0x8f, 0xe8, 0x2d, 0xbb, 0x5d, 0x0d, 0x2f, 0x4f,
+ 0xf4, 0xd8, 0x31, 0xc6, 0x5a, 0x97, 0x98, 0x44, 0xcf, 0x42, 0x5a, 0xf3,
+ 0x03, 0x5f, 0xb6, 0x38, 0x45, 0x5a, 0x15, 0x1e, 0xb9, 0x54, 0xfa, 0x2c,
+ 0x3f, 0x68, 0x7b, 0x4e, 0x85, 0x35, 0xf3, 0x5b, 0xe5, 0xdc, 0x96, 0x2b,
+ 0x18, 0x84, 0x5e, 0x1e, 0x53, 0xdc, 0x22, 0x23, 0x06, 0x08, 0x91, 0x5a,
+ 0x2d, 0x27, 0xe2, 0x12, 0x69, 0xfa, 0xab, 0x19, 0x7c, 0x47, 0x6b, 0xec,
+ 0xde, 0xc6, 0x25, 0xd4, 0x43, 0xb4, 0x65, 0x23, 0x61, 0x0f, 0x1f, 0x2d,
+ 0xfd, 0xb1, 0x18, 0xb0, 0x04, 0x8e, 0x1a, 0xc5, 0x95, 0x9a, 0x0e, 0x37,
+ 0x7c, 0x5e, 0x95, 0x38, 0xc2, 0xcf, 0xfa, 0x1f, 0xe3, 0x3a, 0x2b, 0x85,
+ 0xa5, 0xfd, 0x6b, 0xc4, 0x1d, 0xfb, 0x47, 0x27, 0xaf, 0xc1, 0x94, 0xcd,
+ // Signature
+ 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71, 0xed, 0x2a,
+ 0x9b, 0x88, 0x99, 0x5b, 0x85, 0x3b, 0xdf, 0xf9, 0x70, 0x2a, 0x6c, 0x06,
+ 0x3b, 0x72, 0x02, 0x32, 0xb9, 0x3a, 0x76, 0xe7, 0xf0, 0x6e, 0x43, 0x67,
+ 0x68, 0x6f, 0x9e, 0x3b, 0xcf, 0xfd, 0x98, 0xcc, 0xae, 0x92, 0xcc, 0x94,
+ 0x23, 0xb6, 0xbd, 0x57, 0xac, 0x06, 0x3c, 0xa1, 0xe5, 0x3e, 0xe9, 0xf5,
+ 0x0e, 0x55, 0xb4, 0xe5};
+const std::vector<uint8_t> Epid11FileParser::kGroupPublicKey = {
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // h1
+ 0x08, 0x4a, 0x9d, 0x2e, 0xf9, 0x4f, 0x78, 0x02, 0xd7, 0x89, 0x75, 0xb4,
+ 0xe7, 0x25, 0x26, 0x9f, 0x00, 0x57, 0xad, 0x33, 0x30, 0xea, 0xa9, 0x6c,
+ 0x00, 0x9e, 0x8b, 0xc8, 0x13, 0x23, 0xcb, 0x06, 0x04, 0xbe, 0x42, 0x74,
+ 0x11, 0x07, 0xb1, 0x06, 0xd7, 0xef, 0x5f, 0x66, 0x87, 0xd9, 0xfa, 0xdd,
+ 0x53, 0xae, 0xd7, 0xf4, 0x54, 0xf8, 0xd0, 0x21, 0x75, 0xe0, 0x07, 0x44,
+ 0xc9, 0xc3, 0x4e, 0xf7,
+ // h2
+ 0x06, 0xd8, 0xa9, 0x90, 0x02, 0x8f, 0xca, 0xa5, 0x73, 0x36, 0x24, 0x03,
+ 0xc9, 0xa8, 0x7e, 0x9d, 0x64, 0x12, 0xac, 0xa7, 0xbd, 0x17, 0x7f, 0x7c,
+ 0x96, 0x8d, 0x2e, 0x13, 0xd9, 0xb2, 0x69, 0x47, 0x09, 0xdb, 0xe3, 0xbf,
+ 0xbc, 0xa1, 0x34, 0x0f, 0xc6, 0xe2, 0x00, 0x3d, 0x98, 0xa3, 0x7d, 0xab,
+ 0xd4, 0x0e, 0xec, 0xde, 0x4f, 0x97, 0xa9, 0xbb, 0xdd, 0x60, 0x94, 0x24,
+ 0x7b, 0xb3, 0xf5, 0x94,
+ // w
+ 0x02, 0x43, 0x78, 0x9f, 0x54, 0xc1, 0x21, 0x3a, 0x2b, 0x4d, 0x12, 0x65,
+ 0x2f, 0x51, 0x94, 0xc6, 0x34, 0x24, 0xd9, 0x7b, 0x06, 0x3a, 0xc4, 0xf5,
+ 0x56, 0xeb, 0x32, 0xe3, 0xee, 0x7b, 0xad, 0x6b, 0x04, 0x90, 0x86, 0x31,
+ 0x18, 0x2a, 0xa4, 0xcf, 0xa3, 0x90, 0xa5, 0x80, 0x7b, 0xae, 0x3b, 0xb1,
+ 0x77, 0x03, 0xe7, 0x7e, 0xf2, 0xfc, 0x6d, 0x3a, 0xab, 0x8f, 0xbf, 0x95,
+ 0x40, 0xed, 0x08, 0x03, 0x01, 0x05, 0x86, 0xf5, 0x42, 0xea, 0x4d, 0xf7,
+ 0x4f, 0xef, 0x46, 0xdf, 0x8f, 0xe8, 0x2d, 0xbb, 0x5d, 0x0d, 0x2f, 0x4f,
+ 0xf4, 0xd8, 0x31, 0xc6, 0x5a, 0x97, 0x98, 0x44, 0xcf, 0x42, 0x5a, 0xf3,
+ 0x03, 0x5f, 0xb6, 0x38, 0x45, 0x5a, 0x15, 0x1e, 0xb9, 0x54, 0xfa, 0x2c,
+ 0x3f, 0x68, 0x7b, 0x4e, 0x85, 0x35, 0xf3, 0x5b, 0xe5, 0xdc, 0x96, 0x2b,
+ 0x18, 0x84, 0x5e, 0x1e, 0x53, 0xdc, 0x22, 0x23, 0x06, 0x08, 0x91, 0x5a,
+ 0x2d, 0x27, 0xe2, 0x12, 0x69, 0xfa, 0xab, 0x19, 0x7c, 0x47, 0x6b, 0xec,
+ 0xde, 0xc6, 0x25, 0xd4, 0x43, 0xb4, 0x65, 0x23, 0x61, 0x0f, 0x1f, 0x2d,
+ 0xfd, 0xb1, 0x18, 0xb0, 0x04, 0x8e, 0x1a, 0xc5, 0x95, 0x9a, 0x0e, 0x37,
+ 0x7c, 0x5e, 0x95, 0x38, 0xc2, 0xcf, 0xfa, 0x1f, 0xe3, 0x3a, 0x2b, 0x85,
+ 0xa5, 0xfd, 0x6b, 0xc4, 0x1d, 0xfb, 0x47, 0x27, 0xaf, 0xc1, 0x94, 0xcd};
+
+const std::vector<uint8_t> Epid11FileParser::kGroupMultiPublicKeyFile = {
+ // Epid Version
+ 0x01, 0x00,
+ // Epid type
+ 0x00, 0x0c,
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // h1
+ 0x08, 0x4a, 0x9d, 0x2e, 0xf9, 0x4f, 0x78, 0x02, 0xd7, 0x89, 0x75, 0xb4,
+ 0xe7, 0x25, 0x26, 0x9f, 0x00, 0x57, 0xad, 0x33, 0x30, 0xea, 0xa9, 0x6c,
+ 0x00, 0x9e, 0x8b, 0xc8, 0x13, 0x23, 0xcb, 0x06, 0x04, 0xbe, 0x42, 0x74,
+ 0x11, 0x07, 0xb1, 0x06, 0xd7, 0xef, 0x5f, 0x66, 0x87, 0xd9, 0xfa, 0xdd,
+ 0x53, 0xae, 0xd7, 0xf4, 0x54, 0xf8, 0xd0, 0x21, 0x75, 0xe0, 0x07, 0x44,
+ 0xc9, 0xc3, 0x4e, 0xf7,
+ // h2
+ 0x06, 0xd8, 0xa9, 0x90, 0x02, 0x8f, 0xca, 0xa5, 0x73, 0x36, 0x24, 0x03,
+ 0xc9, 0xa8, 0x7e, 0x9d, 0x64, 0x12, 0xac, 0xa7, 0xbd, 0x17, 0x7f, 0x7c,
+ 0x96, 0x8d, 0x2e, 0x13, 0xd9, 0xb2, 0x69, 0x47, 0x09, 0xdb, 0xe3, 0xbf,
+ 0xbc, 0xa1, 0x34, 0x0f, 0xc6, 0xe2, 0x00, 0x3d, 0x98, 0xa3, 0x7d, 0xab,
+ 0xd4, 0x0e, 0xec, 0xde, 0x4f, 0x97, 0xa9, 0xbb, 0xdd, 0x60, 0x94, 0x24,
+ 0x7b, 0xb3, 0xf5, 0x94,
+ // w
+ 0x02, 0x43, 0x78, 0x9f, 0x54, 0xc1, 0x21, 0x3a, 0x2b, 0x4d, 0x12, 0x65,
+ 0x2f, 0x51, 0x94, 0xc6, 0x34, 0x24, 0xd9, 0x7b, 0x06, 0x3a, 0xc4, 0xf5,
+ 0x56, 0xeb, 0x32, 0xe3, 0xee, 0x7b, 0xad, 0x6b, 0x04, 0x90, 0x86, 0x31,
+ 0x18, 0x2a, 0xa4, 0xcf, 0xa3, 0x90, 0xa5, 0x80, 0x7b, 0xae, 0x3b, 0xb1,
+ 0x77, 0x03, 0xe7, 0x7e, 0xf2, 0xfc, 0x6d, 0x3a, 0xab, 0x8f, 0xbf, 0x95,
+ 0x40, 0xed, 0x08, 0x03, 0x01, 0x05, 0x86, 0xf5, 0x42, 0xea, 0x4d, 0xf7,
+ 0x4f, 0xef, 0x46, 0xdf, 0x8f, 0xe8, 0x2d, 0xbb, 0x5d, 0x0d, 0x2f, 0x4f,
+ 0xf4, 0xd8, 0x31, 0xc6, 0x5a, 0x97, 0x98, 0x44, 0xcf, 0x42, 0x5a, 0xf3,
+ 0x03, 0x5f, 0xb6, 0x38, 0x45, 0x5a, 0x15, 0x1e, 0xb9, 0x54, 0xfa, 0x2c,
+ 0x3f, 0x68, 0x7b, 0x4e, 0x85, 0x35, 0xf3, 0x5b, 0xe5, 0xdc, 0x96, 0x2b,
+ 0x18, 0x84, 0x5e, 0x1e, 0x53, 0xdc, 0x22, 0x23, 0x06, 0x08, 0x91, 0x5a,
+ 0x2d, 0x27, 0xe2, 0x12, 0x69, 0xfa, 0xab, 0x19, 0x7c, 0x47, 0x6b, 0xec,
+ 0xde, 0xc6, 0x25, 0xd4, 0x43, 0xb4, 0x65, 0x23, 0x61, 0x0f, 0x1f, 0x2d,
+ 0xfd, 0xb1, 0x18, 0xb0, 0x04, 0x8e, 0x1a, 0xc5, 0x95, 0x9a, 0x0e, 0x37,
+ 0x7c, 0x5e, 0x95, 0x38, 0xc2, 0xcf, 0xfa, 0x1f, 0xe3, 0x3a, 0x2b, 0x85,
+ 0xa5, 0xfd, 0x6b, 0xc4, 0x1d, 0xfb, 0x47, 0x27, 0xaf, 0xc1, 0x94, 0xcd,
+ // Signature
+ 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71, 0xed, 0x2a,
+ 0x9b, 0x88, 0x99, 0x5b, 0x85, 0x3b, 0xdf, 0xf9, 0x70, 0x2a, 0x6c, 0x06,
+ 0x3b, 0x72, 0x02, 0x32, 0xb9, 0x3a, 0x76, 0xe7, 0xf0, 0x6e, 0x43, 0x67,
+ 0x68, 0x6f, 0x9e, 0x3b, 0xcf, 0xfd, 0x98, 0xcc, 0xae, 0x92, 0xcc, 0x94,
+ 0x23, 0xb6, 0xbd, 0x57, 0xac, 0x06, 0x3c, 0xa1, 0xe5, 0x3e, 0xe9, 0xf5,
+ 0x0e, 0x55, 0xb4, 0xe5,
+ // Epid Version
+ 0x01, 0x00,
+ // Epid type
+ 0x00, 0x0c,
+ // GID
+ 0x00, 0x00, 0x04, 0xd2,
+ // h1
+ 0x00, 0x6c, 0x38, 0x98, 0x41, 0x97, 0xf6, 0xf1, 0xb0, 0x41, 0x57, 0xd4,
+ 0xf9, 0xce, 0xcc, 0x22, 0xce, 0x4f, 0xc8, 0x47, 0xaf, 0x2a, 0x6c, 0xa3,
+ 0x02, 0xf2, 0x74, 0x80, 0xc9, 0x5c, 0x1c, 0xf7, 0x06, 0xed, 0xce, 0xc0,
+ 0x0b, 0x29, 0x73, 0x1c, 0x09, 0x84, 0x4c, 0xcc, 0xff, 0x82, 0x9d, 0x29,
+ 0xe7, 0x88, 0x57, 0xfd, 0xd2, 0x55, 0x41, 0x0f, 0x5e, 0x6e, 0xf5, 0xc4,
+ 0x77, 0xa2, 0x5d, 0xaf,
+ // h2
+ 0x00, 0x50, 0x70, 0xe5, 0x66, 0x92, 0x77, 0x33, 0x82, 0xda, 0xc9, 0x27,
+ 0x7c, 0x16, 0xf8, 0xf2, 0x69, 0x48, 0x2f, 0xf0, 0xdd, 0x8d, 0x9e, 0x27,
+ 0x41, 0xaf, 0xcc, 0xb9, 0x04, 0xf4, 0x77, 0x8c, 0x06, 0x36, 0xee, 0xbd,
+ 0x53, 0x0e, 0x20, 0xd8, 0x9f, 0xd7, 0xb7, 0x41, 0xdd, 0xe0, 0xee, 0xc7,
+ 0xf8, 0xef, 0x91, 0x03, 0xe1, 0xfe, 0x6a, 0xe6, 0x3b, 0x91, 0xb7, 0xaa,
+ 0xc4, 0x64, 0x72, 0x37,
+ // w
+ 0x06, 0xa3, 0x37, 0xa1, 0xfc, 0xe2, 0x3a, 0x99, 0x96, 0xb9, 0x8d, 0xad,
+ 0x07, 0xec, 0xfc, 0x62, 0x39, 0x5c, 0x0c, 0x89, 0xba, 0x06, 0x3a, 0x1c,
+ 0xea, 0x2d, 0xcc, 0xf2, 0x00, 0xaa, 0x08, 0x25, 0x06, 0x82, 0xa0, 0x68,
+ 0x71, 0x4f, 0x5d, 0xbd, 0xc3, 0x80, 0xe6, 0x98, 0xe9, 0x14, 0x10, 0xdc,
+ 0x9c, 0xa6, 0x4e, 0x75, 0x09, 0x0a, 0x45, 0x39, 0x2b, 0xcc, 0x6e, 0x6f,
+ 0x66, 0xad, 0x1a, 0x63, 0x05, 0x9c, 0x6a, 0xeb, 0x7f, 0xd3, 0x16, 0x46,
+ 0x37, 0xc8, 0x5f, 0x1a, 0x34, 0x46, 0x35, 0x92, 0x10, 0x7b, 0x7b, 0xe3,
+ 0x9c, 0x65, 0x59, 0x2d, 0xa8, 0x8a, 0x4b, 0xfb, 0x81, 0x97, 0xf6, 0x25,
+ 0x09, 0xf3, 0x6d, 0xcc, 0x50, 0x63, 0xe0, 0x9d, 0x69, 0x02, 0x0c, 0x52,
+ 0x75, 0x95, 0x30, 0x38, 0x69, 0x1e, 0x8e, 0x6b, 0x52, 0xbf, 0x97, 0x9f,
+ 0x20, 0x02, 0xec, 0xb3, 0x6b, 0x2b, 0xdd, 0xf3, 0x01, 0x11, 0xbb, 0xbe,
+ 0x3b, 0xc9, 0xa0, 0xc3, 0x44, 0xfe, 0x49, 0x53, 0x89, 0x2d, 0x27, 0x40,
+ 0x86, 0x87, 0xea, 0xce, 0x5f, 0x9a, 0xee, 0xc2, 0x15, 0x62, 0xc1, 0x87,
+ 0x0f, 0x3a, 0x78, 0x03, 0x03, 0xd2, 0x8c, 0x24, 0x5a, 0x90, 0xa7, 0xc5,
+ 0x35, 0x4f, 0xab, 0xcd, 0x40, 0xe8, 0x7c, 0xf0, 0xab, 0x96, 0x59, 0x3a,
+ 0x96, 0xe4, 0x4a, 0x73, 0x67, 0x51, 0x1f, 0xad, 0x06, 0x94, 0x40, 0xcf,
+ // Signature
+ 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71, 0xed, 0x2a,
+ 0x9b, 0x88, 0x99, 0x5b, 0x85, 0x3b, 0xdf, 0xf9, 0x70, 0x2a, 0x6c, 0x06,
+ 0x3b, 0x72, 0x02, 0x32, 0xb9, 0x3a, 0x76, 0xe7, 0x4b, 0xba, 0x99, 0x05,
+ 0x14, 0x98, 0x2c, 0x10, 0x5d, 0x25, 0x84, 0x93, 0x92, 0x0c, 0x7c, 0x44,
+ 0x39, 0xb8, 0xd9, 0x65, 0x8a, 0x27, 0x20, 0x31, 0xb8, 0xc8, 0x47, 0xe2,
+ 0xfb, 0x79, 0xa0, 0xa5};
+
+const std::vector<uint8_t> Epid11FileParser::kEmptyPrivRlFile = {
+ // Epid Version
+ 0x01, 0x00,
+ // Epid type
+ 0x00, 0x0d,
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RL Ver
+ 0x00, 0x00, 0x00, 0x00,
+ // n1
+ 0x00, 0x00, 0x00, 0x00,
+ // sig
+ 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71, 0xed, 0x2a,
+ 0x9b, 0x88, 0x99, 0x5b, 0x85, 0x3b, 0xdf, 0xf9, 0x70, 0x2a, 0x6c, 0x06,
+ 0x3b, 0x72, 0x02, 0x32, 0xb9, 0x3a, 0x76, 0xe7, 0x29, 0xa4, 0x10, 0x8f,
+ 0x7d, 0xb4, 0xff, 0xae, 0x6a, 0xce, 0x8d, 0xcd, 0xc6, 0x84, 0x63, 0x9f,
+ 0x89, 0x3d, 0x23, 0x42, 0xf5, 0x37, 0xba, 0xb9, 0x4a, 0xbb, 0x6e, 0xf2,
+ 0xb2, 0x74, 0x8c, 0xcc,
+};
+const std::vector<uint8_t> Epid11FileParser::kEmptyPrivRl = {
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RL Ver
+ 0x00, 0x00, 0x00, 0x00,
+ // n1
+ 0x00, 0x00, 0x00, 0x00};
+
+const std::vector<uint8_t> Epid11FileParser::kShortPrivRlFile = {
+ // Epid Version
+ 0x01, 0x00,
+ // Epid type
+ 0x00, 0x0d,
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RL Ver
+ 0x00, 0x00, 0x00, 0x03,
+ // n1
+ 0x00, 0x00, 0x00, 0x01,
+ // PrivRl
+ 0x00, 0x00, 0x56, 0x1e, 0xb1, 0x91, 0xb6, 0xdf, 0x40, 0xbc, 0xa2, 0xe3,
+ 0xe3, 0x92, 0x33, 0xd1, 0xd7, 0x5c, 0xcc, 0x4c, 0x3a, 0xe7, 0x91, 0x49,
+ 0x73, 0xe2, 0x03, 0xd4, 0x5e, 0x4f, 0x87, 0xad,
+ // Sig
+ 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71, 0xed, 0x2a,
+ 0x9b, 0x88, 0x99, 0x5b, 0x85, 0x3b, 0xdf, 0xf9, 0x70, 0x2a, 0x6c, 0x06,
+ 0x3b, 0x72, 0x02, 0x32, 0xb9, 0x3a, 0x76, 0xe7, 0x60, 0xf3, 0xfa, 0xe8,
+ 0x34, 0x9f, 0x50, 0xac, 0x1b, 0x75, 0xf4, 0x62, 0x41, 0xc4, 0xb7, 0x11,
+ 0x64, 0xef, 0xe1, 0xd4, 0x3c, 0xee, 0xee, 0x86, 0x4c, 0xbb, 0x9a, 0x40,
+ 0x77, 0x0b, 0xb2, 0xec,
+};
+const std::vector<uint8_t> Epid11FileParser::kShortPrivRl = {
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RL Ver
+ 0x00, 0x00, 0x00, 0x03,
+ // n1
+ 0x00, 0x00, 0x00, 0x01,
+ // PrivRl
+ 0x00, 0x00, 0x56, 0x1e, 0xb1, 0x91, 0xb6, 0xdf, 0x40, 0xbc, 0xa2, 0xe3,
+ 0xe3, 0x92, 0x33, 0xd1, 0xd7, 0x5c, 0xcc, 0x4c, 0x3a, 0xe7, 0x91, 0x49,
+ 0x73, 0xe2, 0x03, 0xd4, 0x5e, 0x4f, 0x87, 0xad,
+};
+
+const std::vector<uint8_t> Epid11FileParser::kEmptySigRlFile = {
+ // Epid Version
+ 0x01, 0x00,
+ // Epid type
+ 0x00, 0x0e,
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RL Ver
+ 0x00, 0x00, 0x00, 0x00,
+ // n2
+ 0x00, 0x00, 0x00, 0x00,
+ // Signature
+ 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71, 0xed, 0x2a,
+ 0x9b, 0x88, 0x99, 0x5b, 0x85, 0x3b, 0xdf, 0xf9, 0x70, 0x2a, 0x6c, 0x06,
+ 0x3b, 0x72, 0x02, 0x32, 0xb9, 0x3a, 0x76, 0xe7, 0x94, 0x29, 0xf2, 0x7e,
+ 0x16, 0x19, 0x48, 0xa0, 0xed, 0xb7, 0x61, 0x5e, 0x63, 0x54, 0x87, 0xf4,
+ 0xbb, 0x7f, 0x42, 0x8d, 0x39, 0x63, 0x62, 0x06, 0x69, 0x7b, 0x9d, 0x0b,
+ 0x7e, 0xdf, 0xf2, 0x0d};
+const std::vector<uint8_t> Epid11FileParser::kEmptySigRl = {
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RL Ver
+ 0x00, 0x00, 0x00, 0x00,
+ // n2
+ 0x00, 0x00, 0x00, 0x00};
+
+const std::vector<uint8_t> Epid11FileParser::kShortSigRlFile = {
+ // Epid Version
+ 0x01, 0x00,
+ // Epid type
+ 0x00, 0x0e,
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RL Ver
+ 0x00, 0x00, 0x00, 0x03,
+ // n2
+ 0x00, 0x00, 0x00, 0x03,
+ // bks
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x6e, 0xdf, 0x9f, 0xe3, 0xe0, 0x8d, 0xe4, 0x0b,
+ 0xbb, 0x86, 0x12, 0xd7, 0xc5, 0xd8, 0x14, 0x5e, 0x67, 0xbd, 0x1d, 0xa5,
+ 0x0b, 0xdb, 0xf5, 0x87, 0x36, 0x6c, 0xda, 0x81, 0x2a, 0x8c, 0x2e, 0x78,
+ 0xef, 0x6c, 0x42, 0xb2, 0xcd, 0x40, 0xda, 0xd3, 0x22, 0xf4, 0xd9, 0x7e,
+ 0x34, 0x78, 0x49, 0x41, 0x0d, 0x1e, 0x64, 0xc1, 0x43, 0xa1, 0xb0, 0xe9,
+ 0x6c, 0x45, 0xe2, 0x2d, 0xc3, 0xeb, 0xc8, 0x14, 0x09, 0x0d, 0x6f, 0x82,
+ 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e, 0x5e, 0xae, 0xc0, 0x27,
+ 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6, 0x6f, 0x7f, 0xa3, 0x1a,
+ 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c, 0x97, 0x61, 0xbf, 0x46,
+ 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5, 0xd3, 0xdf, 0xfa, 0x13,
+ 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0, 0x33, 0xec, 0x2a, 0x70,
+ 0x80, 0x85, 0x35, 0x04, 0x7b, 0xfc, 0x0a, 0x6c, 0xb4, 0x10, 0x2d, 0x4a,
+ 0xbe, 0x35, 0x78, 0x41, 0x3a, 0xc6, 0x01, 0x3a, 0x59, 0x21, 0x17, 0x04,
+ 0x60, 0x6a, 0x51, 0x6c, 0x84, 0xde, 0xc3, 0x3b, 0x1e, 0x6a, 0xaf, 0x82,
+ 0x5d, 0x81, 0xe2, 0x44, 0x25, 0x98, 0x89, 0xdb, 0x82, 0x17, 0xe6, 0xb8,
+ 0x9f, 0xfd, 0x03, 0x86, 0x63, 0x8c, 0xe1, 0x93, 0x77, 0x61, 0x3c, 0xc2,
+ 0x75, 0x14, 0xa1, 0xc2, 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53,
+ 0xba, 0x1e, 0x1b, 0x0e, 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09,
+ 0x4f, 0xcd, 0xb6, 0xe6, 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72,
+ 0xfa, 0x85, 0x0f, 0x5c, 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64,
+ 0xda, 0xa9, 0x8e, 0xf5, 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb,
+ 0x0a, 0x9d, 0x02, 0xc0, 0x33, 0xec, 0x2a, 0x70, 0x95, 0x8b, 0x05, 0x1e,
+ 0x8b, 0xa5, 0x21, 0xdd, 0x63, 0xfd, 0x1a, 0x36, 0xb7, 0x42, 0x04, 0x92,
+ 0x10, 0xe6, 0x29, 0x22, 0xc8, 0x97, 0xb1, 0x28, 0x01, 0x45, 0x95, 0xf1,
+ 0x2a, 0xa0, 0x86, 0x41, 0xc4, 0x4c, 0xb6, 0x3b, 0x45, 0x23, 0x6e, 0x8d,
+ 0x6e, 0x07, 0xc7, 0x5b, 0xe5, 0x46, 0xca, 0xd0, 0x68, 0x99, 0xb6, 0x30,
+ 0x7b, 0x70, 0xb0, 0x92, 0x48, 0xc2, 0x89, 0xb6, 0x27, 0x3b, 0x95, 0x89,
+ // Signature
+ 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71, 0xed, 0x2a,
+ 0x9b, 0x88, 0x99, 0x5b, 0x85, 0x3b, 0xdf, 0xf9, 0x70, 0x2a, 0x6c, 0x06,
+ 0x3b, 0x72, 0x02, 0x32, 0xb9, 0x3a, 0x76, 0xe7, 0x1c, 0xab, 0x1f, 0xca,
+ 0x99, 0x74, 0x76, 0x02, 0x4c, 0xa6, 0xca, 0x13, 0xda, 0x9d, 0x74, 0xfa,
+ 0x56, 0x23, 0xf1, 0x86, 0xbe, 0xd4, 0xf2, 0x84, 0x7a, 0xdf, 0xd3, 0x62,
+ 0x4f, 0xc2, 0x0d, 0x84};
+const std::vector<uint8_t> Epid11FileParser::kShortSigRl = {
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RL Ver
+ 0x00, 0x00, 0x00, 0x03,
+ // n2
+ 0x00, 0x00, 0x00, 0x03,
+ // B, K
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x6e, 0xdf, 0x9f, 0xe3, 0xe0, 0x8d, 0xe4, 0x0b,
+ 0xbb, 0x86, 0x12, 0xd7, 0xc5, 0xd8, 0x14, 0x5e, 0x67, 0xbd, 0x1d, 0xa5,
+ 0x0b, 0xdb, 0xf5, 0x87, 0x36, 0x6c, 0xda, 0x81, 0x2a, 0x8c, 0x2e, 0x78,
+ 0xef, 0x6c, 0x42, 0xb2, 0xcd, 0x40, 0xda, 0xd3, 0x22, 0xf4, 0xd9, 0x7e,
+ 0x34, 0x78, 0x49, 0x41, 0x0d, 0x1e, 0x64, 0xc1, 0x43, 0xa1, 0xb0, 0xe9,
+ 0x6c, 0x45, 0xe2, 0x2d, 0xc3, 0xeb, 0xc8, 0x14,
+ // B, K
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x80, 0x85, 0x35, 0x04, 0x7b, 0xfc, 0x0a, 0x6c,
+ 0xb4, 0x10, 0x2d, 0x4a, 0xbe, 0x35, 0x78, 0x41, 0x3a, 0xc6, 0x01, 0x3a,
+ 0x59, 0x21, 0x17, 0x04, 0x60, 0x6a, 0x51, 0x6c, 0x84, 0xde, 0xc3, 0x3b,
+ 0x1e, 0x6a, 0xaf, 0x82, 0x5d, 0x81, 0xe2, 0x44, 0x25, 0x98, 0x89, 0xdb,
+ 0x82, 0x17, 0xe6, 0xb8, 0x9f, 0xfd, 0x03, 0x86, 0x63, 0x8c, 0xe1, 0x93,
+ 0x77, 0x61, 0x3c, 0xc2, 0x75, 0x14, 0xa1, 0xc2,
+ // B, K
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x95, 0x8b, 0x05, 0x1e, 0x8b, 0xa5, 0x21, 0xdd,
+ 0x63, 0xfd, 0x1a, 0x36, 0xb7, 0x42, 0x04, 0x92, 0x10, 0xe6, 0x29, 0x22,
+ 0xc8, 0x97, 0xb1, 0x28, 0x01, 0x45, 0x95, 0xf1, 0x2a, 0xa0, 0x86, 0x41,
+ 0xc4, 0x4c, 0xb6, 0x3b, 0x45, 0x23, 0x6e, 0x8d, 0x6e, 0x07, 0xc7, 0x5b,
+ 0xe5, 0x46, 0xca, 0xd0, 0x68, 0x99, 0xb6, 0x30, 0x7b, 0x70, 0xb0, 0x92,
+ 0x48, 0xc2, 0x89, 0xb6, 0x27, 0x3b, 0x95, 0x89};
+
+const std::vector<uint8_t> Epid11FileParser::kEmptyGroupRlFile = {
+ // Epid version
+ 0x01, 0x00,
+ // Epid type
+ 0x00, 0x0f,
+ // RL ver
+ 0x00, 0x00, 0x00, 0x00,
+ // n3
+ 0x00, 0x00, 0x00, 0x00,
+ // Signature
+ 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71, 0xed, 0x2a,
+ 0x9b, 0x88, 0x99, 0x5b, 0x85, 0x3b, 0xdf, 0xf9, 0x70, 0x2a, 0x6c, 0x06,
+ 0x3b, 0x72, 0x02, 0x32, 0xb9, 0x3a, 0x76, 0xe7, 0xc3, 0x21, 0x99, 0xe1,
+ 0x18, 0x22, 0x4a, 0xd2, 0xa5, 0xe5, 0xbf, 0x4a, 0xd9, 0x83, 0x08, 0x9d,
+ 0x62, 0x71, 0xa1, 0x39, 0x21, 0x49, 0x5d, 0xb2, 0x7a, 0xdb, 0x05, 0x2a,
+ 0xa4, 0xde, 0xb0, 0xac};
+const std::vector<uint8_t> Epid11FileParser::kEmptyGroupRl = {
+ // RL ver
+ 0x00, 0x00, 0x00, 0x00,
+ // n3
+ 0x00, 0x00, 0x00, 0x00};
+
+const std::vector<uint8_t> Epid11FileParser::kShortGroupRlFile = {
+ // Epid version
+ 0x01, 0x00,
+ // Epid type
+ 0x00, 0x0f,
+ // RL ver
+ 0x00, 0x00, 0x00, 0x03,
+ // n3
+ 0x00, 0x00, 0x00, 0x03,
+ // GIDs
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03,
+ // Signature
+ 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71, 0xed, 0x2a,
+ 0x9b, 0x88, 0x99, 0x5b, 0x85, 0x3b, 0xdf, 0xf9, 0x70, 0x2a, 0x6c, 0x06,
+ 0x3b, 0x72, 0x02, 0x32, 0xb9, 0x3a, 0x76, 0xe7, 0xc0, 0xec, 0x90, 0x92,
+ 0xe9, 0xaa, 0x2e, 0x61, 0xca, 0x70, 0x8f, 0x48, 0xd4, 0x7d, 0xe7, 0x82,
+ 0x22, 0x9f, 0x2f, 0x78, 0x5b, 0xfe, 0x56, 0x6e, 0x1a, 0xa1, 0x69, 0x9d,
+ 0xcc, 0xb1, 0xaa, 0x62};
+const std::vector<uint8_t> Epid11FileParser::kShortGroupRl = {
+ // RL ver
+ 0x00, 0x00, 0x00, 0x03,
+ // n3
+ 0x00, 0x00, 0x00, 0x03,
+ // GIDs
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03};
+
+//////////////////////////////////////////////////////////////////////////
+// Epid11ParseGroupPubKeyFile Tests
+TEST_F(Epid11FileParser, GroupPubKeyParseFailsGivenNullParameters) {
+ Epid11GroupPubKey pubkey{};
+ EXPECT_EQ(kEpidBadArgErr, Epid11ParseGroupPubKeyFile(
+ nullptr, this->kGroupPublicKeyFile.size(),
+ &this->kCert, &pubkey));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)this->kGroupPublicKeyFile.data(),
+ this->kGroupPublicKeyFile.size(),
+ nullptr, &pubkey));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)this->kGroupPublicKeyFile.data(),
+ this->kGroupPublicKeyFile.size(),
+ &this->kCert, nullptr));
+}
+
+TEST_F(Epid11FileParser, GroupPubKeyParseFailsGivenUnsupportedCurve) {
+ Epid11GroupPubKey pubkey{};
+ EpidCaCertificate unsupported_curve1(this->kCert);
+ unsupported_curve1.a.data[0] = unsupported_curve1.a.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)this->kGroupPublicKeyFile.data(),
+ this->kGroupPublicKeyFile.size(),
+ &unsupported_curve1, &pubkey));
+ EpidCaCertificate unsupported_curve2(this->kCert);
+ unsupported_curve2.b.data[0] = unsupported_curve2.b.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)this->kGroupPublicKeyFile.data(),
+ this->kGroupPublicKeyFile.size(),
+ &unsupported_curve2, &pubkey));
+ EpidCaCertificate unsupported_curve3(this->kCert);
+ unsupported_curve3.x.data[0] = unsupported_curve3.x.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)this->kGroupPublicKeyFile.data(),
+ this->kGroupPublicKeyFile.size(),
+ &unsupported_curve3, &pubkey));
+ EpidCaCertificate unsupported_curve4(this->kCert);
+ unsupported_curve4.y.data[0] = unsupported_curve4.y.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)this->kGroupPublicKeyFile.data(),
+ this->kGroupPublicKeyFile.size(),
+ &unsupported_curve4, &pubkey));
+ EpidCaCertificate unsupported_curve5(this->kCert);
+ unsupported_curve5.r.data[0] = unsupported_curve5.r.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)this->kGroupPublicKeyFile.data(),
+ this->kGroupPublicKeyFile.size(),
+ &unsupported_curve5, &pubkey));
+ EpidCaCertificate unsupported_curve6(this->kCert);
+ unsupported_curve6.prime.data[0] = unsupported_curve6.prime.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)this->kGroupPublicKeyFile.data(),
+ this->kGroupPublicKeyFile.size(),
+ &unsupported_curve6, &pubkey));
+}
+
+TEST_F(Epid11FileParser, GroupPubKeyParseFailsGivenInvalidKeyInCertificate) {
+ Epid11GroupPubKey pubkey{};
+ EpidCaCertificate invalid_key_qx(this->kCert);
+ invalid_key_qx.pubkey.data[0] = invalid_key_qx.pubkey.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)this->kGroupPublicKeyFile.data(),
+ this->kGroupPublicKeyFile.size(),
+ &invalid_key_qx, &pubkey));
+ EpidCaCertificate invalid_key_qy(this->kCert);
+ invalid_key_qy.pubkey.data[sizeof(invalid_key_qy.pubkey) - 1] =
+ invalid_key_qy.pubkey.data[sizeof(invalid_key_qy.pubkey) - 1] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)this->kGroupPublicKeyFile.data(),
+ this->kGroupPublicKeyFile.size(),
+ &invalid_key_qy, &pubkey));
+ EpidCaCertificate invalid_key_qx_qy(this->kCert);
+ invalid_key_qx_qy.pubkey.data[0] = invalid_key_qx_qy.pubkey.data[0] ^ 0xFF;
+ invalid_key_qx_qy.pubkey.data[sizeof(invalid_key_qx_qy.pubkey) - 1] =
+ invalid_key_qx_qy.pubkey.data[sizeof(invalid_key_qx_qy.pubkey) - 1] ^
+ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)this->kGroupPublicKeyFile.data(),
+ this->kGroupPublicKeyFile.size(),
+ &invalid_key_qx_qy, &pubkey));
+}
+
+TEST_F(Epid11FileParser, RejectsGroupPubKeyFileWithInvalidSize) {
+ Epid11GroupPubKey pubkey{};
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)this->kGroupPublicKeyFile.data(),
+ 0, &this->kCert, &pubkey));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)this->kGroupPublicKeyFile.data(),
+ this->kGroupPublicKeyFile.size() - 1,
+ &this->kCert, &pubkey));
+}
+
+TEST_F(Epid11FileParser, RejectsInvalidGroupPubKeyFileType) {
+ Epid11GroupPubKey pubkey{};
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)this->kShortPrivRlFile.data(),
+ this->kGroupPublicKeyFile.size(),
+ &this->kCert, &pubkey));
+}
+
+TEST_F(Epid11FileParser, RejectsGroupPubKeyFileWithUnsupportedEpidVersion) {
+ Epid11GroupPubKey pubkey{};
+
+ std::vector<uint8_t> unsupported_epidver_file(this->kGroupPublicKeyFile);
+ unsupported_epidver_file[0] = {0x02};
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupPubKeyFile((void*)unsupported_epidver_file.data(),
+ unsupported_epidver_file.size(),
+ &this->kCert, &pubkey));
+}
+
+TEST_F(Epid11FileParser, ParsesValidPubKeyFile) {
+ std::vector<uint8_t> pubkey(sizeof(Epid11GroupPubKey), 0);
+ EXPECT_EQ(kEpidNoErr, Epid11ParseGroupPubKeyFile(
+ (void*)this->kGroupPublicKeyFile.data(),
+ this->kGroupPublicKeyFile.size(), &this->kCert,
+ (Epid11GroupPubKey*)pubkey.data()));
+ EXPECT_EQ(this->kGroupPublicKey, pubkey);
+}
+
+TEST_F(Epid11FileParser, ParsesValidMultiPubKeyFile) {
+ std::vector<uint8_t> pubkey(sizeof(Epid11GroupPubKey), 0);
+ EXPECT_EQ(kEpidNoErr, Epid11ParseGroupPubKeyFile(
+ (void*)this->kGroupMultiPublicKeyFile.data(),
+ this->kGroupMultiPublicKeyFile.size(), &this->kCert,
+ (Epid11GroupPubKey*)pubkey.data()));
+ EXPECT_EQ(this->kGroupPublicKey, pubkey);
+}
+
+TEST_F(Epid11FileParser, RejectsGroupPubKeyFileWithInvalidSignature) {
+ Epid11GroupPubKey pubkey{};
+ std::vector<uint8_t> pubkey_inv_sign(this->kGroupPublicKeyFile);
+ pubkey_inv_sign[pubkey_inv_sign.size() - 1] =
+ pubkey_inv_sign[pubkey_inv_sign.size() - 1] ^ 0xFF;
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11ParseGroupPubKeyFile((void*)pubkey_inv_sign.data(),
+ pubkey_inv_sign.size(), &this->kCert,
+ &pubkey));
+}
+
+//////////////////////////////////////////////////////////////////////////
+// Epid11ParsePrivRlFile Tests
+TEST_F(Epid11FileParser, PrivRlParseProvidesRequiredLenWithNullDest) {
+ size_t rl_len = 0;
+ EXPECT_EQ(kEpidNoErr,
+ Epid11ParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &this->kCert,
+ nullptr, &rl_len));
+ EXPECT_EQ(this->kShortPrivRl.size(), rl_len);
+}
+
+TEST_F(Epid11FileParser, PrivRlParseFailsGivenNullParameters) {
+ size_t rl_len = this->kShortPrivRl.size();
+ std::vector<uint8_t> rl(rl_len);
+
+ // null input buffer
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParsePrivRlFile(nullptr, this->kShortPrivRlFile.size(),
+ &this->kCert, (Epid11PrivRl*)rl.data(), &rl_len));
+ // null kCert
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), nullptr,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+ // null rl_length
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &this->kCert,
+ (Epid11PrivRl*)rl.data(), nullptr));
+ // null rl_length with null dest
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &this->kCert,
+ nullptr, nullptr));
+}
+
+TEST_F(Epid11FileParser, PrivRlParseFailsGivenUnsupportedCurveInCA) {
+ size_t rl_len = this->kShortPrivRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EpidCaCertificate unsupported_curve(kCert);
+ unsupported_curve.a.data[0] = unsupported_curve.a.data[0] ^ 0xFF;
+
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &unsupported_curve,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve2(kCert);
+ unsupported_curve2.b.data[0] = unsupported_curve2.b.data[0] ^ 0xFF;
+
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &unsupported_curve2,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve3(kCert);
+ unsupported_curve3.x.data[0] = unsupported_curve3.x.data[0] ^ 0xFF;
+
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &unsupported_curve3,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve4(kCert);
+ unsupported_curve4.y.data[0] = unsupported_curve4.y.data[0] ^ 0xFF;
+
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &unsupported_curve4,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve5(kCert);
+ unsupported_curve5.r.data[0] = unsupported_curve5.r.data[0] ^ 0xFF;
+
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &unsupported_curve5,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve6(kCert);
+ unsupported_curve6.prime.data[0] = unsupported_curve6.prime.data[0] ^ 0xFF;
+
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &unsupported_curve6,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, PrivRlParseFailsGivenInvalidKeyInCertificate) {
+ size_t rl_len = this->kShortPrivRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EpidCaCertificate invalid_key_qx(kCert);
+ invalid_key_qx.pubkey.data[0] = invalid_key_qx.pubkey.data[0] ^ 0xFF;
+
+ EXPECT_EQ(kEpidBadArgErr, Epid11ParsePrivRlFile(
+ (void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &invalid_key_qx,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+
+ EpidCaCertificate invalid_key_qy(kCert);
+ invalid_key_qy.pubkey.data[sizeof(invalid_key_qy.pubkey) - 1] =
+ invalid_key_qy.pubkey.data[sizeof(invalid_key_qy.pubkey) - 1] ^ 0xFF;
+
+ EXPECT_EQ(kEpidBadArgErr, Epid11ParsePrivRlFile(
+ (void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &invalid_key_qy,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+
+ EpidCaCertificate invalid_key_qx_qy(kCert);
+ invalid_key_qx_qy.pubkey.data[0] = invalid_key_qx_qy.pubkey.data[0] ^ 0xFF;
+ invalid_key_qy.pubkey.data[sizeof(invalid_key_qy.pubkey) - 1] =
+ invalid_key_qy.pubkey.data[sizeof(invalid_key_qy.pubkey) - 1] ^ 0xFF;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &invalid_key_qx_qy,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, PrivRlParseRejectsPrivRlFileWithInvalidSize) {
+ size_t rl_len = this->kEmptyPrivRl.size();
+ std::vector<uint8_t> rl(rl_len);
+
+ EXPECT_EQ(kEpidBadArgErr, Epid11ParsePrivRlFile(
+ (void*)this->kEmptyPrivRlFile.data(),
+ this->kEmptyPrivRlFile.size() + 1, &this->kCert,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+
+ EXPECT_EQ(kEpidBadArgErr, Epid11ParsePrivRlFile(
+ (void*)this->kEmptyPrivRlFile.data(),
+ this->kEmptyPrivRlFile.size() - 1, &this->kCert,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParsePrivRlFile((void*)this->kEmptyPrivRlFile.data(), 0,
+ &this->kCert, (Epid11PrivRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, PrivRlParseRejectsInvalidPrivRlFileType) {
+ size_t rl_len = this->kShortPrivRl.size();
+ std::vector<uint8_t> rl(rl_len);
+
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParsePrivRlFile((void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(), &this->kCert,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, PrivRlRejectsPrivRlFileWithUnsupportedEpidVersion) {
+ size_t rl_len = this->kShortPrivRl.size();
+ std::vector<uint8_t> rl(rl_len);
+
+ std::vector<uint8_t> unsupported_epidver_file(this->kShortPrivRlFile);
+ unsupported_epidver_file[0] = {0x02};
+
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParsePrivRlFile((void*)unsupported_epidver_file.data(),
+ unsupported_epidver_file.size(), &this->kCert,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, PrivRlParseParsesEmptyPrivRl) {
+ size_t rl_len = this->kEmptyPrivRl.size();
+ std::vector<uint8_t> rl(rl_len);
+
+ EXPECT_EQ(kEpidNoErr,
+ Epid11ParsePrivRlFile((void*)this->kEmptyPrivRlFile.data(),
+ this->kEmptyPrivRlFile.size(), &this->kCert,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+ EXPECT_EQ(this->kEmptyPrivRl, rl);
+}
+
+TEST_F(Epid11FileParser, PrivRlParseParsesShortPrivRl) {
+ size_t rl_len = this->kShortPrivRl.size();
+ std::vector<uint8_t> rl(rl_len);
+
+ EXPECT_EQ(kEpidNoErr,
+ Epid11ParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &this->kCert,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+ EXPECT_EQ(this->kShortPrivRl, rl);
+}
+
+TEST_F(Epid11FileParser, PrivRlParseParsesLongPrivRl) {
+ EcdsaSignature signature = {
+ 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71, 0xed,
+ 0x2a, 0x9b, 0x88, 0x99, 0x5b, 0x85, 0x3b, 0xdf, 0xf9, 0x70, 0x2a,
+ 0x6c, 0x06, 0x3b, 0x72, 0x02, 0x32, 0xb9, 0x3a, 0x76, 0xe7, 0x31,
+ 0x02, 0x1e, 0x05, 0xa2, 0x80, 0x99, 0xef, 0xa9, 0xed, 0x69, 0x90,
+ 0x36, 0x83, 0xaf, 0x95, 0xb8, 0x11, 0x5b, 0xb1, 0x83, 0x5f, 0x86,
+ 0x6b, 0x82, 0x17, 0x8f, 0x00, 0x3d, 0x79, 0x25, 0xda,
+ };
+
+ std::vector<uint8_t> long_privrl_file = {
+ // Epid Version
+ 0x01, 0x00,
+ // Epid type
+ 0x00, 0x0d,
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RL Ver
+ 0x00, 0x00, 0x00, 0x03,
+ // n1
+ 0x00, 0x00, 0x00, 0x32,
+ };
+ const std::vector<uint8_t> FToCreateLongRl = {
+ 0x00, 0x00, 0x56, 0x1e, 0xb1, 0x91, 0xb6, 0xdf, 0x40, 0xbc, 0xa2,
+ 0xe3, 0xe3, 0x92, 0x33, 0xd1, 0xd7, 0x5c, 0xcc, 0x4c, 0x3a, 0xe7,
+ 0x91, 0x49, 0x73, 0xe2, 0x03, 0xd4, 0x5e, 0x4f, 0x87, 0xad,
+ };
+ for (int i = 0; i < 50; ++i) {
+ for (auto it : FToCreateLongRl) {
+ long_privrl_file.push_back(it);
+ }
+ }
+ for (auto it : signature.x.data) {
+ long_privrl_file.push_back(it);
+ }
+ for (auto it : signature.y.data) {
+ long_privrl_file.push_back(it);
+ }
+ size_t rl_len = long_privrl_file.size() - 68;
+ std::vector<uint8_t> rl(rl_len);
+
+ EXPECT_EQ(kEpidNoErr,
+ Epid11ParsePrivRlFile((void*)long_privrl_file.data(),
+ long_privrl_file.size(), &this->kCert,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+ EXPECT_EQ(
+ std::vector<uint8_t>(&long_privrl_file[4],
+ &long_privrl_file[long_privrl_file.size() - 64]),
+ rl);
+}
+
+TEST_F(Epid11FileParser, PrivRlRejectsPrivRlFileWithInvalidSignature) {
+ size_t rl_len = this->kShortPrivRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ std::vector<uint8_t> privrl_inv_sign(kShortPrivRlFile);
+ privrl_inv_sign[privrl_inv_sign.size() - 1] =
+ privrl_inv_sign[privrl_inv_sign.size() - 1] ^ 0xFF;
+
+ EXPECT_EQ(
+ kEpidSigInvalid,
+ Epid11ParsePrivRlFile(privrl_inv_sign.data(), privrl_inv_sign.size(),
+ &this->kCert, (Epid11PrivRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, PrivRlRejectsGivenInsufficientOutputBufSize) {
+ size_t rl_len = this->kShortPrivRl.size() - 1;
+ std::vector<uint8_t> rl(rl_len);
+
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &this->kCert,
+ (Epid11PrivRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, PrivRlReturnsProperSizeGivenOversizedPrivRlBuf) {
+ size_t rl_len = this->kShortPrivRl.size() + 1;
+ std::vector<uint8_t> oversized_rl(rl_len);
+
+ EXPECT_EQ(kEpidNoErr,
+ Epid11ParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &this->kCert,
+ (Epid11PrivRl*)oversized_rl.data(), &rl_len));
+ std::vector<uint8_t> rl(oversized_rl.begin(), oversized_rl.end() - 1);
+ EXPECT_EQ(this->kShortPrivRl, rl);
+ EXPECT_EQ(this->kShortPrivRl.size(), rl_len);
+}
+//////////////////////////////////////////////////////////////////////////
+// Epid11ParseSigRlFile Tests
+TEST_F(Epid11FileParser, SigRlParseProvidesRequiredLenWithNullDest) {
+ size_t rl_len = 0;
+ EXPECT_EQ(kEpidNoErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &kCert, nullptr,
+ &rl_len));
+ EXPECT_EQ(rl_len, this->kShortSigRl.size());
+}
+
+TEST_F(Epid11FileParser, SigRlParseFailsGivenNullParameters) {
+ size_t rl_len = this->kShortSigRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseSigRlFile(nullptr, this->kShortSigRlFile.size(), &kCert,
+ (Epid11SigRl*)rl.data(), &rl_len));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), nullptr,
+ (Epid11SigRl*)rl.data(), &rl_len));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &kCert,
+ (Epid11SigRl*)rl.data(), nullptr));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &kCert, nullptr,
+ nullptr));
+}
+
+TEST_F(Epid11FileParser, SigRlParseFailsGivenUnsupportedCurveInCA) {
+ size_t rl_len = this->kShortSigRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EpidCaCertificate unsupported_curve1(kCert);
+ unsupported_curve1.a.data[0] = unsupported_curve1.a.data[0] ^ 0xFF;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &unsupported_curve1,
+ (Epid11SigRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve2(kCert);
+ unsupported_curve2.b.data[0] = unsupported_curve2.b.data[0] ^ 0xFF;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &unsupported_curve2,
+ (Epid11SigRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve3(kCert);
+ unsupported_curve3.x.data[0] = unsupported_curve3.x.data[0] ^ 0xFF;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &unsupported_curve3,
+ (Epid11SigRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve4(kCert);
+ unsupported_curve4.y.data[0] = unsupported_curve4.y.data[0] ^ 0xFF;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &unsupported_curve4,
+ (Epid11SigRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve5(kCert);
+ unsupported_curve5.r.data[0] = unsupported_curve5.r.data[0] ^ 0xFF;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &unsupported_curve5,
+ (Epid11SigRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve6(kCert);
+ unsupported_curve6.prime.data[0] = unsupported_curve6.prime.data[0] ^ 0xFF;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &unsupported_curve6,
+ (Epid11SigRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, SigRlParseFailsGivenInvalidKeyInCertificate) {
+ size_t rl_len = this->kShortSigRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EpidCaCertificate invalid_key_qx(kCert);
+ invalid_key_qx.pubkey.data[0] = invalid_key_qx.pubkey.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &invalid_key_qx,
+ (Epid11SigRl*)rl.data(), &rl_len));
+ EpidCaCertificate invalid_key_qy(kCert);
+ invalid_key_qy.pubkey.data[sizeof(invalid_key_qy.pubkey) - 1] =
+ invalid_key_qy.pubkey.data[sizeof(invalid_key_qy.pubkey) - 1] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &invalid_key_qy,
+ (Epid11SigRl*)rl.data(), &rl_len));
+ EpidCaCertificate invalid_key_qx_qy(kCert);
+ invalid_key_qx_qy.pubkey.data[0] = invalid_key_qx_qy.pubkey.data[0] ^ 0xFF;
+ invalid_key_qx_qy.pubkey.data[sizeof(invalid_key_qx_qy.pubkey) - 1] =
+ invalid_key_qx_qy.pubkey.data[sizeof(invalid_key_qx_qy.pubkey) - 1] ^
+ 0xFF;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &invalid_key_qx_qy,
+ (Epid11SigRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, SigRlParseRejectsSigRlFileWithInvalidSize) {
+ size_t rl_len = this->kEmptySigRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kEmptySigRlFile.data(), 0, &this->kCert,
+ (Epid11SigRl*)rl.data(), &rl_len));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kEmptySigRlFile.data(),
+ this->kEmptySigRlFile.size() - 1, &this->kCert,
+ (Epid11SigRl*)rl.data(), &rl_len));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kEmptySigRlFile.size() + 1, &this->kCert,
+ (Epid11SigRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, SigRlParseRejectsInvalidSigRlFileType) {
+ size_t rl_len = this->kShortPrivRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &this->kCert,
+ (Epid11SigRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, RejectsSigRlFileWithUnsupportedEpidVersion) {
+ size_t rl_len = this->kShortSigRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ std::vector<uint8_t> unsupported_epidver_file(this->kShortSigRlFile);
+ unsupported_epidver_file[0] = {0x02};
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)unsupported_epidver_file.data(),
+ unsupported_epidver_file.size(), &this->kCert,
+ (Epid11SigRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, SigRlParseParsesEmptySigRl) {
+ size_t rl_len = this->kEmptySigRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EXPECT_EQ(kEpidNoErr,
+ Epid11ParseSigRlFile(this->kEmptySigRlFile.data(),
+ this->kEmptySigRlFile.size(), &this->kCert,
+ (Epid11SigRl*)rl.data(), &rl_len));
+ EXPECT_EQ(rl, this->kEmptySigRl);
+}
+
+TEST_F(Epid11FileParser, SigRlParseParsesShortSigRl) {
+ size_t rl_len = this->kShortSigRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EXPECT_EQ(kEpidNoErr,
+ Epid11ParseSigRlFile(this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &this->kCert,
+ (Epid11SigRl*)rl.data(), &rl_len));
+ EXPECT_EQ(rl, this->kShortSigRl);
+}
+
+TEST_F(Epid11FileParser, SigRlParseParsesLongSigRl) {
+ std::vector<uint8_t> bk = {
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x80, 0x85, 0x35, 0x04, 0x7b, 0xfc, 0x0a, 0x6c,
+ 0xb4, 0x10, 0x2d, 0x4a, 0xbe, 0x35, 0x78, 0x41, 0x3a, 0xc6, 0x01, 0x3a,
+ 0x59, 0x21, 0x17, 0x04, 0x60, 0x6a, 0x51, 0x6c, 0x84, 0xde, 0xc3, 0x3b,
+ 0x1e, 0x6a, 0xaf, 0x82, 0x5d, 0x81, 0xe2, 0x44, 0x25, 0x98, 0x89, 0xdb,
+ 0x82, 0x17, 0xe6, 0xb8, 0x9f, 0xfd, 0x03, 0x86, 0x63, 0x8c, 0xe1, 0x93,
+ 0x77, 0x61, 0x3c, 0xc2, 0x75, 0x14, 0xa1, 0xc2};
+ EcdsaSignature signature = {
+ 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71, 0xed,
+ 0x2a, 0x9b, 0x88, 0x99, 0x5b, 0x85, 0x3b, 0xdf, 0xf9, 0x70, 0x2a,
+ 0x6c, 0x06, 0x3b, 0x72, 0x02, 0x32, 0xb9, 0x3a, 0x76, 0xe7, 0x02,
+ 0x23, 0x1d, 0x31, 0x17, 0x88, 0x49, 0x13, 0x47, 0xe7, 0xda, 0xfe,
+ 0x8d, 0x67, 0xba, 0x16, 0x1d, 0x0a, 0xd3, 0x4a, 0x2d, 0xd1, 0xf8,
+ 0x60, 0x21, 0xa5, 0x00, 0x9a, 0x0d, 0x4d, 0xc4, 0xbd};
+ std::vector<uint8_t> long_sigrl_file = {// EPID Version
+ 0x01, 0x00,
+ // Epid type
+ 0x00, 0x0e,
+ // GID
+ 0x00, 0x00, 0x00, 0x7b,
+ // RL ver
+ 0x00, 0x00, 0x00, 0x32,
+ // n2
+ 0x00, 0x00, 0x00, 0x32};
+ for (int i = 0; i < 50; ++i) {
+ for (auto it : bk) {
+ long_sigrl_file.push_back(it);
+ }
+ }
+ for (auto it : signature.x.data) {
+ long_sigrl_file.push_back(it);
+ }
+ for (auto it : signature.y.data) {
+ long_sigrl_file.push_back(it);
+ }
+ size_t rl_len = long_sigrl_file.size() - sizeof(signature) - 4;
+ std::vector<uint8_t> rl(rl_len);
+ EXPECT_EQ(kEpidNoErr, Epid11ParseSigRlFile(
+ long_sigrl_file.data(), long_sigrl_file.size(),
+ &this->kCert, (Epid11SigRl*)rl.data(), &rl_len));
+
+ std::vector<uint8_t> expected_long_sig_rl(std::vector<uint8_t>(
+ &long_sigrl_file[4],
+ &long_sigrl_file[long_sigrl_file.size() - sizeof(signature)]));
+
+ EXPECT_EQ(expected_long_sig_rl, rl);
+}
+
+TEST_F(Epid11FileParser, RejectsSigRlFileWithInvalidSignature) {
+ size_t rl_len = this->kShortSigRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ std::vector<uint8_t> sigrl_inv_sign(kShortSigRlFile);
+ sigrl_inv_sign[sigrl_inv_sign.size() - 1] =
+ sigrl_inv_sign[sigrl_inv_sign.size() - 1] ^ 0xFF;
+ EXPECT_EQ(
+ kEpidSigInvalid,
+ Epid11ParseSigRlFile((void*)sigrl_inv_sign.data(), sigrl_inv_sign.size(),
+ &this->kCert, (Epid11SigRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, RejectsGivenInsufficientOutputBufSize) {
+ size_t rl_len = this->kShortSigRl.size() - 1;
+ std::vector<uint8_t> rl(rl_len);
+
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &this->kCert,
+ (Epid11SigRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, ReturnsProperSizeGivenOversizedSigRlBuf) {
+ size_t rl_len = this->kShortSigRl.size() + 1;
+ std::vector<uint8_t> oversized_rl(rl_len);
+
+ EXPECT_EQ(kEpidNoErr,
+ Epid11ParseSigRlFile((void*)this->kShortSigRlFile.data(),
+ this->kShortSigRlFile.size(), &this->kCert,
+ (Epid11SigRl*)oversized_rl.data(), &rl_len));
+ std::vector<uint8_t> rl(oversized_rl.begin(), oversized_rl.end() - 1);
+ EXPECT_EQ(this->kShortSigRl, rl);
+ EXPECT_EQ(this->kShortSigRl.size(), rl_len);
+}
+//////////////////////////////////////////////////////////////////////////
+// Epid11ParseGroupRlFile Tests
+TEST_F(Epid11FileParser, GroupRlParseProvidesRequiredLenWithNullDest) {
+ size_t rl_len = 0;
+ EXPECT_EQ(kEpidNoErr,
+ Epid11ParseGroupRlFile((void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(), &kCert,
+ nullptr, &rl_len));
+ EXPECT_EQ(this->kShortGroupRl.size(), rl_len);
+}
+
+TEST_F(Epid11FileParser, GroupRlParseFailsGivenNullParameters) {
+ size_t rl_len = this->kShortGroupRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupRlFile(nullptr, this->kShortGroupRlFile.size(),
+ &kCert, (Epid11GroupRl*)rl.data(), &rl_len));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(), nullptr,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(), &kCert,
+ (Epid11GroupRl*)rl.data(), nullptr));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(), &kCert,
+ nullptr, nullptr));
+}
+
+TEST_F(Epid11FileParser, GroupRlParseFailsGivenUnsupportedCurve) {
+ size_t rl_len = this->kShortGroupRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EpidCaCertificate unsupported_curve1(kCert);
+ unsupported_curve1.a.data[0] = unsupported_curve1.a.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(),
+ &unsupported_curve1,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve2(kCert);
+ unsupported_curve2.b.data[0] = unsupported_curve2.b.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(),
+ &unsupported_curve2,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve3(kCert);
+ unsupported_curve3.x.data[0] = unsupported_curve3.x.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(),
+ &unsupported_curve3,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve4(kCert);
+ unsupported_curve4.y.data[0] = unsupported_curve4.y.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(),
+ &unsupported_curve4,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve5(kCert);
+ unsupported_curve5.r.data[0] = unsupported_curve5.r.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(),
+ &unsupported_curve5,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+ EpidCaCertificate unsupported_curve6(kCert);
+ unsupported_curve6.prime.data[0] = unsupported_curve6.prime.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(),
+ &unsupported_curve6,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, GroupRlParseFailsGivenInvalidKeyInCertificate) {
+ size_t rl_len = this->kShortGroupRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EpidCaCertificate invalid_key_qx(kCert);
+ invalid_key_qx.pubkey.data[0] = invalid_key_qx.pubkey.data[0] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr, Epid11ParseGroupRlFile(
+ (void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(), &invalid_key_qx,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+ EpidCaCertificate invalid_key_qy(kCert);
+ invalid_key_qy.pubkey.data[sizeof(invalid_key_qy.pubkey) - 1] =
+ invalid_key_qy.pubkey.data[sizeof(invalid_key_qy.pubkey) - 1] ^ 0xFF;
+ EXPECT_EQ(kEpidBadArgErr, Epid11ParseGroupRlFile(
+ (void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(), &invalid_key_qy,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+ EpidCaCertificate invalid_key_qx_qy(kCert);
+ invalid_key_qx_qy.pubkey.data[0] = invalid_key_qx_qy.pubkey.data[0] ^ 0xFF;
+ invalid_key_qx_qy.pubkey.data[sizeof(invalid_key_qx_qy.pubkey) - 1] =
+ invalid_key_qx_qy.pubkey.data[sizeof(invalid_key_qx_qy.pubkey) - 1] ^
+ 0xFF;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(), &invalid_key_qx_qy,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, RejectsGroupRlFileWithInvalidSize) {
+ size_t rl_len = this->kEmptyGroupRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kEmptyGroupRlFile.data(), 0,
+ &this->kCert, (Epid11GroupRl*)rl.data(), &rl_len));
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kEmptyGroupRlFile.data(),
+ this->kEmptyGroupRlFile.size() - 1, &this->kCert,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kShortGroupRlFile.data(),
+ this->kEmptyGroupRlFile.size() + 1, &this->kCert,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, RejectsInvalidGroupRlFileType) {
+ size_t rl_len = this->kShortPrivRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &this->kCert,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, RejectsGroupRlFileWithUnsupportedEpidVersion) {
+ size_t rl_len = this->kShortGroupRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ std::vector<uint8_t> unsupported_epidver_file(this->kShortGroupRlFile);
+ unsupported_epidver_file[0] = {0x02};
+ EXPECT_EQ(kEpidBadArgErr, Epid11ParseGroupRlFile(
+ (void*)unsupported_epidver_file.data(),
+ unsupported_epidver_file.size(), &this->kCert,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, ParsesEmptyGroupRl) {
+ size_t rl_len = this->kEmptyGroupRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EXPECT_EQ(kEpidNoErr,
+ Epid11ParseGroupRlFile(this->kEmptyGroupRlFile.data(),
+ this->kEmptyGroupRlFile.size(), &this->kCert,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+ EXPECT_EQ(rl, this->kEmptyGroupRl);
+}
+
+TEST_F(Epid11FileParser, ParsesShortGroupRl) {
+ size_t rl_len = this->kShortGroupRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ EXPECT_EQ(kEpidNoErr,
+ Epid11ParseGroupRlFile(this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(), &this->kCert,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+ EXPECT_EQ(rl, this->kShortGroupRl);
+}
+
+TEST_F(Epid11FileParser, ParsesLongGroupRl) {
+ std::vector<uint8_t> gid = {0x00, 0x00, 0x00, 0x01};
+ EcdsaSignature signature = {
+ 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71, 0xed,
+ 0x2a, 0x9b, 0x88, 0x99, 0x5b, 0x85, 0x3b, 0xdf, 0xf9, 0x70, 0x2a,
+ 0x6c, 0x06, 0x3b, 0x72, 0x02, 0x32, 0xb9, 0x3a, 0x76, 0xe7, 0x64,
+ 0x0c, 0xa9, 0x25, 0xb2, 0x50, 0xc8, 0xd7, 0x9d, 0xb8, 0xb4, 0x37,
+ 0x30, 0x90, 0x53, 0x8f, 0x55, 0x50, 0xcf, 0xed, 0x9e, 0xaa, 0x31,
+ 0x4f, 0x7f, 0xb2, 0x27, 0xf9, 0xbb, 0xfa, 0x52, 0x70};
+ std::vector<uint8_t> long_grouprl_file = {
+ /// EPID version
+ 0x01, 0x00,
+ // File type
+ 0x00, 0x0f,
+ // RL ver
+ 0x00, 0x00, 0x00, 0x32,
+ // n3
+ 0x00, 0x00, 0x00, 0x32,
+ };
+ for (int i = 0; i < 50; ++i) {
+ for (auto it : gid) {
+ long_grouprl_file.push_back(it);
+ }
+ gid[3]++;
+ }
+ for (auto it : signature.x.data) {
+ long_grouprl_file.push_back(it);
+ }
+ for (auto it : signature.y.data) {
+ long_grouprl_file.push_back(it);
+ }
+
+ size_t rl_len = long_grouprl_file.size() - sizeof(signature) - 4;
+ std::vector<uint8_t> rl(rl_len);
+ EXPECT_EQ(kEpidNoErr, Epid11ParseGroupRlFile(
+ long_grouprl_file.data(), long_grouprl_file.size(),
+ &this->kCert, (Epid11GroupRl*)rl.data(), &rl_len));
+
+ std::vector<uint8_t> expected_long_gr_rl(std::vector<uint8_t>(
+ &long_grouprl_file[4],
+ &long_grouprl_file[long_grouprl_file.size() - sizeof(signature)]));
+
+ EXPECT_EQ(expected_long_gr_rl, rl);
+}
+
+TEST_F(Epid11FileParser, RejectsGroupRlFileWithInvalidSignature) {
+ size_t rl_len = this->kShortGroupRl.size();
+ std::vector<uint8_t> rl(rl_len);
+ std::vector<uint8_t> grouprl_inv_sign(this->kShortGroupRlFile);
+ grouprl_inv_sign[grouprl_inv_sign.size() - 1] =
+ grouprl_inv_sign[grouprl_inv_sign.size() - 1] ^ 0xFF;
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11ParseGroupRlFile((void*)grouprl_inv_sign.data(),
+ grouprl_inv_sign.size(), &this->kCert,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, GroupRlParseRejectsBufWithInsufficientSize) {
+ size_t rl_len = this->kShortGroupRl.size() - 1;
+ std::vector<uint8_t> rl(rl_len);
+
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11ParseGroupRlFile((void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(), &this->kCert,
+ (Epid11GroupRl*)rl.data(), &rl_len));
+}
+
+TEST_F(Epid11FileParser, ReturnsProperSizeGivenOversizedGroupRlBuf) {
+ size_t rl_len = this->kShortGroupRl.size() + 1;
+ std::vector<uint8_t> oversized_rl(rl_len);
+
+ EXPECT_EQ(kEpidNoErr, Epid11ParseGroupRlFile(
+ (void*)this->kShortGroupRlFile.data(),
+ this->kShortGroupRlFile.size(), &this->kCert,
+ (Epid11GroupRl*)oversized_rl.data(), &rl_len));
+ std::vector<uint8_t> rl(oversized_rl.begin(), oversized_rl.end() - 1);
+ EXPECT_EQ(this->kShortGroupRl, rl);
+ EXPECT_EQ(this->kShortGroupRl.size(), rl_len);
+}
+
+} // namespace
diff --git a/epid/common/Makefile b/epid/common/Makefile
new file mode 100644
index 0000000..d61f5db
--- /dev/null
+++ b/epid/common/Makefile
@@ -0,0 +1,80 @@
+#!/usr/bin/make -f
+
+#define path variables
+IPP_INCLUDE_DIR = ../../ext/ipp/sources/ippcp/src
+GTEST_INCLUDE_DIR = ../../ext
+
+LIB_INSTALL_DIR = $(epidinstalldir)/lib/posix-$(ARCH)/
+TEST_INSTALL_DIR = $(epidinstalldir)/test/
+HEADERS_INSTALL_DIR := $(epidinstalldir)/include/epid/common/
+HEADERS_11_INSTALL_DIR := $(epidinstalldir)/include/epid/common/1.1
+
+API_HEADERS_INSTALL = $(wildcard ./*.h)
+
+API_11_HEADERS_INSTALL = $(wildcard ./1.1/*.h)
+
+COMMON_INCLUDE_DIR = ../../
+COMMON_MATH_INCLUDE_DIR = ./math
+COMMON_SRC = $(wildcard ./src/*.c)
+COMMON_SRC += $(wildcard ./math/src/*.c)
+COMMON_SRC += $(wildcard ./1.1/src/*.c)
+COMMON_OBJ = $(COMMON_SRC:.c=.o)
+COMMON_LIB = ./libcommon.a
+
+COMMON_UTEST_EXE = ./common-utest
+COMMON_UTEST_SRC = $(wildcard ./math/unittests/*.cc)
+COMMON_UTEST_SRC += $(wildcard ./unittests/*.cc)
+COMMON_UTEST_SRC += $(wildcard ./1.1/unittests/*.cc)
+COMMON_UTEST_OBJ = $(COMMON_UTEST_SRC:.cc=.o)
+LIB_COMMON_DIR = .
+LIB_COMMON_TESTHELPER_DIR = ../common-testhelper
+LIB_IPPCP_DIR = ../../ext/ipp/sources/ippcp/src
+LIB_IPPCPEPID_DIR = ../../ext/ipp/sources/ippcpepid/src
+
+#set flags for linker
+LDFLAGS += -L$(GTEST_INCLUDE_DIR)/gtest -L$(LIB_COMMON_TESTHELPER_DIR) \
+ -L$(LIB_COMMON_DIR) -L$(LIB_IPPCPEPID_DIR) -L$(LIB_IPPCP_DIR) \
+ -lgtest -lcommon-testhelper -lcommon -lippcpepid -lippcp
+
+#target part
+$(COMMON_OBJ): %.o: %.c
+ $(CC) $(CFLAGS) -I$(IPP_INCLUDE_DIR) -I$(COMMON_MATH_INCLUDE_DIR) -I$(COMMON_INCLUDE_DIR) -c $^ -o $@
+
+$(COMMON_LIB): $(COMMON_OBJ)
+ $(AR) rc $(COMMON_LIB) $(COMMON_OBJ)
+ ranlib $(COMMON_LIB)
+
+$(COMMON_UTEST_EXE): $(COMMON_UTEST_OBJ)
+ $(CXX) -o $@ $^ $(CXXFLAGS) $(LDFLAGS)
+
+$(COMMON_UTEST_OBJ): %.o: %.cc
+ $(CXX) -o $@ $(CXXFLAGS) -I$(COMMON_INCLUDE_DIR) -I$(GTEST_INCLUDE_DIR) -c $^
+
+build: all
+
+all: $(COMMON_LIB)
+
+install:
+ mkdir -p '$(LIB_INSTALL_DIR)'
+ mkdir -p '$(HEADERS_INSTALL_DIR)'
+ mkdir -p '$(HEADERS_11_INSTALL_DIR)'
+ cp $(COMMON_LIB) '$(LIB_INSTALL_DIR)'
+ cp $(API_HEADERS_INSTALL) '$(HEADERS_INSTALL_DIR)'
+ cp $(API_11_HEADERS_INSTALL) '$(HEADERS_11_INSTALL_DIR)'
+#install tests if they exist
+ifneq (,$(wildcard $(COMMON_UTEST_EXE)))
+ mkdir -p '$(TEST_INSTALL_DIR)'
+ cp $(COMMON_UTEST_EXE) '$(TEST_INSTALL_DIR)'
+endif
+
+check: $(COMMON_UTEST_EXE) run
+
+run:
+ $(COMMON_UTEST_EXE) $(GTEST_FLAGS)
+
+clean:
+ rm -f $(COMMON_OBJ) \
+ $(COMMON_LIB) \
+ $(COMMON_UTEST_OBJ) \
+ $(COMMON_UTEST_EXE) \
+ *.xml
diff --git a/epid/common/common.parts b/epid/common/common.parts
index 10e90e7..3886d8c 100644
--- a/epid/common/common.parts
+++ b/epid/common/common.parts
@@ -16,94 +16,70 @@
Import('*')
env.PartName('common')
-math_headers = Pattern(src_dir='math',
- includes=[
- 'bignum.h',
- 'ecgroup.h',
- 'finitefield.h',
- 'hash.h',
- 'pairing.h',
- 'printutils.h',
- 'ecdsa.h',
- ],
- excludes=[],
- recursive=False).files()
-math_internal_headers = Pattern(src_dir='math',
- includes=[
- 'bignum-internal.h',
- 'ecgroup-internal.h',
- 'finitefield-internal.h',
- 'pairing-internal.h',
- ],
- excludes=[],
- recursive=False).files()
-common_headers = Pattern(src_dir='.',
- includes=[
- 'bitsupplier.h',
- 'errors.h',
- 'file_parser.h',
- 'stdtypes.h',
- 'types.h',
- ],
- excludes=[],
- recursive=False).files()
-epid_common_headers = Pattern(src_dir='.',
- includes=[
- 'commitment.h',
- 'endian_convert.h',
- 'epid2params.h',
- 'grouppubkey.h',
- 'memory.h',
- 'sigrlvalid.h',
- 'stack.h',
- ],
- excludes=[],
- recursive=False).files()
-epid_params = Pattern(src_dir='.',
- includes=[
- 'epid2params_ate.inc',
- ],
- excludes=[],
+api_headers = Pattern(src_dir='.',
+ includes=['*.h'],
recursive=False).files()
-
-src_files = Pattern(src_dir='.',
+src_files = Pattern(src_dir='src',
includes=['*.c'],
- excludes=['*-test.cc'],
recursive=False).files()
+internal_headers = Pattern(src_dir='src',
+ includes=['*.h', '*.inc'],
+ recursive=False).files()
+utest_files = Pattern(src_dir='unittests',
+ includes=['*-test.cc', '*-testhelper.cc'],
+ recursive=False).files()
-math_src_files = Pattern(src_dir='math',
- includes=['*.c'],
- excludes=['*-test.cc'],
- recursive=True).files()
+epid11_headers = Pattern(src_dir='1.1',
+ includes=['*.h'],
+ recursive=False).files()
+epid11_src_files = Pattern(src_dir='1.1/src',
+ includes=['*.c'],
+ recursive=False).files()
+epid11_internal_headers = Pattern(src_dir='1.1/src',
+ includes=['*.h', '*.inc'],
+ recursive=False).files()
+epid11_utest_files = Pattern(src_dir='1.1/unittests',
+ includes=['*-test.cc', '*-testhelper.cc'],
+ recursive=False).files()
-parts_file = Pattern(src_dir='.',
- includes=[
- 'common.parts',
- ],
- excludes=[],
- recursive=False).files()
+math_headers = Pattern(src_dir='math',
+ includes=['*.h'],
+ recursive=False).files()
+math_src_files = Pattern(src_dir='math/src',
+ includes=['*.c'],
+ recursive=False).files()
+math_internal_headers = Pattern(src_dir='math/src',
+ includes=['*.h'],
+ recursive=False).files()
+math_utest_files = Pattern(src_dir='math/unittests',
+ includes=['*-test.cc', '*-testhelper.cc'],
+ recursive=False).files()
-#unit tests
-utest_files = Pattern(src_dir='.',
- includes=['*-test.cc', '*-testhelper.cc'],
- excludes=[],
- recursive=True).files()
+build_files = Pattern(src_dir='.',
+ includes=['*.parts', 'Makefile'],
+ recursive=False).files()
if 'install_package' in env['MODE']:
- env.InstallTopLevel(common_headers, sub_dir='epid/${PART_SHORT_NAME}')
- env.InstallTopLevel(epid_common_headers, sub_dir='epid/${PART_SHORT_NAME}')
- env.InstallTopLevel(src_files, sub_dir='epid/${PART_SHORT_NAME}')
+ env.InstallTopLevel(api_headers, sub_dir='epid/${PART_SHORT_NAME}')
+ env.InstallTopLevel(src_files + internal_headers,
+ sub_dir='epid/${PART_SHORT_NAME}/src')
+ env.InstallTopLevel(utest_files,
+ sub_dir='epid/${PART_SHORT_NAME}/unittests')
- env.InstallTopLevel(math_headers, sub_dir='epid/${PART_SHORT_NAME}/math')
- env.InstallTopLevel(math_src_files, sub_dir='epid/${PART_SHORT_NAME}/math')
- env.InstallTopLevel(math_internal_headers,
- sub_dir='epid/${PART_SHORT_NAME}/math')
- env.InstallTopLevel(utest_files,
+ env.InstallTopLevel(epid11_headers, sub_dir='epid/${PART_SHORT_NAME}/1.1')
+ env.InstallTopLevel(epid11_src_files + epid11_internal_headers,
+ sub_dir='epid/${PART_SHORT_NAME}/1.1/src')
+ env.InstallTopLevel(epid11_utest_files,
+ sub_dir='epid/${PART_SHORT_NAME}/1.1/unittests')
+
+ env.InstallTopLevel(math_headers, sub_dir='epid/${PART_SHORT_NAME}/math')
+ env.InstallTopLevel(math_src_files + math_internal_headers,
+ sub_dir='epid/${PART_SHORT_NAME}/math/src')
+ env.InstallTopLevel(math_utest_files,
sub_dir='epid/${PART_SHORT_NAME}/math/unittests')
- env.InstallTopLevel(epid_params, sub_dir='epid/${PART_SHORT_NAME}')
- env.InstallTopLevel(parts_file, sub_dir='epid/${PART_SHORT_NAME}')
+ env.InstallTopLevel(build_files, sub_dir='epid/${PART_SHORT_NAME}')
else:
env.DependsOn([
Component('ippcp'),
@@ -114,18 +90,21 @@ else:
testenv = env.Clone()
- env.SdkInclude(common_headers, sub_dir='epid/${PART_SHORT_NAME}')
+ env.SdkInclude(api_headers, sub_dir='epid/${PART_SHORT_NAME}')
+ env.SdkInclude(epid11_headers, sub_dir='epid/${PART_SHORT_NAME}/1.1')
- outputs = env.Library('${PART_NAME}', src_files + math_src_files)
+ outputs = env.Library('${PART_NAME}',
+ src_files + epid11_src_files + math_src_files)
env.Sdk(outputs)
if 'install_lib' in env['MODE']:
env.InstallLib(outputs)
- env.InstallInclude(common_headers, sub_dir='${PART_SHORT_NAME}')
+ env.InstallInclude(api_headers, sub_dir='${PART_SHORT_NAME}')
+ env.InstallInclude(epid11_headers, sub_dir='${PART_SHORT_NAME}/1.1')
-#unit tests
+ # unit tests
testenv['UNIT_TEST_TARGET_NAME'] = "${PART_NAME}-${UNIT_TEST_TARGET}"
testenv.UnitTest("utest",
- utest_files,
+ utest_files + math_utest_files + epid11_utest_files,
command_args=[
'--gtest_color=yes',
'--gtest_print_time=1',
diff --git a/epid/common/errors.h b/epid/common/errors.h
index f897381..15a29d0 100644
--- a/epid/common/errors.h
+++ b/epid/common/errors.h
@@ -41,10 +41,10 @@ typedef enum {
kEpidNoErr = 0, //!< no error
kEpidSigValid = 0, //!< Signature is valid
kEpidSigInvalid = 1, //!< Signature is invalid
- kEpidSigRevokedinGroupRl = 2, //!< Signature revoked in GroupRl
- kEpidSigRevokedinPrivRl = 3, //!< Signature revoked in PrivRl
- kEpidSigRevokedinSigRl = 4, //!< Signature revoked in SigRl
- kEpidSigRevokedinVerifierRl = 5, //!< Signature revoked in VerifierRl
+ kEpidSigRevokedInGroupRl = 2, //!< Signature revoked in GroupRl
+ kEpidSigRevokedInPrivRl = 3, //!< Signature revoked in PrivRl
+ kEpidSigRevokedInSigRl = 4, //!< Signature revoked in SigRl
+ kEpidSigRevokedInVerifierRl = 5, //!< Signature revoked in VerifierRl
kEpidErr = -999, //!< unspecified error
kEpidNotImpl, //!< not implemented error
kEpidBadArgErr, //!< incorrect arg to function
@@ -56,6 +56,8 @@ typedef enum {
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
} EpidStatus;
/// Returns string representation of error code.
diff --git a/epid/common/file_parser.h b/epid/common/file_parser.h
index a835531..a920b3b 100644
--- a/epid/common/file_parser.h
+++ b/epid/common/file_parser.h
@@ -36,6 +36,16 @@
@{
*/
+/// Recognized Intel(R) EPID versions
+typedef enum EpidVersion {
+ kEpid1x, ///< Intel(R) EPID version 1.x
+ kEpid2x, ///< Intel(R) EPID version 2.x
+ kNumEpidVersions, ///< Maximum number of EPID versions
+} EpidVersion;
+
+/// Encoding of issuer material Intel(R) EPID versions
+extern const OctStr16 kEpidVersionCode[kNumEpidVersions];
+
/// Recognized Intel(R) EPID file types
typedef enum EpidFileType {
kIssuingCaPubKeyFile, ///< IoT Issuing CA public key file
@@ -73,6 +83,29 @@ typedef struct EpidCaCertificate {
} EpidCaCertificate;
#pragma pack()
+/// Extracts Intel(R) EPID Binary Output File header information
+/*!
+ \param[in] buf
+ Pointer to buffer containing Intel(R) EPID Binary Output File to parse.
+
+ \param[in] len
+ The size of buf in bytes.
+
+ \param[out] epid_version
+ The extracted EPID version or kNumEpidVersions if EPID version is unknown.
+ Pass NULL to not extract.
+
+ \param[out] file_type
+ The extracted EPID file type or kNumFileTypes if file type is unknown.
+ Pass NULL to not extract.
+
+ \returns ::EpidStatus
+
+*/
+EpidStatus EpidParseFileHeader(void const* buf, size_t len,
+ EpidVersion* epid_version,
+ EpidFileType* file_type);
+
/// Extracts group public key from buffer in issuer binary format
/*!
diff --git a/epid/common/math/bignum.h b/epid/common/math/bignum.h
index a3b1bc3..e9e9df4 100644
--- a/epid/common/math/bignum.h
+++ b/epid/common/math/bignum.h
@@ -24,6 +24,7 @@
#include <stddef.h>
#include <stdint.h>
+#include "epid/common/stdtypes.h"
#include "epid/common/errors.h"
#include "epid/common/types.h"
@@ -96,14 +97,14 @@ EpidStatus ReadBigNum(void const* bn_str, size_t strlen, BigNum* bn);
\returns ::EpidStatus
*/
-EpidStatus WriteBigNum(BigNum const* bn, size_t strlen, void const* bn_str);
+EpidStatus WriteBigNum(BigNum const* bn, size_t strlen, void* bn_str);
/// Adds two BigNum values.
/*!
\param[in] a
- The left hand parameter.
+ The first operand to be added.
\param[in] b
- The right hand parameter.
+ The second operand to be added.
\param[out] r
The result of adding a and b.
@@ -114,9 +115,9 @@ EpidStatus BigNumAdd(BigNum const* a, BigNum const* b, BigNum* r);
/// Subtracts two BigNum values.
/*!
\param[in] a
- The left hand parameter.
+ The first operand to use in subtraction.
\param[in] b
- The right hand parameter.
+ The second operand to use in subtraction.
\param[out] r
The result of subtracting a and b.
@@ -127,9 +128,9 @@ EpidStatus BigNumSub(BigNum const* a, BigNum const* b, BigNum* r);
/// Multiplies two BigNum values.
/*!
\param[in] a
- The left hand parameter.
+ The first operand to be multiplied.
\param[in] b
- The right hand parameter.
+ The second operand to be multiplied.
\param[out] r
The result of multiplying a and b.
@@ -137,6 +138,23 @@ EpidStatus BigNumSub(BigNum const* a, BigNum const* b, BigNum* r);
*/
EpidStatus BigNumMul(BigNum const* a, BigNum const* b, BigNum* r);
+/// Divides two BigNum values.
+/*!
+\note Only needed for Intel(R) EPID 1.1 verification.
+
+\param[in] a
+Dividend parameter.
+\param[in] b
+Divisor parameter.
+\param[out] q
+Quotient of result.
+\param[out] r
+Remainder of result.
+
+\returns ::EpidStatus
+*/
+EpidStatus BigNumDiv(BigNum const* a, BigNum const* b, BigNum* q, BigNum* r);
+
/// Computes modular reduction for BigNum value by specified modulus.
/*!
\param[in] a
@@ -150,6 +168,39 @@ Modular reduction result.
*/
EpidStatus BigNumMod(BigNum const* a, BigNum const* b, BigNum* r);
+/// Checks if a BigNum is even.
+/*!
+ \param[in] a
+ The BigNum to check.
+ \param[out] is_even
+ The result of the check.
+
+ \returns ::EpidStatus
+ */
+EpidStatus BigNumIsEven(BigNum const* a, bool* is_even);
+
+/// Checks if a BigNum is zero.
+/*!
+ \param[in] a
+ The BigNum to check.
+ \param[out] is_zero
+ The result of the check.
+
+ \returns ::EpidStatus
+ */
+EpidStatus BigNumIsZero(BigNum const* a, bool* is_zero);
+
+/// Raises 2 to the given power
+/*!
+ \param[in] n
+ The power.
+ \param[out] r
+ The result of 2^n.
+
+ \returns ::EpidStatus
+ */
+EpidStatus BigNumPow2N(unsigned int n, BigNum* r);
+
/*!
@}
*/
diff --git a/epid/common/math/ecdsa.h b/epid/common/math/ecdsa.h
index c5be152..faeca4d 100644
--- a/epid/common/math/ecdsa.h
+++ b/epid/common/math/ecdsa.h
@@ -42,7 +42,7 @@
/*!
Uses Elliptic Curve Digital Signature Algorithm (ECDSA) to verify
- that the SHA256 hash of the input buffer was signed with the
+ 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.
@@ -77,7 +77,7 @@ EpidStatus EcdsaVerifyBuffer(void const* buf, size_t buf_len,
/*!
Uses Elliptic Curve Digital Signature Algorithm (ECDSA) to generate
- a signature of the SHA256 hash of the input buffer with the provided
+ a signature of the SHA-256 hash of the input buffer with the provided
private key.
The operation is over the standard secp256r1 curve.
diff --git a/epid/common/math/ecgroup.h b/epid/common/math/ecgroup.h
index 2212434..3f21d88 100644
--- a/epid/common/math/ecgroup.h
+++ b/epid/common/math/ecgroup.h
@@ -60,9 +60,9 @@ typedef struct EcGroup EcGroup;
\param[in] b
The B value of the elliptic curve.
\param[in] x
- The X co-ordinate of the base point of the elliptic curve.
+ The X-coordinate of the base point of the elliptic curve.
\param[in] y
- The Y co-ordinate of the base point of the elliptic curve.
+ The Y-coordinate of the base point of the elliptic curve.
\param[in] order
The order of the elliptic curve group.
\param[in] cofactor
@@ -167,9 +167,9 @@ EpidStatus WriteEcPoint(EcGroup* g, EcPoint const* p, void* p_str,
\param[in] g
The elliptic curve group.
\param[in] a
- The left hand parameter.
+ The first operand to be multiplied.
\param[in] b
- The right hand parameter.
+ The second operand to be multiplied.
\param[out] r
The result of multiplying a and b.
@@ -258,6 +258,33 @@ EpidStatus EcSscmExp(EcGroup* g, EcPoint const* a, BigNumStr const* b,
EpidStatus EcMultiExp(EcGroup* g, EcPoint const** a, BigNumStr const** b,
size_t m, EcPoint* r);
+/// 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]).
+
+\param[in] g
+The elliptic curve group.
+\param[in] a
+The bases.
+\param[in] b
+The powers. Power must be less than the order of the elliptic curve
+group.
+\param[in] m
+Number of entries in a and b.
+\param[out] r
+The result of raising each a to the corresponding power b and multiplying
+the results.
+
+\returns ::EpidStatus
+
+\see NewEcGroup
+\see NewEcPoint
+*/
+EpidStatus EcMultiExpBn(EcGroup* g, EcPoint const** a, BigNum const** b,
+ size_t m, EcPoint* r);
+
/// Software side-channel mitigated implementation of EcMultiExp.
/*!
Takes a group elements a[0], ... , a[m-1] in G and positive
@@ -331,6 +358,26 @@ EpidStatus EcGetRandom(EcGroup* g, BitSupplier rnd_func, void* rnd_func_param,
EpidStatus EcInGroup(EcGroup* g, void const* p_str, size_t strlen,
bool* in_group);
+/// Hashes an arbitrary message to an Intel(R) EPID 1.1 element in an elliptic
+/// curve group.
+/*!
+\param[in] g
+The elliptic curve group.
+\param[in] msg
+The message.
+\param[in] msg_len
+The size of msg in bytes.
+\param[out] r
+The hashed value.
+
+\returns ::EpidStatus
+
+\see NewEcGroup
+\see NewEcPoint
+*/
+EpidStatus Epid11EcHash(EcGroup* g, void const* msg, size_t msg_len,
+ EcPoint* r);
+
/// Hashes an arbitrary message to an element in an elliptic curve group.
/*!
\param[in] g
diff --git a/epid/common/math/finitefield.h b/epid/common/math/finitefield.h
index 91871da..3754ef3 100644
--- a/epid/common/math/finitefield.h
+++ b/epid/common/math/finitefield.h
@@ -33,7 +33,7 @@
\defgroup FiniteFieldPrimitives finitefield
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
+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
@@ -59,9 +59,9 @@ typedef struct FfElement FfElement;
Use DeleteFiniteField() to free memory.
\param[in] prime
- The order of finite field.
+ The order of the finite field.
\param[out] ff
- The Newly constructed finite field.
+ The newly constructed finite field.
\returns ::EpidStatus
@@ -82,7 +82,7 @@ EpidStatus NewFiniteField(BigNumStr const* prime, FiniteField** ff);
\param[in] degree
The degree of the extension.
\param[out] ff
- The Newly constructed finite field.
+ The newly constructed finite field.
\returns ::EpidStatus
@@ -92,6 +92,32 @@ EpidStatus NewFiniteFieldViaBinomalExtension(FiniteField const* ground_field,
FfElement const* ground_element,
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.
+
+ \param[in] ground_field
+ The ground field.
+ \param[in] irr_polynomial
+ Array with coefficients of the irreducible polynomial.
+ Number of elements must be equal to the degree of the extension.
+ \param[in] degree
+ The degree of the extension.
+ \param[out] ff
+ The newly constructed finite field.
+
+ \returns ::EpidStatus
+
+ \see DeleteFiniteField
+*/
+EpidStatus NewFiniteFieldViaPolynomialExtension(FiniteField const* ground_field,
+ BigNumStr const* irr_polynomial,
+ int degree, FiniteField** ff);
+
/// Frees a previously allocated FiniteField.
/*!
Frees memory pointed to by finite field. Nulls the pointer.
@@ -136,13 +162,13 @@ void DeleteFfElement(FfElement** ff_elem);
/// Deserializes a FfElement from a string.
/*!
\param[in] ff
- The the finite field.
+ The finite field.
\param[in] ff_elem_str
The serialized value.
\param[in] strlen
The size of ff_elem_str in bytes.
\param[out] ff_elem
- the target FfElement.
+ The target FfElement.
\returns ::EpidStatus
@@ -152,6 +178,22 @@ void DeleteFfElement(FfElement** ff_elem);
EpidStatus ReadFfElement(FiniteField* ff, void const* ff_elem_str,
size_t strlen, FfElement* ff_elem);
+/// Initializes an existing FfElement from a BigNum.
+/*!
+ \param[in] ff
+ The finite field. Must be a Prime Field.
+ \param[in] bn
+ The value to read.
+ \param[out] ff_elem
+ The target FfElement.
+
+ \returns ::EpidStatus
+
+ \see NewFfElement
+ \see WriteFfElement
+*/
+EpidStatus InitFfElementFromBn(FiniteField* ff, BigNum* bn, FfElement* ff_elem);
+
/// Serializes a finite field element to a string.
/*!
\param[in] ff
@@ -210,9 +252,9 @@ EpidStatus FfInv(FiniteField* ff, FfElement const* a, FfElement* r);
\param[in] ff
The finite field.
\param[out] a
- The left hand parameter.
+ The first operand to be added.
\param[out] b
- The right hand parameter.
+ The second operand to be added.
\param[out] r
The result of adding a and b.
@@ -221,15 +263,34 @@ EpidStatus FfInv(FiniteField* ff, FfElement const* a, FfElement* r);
EpidStatus FfAdd(FiniteField* ff, FfElement const* a, FfElement const* b,
FfElement* r);
+/// Subtracts two finite field elements.
+/*!
+
+\note Only needed for Intel(R) EPID 1.1 verification.
+
+\param[in] ff
+The finite field.
+\param[out] a
+The first operand to use in subtraction.
+\param[out] b
+The second operand to use in subtraction.
+\param[out] r
+The result of subtracting a and b.
+
+\returns ::EpidStatus
+*/
+EpidStatus FfSub(FiniteField* ff, FfElement const* a, FfElement const* b,
+ FfElement* r);
+
/// Multiplies two finite field elements.
/*!
\param[in] ff
The finite field.
\param[out] a
- The left hand parameter.
+ The first operand to be multplied.
\param[out] b
- The right hand parameter. If ff is an extension field of a field F then
- this parameter may be an element of either ff or F.
+ The 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.
\param[out] r
The result of multiplying a and b.
@@ -300,6 +361,30 @@ EpidStatus FfExp(FiniteField* ff, FfElement const* a, BigNum const* b,
EpidStatus FfMultiExp(FiniteField* ff, FfElement const** a, BigNumStr const** b,
size_t m, FfElement* r);
+/// Multi-exponentiates finite field elements.
+/*!
+ Calculates FfExp(p[0],b[0]) * ... * FfExp(p[m-1],b[m-1]) for m > 1
+
+ \param[in] ff
+ The finite field in which to perform the operation
+ \param[in] a
+ The bases.
+ \param[in] b
+ The powers.
+ \param[in] m
+ Number of entries in a and b.
+ \param[out] r
+ The result of raising each a to the corresponding power b and multiplying
+ the results.
+
+ \returns ::EpidStatus
+
+ \see NewFiniteField
+ \see NewFfElement
+*/
+EpidStatus FfMultiExpBn(FiniteField* ff, FfElement const** a, BigNum const** b,
+ size_t m, FfElement* r);
+
/// Software side-channel mitigated implementation of FfMultiExp.
/*!
Calculates FfExp(p[0],b[0]) * ... * FfExp(p[m-1],b[m-1]) for m > 1
@@ -396,6 +481,26 @@ EpidStatus FfHash(FiniteField* ff, void const* msg, size_t msg_len,
EpidStatus FfGetRandom(FiniteField* ff, BigNumStr const* low_bound,
BitSupplier rnd_func, void* rnd_param, FfElement* r);
+/// Finds a square root of a finite field element.
+/*!
+ This function calculates the square root by the method of false position.
+
+ \param[in] ff
+ The finite field in which to perform the operation
+ \param[in] a
+ The bases.
+ \param[out] r
+ The result of raising each a to the corresponding power b and multiplying
+ the results.
+
+ \retval kEpidMathQuadraticNonResidueError No square root could be found.
+ \returns ::EpidStatus
+
+ \see NewFiniteField
+ \see NewFfElement
+*/
+EpidStatus FfSqrt(FiniteField* ff, FfElement const* a, FfElement* r);
+
/*!
@}
*/
diff --git a/epid/common/math/pairing.h b/epid/common/math/pairing.h
index a5a1325..5aab91a 100644
--- a/epid/common/math/pairing.h
+++ b/epid/common/math/pairing.h
@@ -31,7 +31,7 @@
/*!
\defgroup PairingPrimitives pairing
Provides APIs for defining and using a pairing relationship between two
- Elliptic Curve Groups.
+ elliptic curve groups.
\ingroup EpidMath
@{
@@ -40,9 +40,9 @@
/// A pairing
typedef struct PairingState PairingState;
-/// Constructs a new Pairing State.
+/// Constructs a new pairing state.
/*!
- Allocates memory and creates a new Pairing State for Optimal Ate Pairing.
+ Allocates memory and creates a new pairing state for Optimal Ate Pairing.
Use DeletePairingState() to free memory.
@@ -58,7 +58,7 @@ typedef struct PairingState PairingState;
\param[in] neg
Select the alternate "negate" processing path for Optimal Ate Pairing.
\param[out] ps
- Newly constructed Pairing State.
+ Newly constructed pairing state.
\returns ::EpidStatus
@@ -73,7 +73,7 @@ EpidStatus NewPairingState(EcGroup const* ga, EcGroup const* gb,
Frees memory pointed to by pairing state. Nulls the pointer.
\param[in] ps
- The Pairing state. Can be NULL.
+ The pairing state. Can be NULL.
\see NewPairingState
*/
diff --git a/epid/common/math/printutils.h b/epid/common/math/printutils.h
index 463f465..6f21b09 100644
--- a/epid/common/math/printutils.h
+++ b/epid/common/math/printutils.h
@@ -39,6 +39,13 @@
@{
*/
+/// Print format
+typedef enum {
+ kPrintUtilUnannotated = 0, //!< Unannotated output format
+ kPrintUtilAnnotated = 1, //!< Annotated output format
+ kPrintUtilFormatCount = 2, //!< Count of print formats.
+} PrintUtilFormat;
+
#if !defined(EPID_ENABLE_DEBUG_PRINT)
/// Do not print bignum if EPID_ENABLE_DEBUG_PRINT is undefined
@@ -79,12 +86,6 @@
#else
-/// Print format
-typedef enum {
- kPrintUtilUnannotated = 0, //!< Unannotated output format
- kPrintUtilAnnotated = 1, //!< Annotated output format
-} PrintUtilFormat;
-
/// Prints BigNum
/*!
Macro EPID_ENABLE_DEBUG_PRINT needs to be defined
diff --git a/epid/common/math/bignum-internal.h b/epid/common/math/src/bignum-internal.h
index bbd5d98..e30b6f8 100644
--- a/epid/common/math/bignum-internal.h
+++ b/epid/common/math/src/bignum-internal.h
@@ -19,11 +19,12 @@
* \brief Big number private interface.
*/
-#ifndef EPID_COMMON_MATH_BIGNUM_INTERNAL_H_
-#define EPID_COMMON_MATH_BIGNUM_INTERNAL_H_
+#ifndef EPID_COMMON_MATH_SRC_BIGNUM_INTERNAL_H_
+#define EPID_COMMON_MATH_SRC_BIGNUM_INTERNAL_H_
#include "ext/ipp/include/ippcpepid.h"
#include "epid/common/stdtypes.h"
+#include "epid/common/errors.h"
/// Big Number
struct BigNum {
@@ -49,12 +50,34 @@ Length of octet string, should be multiple of 4
\returns length of big number unsigned in uint32_t chunks
\returns -1 in case of any error
*/
-#ifdef __cplusplus
-extern "C" {
-#endif
int OctStr2Bnu(uint32_t* bnu_ptr, void const* octstr_ptr, int octstr_len);
-#ifdef __cplusplus
-}
-#endif
-#endif // EPID_COMMON_MATH_BIGNUM_INTERNAL_H_
+/// Get octet string size in bits
+/*!
+\param[in] octstr_ptr
+Input octet string.
+\param[in] octstr_len
+Length of octet string in bytes.
+
+\returns bit size of big number value from octet string
+*/
+size_t OctStrBitSize(uint8_t const* octstr_ptr, size_t octstr_len);
+
+/// Initializes a BigNum from a BNU.
+/*!
+ \param[in] bnu
+ The desired value as a bnu.
+ \param[in] bnu_len
+ The size of bnu_str in 32 bit words.
+ \param[out] bn
+ The target BigNum.
+
+ \note A BNU is a big integer represented as array of 4 byte words written in
+ little endian order
+
+ \returns ::EpidStatus
+*/
+EpidStatus InitBigNumFromBnu(uint32_t const* bnu, size_t bnu_len,
+ struct BigNum* bn);
+
+#endif // EPID_COMMON_MATH_SRC_BIGNUM_INTERNAL_H_
diff --git a/epid/common/math/bignum.c b/epid/common/math/src/bignum.c
index 996fe2c..5ab4fdb 100644
--- a/epid/common/math/bignum.c
+++ b/epid/common/math/src/bignum.c
@@ -19,8 +19,8 @@
* \brief Big number implementation.
*/
#include "epid/common/math/bignum.h"
-#include "epid/common/math/bignum-internal.h"
-#include "epid/common/memory.h"
+#include "epid/common/math/src/bignum-internal.h"
+#include "epid/common/src/memory.h"
#include "ext/ipp/include/ippcp.h"
EpidStatus NewBigNum(size_t data_size_bytes, BigNum** bignum) {
@@ -139,7 +139,45 @@ EpidStatus ReadBigNum(void const* bn_str, size_t strlen, BigNum* bn) {
return kEpidNoErr;
}
-EpidStatus WriteBigNum(BigNum const* bn, size_t strlen, void const* bn_str) {
+/// Initializes a BigNum from a BNU.
+/*!
+ \param[in] bnu
+ The desired value as a bnu.
+ \param[in] bnu_len
+ The size of bnu_str in 32 bit words.
+ \param[out] bn
+ The target BigNum.
+
+ \returns ::EpidStatus
+
+ \note A BNU is a big integer represented as array of 4 byte words written in
+ little endian order
+
+ \note This is re-documented here because doxygen does not pull in the
+ internal headers
+*/
+EpidStatus InitBigNumFromBnu(uint32_t const* bnu, size_t bnu_len,
+ struct BigNum* bn) {
+ IppStatus sts;
+ if (!bn || !bnu) return kEpidBadArgErr;
+
+ if (!bn->ipp_bn) return kEpidBadArgErr;
+
+ if (INT_MAX < bnu_len || bnu_len <= 0) return kEpidBadArgErr;
+
+ sts = ippsSet_BN(IppsBigNumPOS, (int)bnu_len, bnu, bn->ipp_bn);
+ if (sts != ippStsNoErr) {
+ if (ippStsContextMatchErr == sts || ippStsSizeErr == sts ||
+ ippStsLengthErr == sts || ippStsOutOfRangeErr == sts)
+ return kEpidBadArgErr;
+ else
+ return kEpidMathErr;
+ }
+
+ return kEpidNoErr;
+}
+
+EpidStatus WriteBigNum(BigNum const* bn, size_t strlen, void* bn_str) {
IppStatus sts;
int ipp_strlen = (int)strlen;
if (!bn || !bn_str) return kEpidBadArgErr;
@@ -179,6 +217,35 @@ int OctStr2Bnu(uint32_t* bnu_ptr, void const* octstr_ptr, int octstr_len) {
return bnusize ? bnusize : -1;
}
+/// Get octet string size in bits
+size_t OctStrBitSize(uint8_t const* octstr_ptr, size_t octstr_len) {
+ uint8_t byte;
+ size_t bitsize = 0;
+
+ // find highest non zero byte
+ size_t i = 0;
+ while (i < octstr_len && !octstr_ptr[i]) i++;
+ if (i == octstr_len) return 0;
+ byte = octstr_ptr[i];
+
+ // refine bit size
+ if (0 == byte) return 0;
+ bitsize = (octstr_len - i) << 3;
+ if (0 == (byte & 0xF0)) {
+ bitsize -= 4;
+ byte <<= 4;
+ }
+ if (0 == (byte & 0xC0)) {
+ bitsize -= 2;
+ byte <<= 2;
+ }
+ if (0 == (byte & 0x80)) {
+ bitsize--;
+ }
+
+ return bitsize;
+}
+
EpidStatus BigNumAdd(BigNum const* a, BigNum const* b, BigNum* r) {
IppStatus sts;
@@ -245,6 +312,28 @@ EpidStatus BigNumMul(BigNum const* a, BigNum const* b, BigNum* r) {
return kEpidNoErr;
}
+EpidStatus BigNumDiv(BigNum const* a, BigNum const* b, BigNum* q, BigNum* r) {
+ IppStatus sts;
+
+ if (!a || !b || !q || !r) return kEpidBadArgErr;
+
+ if (!a->ipp_bn || !b->ipp_bn || !q->ipp_bn || !r->ipp_bn)
+ return kEpidBadArgErr;
+
+ sts = ippsDiv_BN(a->ipp_bn, b->ipp_bn, q->ipp_bn, r->ipp_bn);
+ if (ippStsNoErr != sts) {
+ if (ippStsContextMatchErr == sts || ippStsRangeErr == sts ||
+ ippStsLengthErr == sts || ippStsOutOfRangeErr == sts ||
+ ippStsDivByZeroErr == sts) {
+ return kEpidBadArgErr;
+ } else {
+ return kEpidMathErr;
+ }
+ }
+
+ return kEpidNoErr;
+}
+
EpidStatus BigNumMod(BigNum const* a, BigNum const* b, BigNum* r) {
IppStatus sts;
@@ -264,3 +353,83 @@ EpidStatus BigNumMod(BigNum const* a, BigNum const* b, BigNum* r) {
return kEpidNoErr;
}
+
+EpidStatus BigNumIsEven(BigNum const* a, bool* is_even) {
+ IppStatus sts = ippStsNoErr;
+ IppsBigNumSGN sgn;
+ int bit_size;
+ Ipp32u* data;
+ // Check required parameters
+ if (!a || !is_even) {
+ return kEpidBadArgErr;
+ }
+ if (!a->ipp_bn) {
+ return kEpidBadArgErr;
+ }
+ sts = ippsRef_BN(&sgn, &bit_size, &data, a->ipp_bn);
+ if (ippStsNoErr != sts) {
+ return kEpidMathErr;
+ }
+ *is_even = !(data[0] & 1);
+ return kEpidNoErr;
+}
+
+EpidStatus BigNumIsZero(BigNum const* a, bool* is_zero) {
+ IppStatus sts = ippStsNoErr;
+ Ipp32u sign = 0;
+ // Check required parameters
+ if (!a || !is_zero) {
+ return kEpidBadArgErr;
+ }
+ if (!a->ipp_bn) {
+ return kEpidBadArgErr;
+ }
+ sts = ippsCmpZero_BN(a->ipp_bn, &sign);
+ if (ippStsNoErr != sts) {
+ return kEpidMathErr;
+ }
+ *is_zero = (IS_ZERO == sign);
+ return kEpidNoErr;
+}
+
+EpidStatus BigNumPow2N(unsigned int n, BigNum* r) {
+ EpidStatus result = kEpidErr;
+ Ipp8u two_str = 2;
+ Ipp8u one_str = 1;
+ BigNum* two = NULL;
+ do {
+ if (n == 0) {
+ result = ReadBigNum(&one_str, sizeof(one_str), r);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ } else {
+ result = NewBigNum(sizeof(BigNumStr), &two);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = ReadBigNum(&two_str, sizeof(two_str), two);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = ReadBigNum(&two_str, sizeof(two_str), r);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ while (n > 1) {
+ result = BigNumMul(r, two, r);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ n -= 1;
+ }
+ if (kEpidNoErr != result) {
+ break;
+ }
+ }
+ result = kEpidNoErr;
+ } while (0);
+ DeleteBigNum(&two);
+ return result;
+}
diff --git a/epid/common/math/ecdsa_sign.c b/epid/common/math/src/ecdsa_sign.c
index 37f2754..fffaab0 100644
--- a/epid/common/math/ecdsa_sign.c
+++ b/epid/common/math/src/ecdsa_sign.c
@@ -21,9 +21,9 @@
#include "epid/common/math/ecdsa.h"
#include "epid/common/math/bignum.h"
-#include "epid/common/math/bignum-internal.h"
+#include "epid/common/math/src/bignum-internal.h"
#include "epid/common/math/ecgroup.h"
-#include "epid/common/memory.h"
+#include "epid/common/src/memory.h"
#include "ext/ipp/include/ippcp.h"
/// The number of attempts to generate ephemeral key pair
diff --git a/epid/common/math/ecdsa_verify.c b/epid/common/math/src/ecdsa_verify.c
index 1b50811..cf3c7c4 100644
--- a/epid/common/math/ecdsa_verify.c
+++ b/epid/common/math/src/ecdsa_verify.c
@@ -22,8 +22,8 @@
#include "epid/common/math/ecdsa.h"
#include "epid/common/math/bignum.h"
-#include "epid/common/math/bignum-internal.h"
-#include "epid/common/memory.h"
+#include "epid/common/math/src/bignum-internal.h"
+#include "epid/common/src/memory.h"
#include "ext/ipp/include/ippcp.h"
/// Handle Ipp Errors with Break
diff --git a/epid/common/math/ecgroup-internal.h b/epid/common/math/src/ecgroup-internal.h
index 23c011f..3e99867 100644
--- a/epid/common/math/ecgroup-internal.h
+++ b/epid/common/math/src/ecgroup-internal.h
@@ -19,8 +19,8 @@
* \brief Elliptic curve group private interface.
*/
-#ifndef EPID_COMMON_MATH_ECGROUP_INTERNAL_H_
-#define EPID_COMMON_MATH_ECGROUP_INTERNAL_H_
+#ifndef EPID_COMMON_MATH_SRC_ECGROUP_INTERNAL_H_
+#define EPID_COMMON_MATH_SRC_ECGROUP_INTERNAL_H_
#include "ext/ipp/include/ippcpepid.h"
@@ -41,4 +41,4 @@ struct EcPoint {
/// Information about finite field element of elliptic curve group created
IppsGFpInfo info;
};
-#endif // EPID_COMMON_MATH_ECGROUP_INTERNAL_H_
+#endif // EPID_COMMON_MATH_SRC_ECGROUP_INTERNAL_H_
diff --git a/epid/common/math/ecgroup.c b/epid/common/math/src/ecgroup.c
index 42b0278..2629bd6 100644
--- a/epid/common/math/ecgroup.c
+++ b/epid/common/math/src/ecgroup.c
@@ -20,13 +20,34 @@
*/
#include <string.h>
-#include "epid/common/math/bignum-internal.h"
-#include "epid/common/math/ecgroup-internal.h"
+#include "epid/common/math/src/bignum-internal.h"
+#include "epid/common/math/src/ecgroup-internal.h"
#include "epid/common/math/ecgroup.h"
-#include "epid/common/math/finitefield-internal.h"
-#include "epid/common/memory.h"
+#include "epid/common/math/src/finitefield-internal.h"
+#include "epid/common/math/hash.h"
+#include "epid/common/src/memory.h"
+#include "epid/common/src/endian_convert.h"
#include "ext/ipp/include/ippcp.h"
#include "ext/ipp/include/ippcpepid.h"
+#include "epid/common/1.1/types.h"
+
+/// Handle SDK Error with Break
+#define BREAK_ON_EPID_ERROR(ret) \
+ if (kEpidNoErr != (ret)) { \
+ break; \
+ } /// Handle Ipp Errors with Break
+#define BREAK_ON_IPP_ERROR(sts, ret) \
+ { \
+ IppStatus temp_sts = (sts); \
+ if (ippStsNoErr != temp_sts) { \
+ if (ippStsContextMatchErr == temp_sts) { \
+ (ret) = kEpidMathErr; \
+ } else { \
+ (ret) = kEpidBadArgErr; \
+ } \
+ break; \
+ } \
+ }
EpidStatus NewEcGroup(FiniteField const* ff, FfElement const* a,
FfElement const* b, FfElement const* x,
@@ -673,6 +694,96 @@ EpidStatus EcMultiExp(EcGroup* g, EcPoint const** a, BigNumStr const** b,
return result;
}
+EpidStatus EcMultiExpBn(EcGroup* g, EcPoint const** a, BigNum const** b,
+ size_t m, EcPoint* r) {
+ EpidStatus result = kEpidErr;
+ EcPoint* ecp_t = NULL;
+ int i = 0;
+ int ii = 0;
+ int ipp_m = 0;
+
+ if (!g || !a || !b || !r) {
+ return kEpidBadArgErr;
+ }
+ if (!g->ipp_ec || m <= 0) {
+ return kEpidBadArgErr;
+ }
+ // because we use ipp function with number of items parameter
+ // defined as "int" we need to verify that input length
+ // do not exceed INT_MAX to avoid overflow
+ if (m > INT_MAX) {
+ return kEpidBadArgErr;
+ }
+ ipp_m = (int)m;
+ // Verify that ec points are not NULL
+ for (i = 0; i < ipp_m; i++) {
+ if (!a[i]) {
+ return kEpidBadArgErr;
+ }
+ if (!a[i]->ipp_ec_pt) {
+ return kEpidBadArgErr;
+ }
+ if (!b[i]) {
+ return kEpidBadArgErr;
+ }
+ if (!b[i]->ipp_bn) {
+ return kEpidBadArgErr;
+ }
+ if (g->info.elementLen != a[i]->info.elementLen) {
+ return kEpidBadArgErr;
+ }
+ for (ii = i + 1; ii < ipp_m; ii++) {
+ if (a[i]->info.elementLen != a[ii]->info.elementLen) {
+ return kEpidBadArgErr;
+ }
+ }
+ }
+ if (g->info.elementLen != r->info.elementLen) {
+ return kEpidBadArgErr;
+ }
+
+ do {
+ IppStatus sts = ippStsNoErr;
+
+ // Create temporal EcPoint element
+ result = NewEcPoint(g, &ecp_t);
+ if (kEpidNoErr != result) break;
+
+ for (i = 0; i < ipp_m; i++) {
+ sts = ippsGFpECMulPoint(a[i]->ipp_ec_pt, b[i]->ipp_bn, ecp_t->ipp_ec_pt,
+ g->ipp_ec, g->scratch_buffer);
+ if (ippStsNoErr != sts) {
+ if (ippStsContextMatchErr == sts || ippStsRangeErr == sts ||
+ ippStsOutOfRangeErr == sts)
+ result = kEpidBadArgErr;
+ else
+ result = kEpidMathErr;
+ break;
+ }
+ if (1 == m) {
+ sts = ippsGFpECCpyPoint(ecp_t->ipp_ec_pt, r->ipp_ec_pt, g->ipp_ec);
+ if (ippStsNoErr != sts) {
+ result = kEpidMathErr;
+ break;
+ }
+ } else {
+ sts = ippsGFpECAddPoint(ecp_t->ipp_ec_pt, r->ipp_ec_pt, r->ipp_ec_pt,
+ g->ipp_ec);
+ if (ippStsNoErr != sts) {
+ result = kEpidMathErr;
+ break;
+ }
+ }
+ }
+ if (kEpidNoErr != result) break;
+
+ result = kEpidNoErr;
+ } while (0);
+ DeleteEcPoint(&ecp_t);
+
+ return result;
+}
+
EpidStatus EcSscmMultiExp(EcGroup* g, EcPoint const** a, BigNumStr const** b,
size_t m, EcPoint* r) {
// call EcMultiExp directly because its implementation is side channel
@@ -787,16 +898,238 @@ EpidStatus EcInGroup(EcGroup* g, void const* p_str, size_t strlen,
/// The number of attempts to hash a message to an element
#define EPID_ECHASH_WATCHDOG (50)
+#pragma pack(1)
+/// 336 bit octet string
+typedef struct OctStr336 {
+ unsigned char data[336 / CHAR_BIT]; ///< 336 bit data
+} OctStr336;
+#pragma pack()
+
+/*!
+Returns the first bit and the next 336 bits of str in octet string.
+
+\param[in] str hash string
+\param[in] str_len hash string lengh in bytes
+\param[out] first_bit first bit of str
+\param[out] t pointer to the first 336 bits of input str after the first bit
+\param[in] t_len length of t octet string
+
+\returns ::EpidStatus
+*/
+static EpidStatus SplitHashBits(void const* str, size_t str_len,
+ uint32_t* first_bit, OctStr336* t) {
+ // this is 336bits /8 bits per byte = 42 bytes
+ OctStr336 next336 = {0};
+ size_t i = 0;
+ if (!str || !first_bit || !t) return kEpidBadArgErr;
+ if (str_len < sizeof(next336) + 1) {
+ // we need at least 337 bits!
+ return kEpidBadArgErr;
+ }
+
+ for (i = 0; i < sizeof(next336); i++) {
+ // This is not overflowing since str length was assured to
+ // be at least one byte greater than needed for 336 bits. We are
+ // carrying in the first bit of that byte.
+ uint8_t carry = ((((uint8_t const*)str)[i + 1] & 0x80) >> 7);
+ next336.data[i] = (((((uint8_t const*)str)[i] << 1) & 0xFF) | carry) & 0xFF;
+ }
+ *first_bit = ((((uint8_t const*)str)[0] & 0x80) >> 7);
+ *t = next336;
+ return kEpidNoErr;
+}
+
+EpidStatus Epid11EcHash(EcGroup* g, void const* msg, size_t msg_len,
+ EcPoint* r) {
+ EpidStatus result = kEpidErr;
+
+#pragma pack(1)
+ struct {
+ uint32_t msg_len;
+ uint8_t msg[1];
+ }* hash_buf = NULL;
+#pragma pack()
+ size_t hash_buf_size = 0;
+
+ FfElement* a = NULL;
+ FfElement* b = NULL;
+
+ FfElement* rx = NULL;
+ FfElement* t1 = NULL;
+ FfElement* t2 = NULL;
+
+ BigNum* q = NULL;
+ BigNum* t_bn = NULL;
+ BigNum* h_bn = NULL;
+
+ FiniteField ff = {0};
+
+ // check parameters
+ if ((!msg && msg_len > 0) || !r || !g) {
+ return kEpidBadArgErr;
+ }
+ if (!g->ipp_ec || !r->ipp_ec_pt) {
+ return kEpidBadArgErr;
+ }
+ if (g->info.elementLen != r->info.elementLen) {
+ return kEpidBadArgErr;
+ }
+
+ // mitigate hash_buf_size and msg_len overflow
+ if (INT_MAX - sizeof(uint32_t) < msg_len) {
+ return kEpidBadArgErr;
+ }
+
+ do {
+ IppStatus sts;
+ uint32_t i = 0;
+ uint32_t ip1 = 0;
+ uint32_t high_bit = 0;
+
+ IppsGFpState* ipp_ff = NULL;
+ uint32_t const* h = NULL; // cofactor
+ int h_len = 0;
+
+ int sqrt_loop_count = 2 * EPID_ECHASH_WATCHDOG;
+ Sha256Digest message_digest[2] = {0};
+ OctStr336 t = {0};
+
+ hash_buf_size = sizeof(*hash_buf) - sizeof(hash_buf->msg) + msg_len;
+ hash_buf = SAFE_ALLOC(hash_buf_size);
+ if (!hash_buf) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+
+ sts = ippsGFpECGet(g->ipp_ec, (const IppsGFpState**)&ipp_ff, 0, 0, 0, 0, 0,
+ 0, &h, &h_len);
+ BREAK_ON_IPP_ERROR(sts, result);
+ result = InitFiniteFieldFromIpp(ipp_ff, &ff);
+ BREAK_ON_EPID_ERROR(result);
+
+ result = NewFfElement(&ff, &a);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ff, &b);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ff, &rx);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ff, &t1);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ff, &t2);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewBigNum(sizeof(t), &t_bn);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewBigNum(h_len, &h_bn);
+ BREAK_ON_EPID_ERROR(result);
+
+ sts = ippsGFpECGet(g->ipp_ec, 0, a->ipp_ff_elem, b->ipp_ff_elem, 0, 0, 0, 0,
+ 0, 0);
+ BREAK_ON_IPP_ERROR(sts, result);
+
+ result = InitBigNumFromBnu(h, h_len, h_bn);
+ BREAK_ON_EPID_ERROR(result);
+
+ // compute H = hash (i || m) || Hash (i+1 || m) where (i =ipp32u)
+ // copy variable length message to the buffer to hash
+ if (0 != memcpy_S(hash_buf->msg,
+ hash_buf_size - sizeof(*hash_buf) + sizeof(hash_buf->msg),
+ msg, msg_len)) {
+ result = kEpidErr;
+ break;
+ }
+
+ do {
+ result = kEpidErr;
+
+ // set hash (i || m) portion
+ hash_buf->msg_len = ntohl(i);
+ result = Sha256MessageDigest(hash_buf, hash_buf_size, &message_digest[0]);
+ BREAK_ON_EPID_ERROR(result);
+ // set hash (i+1 || m) portion
+ ip1 = i + 1;
+ hash_buf->msg_len = ntohl(ip1);
+ result = Sha256MessageDigest(hash_buf, hash_buf_size, &message_digest[1]);
+ BREAK_ON_EPID_ERROR(result);
+ // let b = first bit of H
+ // t = next 336bits of H (336 = length(q) + slen)
+ result =
+ SplitHashBits(message_digest, sizeof(message_digest), &high_bit, &t);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadBigNum(&t, sizeof(t), t_bn);
+ BREAK_ON_EPID_ERROR(result);
+ // compute rx = t mod q (aka prime field based on q)
+ result = InitFfElementFromBn(&ff, t_bn, rx);
+ BREAK_ON_EPID_ERROR(result);
+
+ // t1 = (rx^3 + a*rx + b) mod q
+ result = FfMul(&ff, rx, rx, t1);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ff, t1, rx, t1);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ff, a, rx, t2);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfAdd(&ff, t1, t2, t1);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfAdd(&ff, t1, b, t1);
+ BREAK_ON_EPID_ERROR(result);
+
+ // t2 = &ff.sqrt(t1)
+ result = FfSqrt(&ff, t1, t2);
+ if (kEpidMathQuadraticNonResidueError == result) {
+ // if sqrt fail set i = i+ 2 and repeat from top
+ i += 2;
+ continue;
+ } else if (kEpidNoErr != result) {
+ result = kEpidErr;
+ }
+ break;
+ } while (--sqrt_loop_count);
+
+ BREAK_ON_EPID_ERROR(result);
+ // reset to fail to catch other errors
+ result = kEpidErr;
+
+ // y[0] = min (t2, q-t2), y[1] = max(t2, q-t2)
+ if (0 == high_bit) {
+ // q-t2 = &ff.neg(t2)
+ result = FfNeg(&ff, t2, t2);
+ BREAK_ON_EPID_ERROR(result);
+ }
+
+ // Ry = y[b]
+ sts = ippsGFpECSetPoint(rx->ipp_ff_elem, t2->ipp_ff_elem, r->ipp_ec_pt,
+ g->ipp_ec);
+ BREAK_ON_IPP_ERROR(sts, result);
+ // R = E(&ff).exp(R,h)
+ sts = ippsGFpECMulPoint(r->ipp_ec_pt, h_bn->ipp_bn, r->ipp_ec_pt, g->ipp_ec,
+ g->scratch_buffer);
+ BREAK_ON_IPP_ERROR(sts, result);
+
+ result = kEpidNoErr;
+ } while (0);
+
+ SAFE_FREE(hash_buf);
+ DeleteFfElement(&a);
+ DeleteFfElement(&b);
+ DeleteFfElement(&rx);
+ DeleteFfElement(&t1);
+ DeleteFfElement(&t2);
+ DeleteBigNum(&h_bn);
+ DeleteBigNum(&t_bn);
+ DeleteBigNum(&q);
+
+ return result;
+}
+
EpidStatus EcHash(EcGroup* g, void const* msg, size_t msg_len, HashAlg hash_alg,
EcPoint* r) {
- EpidStatus result = kEpidErr;
IppStatus sts = ippStsNoErr;
IppHashID hash_id;
int ipp_msg_len = 0;
Ipp32u i = 0;
- if (!g || !msg || !r) {
+ if (!g || (!msg && msg_len > 0) || !r) {
return kEpidBadArgErr;
- } else if (!g->ipp_ec || !r->ipp_ec_pt || msg_len <= 0) {
+ } else if (!g->ipp_ec || !r->ipp_ec_pt) {
return kEpidBadArgErr;
}
// because we use ipp function with message length parameter
@@ -819,24 +1152,20 @@ EpidStatus EcHash(EcGroup* g, void const* msg, size_t msg_len, HashAlg hash_alg,
return kEpidBadArgErr;
}
- for (i = 0; i < EPID_ECHASH_WATCHDOG; i++) {
+ do {
sts = ippsGFpECSetPointHash(i, msg, ipp_msg_len, hash_id, r->ipp_ec_pt,
g->ipp_ec, g->scratch_buffer);
- if (ippStsNoErr != sts) {
- if (ippStsQuadraticNonResidueErr == sts) {
- result = kEpidMathErr;
- continue;
- } else if (ippStsContextMatchErr == sts || ippStsBadArgErr == sts ||
- ippStsLengthErr == sts) {
- return kEpidBadArgErr;
- } else {
- return kEpidMathErr;
- }
- }
- return kEpidNoErr;
+ } while (ippStsQuadraticNonResidueErr == sts && i++ < EPID_ECHASH_WATCHDOG);
+
+ if (ippStsContextMatchErr == sts || ippStsBadArgErr == sts ||
+ ippStsLengthErr == sts) {
+ return kEpidBadArgErr;
+ }
+ if (ippStsNoErr != sts) {
+ return kEpidMathErr;
}
- return result;
+ return kEpidNoErr;
}
EpidStatus EcMakePoint(EcGroup* g, FfElement const* x, EcPoint* r) {
diff --git a/epid/common/math/finitefield-internal.h b/epid/common/math/src/finitefield-internal.h
index b9dcc65..4b68a6e 100644
--- a/epid/common/math/finitefield-internal.h
+++ b/epid/common/math/src/finitefield-internal.h
@@ -19,8 +19,8 @@
* \brief Finite field private interface.
*/
-#ifndef EPID_COMMON_MATH_FINITEFIELD_INTERNAL_H_
-#define EPID_COMMON_MATH_FINITEFIELD_INTERNAL_H_
+#ifndef EPID_COMMON_MATH_SRC_FINITEFIELD_INTERNAL_H_
+#define EPID_COMMON_MATH_SRC_FINITEFIELD_INTERNAL_H_
#include "ext/ipp/include/ippcpepid.h"
@@ -30,6 +30,8 @@ struct FiniteField {
IppsGFpState* ipp_ff;
/// Information about finite field created
IppsGFpInfo info;
+ /// Prime modulus size in bytes
+ size_t prime_modulus_size;
};
/// Finite Field Element
@@ -43,4 +45,4 @@ struct FfElement {
/// Initialize FiniteField structure
EpidStatus InitFiniteFieldFromIpp(IppsGFpState* ipp_ff, FiniteField* ff);
-#endif // EPID_COMMON_MATH_FINITEFIELD_INTERNAL_H_
+#endif // EPID_COMMON_MATH_SRC_FINITEFIELD_INTERNAL_H_
diff --git a/epid/common/math/finitefield.c b/epid/common/math/src/finitefield.c
index c496010..27e994c 100644
--- a/epid/common/math/finitefield.c
+++ b/epid/common/math/src/finitefield.c
@@ -21,27 +21,99 @@
#include <limits.h>
#include <string.h>
+#include <stdint.h>
#include "epid/common/math/finitefield.h"
-#include "epid/common/math/bignum-internal.h"
-#include "epid/common/math/finitefield-internal.h"
-#include "epid/common/memory.h"
+#include "epid/common/math/src/bignum-internal.h"
+#include "epid/common/math/src/finitefield-internal.h"
+#include "epid/common/src/memory.h"
#include "ext/ipp/include/ippcp.h"
#include "ext/ipp/include/ippcpepid.h"
+/// Number of leading zero bits in 32 bit integer x.
+static size_t Nlz32(uint32_t x) {
+ size_t nlz = sizeof(x) * 8;
+ if (x) {
+ nlz = 0;
+ if (0 == (x & 0xFFFF0000)) {
+ nlz += 16;
+ x <<= 16;
+ }
+ if (0 == (x & 0xFF000000)) {
+ nlz += 8;
+ x <<= 8;
+ }
+ if (0 == (x & 0xF0000000)) {
+ nlz += 4;
+ x <<= 4;
+ }
+ if (0 == (x & 0xC0000000)) {
+ nlz += 2;
+ x <<= 2;
+ }
+ if (0 == (x & 0x80000000)) {
+ nlz++;
+ }
+ }
+ return nlz;
+}
+
+/// Bit size of bit number representated as array of Ipp32u.
+#define BNU_BITSIZE(bnu, len) \
+ ((len) * sizeof(Ipp32u) * 8 - Nlz32((bnu)[(len)-1]))
+
+/// Convert bit size to byte size
+#define BIT2BYTE_SIZE(bits) (((bits) + 7) >> 3)
+
/// Initializes a FiniteField structure
EpidStatus InitFiniteFieldFromIpp(IppsGFpState* ipp_ff, FiniteField* ff) {
+ EpidStatus result = kEpidErr;
IppStatus sts = ippStsNoErr;
+ IppsGFpInfo basic_info;
+ Ipp32u* basic_modulus = NULL;
if (!ipp_ff || !ff) return kEpidBadArgErr;
- memset(ff, 0, sizeof(*ff));
+ do {
+ memset(ff, 0, sizeof(*ff));
+
+ // set FiniteField::info
+ sts = ippsGFpGetInfo(ipp_ff, &(ff->info));
+ if (ippStsNoErr != sts) {
+ result = kEpidMathErr;
+ break;
+ }
+
+ // set FiniteField::ipp_ff context
+ ff->ipp_ff = ipp_ff;
- sts = ippsGFpGetInfo(ipp_ff, &(ff->info));
- if (ippStsNoErr != sts) return kEpidMathErr;
+ // set FiniteField::prime_modulus_size
+ sts = ippsGFpGetInfo(ff->info.pBasicGF, &basic_info);
+ if (ippStsNoErr != sts) {
+ result = kEpidMathErr;
+ break;
+ }
- ff->ipp_ff = ipp_ff;
+ basic_modulus = (Ipp32u*)SAFE_ALLOC(basic_info.elementLen * sizeof(Ipp32u));
+ if (!basic_modulus) {
+ result = kEpidMemAllocErr;
+ break;
+ }
- return kEpidNoErr;
+ sts = ippsGFpGetModulus(ff->info.pBasicGF, basic_modulus);
+ if (ippStsNoErr != sts) {
+ result = kEpidMathErr;
+ break;
+ }
+
+ ff->prime_modulus_size =
+ BIT2BYTE_SIZE(BNU_BITSIZE(basic_modulus, basic_info.elementLen));
+
+ result = kEpidNoErr;
+ } while (0);
+
+ SAFE_FREE(basic_modulus);
+
+ return result;
}
EpidStatus NewFiniteField(BigNumStr const* prime, FiniteField** ff) {
@@ -59,12 +131,20 @@ EpidStatus NewFiniteField(BigNumStr const* prime, FiniteField** ff) {
result = kEpidBadArgErr;
break;
}
+
+ bit_size = (int)OctStrBitSize(prime->data.data, sizeof(prime->data.data));
+
bnu_size = OctStr2Bnu(bnu, prime, sizeof(*prime));
if (bnu_size < 0) {
result = kEpidMathErr;
break;
}
+ // skip high order zeros from BNU
+ while (bnu_size > 1 && 0 == bnu[bnu_size - 1]) {
+ bnu_size--;
+ }
+
// Determine the memory requirement for finite field context
sts = ippsGFpGetSize(bit_size, &state_size_in_bytes);
if (ippStsNoErr != sts) {
@@ -177,6 +257,87 @@ EpidStatus NewFiniteFieldViaBinomalExtension(FiniteField const* ground_field,
return result;
}
+EpidStatus NewFiniteFieldViaPolynomialExtension(FiniteField const* ground_field,
+ BigNumStr const* irr_polynomial,
+ int degree, FiniteField** ff) {
+ EpidStatus result = kEpidErr;
+ IppsGFpState* ipp_finitefield_ctx = NULL;
+ FiniteField* finitefield_ptr = NULL;
+ Ipp32u* irr_polynomial_bnu = NULL;
+ int i;
+ do {
+ IppStatus sts = ippStsNoErr;
+ int state_size_in_bytes = 0;
+ if (!ground_field || !irr_polynomial || !ff) {
+ result = kEpidBadArgErr;
+ break;
+ }
+ if (degree < 1 || degree > (int)(INT_MAX / sizeof(BigNumStr)) ||
+ !ground_field->ipp_ff) {
+ result = kEpidBadArgErr;
+ break;
+ }
+
+ // irr_polynomial to IPP representation
+ irr_polynomial_bnu = (Ipp32u*)SAFE_ALLOC(sizeof(BigNumStr) * degree);
+ if (!irr_polynomial_bnu) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+ for (i = 0; i < degree; ++i) {
+ OctStr2Bnu(irr_polynomial_bnu + (i * sizeof(BigNumStr) / 4),
+ &irr_polynomial[i], sizeof(irr_polynomial[i]));
+ }
+
+ // Determine the memory requirement for finite field context
+ sts = ippsGFpxGetSize(ground_field->ipp_ff, degree, &state_size_in_bytes);
+ if (ippStsNoErr != sts) {
+ if (ippStsSizeErr == sts) {
+ result = kEpidBadArgErr;
+ } else {
+ result = kEpidMathErr;
+ }
+ break;
+ }
+
+ // Allocate space for ipp finite field context
+ ipp_finitefield_ctx = (IppsGFpState*)SAFE_ALLOC(state_size_in_bytes);
+ if (!ipp_finitefield_ctx) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+
+ // Initialize ipp binomial extension finite field context
+ sts = ippsGFpxInit(ground_field->ipp_ff, irr_polynomial_bnu, degree,
+ ipp_finitefield_ctx);
+ if (ippStsNoErr != sts) {
+ if (ippStsSizeErr == sts) {
+ result = kEpidBadArgErr;
+ } else {
+ result = kEpidMathErr;
+ }
+ break;
+ }
+ finitefield_ptr = (FiniteField*)SAFE_ALLOC(sizeof(FiniteField));
+ if (!finitefield_ptr) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+ result = InitFiniteFieldFromIpp(ipp_finitefield_ctx, finitefield_ptr);
+ if (kEpidNoErr != result) break;
+
+ *ff = finitefield_ptr;
+ result = kEpidNoErr;
+ } while (0);
+
+ SAFE_FREE(irr_polynomial_bnu);
+ if (kEpidNoErr != result) {
+ SAFE_FREE(finitefield_ptr);
+ SAFE_FREE(ipp_finitefield_ctx);
+ }
+ return result;
+}
+
void DeleteFiniteField(FiniteField** ff) {
if (ff) {
if (*ff) {
@@ -259,7 +420,9 @@ void DeleteFfElement(FfElement** ff_elem) {
EpidStatus ReadFfElement(FiniteField* ff, void const* ff_elem_str,
size_t strlen, FfElement* ff_elem) {
IppStatus sts;
- int ipp_str_size = (int)strlen;
+ size_t strlen_required = 0;
+ int ipp_str_size = 0;
+ uint8_t const* str = (uint8_t const*)ff_elem_str;
if (!ff || !ff_elem_str || !ff_elem) {
return kEpidBadArgErr;
@@ -267,15 +430,37 @@ EpidStatus ReadFfElement(FiniteField* ff, void const* ff_elem_str,
if (!ff_elem->ipp_ff_elem || !ff->ipp_ff) {
return kEpidBadArgErr;
}
+ if (ff->info.elementLen != ff_elem->info.elementLen) {
+ return kEpidBadArgErr;
+ }
- if (ipp_str_size <= 0) {
+ // ippsGFpSetElementOctString expects serialized value consists
+ // of "degree" number of chunks, where each chunk is of modulus byte size.
+ strlen_required = ff->prime_modulus_size * ff->info.basicGFdegree;
+
+ // Remove leading zeros when de-serealizing finite field of degree 1.
+ // This takes care of serialization chunk size adjustments when importing
+ // a big numbers.
+ if (1 == ff->info.basicGFdegree) {
+ while (strlen_required < strlen && 0 == *str) {
+ str++;
+ strlen--;
+ }
+ }
+
+ // Check if serialized value does not exceed ippsGFpSetElementOctString
+ // expected size.
+ if (strlen_required < strlen) {
return kEpidBadArgErr;
}
- if (ff->info.elementLen != ff_elem->info.elementLen) {
+
+ ipp_str_size = (int)strlen;
+ if (ipp_str_size <= 0) {
return kEpidBadArgErr;
}
- sts = ippsGFpSetElementOctString(ff_elem_str, ipp_str_size,
- ff_elem->ipp_ff_elem, ff->ipp_ff);
+
+ sts = ippsGFpSetElementOctString(str, ipp_str_size, ff_elem->ipp_ff_elem,
+ ff->ipp_ff);
if (ippStsNoErr != sts) {
if (ippStsContextMatchErr == sts || ippStsOutOfRangeErr == sts) {
return kEpidBadArgErr;
@@ -287,10 +472,124 @@ EpidStatus ReadFfElement(FiniteField* ff, void const* ff_elem_str,
return kEpidNoErr;
}
+/// Gets the prime value of a finite field
+/*!
+ This function returns a new bignum containing the field's prime value.
+ A new bignum is returned so that callers do not have to figure out the proper
+ size.
+
+ This function only works with non-composite fields.
+
+ \param[in] ff
+ The field.
+ \param[out] bn
+ The target BigNum.
+
+ \returns ::EpidStatus
+*/
+EpidStatus GetFiniteFieldPrime(FiniteField* ff, BigNum** bn) {
+ EpidStatus result = kEpidErr;
+ IppStatus sts;
+ BigNum* prime_bn = NULL;
+ Ipp32u* prime_bnu = NULL;
+ if (!ff || !bn) {
+ return kEpidBadArgErr;
+ }
+ if (!ff->ipp_ff) {
+ return kEpidBadArgErr;
+ }
+ if (ff->info.basicGFdegree != 1 || ff->info.groundGFdegree != 1) {
+ return kEpidBadArgErr;
+ }
+ do {
+ size_t elem_dword_size = ff->info.elementLen;
+ size_t elem_bytes_size = elem_dword_size * sizeof(Ipp32u);
+ result = NewBigNum(elem_bytes_size, &prime_bn);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ prime_bnu = (Ipp32u*)SAFE_ALLOC(elem_bytes_size);
+ if (NULL == prime_bnu) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+ sts = ippsGFpGetModulus(ff->ipp_ff, prime_bnu);
+ result = InitBigNumFromBnu(prime_bnu, elem_dword_size, prime_bn);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = kEpidNoErr;
+ } while (0);
+ SAFE_FREE(prime_bnu);
+ if (kEpidNoErr != result) {
+ DeleteBigNum(&prime_bn);
+ } else {
+ *bn = prime_bn;
+ }
+ return result;
+}
+
+EpidStatus InitFfElementFromBn(FiniteField* ff, BigNum* bn,
+ FfElement* ff_elem) {
+ EpidStatus result = kEpidErr;
+ BigNum* prime_bn = NULL;
+ BigNum* mod_bn = NULL;
+ Ipp32u* mod_str = NULL;
+
+ if (!ff || !bn || !ff_elem) {
+ return kEpidBadArgErr;
+ }
+ if (!ff_elem->ipp_ff_elem || !ff->ipp_ff) {
+ return kEpidBadArgErr;
+ }
+ if (ff->info.basicGFdegree != 1 || ff->info.groundGFdegree != 1) {
+ return kEpidBadArgErr;
+ }
+ if (ff->info.elementLen != ff_elem->info.elementLen) {
+ return kEpidBadArgErr;
+ }
+ do {
+ size_t elem_size = ff->info.elementLen * sizeof(Ipp32u);
+ result = NewBigNum(elem_size, &mod_bn);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = GetFiniteFieldPrime(ff, &prime_bn);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ result = BigNumMod(bn, prime_bn, mod_bn);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ mod_str = (Ipp32u*)SAFE_ALLOC(elem_size);
+ if (NULL == mod_str) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+ result = WriteBigNum(mod_bn, elem_size, mod_str);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = ReadFfElement(ff, mod_str, elem_size, ff_elem);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = kEpidNoErr;
+ } while (0);
+ SAFE_FREE(mod_str);
+ DeleteBigNum(&prime_bn);
+ DeleteBigNum(&mod_bn);
+ return result;
+}
+
EpidStatus WriteFfElement(FiniteField* ff, FfElement const* ff_elem,
void* ff_elem_str, size_t strlen) {
IppStatus sts;
- IppsGFpInfo info;
+ size_t strlen_required = 0;
+ size_t pad = 0;
+ uint8_t* str = (uint8_t*)ff_elem_str;
if (!ff || !ff_elem_str || !ff_elem) {
return kEpidBadArgErr;
@@ -305,21 +604,25 @@ EpidStatus WriteFfElement(FiniteField* ff, FfElement const* ff_elem,
return kEpidBadArgErr;
}
- // check that ippsGFpGetElementOctString does not truncate to fit the
- // buffer
- sts = ippsGFpGetInfo(ff->ipp_ff, &info);
- if (ippStsNoErr != sts) {
- if (ippStsContextMatchErr == sts) {
- return kEpidBadArgErr;
- } else {
- return kEpidMathErr;
- }
+ // ippsGFpGetElementOctString serialize value into a buffer consists
+ // of "degree" number of chunks, where each chunk is of modulus byte size.
+ strlen_required = ff->prime_modulus_size * ff->info.basicGFdegree;
+
+ // add zero padding for extension of a degree 1 (a prime field)
+ // so it can be deserialized into big number correctly.
+ if (1 == ff->info.basicGFdegree && strlen_required < strlen) {
+ pad = strlen - strlen_required;
+ memset(str, 0, pad);
+ strlen -= pad;
+ str += pad;
}
- if (info.elementLen * sizeof(Ipp32u) > strlen) return kEpidBadArgErr;
+
+ // Check if output buffer meets ippsGFpGetElementOctString expectations.
+ if (strlen_required != strlen) return kEpidBadArgErr;
// get the data
- sts = ippsGFpGetElementOctString(ff_elem->ipp_ff_elem, ff_elem_str,
- (int)strlen, ff->ipp_ff);
+ sts = ippsGFpGetElementOctString(ff_elem->ipp_ff_elem, str, (int)strlen,
+ ff->ipp_ff);
if (ippStsNoErr != sts) {
if (ippStsContextMatchErr == sts) {
return kEpidBadArgErr;
@@ -407,6 +710,32 @@ EpidStatus FfAdd(FiniteField* ff, FfElement const* a, FfElement const* b,
return kEpidNoErr;
}
+EpidStatus FfSub(FiniteField* ff, FfElement const* a, FfElement const* b,
+ FfElement* r) {
+ IppStatus sts = ippStsNoErr;
+ if (!ff || !a || !b || !r) {
+ return kEpidBadArgErr;
+ } else if (!ff->ipp_ff || !a->ipp_ff_elem || !b->ipp_ff_elem ||
+ !r->ipp_ff_elem) {
+ return kEpidBadArgErr;
+ }
+ if (ff->info.elementLen != a->info.elementLen ||
+ ff->info.elementLen != b->info.elementLen ||
+ ff->info.elementLen != r->info.elementLen ||
+ a->info.elementLen != b->info.elementLen ||
+ a->info.elementLen != r->info.elementLen) {
+ return kEpidBadArgErr;
+ }
+
+ sts = ippsGFpSub(a->ipp_ff_elem, b->ipp_ff_elem, r->ipp_ff_elem, ff->ipp_ff);
+ if (ippStsContextMatchErr == sts) {
+ return kEpidBadArgErr;
+ } else if (ippStsNoErr != sts) {
+ return kEpidMathErr;
+ }
+ return kEpidNoErr;
+}
+
EpidStatus FfMul(FiniteField* ff, FfElement const* a, FfElement const* b,
FfElement* r) {
IppStatus sts = ippStsNoErr;
@@ -643,6 +972,118 @@ EpidStatus FfMultiExp(FiniteField* ff, FfElement const** p, BigNumStr const** b,
return result;
}
+EpidStatus FfMultiExpBn(FiniteField* ff, FfElement const** p, BigNum const** b,
+ size_t m, FfElement* r) {
+ IppStatus sts = ippStsNoErr;
+ EpidStatus result = kEpidErr;
+ IppsGFpElement** ipp_p = NULL;
+ IppsBigNumState** ipp_b = NULL;
+ Ipp8u* scratch_buffer = NULL;
+
+ size_t s = 0;
+ int exp_bit_size = 0;
+ size_t i = 0;
+ int ipp_m = 0;
+
+ // Check required parameters
+ if (!ff || !p || !b || !r) {
+ return kEpidBadArgErr;
+ } else if (!ff->ipp_ff || !r->ipp_ff_elem || m <= 0) {
+ return kEpidBadArgErr;
+ } else if (ff->info.elementLen != r->info.elementLen) {
+ return kEpidBadArgErr;
+ }
+ for (s = 0; s < m; s++) {
+ if (!p[s] || !b[s]) {
+ return kEpidBadArgErr;
+ }
+ }
+
+ // because we use ipp function with number of items parameter
+ // defined as "int" we need to verify that input length
+ // do not exceed INT_MAX to avoid overflow
+ if (m > INT_MAX) {
+ return kEpidBadArgErr;
+ }
+ ipp_m = (int)m;
+ for (i = 0; i < m; i++) {
+ int b_size = 0;
+ if (!p[i]) {
+ return kEpidBadArgErr;
+ }
+ if (!p[i]->ipp_ff_elem) {
+ return kEpidBadArgErr;
+ }
+ if (ff->info.elementLen != p[i]->info.elementLen) {
+ return kEpidBadArgErr;
+ }
+ sts = ippsGetSize_BN(b[i]->ipp_bn, &b_size);
+ if (ippStsNoErr != sts) {
+ return kEpidBadArgErr;
+ }
+ b_size *= (sizeof(Ipp32u) * CHAR_BIT);
+ if (b_size > exp_bit_size) {
+ exp_bit_size = b_size;
+ }
+ }
+
+ do {
+ int scratch_buffer_size = 0;
+
+ // Allocate memory for finite field elements for ipp call
+ ipp_p = (IppsGFpElement**)SAFE_ALLOC(m * sizeof(IppsGFpElement*));
+ if (!ipp_p) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+ for (i = 0; i < m; i++) {
+ ipp_p[i] = p[i]->ipp_ff_elem;
+ }
+
+ ipp_b = (IppsBigNumState**)SAFE_ALLOC(m * sizeof(IppsBigNumState*));
+ if (!ipp_b) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+ // fill ipp array for ipp call
+ for (i = 0; i < m; i++) {
+ ipp_b[i] = b[i]->ipp_bn;
+ }
+
+ // calculate scratch buffer size
+ sts = ippsGFpScratchBufferSize(ipp_m, exp_bit_size, ff->ipp_ff,
+ &scratch_buffer_size);
+ if (sts != ippStsNoErr) {
+ result = kEpidMathErr;
+ break;
+ }
+ // allocate memory for scratch buffer
+ scratch_buffer = (Ipp8u*)SAFE_ALLOC(scratch_buffer_size);
+ if (!scratch_buffer) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+
+ sts = ippsGFpMultiExp((const IppsGFpElement* const*)ipp_p,
+ (const IppsBigNumState* const*)ipp_b, ipp_m,
+ r->ipp_ff_elem, ff->ipp_ff, scratch_buffer);
+ if (ippStsNoErr != sts) {
+ if (ippStsContextMatchErr == sts || ippStsRangeErr == sts)
+ result = kEpidBadArgErr;
+ else
+ result = kEpidMathErr;
+ break;
+ }
+
+ result = kEpidNoErr;
+ } while (0);
+
+ SAFE_FREE(scratch_buffer);
+ SAFE_FREE(ipp_b);
+ SAFE_FREE(ipp_p);
+ return result;
+}
+
EpidStatus FfSscmMultiExp(FiniteField* ff, FfElement const** p,
BigNumStr const** b, size_t m, FfElement* r) {
// call EcMultiExp directly because its implementation is side channel
@@ -803,3 +1244,340 @@ EpidStatus FfGetRandom(FiniteField* ff, BigNumStr const* low_bound,
SAFE_FREE(low);
return result;
}
+
+EpidStatus FfSqrt(FiniteField* ff, FfElement const* a, FfElement* r) {
+ EpidStatus result = kEpidErr;
+ Ipp8u one_str = 1;
+ BigNumStr qm1_str;
+ const BigNumStr zero_str = {0};
+ bool is_equal = false;
+ unsigned int s;
+ bool is_even = false;
+ unsigned int i;
+ BigNum* prime = NULL;
+ BigNum* qm1 = NULL;
+ BigNum* one = NULL;
+ FfElement* qm1_ffe = NULL;
+ BigNum* two = NULL;
+ BigNum* qm1d2 = NULL;
+ BigNum* remainder = NULL;
+ FfElement* g = NULL;
+ FfElement* gg = NULL;
+ BigNum* t = NULL;
+ BigNum* e = NULL;
+ BigNum* j = NULL;
+ BigNum* qm1dj = NULL;
+ FfElement* ge = NULL;
+ FfElement* h = NULL;
+ FfElement* temp = NULL;
+ FfElement* one_ffe = NULL;
+ BigNum* ed2 = NULL;
+ FfElement* ged2 = NULL;
+ BigNum* tp1d2 = NULL;
+ FfElement* gtp1d2 = NULL;
+ FfElement* dd = NULL;
+
+ if (!ff || !a || !r) {
+ return kEpidBadArgErr;
+ }
+ do {
+ result = GetFiniteFieldPrime(ff, &prime);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewBigNum(sizeof(BigNumStr) * CHAR_BIT, &qm1);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewBigNum(sizeof(BigNumStr) * CHAR_BIT, &one);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewFfElement(ff, &qm1_ffe);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewBigNum(sizeof(BigNumStr) * CHAR_BIT, &two);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewBigNum(sizeof(BigNumStr) * CHAR_BIT, &qm1d2);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewBigNum(sizeof(BigNumStr) * CHAR_BIT, &remainder);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewFfElement(ff, &g);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewFfElement(ff, &gg);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewBigNum(sizeof(BigNumStr) * CHAR_BIT, &t);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewBigNum(sizeof(BigNumStr) * CHAR_BIT, &e);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewBigNum(sizeof(BigNumStr) * CHAR_BIT, &j);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewBigNum(sizeof(BigNumStr) * CHAR_BIT, &qm1dj);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewFfElement(ff, &ge);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewFfElement(ff, &h);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewFfElement(ff, &temp);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewFfElement(ff, &one_ffe);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewBigNum(sizeof(BigNumStr) * CHAR_BIT, &ed2);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewFfElement(ff, &ged2);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewBigNum(sizeof(BigNumStr) * CHAR_BIT, &tp1d2);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewFfElement(ff, &gtp1d2);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = NewFfElement(ff, &dd);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = ReadBigNum(&one_str, sizeof(one_str), one);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = BigNumSub(prime, one, qm1);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = BigNumAdd(one, one, two);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = InitFfElementFromBn(ff, one, one_ffe);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = WriteBigNum(qm1, sizeof(qm1_str), &qm1_str);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = InitFfElementFromBn(ff, qm1, qm1_ffe);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = BigNumDiv(qm1, two, qm1d2, remainder);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ // 1. Choose an element g in Fq.
+ result = ReadFfElement(ff, &one_str, sizeof(one_str), g);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ // try small values for g starting from 2 until
+ // it meets the requirements from the step 2
+ do {
+ result = FfAdd(ff, g, one_ffe, g);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ // 2. Check whether g^((q-1)/2) mod q = q-1. If not, go to step 1.
+ result = FfExp(ff, g, qm1d2, gg);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ result = FfIsEqual(ff, gg, qm1_ffe, &is_equal);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ } while (!is_equal);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ // 3. Set t = q-1, s = 0.
+ result = ReadBigNum(&qm1_str, sizeof(qm1_str), t);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ s = 0;
+ // 4. While (t is even number)
+ // t = t/2, s = s+1.
+ result = BigNumIsEven(t, &is_even);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ while (is_even) {
+ result = BigNumDiv(t, two, t, remainder);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ s = s + 1;
+ result = BigNumIsEven(t, &is_even);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ }
+ // 5. Note that g, s, t can be pre-computed and used for all
+ // future computations.
+ // Also note that q-1 = (2^s)*t where t is an odd integer.
+
+ // 6. e = 0.
+ result = ReadBigNum(&zero_str, sizeof(zero_str), e);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ // 7. For i = 2, ..., s
+ // j = 2^i,
+ // if (a ? g^(-e))^((q-1)/j) mod q != 1, then set e = e + j/2.
+ for (i = 2; i <= s; i++) {
+ result = BigNumPow2N(i, j);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = BigNumDiv(qm1, j, qm1dj, remainder);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = FfExp(ff, g, e, ge);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ // 8. Compute h = (a * g^(-e)) mod q.
+ result = FfInv(ff, ge, ge);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = FfMul(ff, a, ge, h);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = FfExp(ff, h, qm1dj, temp);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = FfIsEqual(ff, temp, one_ffe, &is_equal);
+ if (!is_equal) {
+ result = BigNumDiv(j, two, j, remainder);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = BigNumAdd(e, j, e);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ }
+ }
+
+ // 8. Compute h = (a * g^(-e)) mod q.
+ result = FfExp(ff, g, e, ge);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = FfInv(ff, ge, ge);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = FfMul(ff, a, ge, h);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ // 9. Compute r = d = (g^(e/2) * h^((t+1)/2)) mod q.
+ result = BigNumDiv(e, two, ed2, remainder);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = FfExp(ff, g, ed2, ged2);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = BigNumAdd(t, one, tp1d2);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = BigNumDiv(tp1d2, two, tp1d2, remainder);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = FfExp(ff, h, tp1d2, gtp1d2);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = FfMul(ff, ged2, gtp1d2, r);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ // 10. Verify whether a = d^2 mod q. If so, return r, otherwise, return
+ // fail.
+ result = FfMul(ff, r, r, dd);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ result = FfIsEqual(ff, dd, a, &is_equal);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ if (!is_equal) {
+ result = kEpidMathQuadraticNonResidueError;
+ break;
+ }
+ result = kEpidNoErr;
+ } while (0);
+ DeleteFfElement(&dd);
+ DeleteFfElement(&gtp1d2);
+ DeleteBigNum(&tp1d2);
+ DeleteFfElement(&ged2);
+ DeleteBigNum(&ed2);
+ DeleteFfElement(&one_ffe);
+ DeleteFfElement(&temp);
+ DeleteFfElement(&h);
+ DeleteFfElement(&ge);
+ DeleteBigNum(&qm1dj);
+ DeleteBigNum(&j);
+ DeleteBigNum(&e);
+ DeleteBigNum(&t);
+ DeleteFfElement(&gg);
+ DeleteFfElement(&g);
+ DeleteBigNum(&remainder);
+ DeleteBigNum(&qm1d2);
+ DeleteBigNum(&two);
+ DeleteFfElement(&qm1_ffe);
+ DeleteBigNum(&one);
+ DeleteBigNum(&qm1);
+ DeleteBigNum(&prime);
+ return result;
+}
diff --git a/epid/common/math/pairing-internal.h b/epid/common/math/src/pairing-internal.h
index f48b19c..5903706 100644
--- a/epid/common/math/pairing-internal.h
+++ b/epid/common/math/src/pairing-internal.h
@@ -19,8 +19,8 @@
* \brief Pairing private interface.
*/
-#ifndef EPID_COMMON_MATH_PAIRING_INTERNAL_H_
-#define EPID_COMMON_MATH_PAIRING_INTERNAL_H_
+#ifndef EPID_COMMON_MATH_SRC_PAIRING_INTERNAL_H_
+#define EPID_COMMON_MATH_SRC_PAIRING_INTERNAL_H_
/// Pairing State
struct PairingState {
@@ -36,4 +36,4 @@ struct PairingState {
FiniteField Fq6; ///< Fq6
};
-#endif // EPID_COMMON_MATH_PAIRING_INTERNAL_H_
+#endif // EPID_COMMON_MATH_SRC_PAIRING_INTERNAL_H_
diff --git a/epid/common/math/pairing.c b/epid/common/math/src/pairing.c
index 339d711..079ffff 100644
--- a/epid/common/math/pairing.c
+++ b/epid/common/math/src/pairing.c
@@ -21,11 +21,11 @@
#include <limits.h>
#include "epid/common/math/pairing.h"
-#include "epid/common/math/bignum-internal.h"
-#include "epid/common/math/finitefield-internal.h"
-#include "epid/common/math/ecgroup-internal.h"
-#include "epid/common/math/pairing-internal.h"
-#include "epid/common/memory.h"
+#include "epid/common/math/src/bignum-internal.h"
+#include "epid/common/math/src/finitefield-internal.h"
+#include "epid/common/math/src/ecgroup-internal.h"
+#include "epid/common/math/src/pairing-internal.h"
+#include "epid/common/src/memory.h"
#include "ext/ipp/include/ippcp.h"
#include "ext/ipp/include/ippcpepid.h"
@@ -1640,17 +1640,9 @@ static EpidStatus MulV(FfElement* e, FfElement* a, PairingState* ps) {
retvalue = MulXiFast(e0, a2, ps);
BREAK_ON_EPID_ERROR(retvalue);
// 3. e[1] = a[0].
- if (0 != memcpy_S(&e_dat.x[1], sizeof(e_dat.x[1]), &a_dat.x[0],
- sizeof(a_dat.x[0]))) {
- retvalue = kEpidBadArgErr;
- break;
- }
+ e_dat.x[1] = a_dat.x[0];
// 4. e[2] = a[1].
- if (0 != memcpy_S(&e_dat.x[2], sizeof(e_dat.x[2]), &a_dat.x[1],
- sizeof(a_dat.x[1]))) {
- retvalue = kEpidBadArgErr;
- break;
- }
+ e_dat.x[2] = a_dat.x[1];
sts =
ippsGFpGetElement(e0->ipp_ff_elem, (Ipp32u*)&e_dat.x[0],
diff --git a/epid/common/math/printutils.c b/epid/common/math/src/printutils.c
index b349d63..d1b1e81 100644
--- a/epid/common/math/printutils.c
+++ b/epid/common/math/src/printutils.c
@@ -28,10 +28,10 @@
#include <string.h>
#include "ext/ipp/include/ippcp.h"
-#include "epid/common/math/bignum-internal.h"
-#include "epid/common/math/ecgroup-internal.h"
-#include "epid/common/math/finitefield-internal.h"
-#include "epid/common/memory.h"
+#include "epid/common/math/src/bignum-internal.h"
+#include "epid/common/math/src/ecgroup-internal.h"
+#include "epid/common/math/src/finitefield-internal.h"
+#include "epid/common/src/memory.h"
/// Allowed number of characters printed in one line
#define WIDTH 49
diff --git a/epid/common/math/sha256.c b/epid/common/math/src/sha256.c
index 7f1b3f3..7f1b3f3 100644
--- a/epid/common/math/sha256.c
+++ b/epid/common/math/src/sha256.c
diff --git a/epid/common/math/src/tatepairing-internal.h b/epid/common/math/src/tatepairing-internal.h
new file mode 100644
index 0000000..019f3ff
--- /dev/null
+++ b/epid/common/math/src/tatepairing-internal.h
@@ -0,0 +1,41 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Intel(R) EPID 1.1 pairing private interface.
+ */
+
+#ifndef EPID_COMMON_MATH_SRC_TATEPAIRING_INTERNAL_H_
+#define EPID_COMMON_MATH_SRC_TATEPAIRING_INTERNAL_H_
+
+/// Pairing State
+struct Epid11PairingState {
+ EcGroup* ga; ///< elliptic curve group G1
+ EcGroup* gb; ///< elliptic curve group G2
+ FiniteField* ff; ///< finite field GT
+ BigNumStr p; ///< Intel(R) EPID 1.1 p parameter value
+ size_t p_bitsize; ///< Length of p in bits
+ FfElement* a; ///< Intel(R) EPID 1.1 a parameter value
+ BigNum* final_exp_constant; ///< (q^2 - q + 1)/p
+ FfElement* fq3_inv_constant; ///< (inverse(qnr), 0) in Fq3
+ FfElement* fq3_inv2_constant; ///< (inverse(qnr)^2, 0) in Fq3
+ FiniteField Fq; ///< Fq
+ FiniteField Fq3; ///< Fq3
+ FfElement* alpha_q[3]; ///< {t^(0*q), t^(1*q), t^(2*q)}
+};
+
+#endif // EPID_COMMON_MATH_SRC_TATEPAIRING_INTERNAL_H_
diff --git a/epid/common/math/src/tatepairing.c b/epid/common/math/src/tatepairing.c
new file mode 100644
index 0000000..0267eb9
--- /dev/null
+++ b/epid/common/math/src/tatepairing.c
@@ -0,0 +1,936 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+
+/*!
+* \file
+* \brief EPID 1.1 pairing implementation.
+*/
+
+#include "epid/common/math/tatepairing.h"
+#include "epid/common/1.1/types.h"
+#include "epid/common/math/src/bignum-internal.h"
+#include "epid/common/math/src/finitefield-internal.h"
+#include "epid/common/math/src/ecgroup-internal.h"
+#include "epid/common/math/src/tatepairing-internal.h"
+#include "epid/common/src/memory.h"
+#include "ext/ipp/include/ippcp.h"
+#include "ext/ipp/include/ippcpepid.h"
+
+/// Handle Ipp Errors with Break
+#define BREAK_ON_IPP_ERROR(sts, ret) \
+ { \
+ IppStatus temp_sts = (sts); \
+ if (ippStsNoErr != temp_sts) { \
+ if (ippStsContextMatchErr == temp_sts) { \
+ (ret) = kEpidMathErr; \
+ } else { \
+ (ret) = kEpidBadArgErr; \
+ } \
+ break; \
+ } \
+ }
+
+/// Handle SDK Error with Break
+#define BREAK_ON_EPID_ERROR(ret) \
+ if (kEpidNoErr != (ret)) { \
+ break; \
+ }
+
+/// Count of elements in array
+#define COUNT_OF(a) (sizeof(a) / sizeof((a)[0]))
+
+#pragma pack(1)
+/// Data for element in Fq
+typedef struct FqElemDat {
+ Ipp32u x[sizeof(FqElemStr) / sizeof(Ipp32u)]; ///< element in Fq
+} FqElemDat;
+/// Data for element in Fq
+typedef struct Fq3ElemDat {
+ FqElemDat x[3]; ///< element in Fq3
+} Fq3ElemDat;
+#pragma pack()
+
+// Forward Declarations
+static EpidStatus Fq6FromFq(FiniteField* fq6, FiniteField* fq,
+ FfElement const* a, FfElement* r);
+
+static EpidStatus JoinFq3(Epid11PairingState* ps, FfElement const* a,
+ FfElement const* b, FfElement* r);
+
+static EpidStatus SplitFq6(Epid11PairingState* ps, FfElement const* a,
+ FfElement* a0, FfElement* a1);
+
+static EpidStatus FinalExp(Epid11PairingState* ps, FfElement const* r,
+ FfElement* d);
+
+static EpidStatus Transform(Epid11PairingState* ps, FfElement const* a,
+ FfElement* b);
+
+EpidStatus NewEpid11PairingState(EcGroup const* ga, EcGroup const* gb,
+ FiniteField const* ff,
+ Epid11PairingState** ps) {
+ EpidStatus result = kEpidErr;
+ Epid11PairingState* paring_state_ctx = NULL;
+ BigNum* tmp = NULL;
+ BigNum* p = NULL;
+ BigNum* q = NULL;
+ FfElement* qnr = NULL;
+ FfElement* inv_qnr = NULL;
+ FfElement* neg_qnr = NULL;
+ Fq3ElemStr fq3_str = {0};
+ FqElemDat q_data = {0};
+ int i = 0;
+
+ do {
+ IppStatus sts = ippStsNoErr;
+ IppsGFpState* Fq3 = NULL;
+ IppsGFpState* Fq = NULL;
+ IppsGFpInfo info = {0};
+ Fq3ElemDat ff_modulus[3] = {0};
+ uint8_t one_str[] = {1};
+ const Ipp32u* p_data = NULL;
+ int p_len = 0;
+ uint8_t remainder_str = 0xff;
+ Fq3ElemStr trans_100 = {0};
+ Fq3ElemStr trans_010 = {0};
+
+ // validate inputs
+ if (!ga || !gb || !ff || !ps) {
+ result = kEpidBadArgErr;
+ break;
+ }
+ if (!ga->ipp_ec || !gb->ipp_ec || !ff->ipp_ff) {
+ result = kEpidBadArgErr;
+ break;
+ }
+ if (1 != ga->info.basicGFdegree || 3 != gb->info.basicGFdegree ||
+ 6 != ff->info.basicGFdegree ||
+ sizeof(Epid11G1ElemStr) != (ga->info.elementLen << 3) ||
+ sizeof(Epid11G2ElemStr) != (gb->info.elementLen << 3) ||
+ sizeof(Epid11GtElemStr) != (ff->info.elementLen << 2)) {
+ result = kEpidBadArgErr;
+ break;
+ }
+ paring_state_ctx =
+ (Epid11PairingState*)SAFE_ALLOC(sizeof(Epid11PairingState));
+ if (!paring_state_ctx) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+
+ // store EPID fields and groups
+ paring_state_ctx->ga = (EcGroup*)ga;
+ paring_state_ctx->gb = (EcGroup*)gb;
+ paring_state_ctx->ff = (FiniteField*)ff;
+
+ // get Fq3, Fq
+ sts = ippsGFpGetInfo(ff->ipp_ff, &info);
+ BREAK_ON_IPP_ERROR(sts, result);
+ Fq3 = (IppsGFpState*)info.pGroundGF;
+ result = InitFiniteFieldFromIpp(Fq3, &(paring_state_ctx->Fq3));
+ BREAK_ON_EPID_ERROR(result);
+
+ sts = ippsGFpGetInfo(Fq3, &info);
+ BREAK_ON_IPP_ERROR(sts, result);
+ Fq = (IppsGFpState*)info.pGroundGF;
+ result = InitFiniteFieldFromIpp(Fq, &(paring_state_ctx->Fq));
+ BREAK_ON_EPID_ERROR(result);
+
+ // compute fq3_inv_constant = (inverse(qnr), 0, 0)
+ result = NewFfElement(&paring_state_ctx->Fq3,
+ &paring_state_ctx->fq3_inv_constant);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&paring_state_ctx->Fq, &neg_qnr);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&paring_state_ctx->Fq, &qnr);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&paring_state_ctx->Fq, &inv_qnr);
+ BREAK_ON_EPID_ERROR(result);
+ sts = ippsGFpGetModulus(ff->ipp_ff, (Ipp32u*)&ff_modulus);
+ BREAK_ON_IPP_ERROR(sts, result);
+ sts =
+ ippsGFpSetElement(ff_modulus[0].x[0].x, COUNT_OF(ff_modulus[0].x[0].x),
+ neg_qnr->ipp_ff_elem, Fq);
+ BREAK_ON_IPP_ERROR(sts, result);
+ result = FfNeg(&paring_state_ctx->Fq, neg_qnr, qnr);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfInv(&paring_state_ctx->Fq, qnr, inv_qnr);
+ BREAK_ON_EPID_ERROR(result);
+ result = WriteFfElement(&paring_state_ctx->Fq, inv_qnr, &fq3_str.a[0],
+ sizeof(fq3_str.a[0]));
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(&paring_state_ctx->Fq3, &fq3_str, sizeof(fq3_str),
+ paring_state_ctx->fq3_inv_constant);
+ BREAK_ON_EPID_ERROR(result);
+
+ // compute fq3_inv2_constant = (inverse(qnr)^2, 0, 0)
+ // inv_qnr = inv_qnr^2
+ result = NewFfElement(&paring_state_ctx->Fq3,
+ &paring_state_ctx->fq3_inv2_constant);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&paring_state_ctx->Fq, inv_qnr, inv_qnr, inv_qnr);
+ BREAK_ON_EPID_ERROR(result);
+ result = WriteFfElement(&paring_state_ctx->Fq, inv_qnr, &fq3_str.a[0],
+ sizeof(fq3_str.a[0]));
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(&paring_state_ctx->Fq3, &fq3_str, sizeof(fq3_str),
+ paring_state_ctx->fq3_inv2_constant);
+ BREAK_ON_EPID_ERROR(result);
+
+ // save parameter q for future use
+ sts = ippsGFpGetModulus(Fq, (Ipp32u*)&q_data);
+ BREAK_ON_IPP_ERROR(sts, result);
+ result = NewBigNum(sizeof(BigNumStr), &q);
+ BREAK_ON_EPID_ERROR(result);
+ sts = ippsSet_BN(IppsBigNumPOS, sizeof(q_data) / sizeof(Ipp32u),
+ (Ipp32u*)&q_data, q->ipp_bn);
+ BREAK_ON_IPP_ERROR(sts, result);
+
+ // save parameters a and p for future use
+ result = NewFfElement(&paring_state_ctx->Fq, &paring_state_ctx->a);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewBigNum(sizeof(BigNumStr), &p);
+ BREAK_ON_EPID_ERROR(result);
+ sts = ippsGFpECGet(ga->ipp_ec, NULL, paring_state_ctx->a->ipp_ff_elem, NULL,
+ NULL, NULL, &p_data, &p_len, NULL, NULL);
+ BREAK_ON_IPP_ERROR(sts, result);
+ if (p_len * sizeof(*p_data) > sizeof(BigNumStr)) {
+ result = kEpidErr; // order size is unexpected
+ break;
+ }
+ sts = ippsSet_BN(IppsBigNumPOS, p_len, p_data, p->ipp_bn);
+ BREAK_ON_IPP_ERROR(sts, result);
+ // compute p bit size requred for pairing
+ sts = ippsGetOctString_BN((Ipp8u*)&paring_state_ctx->p,
+ sizeof(paring_state_ctx->p), p->ipp_bn);
+ BREAK_ON_IPP_ERROR(sts, result);
+ paring_state_ctx->p_bitsize = OctStrBitSize(
+ paring_state_ctx->p.data.data, sizeof(paring_state_ctx->p.data.data));
+
+ // compute final_exp_constant = (q^2 - q + 1)/p
+ result =
+ NewBigNum(2 * sizeof(BigNumStr), &paring_state_ctx->final_exp_constant);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewBigNum(sizeof(BigNumStr), &tmp);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadBigNum(one_str, sizeof(one_str), tmp);
+ BREAK_ON_EPID_ERROR(result);
+
+ result = BigNumMul(q, q, paring_state_ctx->final_exp_constant);
+ BREAK_ON_EPID_ERROR(result);
+ result = BigNumSub(paring_state_ctx->final_exp_constant, q,
+ paring_state_ctx->final_exp_constant);
+ BREAK_ON_EPID_ERROR(result);
+ result = BigNumAdd(paring_state_ctx->final_exp_constant, tmp,
+ paring_state_ctx->final_exp_constant);
+ BREAK_ON_EPID_ERROR(result);
+ result = BigNumDiv(paring_state_ctx->final_exp_constant, p,
+ paring_state_ctx->final_exp_constant, tmp);
+ BREAK_ON_EPID_ERROR(result);
+ result = WriteBigNum(tmp, sizeof(remainder_str), &remainder_str);
+ if (kEpidNoErr != result || 0 != remainder_str) {
+ result = kEpidBadArgErr; // p does not divide (q^2 - q + 1)
+ break;
+ }
+
+ for (i = 0; i < 3; i++) {
+ result =
+ NewFfElement(&paring_state_ctx->Fq3, &(paring_state_ctx->alpha_q[i]));
+ BREAK_ON_EPID_ERROR(result);
+ }
+ BREAK_ON_EPID_ERROR(result);
+ /* t^(0*q) */
+ trans_100.a[0].data.data[31] = 1;
+ result = ReadFfElement(&paring_state_ctx->Fq3, &trans_100,
+ sizeof(trans_100), paring_state_ctx->alpha_q[0]);
+ BREAK_ON_EPID_ERROR(result);
+ /* t^(1*q) */
+ trans_010.a[1].data.data[31] = 1;
+ result = ReadFfElement(&paring_state_ctx->Fq3, &trans_010,
+ sizeof(trans_010), paring_state_ctx->alpha_q[1]);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfExp(&paring_state_ctx->Fq3, paring_state_ctx->alpha_q[1], q,
+ paring_state_ctx->alpha_q[1]);
+ BREAK_ON_EPID_ERROR(result);
+ /* t^(2*q) */
+ result = FfMul(&paring_state_ctx->Fq3, paring_state_ctx->alpha_q[1],
+ paring_state_ctx->alpha_q[1], paring_state_ctx->alpha_q[2]);
+ BREAK_ON_EPID_ERROR(result);
+
+ *ps = paring_state_ctx;
+ result = kEpidNoErr;
+ } while (0);
+
+ EpidZeroMemory(&fq3_str, sizeof(fq3_str));
+ EpidZeroMemory(&q_data, sizeof(q_data));
+ DeleteBigNum(&p);
+ DeleteBigNum(&q);
+ DeleteBigNum(&tmp);
+ DeleteFfElement(&qnr);
+ DeleteFfElement(&inv_qnr);
+ DeleteFfElement(&neg_qnr);
+ if (kEpidNoErr != result) {
+ if (paring_state_ctx) {
+ DeleteFfElement(&paring_state_ctx->a);
+ DeleteFfElement(&paring_state_ctx->fq3_inv_constant);
+ DeleteFfElement(&paring_state_ctx->fq3_inv2_constant);
+ DeleteBigNum(&paring_state_ctx->final_exp_constant);
+ for (i = 0; i < 3; i++) {
+ DeleteFfElement(&(paring_state_ctx->alpha_q[i]));
+ }
+ SAFE_FREE(paring_state_ctx);
+ }
+ }
+ return result;
+}
+
+void DeleteEpid11PairingState(Epid11PairingState** ps) {
+ size_t i;
+ if (ps && *ps) {
+ DeleteFfElement(&(*ps)->a);
+ DeleteFfElement(&(*ps)->fq3_inv_constant);
+ DeleteFfElement(&(*ps)->fq3_inv2_constant);
+ DeleteBigNum(&(*ps)->final_exp_constant);
+ for (i = 0; i < 3; i++) {
+ DeleteFfElement(&(*ps)->alpha_q[i]);
+ }
+ SAFE_FREE(*ps);
+ }
+}
+
+EpidStatus Epid11Pairing(Epid11PairingState* ps, EcPoint const* a,
+ EcPoint const* b, FfElement* d) {
+ EpidStatus result = kEpidErr;
+ IppStatus sts;
+ FfElement* b0 = NULL;
+ FfElement* b1 = NULL;
+ FfElement* pQx = NULL;
+ FfElement* pQy = NULL;
+ FfElement* px = NULL;
+ FfElement* py = NULL;
+ FfElement* X = NULL;
+ FfElement* Y = NULL;
+ FfElement* Z = NULL;
+ FfElement* X2 = NULL;
+ FfElement* Y2 = NULL;
+ FfElement* Z2 = NULL;
+ FfElement* w = NULL;
+ FfElement* v = NULL;
+ FfElement* ty = NULL;
+ FfElement* ry = NULL;
+ FfElement* tx = NULL;
+ FfElement* rx = NULL;
+ FfElement* t1 = NULL;
+ FfElement* t2 = NULL;
+ FfElement* t3 = NULL;
+ FfElement* tt1 = NULL;
+ FfElement* tt2 = NULL;
+ FfElement* r = NULL;
+ Epid11G1ElemStr a_str = {0};
+ Epid11G2ElemStr b_str = {0};
+ Epid11GtElemStr bx_str = {0};
+ Epid11GtElemStr by_str = {0};
+ bool is_identity;
+ int i;
+
+ if (!ps || !a || !b || !d) return kEpidBadArgErr;
+
+ do {
+ Epid11GtElemStr one_fq6 = {0};
+ FqElemStr one_fq = {0};
+ one_fq6.a[0].a[0].data.data[31] = 1;
+ one_fq.data.data[31] = 1;
+
+ // If P = O, point at infinity, then return r = 1
+ result = EcIsIdentity(ps->ga, a, &is_identity);
+ BREAK_ON_EPID_ERROR(result);
+ if (is_identity) {
+ result = ReadFfElement(ps->ff, &one_fq6, sizeof(one_fq6), d);
+ BREAK_ON_EPID_ERROR(result);
+ result = kEpidNoErr;
+ break;
+ }
+
+ // Let Q = (Q.x, Q.y), where Q.x and Q.y are elements in Fqd.
+ result = NewFfElement(&ps->Fq3, &b0);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq3, &b1);
+ BREAK_ON_EPID_ERROR(result);
+ result = WriteEcPoint(ps->gb, b, &b_str, sizeof(b_str));
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(&ps->Fq3, &b_str.x, sizeof(b_str.x), b0);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(&ps->Fq3, &b_str.y, sizeof(b_str.y), b1);
+ BREAK_ON_EPID_ERROR(result);
+
+ // Now we compute Qx, Qy, two elements in GT, as follows.
+ result = NewFfElement(ps->ff, &pQx);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(ps->ff, &pQy);
+ BREAK_ON_EPID_ERROR(result);
+
+ // Compute Qx = (inv * Q.x, 0).
+ result = FfMul(&ps->Fq3, ps->fq3_inv_constant, b0, b0);
+ BREAK_ON_EPID_ERROR(result);
+ result = WriteFfElement(&ps->Fq3, b0, &bx_str.a[0], sizeof(bx_str.a[0]));
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(ps->ff, &bx_str, sizeof(bx_str), pQx);
+ BREAK_ON_EPID_ERROR(result);
+
+ // Compute Qy = (0, inv^2 * Q.y).
+ result = FfMul(&ps->Fq3, ps->fq3_inv2_constant, b1, b1);
+ BREAK_ON_EPID_ERROR(result);
+ result = WriteFfElement(&ps->Fq3, b1, &by_str.a[1], sizeof(by_str.a[1]));
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(ps->ff, &by_str, sizeof(by_str), pQy);
+ BREAK_ON_EPID_ERROR(result);
+
+ // Let P = (px, py), where px, py are big integers.
+ result = NewFfElement(&ps->Fq, &px);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq, &py);
+ BREAK_ON_EPID_ERROR(result);
+ result = WriteEcPoint(ps->ga, a, &a_str, sizeof(a_str));
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(&ps->Fq, &a_str.x, sizeof(a_str.x), px);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(&ps->Fq, &a_str.y, sizeof(a_str.y), py);
+ BREAK_ON_EPID_ERROR(result);
+
+ // Let X, Y, Z, X', Y', Z', w, v, ty, ry be elements in Fq.
+ result = NewFfElement(&ps->Fq, &X);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq, &Y);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq, &Z);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq, &X2);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq, &Y2);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq, &Z2);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq, &w);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq, &v);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq, &ty);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq, &ry);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq, &t1);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq, &t2);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq, &t3);
+ BREAK_ON_EPID_ERROR(result);
+
+ // Let tx, rx be elements in GT.
+ result = NewFfElement(ps->ff, &tx);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(ps->ff, &rx);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(ps->ff, &tt1);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(ps->ff, &tt2);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(ps->ff, &r);
+ BREAK_ON_EPID_ERROR(result);
+
+ // Set X = px,
+ result = ReadFfElement(&ps->Fq, &a_str.x, sizeof(a_str.x), X);
+ BREAK_ON_EPID_ERROR(result);
+
+ // Y = py,
+ result = ReadFfElement(&ps->Fq, &a_str.y, sizeof(a_str.y), Y);
+ BREAK_ON_EPID_ERROR(result);
+
+ // Z = 1,
+ result = ReadFfElement(&ps->Fq, &one_fq, sizeof(one_fq), Z);
+ BREAK_ON_EPID_ERROR(result);
+
+ // ry = 1.
+ result = ReadFfElement(&ps->Fq, &one_fq, sizeof(one_fq), ry);
+ BREAK_ON_EPID_ERROR(result);
+
+ // Set rx = 1, identity element of GT.
+ result = ReadFfElement(ps->ff, &one_fq6, sizeof(one_fq6), rx);
+ BREAK_ON_EPID_ERROR(result);
+
+ // Let pn ... p1 p0 be the binary representation of p
+ // For i = n-1, ..., 0 do
+ for (i = (int)ps->p_bitsize - 2; i >= 0; i--) {
+ bool pi = ps->p.data.data[sizeof(ps->p) - 1 - (i >> 3)] & (1 << (i & 7));
+
+ result = FfMul(&ps->Fq, Z, Z, ty); // ty = Z^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, ty, ty, t1); // t1 = Z^4
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, t1, ps->a, t1); // t1 = a*Z^4
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, X, X, w); // w = X^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfAdd(&ps->Fq, w, w, t2); // t2 = 2 * X^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfAdd(&ps->Fq, w, t2, w); // w = 3 * X^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfAdd(&ps->Fq, w, t1, w); // w = 3 * X^2 + a * Z^4
+ BREAK_ON_EPID_ERROR(result);
+
+ result = FfMul(&ps->Fq, Y, Y, t1); // t1 = Y^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfAdd(&ps->Fq, t1, t1, t3); // t3 = 2* Y^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, t3, X, v); // v = 2 * X * Y^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfAdd(&ps->Fq, v, v, v); // v = 4 * X * Y^2
+ BREAK_ON_EPID_ERROR(result);
+
+ result = FfMul(&ps->Fq, w, w, X2); // X2 = w^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(&ps->Fq, X2, v, X2); // X2 = w^2 - v
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(&ps->Fq, X2, v, X2); // X2 = w^2 - 2 * w
+ BREAK_ON_EPID_ERROR(result);
+
+ result = FfMul(&ps->Fq, t3, t3, t3); // t3 = 4 * Y^4
+ BREAK_ON_EPID_ERROR(result);
+ result = FfAdd(&ps->Fq, t3, t3, t3); // t3 = 8 * Y^4
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(&ps->Fq, v, X2, Y2); // Y2 = v - X2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, Y2, w, Y2); // Y2 = w * (v - X2)
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(&ps->Fq, Y2, t3, Y2); // Y2 = w * (v - X2) - 8 * Y^4
+ BREAK_ON_EPID_ERROR(result);
+
+ result = FfMul(&ps->Fq, Y, Z, Z2); // Z2 = Y * Z
+ BREAK_ON_EPID_ERROR(result);
+ result = FfAdd(&ps->Fq, Z2, Z2, Z2); // Z2 = 2 * Y * Z
+ BREAK_ON_EPID_ERROR(result);
+
+ /* compute line */
+ result = FfMul(&ps->Fq, ty, w, t2); // t2 = w * Z^2
+ BREAK_ON_EPID_ERROR(result);
+ result = Fq6FromFq(ps->ff, &ps->Fq, t2, tt2);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(ps->ff, pQx, tt2, tt1); // tt1 = w * Z^2 * Qx
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, w, X, t2); // t2 = w * X
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(&ps->Fq, t2, t1, t2); // t2 = w * X - Y^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(&ps->Fq, t2, t1, t2); // t2 = w * X - 2 * Y^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, ty, Z2, ty); // ty = Z2 * Z^2
+ BREAK_ON_EPID_ERROR(result);
+ result = Fq6FromFq(ps->ff, &ps->Fq, ty, tt2);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(ps->ff, pQy, tt2, tx); // tx = ty * Qy
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(ps->ff, tx, tt1, tx); // tx = ty * Qy - w * Z^2 * Qx
+ BREAK_ON_EPID_ERROR(result);
+ result = Fq6FromFq(ps->ff, &ps->Fq, t2, tt2);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfAdd(ps->ff, tx, tt2,
+ tx); // tx = ty * Qy - w * Z^2 * Qx + w * X - 2 * Y^2
+ BREAK_ON_EPID_ERROR(result);
+
+ sts = ippsGFpCpyElement(X2->ipp_ff_elem, X->ipp_ff_elem,
+ ps->Fq.ipp_ff); // X = X2
+ BREAK_ON_IPP_ERROR(sts, result);
+ sts = ippsGFpCpyElement(Y2->ipp_ff_elem, Y->ipp_ff_elem,
+ ps->Fq.ipp_ff); // Y = Y2
+ BREAK_ON_IPP_ERROR(sts, result);
+ sts = ippsGFpCpyElement(Z2->ipp_ff_elem, Z->ipp_ff_elem,
+ ps->Fq.ipp_ff); // Z = Z2
+ BREAK_ON_IPP_ERROR(sts, result);
+
+ /* udpate rx, ry */
+ result = FfMul(ps->ff, rx, rx, tt1); // tt1 = rx * rx
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(ps->ff, tx, tt1, rx); // rx = tx * rx * rx
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, ry, ry, t1); // t1 = ry * ry
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, ty, t1, ry); // ry = ty * ry * ry
+ BREAK_ON_EPID_ERROR(result);
+
+ if (pi && i) {
+ result = FfMul(&ps->Fq, Z, Z, t1); // t1 = Z^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, px, t1, w); // w = px * Z^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(&ps->Fq, w, X, w); // w = px * Z^2 - X
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, t1, Z, t1); // t1 = Z^3
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, py, t1, v); // v = py * Z^3
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(&ps->Fq, v, Y, v); // v = py * Z^3 - Y
+ BREAK_ON_EPID_ERROR(result);
+
+ result = FfMul(&ps->Fq, w, w, t1); // t1 = w^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, w, t1, t2); // t2 = w^3
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, X, t1, t3); // t3 = X * w^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, v, v, X2); // X2 = v^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(&ps->Fq, X2, t2, X2); // X2 = v^2 - w^3
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(&ps->Fq, X2, t3, X2); // X2 = v^2 - w^3 - X * w^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(&ps->Fq, X2, t3, X2); // X2 = v^2 - w^3 - 2 * X * w^2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(&ps->Fq, t3, X2, Y2); // Y2 = X * w^2 - X2
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, Y2, v, Y2); // Y2 = v * (X * w^2 - X2)
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, t2, Y, t2); // t2 = Y * w^3
+ BREAK_ON_EPID_ERROR(result);
+ result =
+ FfSub(&ps->Fq, Y2, t2, Y2); // Y2 = v * (X * w^2 - X2) - Y * w^3
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, w, Z, Z2); // Z2 = w * Z
+ BREAK_ON_EPID_ERROR(result);
+
+ /* compute tx, ty */
+ sts = ippsGFpCpyElement(Z2->ipp_ff_elem, ty->ipp_ff_elem,
+ ps->Fq.ipp_ff); // ty = Z2
+ BREAK_ON_IPP_ERROR(sts, result);
+ result = Fq6FromFq(ps->ff, &ps->Fq, py, tt2);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(ps->ff, pQy, tt2, tx); // tx = Qy - py
+ BREAK_ON_EPID_ERROR(result);
+ result = Fq6FromFq(ps->ff, &ps->Fq, Z2, tt2);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(ps->ff, tx, tt2, tx); // tx = Z2 * (Qy - py)
+ BREAK_ON_EPID_ERROR(result);
+ result = Fq6FromFq(ps->ff, &ps->Fq, px, tt2);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfSub(ps->ff, pQx, tt2, tt1); // tt1 = Qx - px
+ BREAK_ON_EPID_ERROR(result);
+ result = Fq6FromFq(ps->ff, &ps->Fq, v, tt2);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(ps->ff, tt1, tt2, tt1); // tt1 = v * (Qx - px)
+ BREAK_ON_EPID_ERROR(result);
+ result =
+ FfSub(ps->ff, tx, tt1, tx); // tx = Z2 * (Qy - py) - v * (Qx - px)
+ BREAK_ON_EPID_ERROR(result);
+
+ sts = ippsGFpCpyElement(X2->ipp_ff_elem, X->ipp_ff_elem,
+ ps->Fq.ipp_ff); // X = X2
+ BREAK_ON_IPP_ERROR(sts, result);
+ sts = ippsGFpCpyElement(Y2->ipp_ff_elem, Y->ipp_ff_elem,
+ ps->Fq.ipp_ff); // Y = Y2
+ BREAK_ON_IPP_ERROR(sts, result);
+ sts = ippsGFpCpyElement(Z2->ipp_ff_elem, Z->ipp_ff_elem,
+ ps->Fq.ipp_ff); // Z = Z2
+ BREAK_ON_IPP_ERROR(sts, result);
+
+ /* udpate rx, ry */
+ result = FfMul(ps->ff, rx, tx, rx); // rx = rx * tx
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(&ps->Fq, ry, ty, ry); // ry = ry * ty
+ BREAK_ON_EPID_ERROR(result);
+ }
+ }
+ BREAK_ON_EPID_ERROR(result);
+
+ result = FfInv(&ps->Fq, ry, ry); // ry = ry^-1
+ BREAK_ON_EPID_ERROR(result);
+ result = Fq6FromFq(ps->ff, &ps->Fq, ry, tt2);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(ps->ff, rx, tt2, r); // r = rx * ry
+ BREAK_ON_EPID_ERROR(result);
+
+ result = FinalExp(ps, r, d);
+ BREAK_ON_EPID_ERROR(result);
+
+ result = kEpidNoErr;
+ BREAK_ON_EPID_ERROR(result);
+ } while (0);
+
+ EpidZeroMemory(&a_str, sizeof(a_str));
+ EpidZeroMemory(&b_str, sizeof(b_str));
+ EpidZeroMemory(&bx_str, sizeof(bx_str));
+ EpidZeroMemory(&by_str, sizeof(by_str));
+ DeleteFfElement(&b0);
+ DeleteFfElement(&b1);
+ DeleteFfElement(&pQx);
+ DeleteFfElement(&pQy);
+ DeleteFfElement(&px);
+ DeleteFfElement(&py);
+ DeleteFfElement(&X);
+ DeleteFfElement(&Y);
+ DeleteFfElement(&Z);
+ DeleteFfElement(&X2);
+ DeleteFfElement(&Y2);
+ DeleteFfElement(&Z2);
+ DeleteFfElement(&w);
+ DeleteFfElement(&v);
+ DeleteFfElement(&ty);
+ DeleteFfElement(&ry);
+ DeleteFfElement(&tx);
+ DeleteFfElement(&rx);
+ DeleteFfElement(&t1);
+ DeleteFfElement(&t2);
+ DeleteFfElement(&t3);
+ DeleteFfElement(&tt1);
+ DeleteFfElement(&tt2);
+ DeleteFfElement(&r);
+ return result;
+}
+
+static EpidStatus Fq6FromFq(FiniteField* fq6, FiniteField* fq,
+ FfElement const* a, FfElement* r) {
+ EpidStatus result = kEpidErr;
+ // initialize all Fq6 coefficients to 0
+ Fq6ElemStr r_str = {0};
+
+ if (!fq6 || !fq || !a || !r) return kEpidBadArgErr;
+
+ do {
+ // set Fq6 degree zero coefficient to 'a'
+ result = WriteFfElement(fq, a, &r_str.a[0].a[0], sizeof(r_str.a[0].a[0]));
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(fq6, &r_str, sizeof(r_str), r);
+ BREAK_ON_EPID_ERROR(result);
+ result = kEpidNoErr;
+ } while (0);
+ EpidZeroMemory(&r_str, sizeof(r_str));
+ return result;
+}
+
+/// Set r from Fq6 to (a, b), where a and b from Fq3
+static EpidStatus JoinFq3(Epid11PairingState* ps, FfElement const* a,
+ FfElement const* b, FfElement* r) {
+ EpidStatus result = kEpidErr;
+ Epid11GtElemStr r_str = {0};
+
+ do {
+ // validate inputs
+ if (!ps || !a || !b || !r) {
+ result = kEpidBadArgErr;
+ break;
+ }
+ result = WriteFfElement(&ps->Fq3, a, &r_str.a[0], sizeof(r_str.a[0]));
+ BREAK_ON_EPID_ERROR(result);
+ result = WriteFfElement(&ps->Fq3, b, &r_str.a[1], sizeof(r_str.a[1]));
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(ps->ff, &r_str, sizeof(r_str), r);
+ BREAK_ON_EPID_ERROR(result);
+ result = kEpidNoErr;
+ } while (0);
+
+ EpidZeroMemory(&r_str, sizeof(r_str));
+ return result;
+}
+
+/// Set a0 and a1 from Fq3 to a0' and a1', where a = (a0', a1') from Fq6
+static EpidStatus SplitFq6(Epid11PairingState* ps, FfElement const* a,
+ FfElement* a0, FfElement* a1) {
+ EpidStatus result = kEpidErr;
+ Epid11GtElemStr a_str = {0};
+
+ do {
+ // validate inputs
+ if (!ps || !a0 || !a1 || !a) {
+ result = kEpidBadArgErr;
+ break;
+ }
+ result = WriteFfElement(ps->ff, a, &a_str, sizeof(a_str));
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(&ps->Fq3, &a_str.a[0], sizeof(a_str.a[0]), a0);
+ BREAK_ON_EPID_ERROR(result);
+ result = ReadFfElement(&ps->Fq3, &a_str.a[1], sizeof(a_str.a[1]), a1);
+ BREAK_ON_EPID_ERROR(result);
+ result = kEpidNoErr;
+ } while (0);
+
+ EpidZeroMemory(&a_str, sizeof(a_str));
+ return result;
+}
+
+static EpidStatus FinalExp(Epid11PairingState* ps, FfElement const* r,
+ FfElement* d) {
+ EpidStatus result = kEpidErr;
+ FfElement* r0 = NULL;
+ FfElement* r1 = NULL;
+ FfElement* neg_r1 = NULL;
+ FfElement* x = NULL;
+ FfElement* y = NULL;
+ FfElement* neg_y = NULL;
+ FfElement* t1 = NULL;
+ FfElement* t2 = NULL;
+ FfElement* t3 = NULL;
+ FfElement* t4 = NULL;
+ FfElement* d1 = NULL;
+ FfElement* d2 = NULL;
+ FfElement* inv_d2 = NULL;
+ do {
+ // validate inputs
+ if (!ps || !r || !d) {
+ result = kEpidBadArgErr;
+ break;
+ }
+
+ // a.Let r = (r[0], r[1]), where r[0] and r[1] are elements in Fqd,
+ result = NewFfElement(&ps->Fq3, &r0);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq3, &r1);
+ BREAK_ON_EPID_ERROR(result);
+ result = SplitFq6(ps, r, r0, r1);
+ BREAK_ON_EPID_ERROR(result);
+
+ // b.Compute x = transform(r[0]), where x is an element in Fqd,
+ result = NewFfElement(&ps->Fq3, &x);
+ BREAK_ON_EPID_ERROR(result);
+ result = Transform(ps, r0, x);
+ BREAK_ON_EPID_ERROR(result);
+
+ // c.Compute y = transform(r[1]), where x is an element in Fqd,
+ result = NewFfElement(&ps->Fq3, &y);
+ BREAK_ON_EPID_ERROR(result);
+ result = Transform(ps, r1, y);
+ BREAK_ON_EPID_ERROR(result);
+
+ // d.Let t1, t2, t3, t4 be four variables in GT,
+ result = NewFfElement(ps->ff, &t1);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(ps->ff, &t2);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(ps->ff, &t3);
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(ps->ff, &t4);
+
+ //
+ // e.t1 = (x, y), t2 = (r[0], -r[1]), t3 = (x, -y), t4 = (r[0], r[1]),
+ //
+
+ // t1 = (x, y)
+ result = JoinFq3(ps, x, y, t1);
+ BREAK_ON_EPID_ERROR(result);
+
+ // t2 = (r[0], -r[1])
+ result = NewFfElement(&ps->Fq3, &neg_r1);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfNeg(&ps->Fq3, r1, neg_r1);
+ BREAK_ON_EPID_ERROR(result);
+ result = JoinFq3(ps, r0, neg_r1, t2);
+ BREAK_ON_EPID_ERROR(result);
+
+ // t3 = (x, -y)
+ result = NewFfElement(&ps->Fq3, &neg_y);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfNeg(&ps->Fq3, y, neg_y);
+ BREAK_ON_EPID_ERROR(result);
+ result = JoinFq3(ps, x, neg_y, t3);
+ BREAK_ON_EPID_ERROR(result);
+
+ // t4 = (r[0], r[1])
+ result = JoinFq3(ps, r0, r1, t4);
+ BREAK_ON_EPID_ERROR(result);
+
+ //
+ // f. d = (t1 * t2) / (t3 * t4),
+ //
+
+ // d1 = t1 * t2
+ result = NewFfElement(ps->ff, &d1);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(ps->ff, t1, t2, d1);
+ BREAK_ON_EPID_ERROR(result);
+
+ // d2 = t3 * t4
+ result = NewFfElement(ps->ff, &d2);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(ps->ff, t3, t4, d2);
+ BREAK_ON_EPID_ERROR(result);
+
+ // d = d1 / d2
+ result = NewFfElement(ps->ff, &inv_d2);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfInv(ps->ff, d2, inv_d2);
+ BREAK_ON_EPID_ERROR(result);
+ result = FfMul(ps->ff, d1, inv_d2, d);
+ BREAK_ON_EPID_ERROR(result);
+
+ // g.Compute d = GT.exp(d, (q2 - q + 1) / p).
+ result = FfExp(ps->ff, d, ps->final_exp_constant, d);
+ BREAK_ON_EPID_ERROR(result);
+
+ result = kEpidNoErr;
+ } while (0);
+
+ DeleteFfElement(&r0);
+ DeleteFfElement(&r1);
+ DeleteFfElement(&neg_r1);
+ DeleteFfElement(&x);
+ DeleteFfElement(&y);
+ DeleteFfElement(&neg_y);
+ DeleteFfElement(&t1);
+ DeleteFfElement(&t2);
+ DeleteFfElement(&t3);
+ DeleteFfElement(&t4);
+ DeleteFfElement(&d1);
+ DeleteFfElement(&d2);
+ DeleteFfElement(&inv_d2);
+ return result;
+}
+
+static EpidStatus Transform(Epid11PairingState* ps, FfElement const* a,
+ FfElement* b) {
+ EpidStatus result = kEpidErr;
+ FfElement* tmp = NULL;
+ Fq3ElemStr zero = {0};
+ Fq3ElemStr a_str = {0};
+ Fq3ElemStr tmp_str = {0};
+ int i = 0;
+
+ if (!ps || !a || !b) return kEpidBadArgErr;
+
+ do {
+ result = WriteFfElement(&ps->Fq3, a, &a_str, sizeof(a_str));
+ BREAK_ON_EPID_ERROR(result);
+ result = NewFfElement(&ps->Fq3, &tmp);
+ BREAK_ON_EPID_ERROR(result);
+ // b = 0
+ result = ReadFfElement(&ps->Fq3, &zero, sizeof(zero), b);
+ BREAK_ON_EPID_ERROR(result);
+ for (i = 0; i < 3; i++) {
+ // tmp = (a[0][i], 0, 0)
+ tmp_str.a[0] = a_str.a[i];
+ result = ReadFfElement(&ps->Fq3, &tmp_str, sizeof(tmp_str), tmp);
+ BREAK_ON_EPID_ERROR(result);
+ // tmp *= alpha_q[i]
+ result = FfMul(&ps->Fq3, ps->alpha_q[i], tmp, tmp);
+ BREAK_ON_EPID_ERROR(result);
+ // b += tmp
+ result = FfAdd(&ps->Fq3, tmp, b, b);
+ BREAK_ON_EPID_ERROR(result);
+ }
+ BREAK_ON_EPID_ERROR(result);
+ result = kEpidNoErr;
+ } while (0);
+
+ EpidZeroMemory(&a_str, sizeof(a_str));
+ EpidZeroMemory(&tmp_str, sizeof(tmp_str));
+ DeleteFfElement(&tmp);
+ return result;
+}
diff --git a/epid/common/math/tatepairing.h b/epid/common/math/tatepairing.h
new file mode 100644
index 0000000..3abeb74
--- /dev/null
+++ b/epid/common/math/tatepairing.h
@@ -0,0 +1,120 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Intel(R) EPID 1.1 Pairing interface.
+ */
+
+#ifndef EPID_COMMON_MATH_TATEPAIRING_H_
+#define EPID_COMMON_MATH_TATEPAIRING_H_
+
+#include "epid/common/errors.h"
+#include "epid/common/types.h"
+#include "epid/common/math/finitefield.h"
+#include "epid/common/math/ecgroup.h"
+
+/// EPID 1.1 pairing operations
+/*!
+
+ \defgroup Epid11PairingPrimitives EPID 1.1 specific pairing
+ 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.
+
+ \ingroup PairingPrimitives
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+ support</b></a>
+ @{
+*/
+
+/// A pairing
+typedef struct Epid11PairingState Epid11PairingState;
+
+/// 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.
+
+ \param[in] ga
+ The EcGroup from which the first parameter of the pairing will be taken.
+ \param[in] gb
+ The EcGroup from which the second parameter of the pairing will be taken.
+ \param[in] ff
+ The result finite field. Must be a Fq12 field.
+ \param[out] ps
+ Newly constructed pairing state.
+
+ \returns ::EpidStatus
+
+ \see DeleteEpid11PairingState
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+ support</b></a>
+*/
+EpidStatus NewEpid11PairingState(EcGroup const* ga, EcGroup const* gb,
+ FiniteField const* ff,
+ 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.
+
+ \param[in] ps
+ The pairing state. Can be NULL.
+
+ \see NewEpid11PairingState
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+ support</b></a>
+*/
+void DeleteEpid11PairingState(Epid11PairingState** ps);
+
+/// 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.
+
+ \param[in] ps
+ The pairing state.
+ \param[in] a
+ The first value to pair. Must be in ga.
+ \param[in] b
+ The second value to pair. Must be in gb.
+ \param[out] d
+ The result of the pairing. Must be in ff.
+
+ \returns ::EpidStatus
+
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+ support</b></a>
+*/
+EpidStatus Epid11Pairing(Epid11PairingState* ps, EcPoint const* a,
+ EcPoint const* b, FfElement* d);
+
+/*!
+ @}
+*/
+
+#endif // EPID_COMMON_MATH_TATEPAIRING_H_
diff --git a/epid/common/math/unittests/bignum-test.cc b/epid/common/math/unittests/bignum-test.cc
index 3f34b44..bd8c360 100644
--- a/epid/common/math/unittests/bignum-test.cc
+++ b/epid/common/math/unittests/bignum-test.cc
@@ -26,7 +26,6 @@
extern "C" {
#include "epid/common/math/bignum.h"
-#include "epid/common/memory.h"
}
namespace {
@@ -391,4 +390,144 @@ TEST_F(BigNumTest, MulWorksWith264BitValue) {
EXPECT_TRUE(CompareBigNum(bn, bn_33low));
}
+///////////////////////////////////////////////////////////////////////
+// Division
+
+TEST_F(BigNumTest, DivFailsGivenNullPointer) {
+ BigNumObj a, b, q, r;
+ EXPECT_EQ(kEpidBadArgErr, BigNumDiv(nullptr, b, q, r));
+ EXPECT_EQ(kEpidBadArgErr, BigNumDiv(a, nullptr, q, r));
+ EXPECT_EQ(kEpidBadArgErr, BigNumDiv(a, b, nullptr, r));
+ EXPECT_EQ(kEpidBadArgErr, BigNumDiv(a, b, q, nullptr));
+}
+
+TEST_F(BigNumTest, DivFailsGivenDivByZero) {
+ BigNumObj a;
+ BigNumObj zero(this->str_0);
+ BigNumObj q, r;
+ EXPECT_EQ(kEpidBadArgErr, BigNumDiv(a, zero, q, r));
+}
+
+TEST_F(BigNumTest, DivToOneKeepsOriginal) {
+ BigNumObj a(this->str_large);
+ BigNumObj zero(this->str_0);
+ BigNumObj one(this->str_1);
+ BigNumObj q, r;
+ EXPECT_EQ(kEpidNoErr, BigNumDiv(a, one, q, r));
+ EXPECT_TRUE(CompareBigNum(a, q));
+ EXPECT_TRUE(CompareBigNum(zero, r));
+}
+
+TEST_F(BigNumTest, DivToItselfIsIdentity) {
+ BigNumObj a(this->str_large);
+ BigNumObj zero(this->str_0);
+ BigNumObj one(this->str_1);
+ BigNumObj q, r;
+ EXPECT_EQ(kEpidNoErr, BigNumDiv(a, a, q, r));
+ EXPECT_TRUE(CompareBigNum(one, q));
+ EXPECT_TRUE(CompareBigNum(zero, r));
+}
+
+TEST_F(BigNumTest, DivOneByTwoIsZero) {
+ BigNumObj zero(this->str_0);
+ BigNumObj one(this->str_1);
+ BigNumObj two(this->str_2);
+ BigNumObj q, r;
+ EXPECT_EQ(kEpidNoErr, BigNumDiv(one, two, q, r));
+ EXPECT_TRUE(CompareBigNum(zero, q));
+ EXPECT_TRUE(CompareBigNum(one, r));
+}
+
+///////////////////////////////////////////////////////////////////////
+// IsEven
+
+TEST_F(BigNumTest, IsEvenFailsGivenNullPointer) {
+ BigNumObj zero(this->str_0);
+ bool r;
+ EXPECT_EQ(kEpidBadArgErr, BigNumIsEven(nullptr, &r));
+ EXPECT_EQ(kEpidBadArgErr, BigNumIsEven(zero, nullptr));
+}
+
+TEST_F(BigNumTest, IsEvenPassesEvenNumbers) {
+ BigNumObj zero(this->str_0);
+ BigNumObj two(this->str_2);
+ BigNumObj big(this->str_big);
+ bool r;
+ EXPECT_EQ(kEpidNoErr, BigNumMul(big, two, big));
+ EXPECT_EQ(kEpidNoErr, BigNumIsEven(zero, &r));
+ EXPECT_EQ(kEpidNoErr, BigNumIsEven(two, &r));
+ EXPECT_EQ(kEpidNoErr, BigNumIsEven(big, &r));
+}
+
+TEST_F(BigNumTest, IsEvenFailsOddNumbers) {
+ BigNumObj zero(this->str_0);
+ BigNumObj one(this->str_1);
+ BigNumObj two(this->str_2);
+ BigNumObj big(this->str_big);
+ bool r;
+ EXPECT_EQ(kEpidNoErr, BigNumMul(big, two, big));
+ EXPECT_EQ(kEpidNoErr, BigNumAdd(big, one, big));
+ EXPECT_EQ(kEpidNoErr, BigNumIsEven(one, &r));
+ EXPECT_EQ(kEpidNoErr, BigNumIsEven(big, &r));
+}
+
+///////////////////////////////////////////////////////////////////////
+// IsZero
+TEST_F(BigNumTest, IsZeroFailsGivenNullPointer) {
+ BigNumObj zero(this->str_0);
+ bool r;
+ EXPECT_EQ(kEpidBadArgErr, BigNumIsZero(nullptr, &r));
+ EXPECT_EQ(kEpidBadArgErr, BigNumIsZero(zero, nullptr));
+}
+
+TEST_F(BigNumTest, IsZeroPassesZero) {
+ BigNumObj zero(this->str_0);
+ bool r;
+ EXPECT_EQ(kEpidNoErr, BigNumIsZero(zero, &r));
+}
+
+TEST_F(BigNumTest, IsZeroFailsNonZero) {
+ BigNumObj one(this->str_1);
+ BigNumObj two(this->str_2);
+ BigNumObj big(this->str_big);
+ bool r;
+ EXPECT_EQ(kEpidNoErr, BigNumIsZero(one, &r));
+ EXPECT_EQ(kEpidNoErr, BigNumIsZero(two, &r));
+ EXPECT_EQ(kEpidNoErr, BigNumIsZero(big, &r));
+}
+
+///////////////////////////////////////////////////////////////////////
+// Pow2N
+TEST_F(BigNumTest, Pow2NFailsGivenNullPointer) {
+ EXPECT_EQ(kEpidBadArgErr, BigNumPow2N(1, nullptr));
+}
+
+TEST_F(BigNumTest, Pow2NZeroGivesOne) {
+ BigNumObj r;
+ BigNumObj one(this->str_1);
+ EXPECT_EQ(kEpidNoErr, BigNumPow2N(0, r));
+ EXPECT_TRUE(CompareBigNum(one, r));
+}
+
+TEST_F(BigNumTest, Pow2NOneGivesTwo) {
+ BigNumObj r;
+ BigNumObj two(this->str_2);
+ EXPECT_EQ(kEpidNoErr, BigNumPow2N(1, r));
+ EXPECT_TRUE(CompareBigNum(two, r));
+}
+
+TEST_F(BigNumTest, Pow2NGivesPow2n) {
+ unsigned int n = 2;
+ BigNumObj r;
+ BigNumObj two(this->str_2);
+ BigNumObj expect;
+ EXPECT_EQ(kEpidNoErr, BigNumMul(two, two, expect));
+ for (n = 2; n < 4; n++) {
+ EXPECT_EQ(kEpidNoErr, BigNumPow2N(n, r));
+ EXPECT_TRUE(CompareBigNum(expect, r));
+ EXPECT_EQ(kEpidNoErr, BigNumMul(expect, two, expect));
+ n++;
+ }
+}
+
} // namespace
diff --git a/epid/common/math/unittests/ecdsa_sign-test.cc b/epid/common/math/unittests/ecdsa_sign-test.cc
index ce47b5b..a9759cb 100644
--- a/epid/common/math/unittests/ecdsa_sign-test.cc
+++ b/epid/common/math/unittests/ecdsa_sign-test.cc
@@ -27,7 +27,6 @@
extern "C" {
#include "epid/common/math/ecdsa.h"
-#include "epid/common/memory.h"
}
#include "epid/common-testhelper/prng-testhelper.h"
diff --git a/epid/common/math/unittests/ecgroup-test.cc b/epid/common/math/unittests/ecgroup-test.cc
index 9c2ce85..b8b3aa6 100644
--- a/epid/common/math/unittests/ecgroup-test.cc
+++ b/epid/common/math/unittests/ecgroup-test.cc
@@ -173,7 +173,20 @@ class EcGroupTest : public ::testing::Test {
static const G2ElemStr efq2_inv_a_str;
static const G2ElemStr efq2_identity_str;
+ // Epid 1.1 hash of message "aad"
+ static const Epid11G3ElemStr kAadHash;
+ // Epid 1.1 hash of message "bsn0"
+ static const Epid11G3ElemStr kBsn0Hash;
+ // Epid 1.1 hash of message "test"
+ static const Epid11G3ElemStr kTestHash;
+ // Epid 1.1 hash of message "aac"
+ static const Epid11G3ElemStr kAacHash;
+
virtual void SetUp() {
+ Epid11Params epid11_params_str = {
+#include "epid/common/1.1/src/epid11params_tate.inc"
+ };
+
fq = FiniteFieldObj(q);
fq_a = FfElementObj(&fq, a1);
fq_b = FfElementObj(&fq, b1);
@@ -199,6 +212,23 @@ class EcGroupTest : public ::testing::Test {
efq2_b = EcPointObj(&efq2, efq2_b_str);
efq2_r = EcPointObj(&efq2);
efq2_identity = EcPointObj(&efq2, efq_identity_str);
+
+ epid11_Fq_tick = FiniteFieldObj(epid11_params_str.q_tick);
+ epid11_a_tick = FfElementObj(&epid11_Fq_tick, epid11_params_str.a_tick);
+ epid11_b_tick = FfElementObj(&epid11_Fq_tick, epid11_params_str.b_tick);
+ epid11_g3_x = FfElementObj(&epid11_Fq_tick, epid11_params_str.g3.x);
+ epid11_g3_y = FfElementObj(&epid11_Fq_tick, epid11_params_str.g3.y);
+ epid11_p_tick = BigNumObj(epid11_params_str.p_tick);
+ BigNumStr h_tick_str = {0};
+ ((OctStr32*)
+ h_tick_str.data.data)[sizeof(BigNumStr) / sizeof(OctStr32) - 1] =
+ epid11_params_str.h_tick;
+ epid11_h_tick = BigNumObj(h_tick_str);
+
+ epid11_G3 =
+ EcGroupObj(&epid11_Fq_tick, epid11_a_tick, epid11_b_tick, epid11_g3_x,
+ epid11_g3_y, epid11_p_tick, epid11_h_tick);
+ epid11_G3_r = EcPointObj(&epid11_G3);
}
FiniteFieldObj fq;
@@ -222,6 +252,17 @@ class EcGroupTest : public ::testing::Test {
EcPointObj efq2_b;
EcPointObj efq2_r;
EcPointObj efq2_identity;
+
+ FiniteFieldObj epid11_Fq_tick;
+ FfElementObj epid11_a_tick;
+ FfElementObj epid11_b_tick;
+ FfElementObj epid11_g3_x;
+ FfElementObj epid11_g3_y;
+ BigNumObj epid11_p_tick;
+ BigNumObj epid11_h_tick;
+
+ EcGroupObj epid11_G3;
+ EcPointObj epid11_G3_r;
};
const G1ElemStr EcGroupTest::g1_str = {
@@ -490,6 +531,46 @@ const G2ElemStr EcGroupTest::efq2_identity_str = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
},
};
+
+// msg=aad, size=3
+// algorithm code path: sqrt result <= modulus/2, high bit is 0
+const G1ElemStr EcGroupTest::kAadHash = {
+ 0xB2, 0x12, 0x39, 0x3A, 0xA0, 0xCF, 0xA0, 0xDE, 0xB8, 0x85, 0xE7,
+ 0x5B, 0x1C, 0x13, 0x01, 0x0D, 0x0D, 0xA2, 0xBA, 0xC5, 0xB4, 0x3F,
+ 0x5E, 0xC7, 0x5B, 0x5A, 0xE2, 0x49, 0x1B, 0x3F, 0x65, 0x08, 0xC2,
+ 0x47, 0x40, 0xF3, 0xC7, 0x08, 0xA2, 0x41, 0x61, 0x99, 0x65, 0x4D,
+ 0x82, 0x2B, 0x9A, 0x06, 0x2C, 0xDF, 0x07, 0x71, 0xCC, 0xFA, 0x73,
+ 0x51, 0x45, 0x87, 0x55, 0x07, 0x17, 0xD1, 0x9C, 0x0B};
+
+// msg=bsn0, size=4
+// algorithm code path: sqrt result <= modulus/2, high bit is 1
+const G1ElemStr EcGroupTest::kBsn0Hash = {
+ 0x04, 0x0C, 0xB6, 0x57, 0x26, 0xD0, 0xE1, 0x48, 0x23, 0xC2, 0x40,
+ 0x5A, 0x91, 0x7C, 0xC6, 0x33, 0xFE, 0x0C, 0xC2, 0x2B, 0x52, 0x9D,
+ 0x6B, 0x87, 0xF9, 0xA7, 0x82, 0xCB, 0x36, 0x90, 0xFB, 0x09, 0x10,
+ 0xB1, 0x55, 0xAD, 0x98, 0x0D, 0x4F, 0x94, 0xDD, 0xBE, 0x52, 0x21,
+ 0x87, 0xC6, 0x3E, 0x52, 0x22, 0x83, 0xE3, 0x10, 0x36, 0xEF, 0xF8,
+ 0x6B, 0x04, 0x4D, 0x9F, 0x14, 0xA8, 0x51, 0xAF, 0xC3};
+
+// msg=test, size=4
+// algorithm code path: sqrt result > modulus/2, high bit is 0
+const G1ElemStr EcGroupTest::kTestHash = {
+ 0x82, 0x14, 0xAD, 0xE2, 0x0E, 0xCC, 0x95, 0x27, 0x14, 0xD0, 0x70,
+ 0xF1, 0x70, 0x17, 0xC2, 0xC2, 0x8C, 0x9F, 0x05, 0x79, 0xCD, 0xC8,
+ 0x72, 0x55, 0xFE, 0xAB, 0x80, 0x6F, 0x40, 0x5A, 0x6E, 0x64, 0x37,
+ 0x14, 0x7F, 0x8B, 0xF9, 0xD7, 0xEB, 0xA4, 0x5D, 0x9E, 0x57, 0x85,
+ 0xFF, 0x0F, 0xE5, 0xC6, 0x73, 0x4F, 0x17, 0x19, 0x96, 0x31, 0x3A,
+ 0xD1, 0xE1, 0x4E, 0xA8, 0xF9, 0x56, 0xD4, 0xBA, 0x4D};
+
+// msg=aac, size=3
+const G1ElemStr EcGroupTest::kAacHash = {
+ 0xAF, 0x5C, 0xBC, 0xD4, 0x88, 0x18, 0xD0, 0x35, 0xBD, 0xE0, 0x2F,
+ 0x77, 0x8B, 0x76, 0x52, 0x78, 0x92, 0x66, 0x36, 0x3A, 0x72, 0x15,
+ 0x20, 0x84, 0xE7, 0x1E, 0xFE, 0x94, 0x77, 0xFD, 0x83, 0x08, 0xEF,
+ 0x4B, 0x6B, 0xDE, 0x24, 0xD8, 0x42, 0x34, 0x88, 0xB8, 0x87, 0x4A,
+ 0xA8, 0x5D, 0x5A, 0xC1, 0x82, 0xFF, 0xE5, 0x25, 0xD7, 0x20, 0x2D,
+ 0x99, 0x49, 0xFE, 0x72, 0x34, 0xAA, 0xC9, 0xD2, 0xAA};
+
///////////////////////////////////////////////////////////////////////
// NewEcGroup
TEST_F(EcGroupTest, NewFailsGivenArgumentsMismatch) {
@@ -1138,6 +1219,292 @@ TEST_F(EcGroupTest, MultiExpWorksGivenTwoG2Exponents) {
EXPECT_EQ(this->efq2_multiexp_abxy_str, efq2_r_str);
}
///////////////////////////////////////////////////////////////////////
+// EcMultiExpBn
+TEST_F(EcGroupTest, MultiExpBnFailsGivenArgumentsMismatch) {
+ EcPoint const* pts_ec1[] = {this->efq_a, this->efq_b};
+ EcPoint const* pts_ec2[] = {this->efq2_a, this->efq2_b};
+ EcPoint const* pts_ec1_ec2[] = {this->efq_a, this->efq2_b};
+ const BigNumStr bnm0 = {{0x11, 0xFF, 0xFF, 0xFF, 0x4F, 0x59, 0xB1, 0xD3, 0x6B,
+ 0x08, 0xFF, 0xFF, 0x0B, 0xF3, 0xAF, 0x27, 0xFF, 0xB8,
+ 0xFF, 0xFF, 0x98, 0xFF, 0xEB, 0xFF, 0xF2, 0x6A, 0xFF,
+ 0xFF, 0xEA, 0x31, 0xFF, 0xFF}};
+ const BigNumStr bnm1 = {{0xE2, 0xFF, 0x03, 0x1D, 0xFF, 0x19, 0x81, 0xCB, 0xFF,
+ 0xFF, 0x6B, 0xD5, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xBD,
+ 0xFF, 0x5A, 0xFF, 0x5C, 0x7C, 0xFF, 0x84, 0xFF, 0xFF,
+ 0x8C, 0x03, 0xB2, 0x26, 0xFF}};
+ BigNumObj bno0(bnm0);
+ BigNumObj bno1(bnm1);
+ BigNum const* b[] = {bno0, bno1};
+ size_t m = 2;
+ EXPECT_EQ(kEpidBadArgErr,
+ EcMultiExpBn(this->efq2, pts_ec1, b, m, this->efq_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ EcMultiExpBn(this->efq, pts_ec2, b, m, this->efq_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ EcMultiExpBn(this->efq, pts_ec1, b, m, this->efq2_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ EcMultiExpBn(this->efq, pts_ec1_ec2, b, m, this->efq_r));
+}
+TEST_F(EcGroupTest, MultiExpBnFailsGivenNullPointer) {
+ EcPoint const* pts[] = {this->efq_a, this->efq_b};
+ EcPoint const* pts_withnull[] = {nullptr, this->efq_b};
+ const BigNumStr bnm0 = {{0x11, 0xFF, 0xFF, 0xFF, 0x4F, 0x59, 0xB1, 0xD3, 0x6B,
+ 0x08, 0xFF, 0xFF, 0x0B, 0xF3, 0xAF, 0x27, 0xFF, 0xB8,
+ 0xFF, 0xFF, 0x98, 0xFF, 0xEB, 0xFF, 0xF2, 0x6A, 0xFF,
+ 0xFF, 0xEA, 0x31, 0xFF, 0xFF}};
+ const BigNumStr bnm1 = {{0xE2, 0xFF, 0x03, 0x1D, 0xFF, 0x19, 0x81, 0xCB, 0xFF,
+ 0xFF, 0x6B, 0xD5, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xBD,
+ 0xFF, 0x5A, 0xFF, 0x5C, 0x7C, 0xFF, 0x84, 0xFF, 0xFF,
+ 0x8C, 0x03, 0xB2, 0x26, 0xFF}};
+ BigNumObj bno0(bnm0);
+ BigNumObj bno1(bnm1);
+ BigNum const* b[] = {bno0, bno1};
+ BigNum const* b_withnull[] = {nullptr, bno1};
+ size_t m = 2;
+ EXPECT_EQ(kEpidBadArgErr, EcMultiExpBn(nullptr, pts, b, m, this->efq_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ EcMultiExpBn(this->efq, nullptr, b, m, this->efq_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ EcMultiExpBn(this->efq, pts, nullptr, m, this->efq_r));
+ EXPECT_EQ(kEpidBadArgErr, EcMultiExpBn(this->efq, pts, b, m, nullptr));
+ EXPECT_EQ(kEpidBadArgErr,
+ EcMultiExpBn(this->efq, pts_withnull, b, m, this->efq_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ EcMultiExpBn(this->efq, pts, b_withnull, m, this->efq_r));
+}
+TEST_F(EcGroupTest, MultiExpBnFailsGivenIncorrectMLen) {
+ EcPoint const* pts[] = {this->efq_a, this->efq_b};
+ const BigNumStr bnm0 = {{0x11, 0xFF, 0xFF, 0xFF, 0x4F, 0x59, 0xB1, 0xD3, 0x6B,
+ 0x08, 0xFF, 0xFF, 0x0B, 0xF3, 0xAF, 0x27, 0xFF, 0xB8,
+ 0xFF, 0xFF, 0x98, 0xFF, 0xEB, 0xFF, 0xF2, 0x6A, 0xFF,
+ 0xFF, 0xEA, 0x31, 0xFF, 0xFF}};
+ const BigNumStr bnm1 = {{0xE2, 0xFF, 0x03, 0x1D, 0xFF, 0x19, 0x81, 0xCB, 0xFF,
+ 0xFF, 0x6B, 0xD5, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xBD,
+ 0xFF, 0x5A, 0xFF, 0x5C, 0x7C, 0xFF, 0x84, 0xFF, 0xFF,
+ 0x8C, 0x03, 0xB2, 0x26, 0xFF}};
+ BigNumObj bno0(bnm0);
+ BigNumObj bno1(bnm1);
+ BigNum const* b[] = {bno0, bno1};
+ EXPECT_EQ(kEpidBadArgErr, EcMultiExpBn(this->efq, pts, b, 0, this->efq_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ EcMultiExpBn(this->efq, pts, b, std::numeric_limits<size_t>::max(),
+ this->efq_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ EcMultiExpBn(this->efq, pts, b, (size_t)INT_MAX + 1, this->efq_r));
+}
+TEST_F(EcGroupTest, MultiExpBnFailsGivenOutOfRangeExponent) {
+ EcPoint const* pt[] = {this->efq_a};
+ BigNumObj bno_p(this->p);
+ BigNum const* b[] = {bno_p};
+ EcPoint const* pts[] = {this->efq_a, this->efq_b};
+ const BigNumStr bnm_1 = {{0x11, 0xFF, 0xFF, 0xFF, 0x4F, 0x59, 0xB1, 0xD3,
+ 0x6B, 0x08, 0xFF, 0xFF, 0x0B, 0xF3, 0xAF, 0x27,
+ 0xFF, 0xB8, 0xFF, 0xFF, 0x98, 0xFF, 0xEB, 0xFF,
+ 0xF2, 0x6A, 0xFF, 0xFF, 0xEA, 0x31, 0xFF, 0xFF}};
+ BigNumObj bno_1(bnm_1);
+ BigNum const* b_1[] = {bno_1, bno_p};
+ BigNum const* b_2[] = {bno_p, bno_1};
+ EXPECT_EQ(kEpidBadArgErr, EcMultiExpBn(this->efq, pt, b, 1, this->efq_r));
+ EXPECT_EQ(kEpidBadArgErr, EcMultiExpBn(this->efq, pts, b_1, 2, this->efq_r));
+ EXPECT_EQ(kEpidBadArgErr, EcMultiExpBn(this->efq, pts, b_2, 2, this->efq_r));
+}
+TEST_F(EcGroupTest, MultiExpBnWorksGivenOneZeroExponent) {
+ G1ElemStr efq_r_str;
+ BigNumStr zero_bn_str = {0};
+ EcPoint const* pts[] = {this->efq_a};
+ BigNumObj bno_zero(zero_bn_str);
+ BigNum const* b[] = {bno_zero};
+ size_t m = 1;
+ EXPECT_EQ(kEpidNoErr, EcMultiExpBn(this->efq, pts, b, m, this->efq_r));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->efq, this->efq_r, &efq_r_str, sizeof(efq_r_str)));
+ EXPECT_EQ(this->efq_identity_str, efq_r_str);
+}
+TEST_F(EcGroupTest, MultiExpBnWorksGivenTwoZeroExponents) {
+ G1ElemStr efq_r_str;
+ BigNumStr zero_bn_str = {0};
+ EcPoint const* pts[] = {this->efq_a, this->efq_a};
+ BigNumObj bno_zero0(zero_bn_str);
+ BigNumObj bno_zero1(zero_bn_str);
+ BigNum const* b[] = {bno_zero0, bno_zero1};
+ size_t m = 2;
+ EXPECT_EQ(kEpidNoErr, EcMultiExpBn(this->efq, pts, b, m, this->efq_r));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->efq, this->efq_r, &efq_r_str, sizeof(efq_r_str)));
+ EXPECT_EQ(this->efq_identity_str, efq_r_str);
+}
+TEST_F(EcGroupTest, MultiExpBnWorksGivenSixZeroExponents) {
+ G1ElemStr efq_r_str;
+ BigNumStr zero_bn_str = {0};
+ EcPoint const* pts[] = {this->efq_a, this->efq_a, this->efq_a,
+ this->efq_a, this->efq_a, this->efq_a};
+ BigNumObj bno_zero0(zero_bn_str);
+ BigNumObj bno_zero1(zero_bn_str);
+ BigNumObj bno_zero2(zero_bn_str);
+ BigNumObj bno_zero3(zero_bn_str);
+ BigNumObj bno_zero4(zero_bn_str);
+ BigNumObj bno_zero5(zero_bn_str);
+ BigNum const* b[] = {bno_zero0, bno_zero1, bno_zero2,
+ bno_zero3, bno_zero4, bno_zero5};
+ size_t m = 6;
+ EXPECT_EQ(kEpidNoErr, EcMultiExpBn(this->efq, pts, b, m, this->efq_r));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->efq, this->efq_r, &efq_r_str, sizeof(efq_r_str)));
+ EXPECT_EQ(this->efq_identity_str, efq_r_str);
+}
+TEST_F(EcGroupTest, MultiExpBnWorksGivenOneG2ZeroExponent) {
+ G2ElemStr efq2_r_str;
+ BigNumStr zero_bn_str = {0};
+ EcPoint const* pts[] = {this->efq2_a};
+ BigNumObj bno_zero(zero_bn_str);
+ BigNum const* b[] = {bno_zero};
+ size_t m = 1;
+ EXPECT_EQ(kEpidNoErr, EcMultiExpBn(this->efq2, pts, b, m, this->efq2_r));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->efq2, this->efq2_r, &efq2_r_str, sizeof(efq2_r_str)));
+ EXPECT_EQ(this->efq2_identity_str, efq2_r_str);
+}
+TEST_F(EcGroupTest, MultiExpBnWorksGivenTwoG2ZeroExponents) {
+ G2ElemStr efq2_r_str;
+ BigNumStr zero_bn_str = {0};
+ EcPoint const* pts[] = {this->efq2_a, this->efq2_a};
+ BigNumObj bno_zero0(zero_bn_str);
+ BigNumObj bno_zero1(zero_bn_str);
+ BigNum const* b[] = {bno_zero0, bno_zero1};
+ size_t m = 2;
+ EXPECT_EQ(kEpidNoErr, EcMultiExpBn(this->efq2, pts, b, m, this->efq2_r));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->efq2, this->efq2_r, &efq2_r_str, sizeof(efq2_r_str)));
+ EXPECT_EQ(this->efq2_identity_str, efq2_r_str);
+}
+TEST_F(EcGroupTest, MultiExpBnWorksGivenSixG2ZeroExponents) {
+ G2ElemStr efq2_r_str;
+ BigNumStr zero_bn_str = {0};
+ BigNumObj bno_zero0(zero_bn_str);
+ BigNumObj bno_zero1(zero_bn_str);
+ BigNumObj bno_zero2(zero_bn_str);
+ BigNumObj bno_zero3(zero_bn_str);
+ BigNumObj bno_zero4(zero_bn_str);
+ BigNumObj bno_zero5(zero_bn_str);
+ EcPoint const* pts[] = {this->efq2_a, this->efq2_a, this->efq2_a,
+ this->efq2_a, this->efq2_a, this->efq2_a};
+ BigNum const* b[] = {bno_zero0, bno_zero1, bno_zero2,
+ bno_zero3, bno_zero4, bno_zero5};
+ size_t m = 6;
+ EXPECT_EQ(kEpidNoErr, EcMultiExpBn(this->efq2, pts, b, m, this->efq2_r));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->efq2, this->efq2_r, &efq2_r_str, sizeof(efq2_r_str)));
+ EXPECT_EQ(this->efq2_identity_str, efq2_r_str);
+}
+TEST_F(EcGroupTest, MultiExpBnWorksGivenOneExponent) {
+ G1ElemStr efq_r_str;
+ EcPoint const* pts[] = {this->efq_a};
+ BigNumObj bno_x(this->x_str);
+ BigNum const* b[] = {bno_x};
+ size_t m = 1;
+ EXPECT_EQ(kEpidNoErr, EcMultiExpBn(this->efq, pts, b, m, this->efq_r));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->efq, this->efq_r, &efq_r_str, sizeof(efq_r_str)));
+ EXPECT_EQ(this->efq_exp_ax_str, efq_r_str);
+}
+TEST_F(EcGroupTest, MultiExpBnWorksGivenTwoExponents) {
+ G1ElemStr efq_r_str;
+ EcPoint const* pts[] = {this->efq_a, this->efq_b};
+ BigNumObj bno_x(this->x_str);
+ BigNumObj bno_y(this->y_str);
+ BigNum const* b[] = {bno_x, bno_y};
+ size_t m = 2;
+ EXPECT_EQ(kEpidNoErr, EcMultiExpBn(this->efq, pts, b, m, this->efq_r));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->efq, this->efq_r, &efq_r_str, sizeof(efq_r_str)));
+ EXPECT_EQ(this->efq_multiexp_abxy_str, efq_r_str);
+}
+TEST_F(EcGroupTest, MultiExpBnWorksGivenOneG2Exponent) {
+ G2ElemStr efq2_r_str;
+ EcPoint const* pts[] = {this->efq2_a};
+ BigNumObj bno_x(this->x_str);
+ BigNum const* b[] = {bno_x};
+ size_t m = 1;
+ EXPECT_EQ(kEpidNoErr, EcMultiExpBn(this->efq2, pts, b, m, this->efq2_r));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->efq2, this->efq2_r, &efq2_r_str, sizeof(efq2_r_str)));
+ EXPECT_EQ(this->efq2_exp_ax_str, efq2_r_str);
+}
+TEST_F(EcGroupTest, MultiExpBnWorksGivenTwoG2Exponents) {
+ G2ElemStr efq2_r_str;
+ EcPoint const* pts[] = {this->efq2_a, this->efq2_b};
+ BigNumObj bno_x(this->x_str);
+ BigNumObj bno_y(this->y_str);
+ BigNum const* b[] = {bno_x, bno_y};
+ size_t m = 2;
+ EXPECT_EQ(kEpidNoErr, EcMultiExpBn(this->efq2, pts, b, m, this->efq2_r));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->efq2, this->efq2_r, &efq2_r_str, sizeof(efq2_r_str)));
+ EXPECT_EQ(this->efq2_multiexp_abxy_str, efq2_r_str);
+}
+TEST_F(EcGroupTest, MultiExpBnWorksGivenTwoDifferentSizeG3Exponents) {
+ const G1ElemStr g3_b_str = {
+ {{{
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b,
+ 0x0e, 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd,
+ 0xb6, 0xe6, 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72,
+ }}},
+ {{{
+ 0xfa, 0x85, 0x0f, 0x5c, 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6,
+ 0x64, 0xda, 0xa9, 0x8e, 0xf5, 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2,
+ 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0, 0x33, 0xec, 0x2a, 0x70,
+ }}}};
+ const G1ElemStr g3_k_str = {
+ {{{
+ 0x41, 0xb7, 0xa4, 0xc8, 0x43, 0x3f, 0x0b, 0xc2, 0x80, 0x31, 0xbe,
+ 0x75, 0x65, 0xe9, 0xbb, 0x81, 0x73, 0x5b, 0x91, 0x4f, 0x3f, 0xd7,
+ 0xbe, 0xb5, 0x19, 0x56, 0x3f, 0x18, 0x95, 0xea, 0xc1, 0xd7,
+ }}},
+ {{{
+ 0xa4, 0x5e, 0xb9, 0x86, 0xfc, 0xe5, 0xc4, 0x0f, 0x54, 0x37, 0xab,
+ 0xed, 0x59, 0x20, 0xce, 0x67, 0x68, 0x3c, 0x25, 0x4d, 0xbc, 0x5f,
+ 0x6a, 0x4d, 0x5a, 0xa7, 0x93, 0xce, 0x90, 0x2d, 0x3e, 0x5a,
+ }}}};
+ EcPointObj B(&this->epid11_G3, g3_b_str);
+ EcPointObj K(&this->epid11_G3, g3_k_str);
+ EcPoint const* pts[] = {B, K};
+ const std::vector<uint8_t> bnm_sf_str = {
+ 0x00, 0x3c, 0xc1, 0x73, 0x35, 0x3c, 0x99, 0x61, 0xb0, 0x80, 0x9a,
+ 0x0e, 0x8d, 0xbf, 0x5d, 0x0b, 0xa9, 0x18, 0x2b, 0x36, 0x3c, 0x06,
+ 0xbc, 0x1c, 0xc7, 0x9f, 0x76, 0xba, 0x5a, 0x26, 0xcd, 0x5e, 0x24,
+ 0xb9, 0x68, 0xde, 0x47, 0x72, 0xf9, 0xf9, 0x1e, 0xaa, 0x74, 0x17,
+ 0x31, 0xe4, 0x66, 0x59, 0x69, 0xe5, 0x9e, 0x27, 0x1d, 0x57, 0xe5,
+ 0x39, 0x57, 0xd4, 0xc5, 0x78, 0xf2, 0x77, 0x5c, 0x9f, 0x6c, 0xfe,
+ 0x12, 0x00, 0xa8, 0xe0, 0xd3, 0x81, 0x38, 0xaa, 0x5a};
+ const BigNumStr bnm_nc_tick_str = {{{
+ 0xcd, 0x2e, 0xe8, 0xf4, 0x85, 0x95, 0x04, 0x09, 0xbd, 0xa4, 0xfa, 0x07,
+ 0xe3, 0x1c, 0xb9, 0x5a, 0x82, 0x73, 0xa6, 0xea, 0x47, 0x5c, 0x31, 0x74,
+ 0x3c, 0x0a, 0xeb, 0x62, 0x94, 0x2f, 0x7b, 0x10,
+ }}};
+ BigNumObj bno_sf(bnm_sf_str);
+ // In order to callculate exp sf data should be devided by group order
+ THROW_ON_EPIDERR(BigNumMod(bno_sf, epid11_p_tick, bno_sf));
+ BigNumObj bno_nc_tick(bnm_nc_tick_str);
+ BigNum const* b[] = {bno_sf, bno_nc_tick};
+ EcPointObj R3 = EcPointObj(&this->epid11_G3);
+ const std::vector<uint8_t> expected_r_str = {
+ // X
+ 0x1E, 0xDF, 0x9E, 0xA5, 0xF5, 0xED, 0xB3, 0x3F, 0xCC, 0x83, 0x10, 0x5E,
+ 0x3E, 0xB7, 0xE5, 0x06, 0x5F, 0x19, 0xF9, 0xFD, 0xE9, 0x57, 0x0B, 0x31,
+ 0xC8, 0xDA, 0x0A, 0x7B, 0xCD, 0xB5, 0xAA, 0x2E,
+ // Y
+ 0x6A, 0x6B, 0x5A, 0x8D, 0x48, 0x5F, 0x2F, 0x72, 0x77, 0x93, 0xD6, 0xD0,
+ 0x49, 0xE1, 0x84, 0x35, 0x98, 0xF1, 0xDE, 0x71, 0xC5, 0xF4, 0x40, 0xFB,
+ 0x1C, 0x75, 0x83, 0xD7, 0x4F, 0x58, 0x0A, 0x8D};
+ std::vector<uint8_t> g3_r_str;
+ g3_r_str.resize(expected_r_str.size(), 0);
+ size_t m = 2;
+ EXPECT_EQ(kEpidNoErr, EcMultiExpBn(this->epid11_G3, pts, b, m, R3));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->epid11_G3, R3, g3_r_str.data(), g3_r_str.size()));
+ EXPECT_EQ(g3_r_str, expected_r_str);
+}
+///////////////////////////////////////////////////////////////////////
// EcSscmMultiExp
TEST_F(EcGroupTest, SscmMultiExpFailsGivenArgumentsMismatch) {
EcPoint const* pts_ec1[] = {this->efq_a, this->efq_b};
@@ -1459,7 +1826,8 @@ TEST_F(EcGroupTest, HashFailsGivenUnsupportedHashAlg) {
}
TEST_F(EcGroupTest, HashFailsGivenIncorrectMsgLen) {
uint8_t const msg[] = {0};
- EXPECT_EQ(kEpidBadArgErr, EcHash(this->efq, msg, 0, kSha256, this->efq_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ EcHash(this->efq, nullptr, 1, kSha256, this->efq_r));
EXPECT_EQ(kEpidBadArgErr,
EcHash(this->efq, msg, std::numeric_limits<size_t>::max(), kSha256,
this->efq_r));
@@ -1470,6 +1838,9 @@ TEST_F(EcGroupTest, HashFailsGivenIncorrectMsgLen) {
EcHash(this->efq, msg, (size_t)0x100000001, kSha256, this->efq_r));
#endif
}
+TEST_F(EcGroupTest, HashAcceptsZeroLengthMessage) {
+ EXPECT_EQ(kEpidNoErr, EcHash(this->efq, "", 0, kSha256, this->efq_r));
+}
TEST_F(EcGroupTest, HashWorksGivenSHA256HashAlg) {
G1ElemStr efq_r_str;
EXPECT_EQ(kEpidNoErr,
@@ -1495,6 +1866,75 @@ TEST_F(EcGroupTest, HashWorksGivenSHA512HashAlg) {
EXPECT_EQ(this->efq_r_sha512_str, efq_r_str);
}
///////////////////////////////////////////////////////////////////////
+// 1.1 EcHash
+TEST_F(EcGroupTest, Epid11HashFailsGivenMismatchedArguments) {
+ uint8_t const msg[] = {0};
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11EcHash(this->efq2, msg, sizeof(msg), this->efq_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11EcHash(this->efq, msg, sizeof(msg), this->efq2_r));
+}
+TEST_F(EcGroupTest, Epid11HashFailsGivenNullPointer) {
+ uint8_t const msg[] = {0};
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11EcHash(nullptr, msg, sizeof(msg), this->epid11_G3_r));
+ EXPECT_EQ(kEpidBadArgErr, Epid11EcHash(this->epid11_G3, nullptr, sizeof(msg),
+ this->epid11_G3_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11EcHash(this->epid11_G3, msg, sizeof(msg), nullptr));
+}
+TEST_F(EcGroupTest, Epid11HashFailsGivenInvalidMsgLen) {
+ uint8_t const msg[] = {0};
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11EcHash(this->epid11_G3, nullptr, 1, this->epid11_G3_r));
+ EXPECT_EQ(kEpidBadArgErr, Epid11EcHash(this->epid11_G3, msg,
+ std::numeric_limits<size_t>::max(),
+ this->epid11_G3_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11EcHash(this->epid11_G3, msg, (size_t)INT_MAX + 1,
+ this->epid11_G3_r));
+#if (SIZE_MAX >= 0x100000001) // When size_t value allowed to be 0x100000001
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11EcHash(this->epid11_G3, msg, (size_t)0x100000001,
+ this->epid11_G3_r));
+#endif
+}
+TEST_F(EcGroupTest, Epid11HashAcceptsZeroLengthMessage) {
+ EXPECT_EQ(kEpidNoErr,
+ Epid11EcHash(this->epid11_G3, "", 0, this->epid11_G3_r));
+}
+TEST_F(EcGroupTest, Epid11HashWorksGivenValidParameters) {
+ Epid11G3ElemStr r_str;
+
+ uint8_t const msg0[] = {'a', 'a', 'd'};
+ EXPECT_EQ(kEpidNoErr, Epid11EcHash(this->epid11_G3, msg0, sizeof(msg0),
+ this->epid11_G3_r));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->epid11_G3, this->epid11_G3_r, &r_str, sizeof(r_str)));
+ EXPECT_EQ(this->kAadHash, r_str);
+
+ uint8_t const msg1[] = {'b', 's', 'n', '0'};
+ EXPECT_EQ(kEpidNoErr, Epid11EcHash(this->epid11_G3, msg1, sizeof(msg1),
+ this->epid11_G3_r));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->epid11_G3, this->epid11_G3_r, &r_str, sizeof(r_str)));
+ EXPECT_EQ(this->kBsn0Hash, r_str);
+
+ uint8_t const msg2[] = {'t', 'e', 's', 't'};
+ EXPECT_EQ(kEpidNoErr, Epid11EcHash(this->epid11_G3, msg2, sizeof(msg2),
+ this->epid11_G3_r));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->epid11_G3, this->epid11_G3_r, &r_str, sizeof(r_str)));
+ EXPECT_EQ(this->kTestHash, r_str);
+
+ uint8_t const msg3[] = {'a', 'a', 'c'};
+ EXPECT_EQ(kEpidNoErr, Epid11EcHash(this->epid11_G3, msg3, sizeof(msg3),
+ this->epid11_G3_r));
+ THROW_ON_EPIDERR(
+ WriteEcPoint(this->epid11_G3, this->epid11_G3_r, &r_str, sizeof(r_str)));
+ EXPECT_EQ(this->kAacHash, r_str);
+}
+///////////////////////////////////////////////////////////////////////
// EcMakePoint
TEST_F(EcGroupTest, MakePointFailsGivenArgumentsMismatch) {
FfElementObj fq2_a(&this->efq2_par->fq2);
diff --git a/epid/common/math/unittests/ffelement-test.cc b/epid/common/math/unittests/ffelement-test.cc
index c80b3b7..9a9c5d1 100644
--- a/epid/common/math/unittests/ffelement-test.cc
+++ b/epid/common/math/unittests/ffelement-test.cc
@@ -38,13 +38,31 @@ extern "C" {
#include "epid/common/types.h"
+#ifndef COUNT_OF
+#define COUNT_OF(a) (sizeof(a) / sizeof((a)[0]))
+#endif // COUNT_OF
+
+/// compares BigNumStr values
+bool operator==(BigNumStr const& lhs, BigNumStr const& rhs) {
+ return 0 == std::memcmp(&lhs, &rhs, sizeof(lhs));
+}
+/// compares BigNumStr to FqElemStr values
+bool operator==(BigNumStr const& lhs, FqElemStr const& rhs) {
+ return 0 == std::memcmp(&lhs, &rhs, sizeof(lhs));
+}
+/// compares FqElemStr to BigNumStr values
+bool operator==(FqElemStr const& lhs, BigNumStr const& rhs) {
+ return 0 == std::memcmp(&lhs, &rhs, sizeof(lhs));
+}
/// compares FqElemStr values
bool operator==(FqElemStr const& lhs, FqElemStr const& rhs) {
return 0 == std::memcmp(&lhs, &rhs, sizeof(lhs));
}
+/// compares Fq2ElemStr values
bool operator==(Fq2ElemStr const& lhs, Fq2ElemStr const& rhs) {
return 0 == std::memcmp(&lhs, &rhs, sizeof(lhs));
}
+/// compares Fq6ElemStr values
bool operator==(Fq6ElemStr const& lhs, Fq6ElemStr const& rhs) {
return 0 == std::memcmp(&lhs, &rhs, sizeof(lhs));
}
@@ -57,11 +75,12 @@ bool operator==(FpElemStr const& lhs, FpElemStr const& rhs) {
return 0 == std::memcmp(&lhs, &rhs, sizeof(lhs));
}
+/// compares FfElementObj values
bool operator==(FfElementObj const& lhs, FfElementObj const& rhs) {
auto lhs_data = lhs.data();
auto rhs_data = rhs.data();
return lhs_data.size() == rhs_data.size() &&
- std::equal(lhs_data.begin(), lhs_data.end(), lhs_data.begin());
+ std::equal(lhs_data.begin(), lhs_data.end(), rhs_data.begin());
}
namespace {
@@ -69,229 +88,1319 @@ namespace {
class FfElementTest : public ::testing::Test {
public:
virtual void SetUp() {
- FqElemStr beta_str = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46,
- 0xE5, 0xF2, 0x5E, 0xEE, 0x71, 0xA4, 0x9F, 0x0C, 0xDC,
- 0x65, 0xFB, 0x12, 0x98, 0x0A, 0x82, 0xD3, 0x29, 0x2D,
- 0xDB, 0xAE, 0xD3, 0x30, 0x12}};
- Fq2ElemStr xi_str = {
- {{{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}}},
- {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}}}}};
- Fq6ElemStr v_str = {
- {{{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}},
- {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}},
- {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}}};
-
- fq = FiniteFieldObj(epid20_q);
+ fq = FiniteFieldObj(bn_q_str);
// construct Fq^2 finite field
FfElementObj neg_beta(&fq);
- THROW_ON_EPIDERR(FfNeg(fq, FfElementObj(&fq, beta_str), neg_beta));
+ THROW_ON_EPIDERR(FfNeg(fq, FfElementObj(&fq, fq_qm1_str), neg_beta));
fq2 = FiniteFieldObj(fq, neg_beta, 2);
// construct Fq^6 finite field
FfElementObj neg_xi(&fq2);
- THROW_ON_EPIDERR(FfNeg(fq2, FfElementObj(&fq2, xi_str), neg_xi));
+ THROW_ON_EPIDERR(FfNeg(fq2, FfElementObj(&fq2, this->fq2_2_1_str), neg_xi));
fq6 = FiniteFieldObj(fq2, neg_xi, 3);
// construct Fq^12 finite field
FfElementObj neg_v(&fq6);
- THROW_ON_EPIDERR(FfNeg(fq6, FfElementObj(&fq6, v_str), neg_v));
+ THROW_ON_EPIDERR(
+ FfNeg(fq6, FfElementObj(&fq6, this->fq6_0_0_1_0_0_0_str), neg_v));
fq12 = FiniteFieldObj(fq6, neg_v, 2);
- fq_zero = FfElementObj(&fq, &bn_zero_data, sizeof((bn_zero_data)));
- fq_one = FfElementObj(&fq, &bn_one_data, sizeof(bn_one_data));
- fq_a = FfElementObj(&fq, &bn_a_data, sizeof(bn_a_data));
- fq_b = FfElementObj(&fq, &bn_b_data, sizeof(bn_b_data));
- fq_r = FfElementObj(&fq);
-
- fp = FiniteFieldObj(epid20_p);
- fp_elem = FfElementObj(&fp, fp_p_data);
-
- exponent_zero = BigNumObj(bn_zero_data);
- exponent_one = BigNumObj(bn_one_data);
- exponent_b = BigNumObj(bn_a_data);
-
- fq2_a = FfElementObj(&fq2);
- fq2_b = FfElementObj(&fq2);
- fq2_r = FfElementObj(&fq2);
-
- fq12_a = FfElementObj(&fq12);
- fq12_b = FfElementObj(&fq12);
- fq12_r = FfElementObj(&fq12);
+ fq_0 = FfElementObj(&fq, &bn_0_str, sizeof(bn_0_str));
+ fq_2 = FfElementObj(&fq, &fq_2_str, sizeof(fq_2_str));
+ fq_qm2 = FfElementObj(&fq, &fq_qm2_str, sizeof(fq_qm2_str));
+ fq_3 = FfElementObj(&fq, &fq_3_str, sizeof(fq_3_str));
+ fq_4 = FfElementObj(&fq, &fq_4_str, sizeof(fq_4_str));
+ fq_5 = FfElementObj(&fq, &fq_5_str, sizeof(fq_5_str));
+ fq_a = FfElementObj(&fq, &bn_a_str, sizeof(bn_a_str));
+ // construct EPID 1.1 Fq finite field
+ epid11_fq = FiniteFieldObj(bn_epid11_bn_q_str);
+
+ // construct EPID 1.1 Fqd finite field
+ epid11_fqd = FiniteFieldObj(epid11_fq, bn_epid11_fq_coeffs,
+ COUNT_OF(bn_epid11_fq_coeffs));
+
+ // Fqk ground element is {-qnr, 0, 0}
+ FfElementObj epid11_neg_qnr(&epid11_fq);
+ THROW_ON_EPIDERR(FfNeg(
+ epid11_fq, FfElementObj(&epid11_fq, fq_epid11_fq_qnr), epid11_neg_qnr));
+ Fq3ElemStr epid11_ground_element_str = {0};
+ THROW_ON_EPIDERR(WriteFfElement(epid11_fq, epid11_neg_qnr,
+ &epid11_ground_element_str.a[0],
+ sizeof(epid11_ground_element_str.a[0])));
+ // construct EPID 1.1 Fqk finite field
+ epid11_GT = FiniteFieldObj(
+ epid11_fqd, FfElementObj(&epid11_fqd, epid11_ground_element_str), 2);
+
+ fq_0 = FfElementObj(&fq, &bn_0_str, sizeof((bn_0_str)));
+ fq_1 = FfElementObj(&fq, &bn_1_str, sizeof(bn_1_str));
+ fq_a = FfElementObj(&fq, &bn_a_str, sizeof(bn_a_str));
+ fq_b = FfElementObj(&fq, &bn_b_str, sizeof(bn_b_str));
+ fq_result = FfElementObj(&fq);
+ fq_sum_ab = FfElementObj(&fq, &fq_sum_ab_str, sizeof(fq_sum_ab_str));
+
+ fp = FiniteFieldObj(bn_p_str);
+
+ bn_0 = BigNumObj(bn_0_str);
+ bn_1 = BigNumObj(bn_1_str);
+ bn_a = BigNumObj(bn_a_str);
+
+ fq2_a = FfElementObj(&fq2, &fq2_a_str, sizeof(fq2_a_str));
+ fq2_result = FfElementObj(&fq2);
+
+ fq12_g = FfElementObj(&fq12, &fq12_g_str, sizeof(fq12_g_str));
+ fq12_h = FfElementObj(&fq12, &fq12_h_str, sizeof(fq12_h_str));
+ fq12_i = FfElementObj(&fq12, &fq12_i_str, sizeof(fq12_i_str));
+ fq12_j = FfElementObj(&fq12, &fq12_j_str, sizeof(fq12_j_str));
+ fq12_k = FfElementObj(&fq12, &fq12_k_str, sizeof(fq12_k_str));
+ fq12_result = FfElementObj(&fq12);
}
FiniteFieldObj fq;
FiniteFieldObj fq2;
FiniteFieldObj fq6;
FiniteFieldObj fq12;
-
- FfElementObj fq_zero;
- FfElementObj fq_one;
+ FiniteFieldObj epid11_fq;
+ FiniteFieldObj epid11_fqd;
+ FiniteFieldObj epid11_GT;
+
+ FfElementObj fq_0;
+ FfElementObj fq_1;
+ FfElementObj fq_2;
+ FfElementObj fq_qm2; // Intel(R) EPID 2.0 parameter q - 2
+ FfElementObj fq_3;
+ FfElementObj fq_4;
+ FfElementObj fq_5;
FfElementObj fq_a;
FfElementObj fq_b;
- FfElementObj fq_r;
+ FfElementObj fq_result;
+ FfElementObj fq_sum_ab;
FfElementObj fq2_a;
- FfElementObj fq2_b;
- FfElementObj fq2_r;
+ FfElementObj fq2_result;
- FfElementObj fq12_a;
- FfElementObj fq12_b;
- FfElementObj fq12_r;
+ FfElementObj fq12_g;
+ FfElementObj fq12_h;
+ FfElementObj fq12_i;
+ FfElementObj fq12_j;
+ FfElementObj fq12_k;
+ FfElementObj fq12_result;
FiniteFieldObj fp;
- FfElementObj fp_elem;
-
- BigNumObj exponent_zero;
- BigNumObj exponent_one;
- BigNumObj exponent_b;
-
- /// Intel(R) EPID 2.0 parameter q
- static const BigNumStr epid20_q;
- static const BigNumStr epid20_p;
- static const BigNumStr bn_zero_data;
- static const FqElemStr fq_zero_data;
- static const BigNumStr bn_one_data;
- static const FqElemStr fq_one_data;
- static const BigNumStr bn_two_data;
- static const BigNumStr bn_a_data;
- static const FqElemStr fq_a_data;
- static const BigNumStr bn_b_data;
- static const FqElemStr fq_b_data;
- static const FqElemStr fq_mul_ab_data;
- static const FqElemStr fq_inv_a_data;
- static const FqElemStr fq_neg_a_data;
- static const FqElemStr fq_exp_ab_data;
- static const FqElemStr fq_sum_ab_data;
- static const FpElemStr fp_p_data;
- static const uint8_t sha_msg[3]; /// predefined message for tests "abc"
- static const FqElemStr fq_r_sha256;
- static const FqElemStr fq_r_sha384;
- static const FqElemStr fq_r_sha512;
+
+ BigNumObj bn_0;
+ BigNumObj bn_1;
+ BigNumObj bn_a;
+
+ // Intel(R) EPID 2.0 parameter p
+ static const BigNumStr bn_p_str;
+ static const FpElemStr fp_p_str;
+
+ // Intel(R) EPID 2.0 parameter p - 1
+ static const BigNumStr fp_pm1_str;
+
+ // Intel(R) EPID 2.0 parameter q
+ static const BigNumStr bn_q_str;
+
+ // Intel(R) EPID 2.0 parameter q - 1
+ static const FqElemStr fq_qm1_str;
+ static const BigNumStr bn_qm1_str;
+
+ // Intel(R) EPID 2.0 parameter q - 2
+ static const FqElemStr fq_qm2_str;
+
+ // Intel(R) EPID 2.0 parameter q + 1
+ static const BigNumStr bn_qp1_str;
+
+ // Intel(R) EPID 2.0 parameter q - 0x3013
+ static const BigNumStr fq_qm0x3013_str;
+
+ // Intel(R) EPID 1.1 parameter q
+ static const BigNumStr bn_epid11_bn_q_str;
+
+ // Intel(R) EPID 1.1 parameter qnr
+ static const FqElemStr fq_epid11_fq_qnr;
+
+ // Intel(R) EPID 1.1 parameter coeff
+ static const BigNumStr bn_epid11_fq_coeffs[3];
+
+ // zero
+ static const BigNumStr bn_0_str;
+ static const FqElemStr fq_0_str;
+
+ // one
+ static const BigNumStr bn_1_str;
+ static const FqElemStr fq_1_str;
+
+ // two
+ static const BigNumStr bn_2_str;
+ static const FqElemStr fq_2_str;
+
+ // three
+ static const FqElemStr fq_3_str;
+
+ // four
+ static const FqElemStr fq_4_str;
+
+ // five
+ static const FqElemStr fq_5_str;
+
+ // 0x0000FFFF
+ static const BigNumStr bn_0xffff_str;
+
+ // Fq2 element containing {2, 1}
+ static const Fq2ElemStr fq2_2_1_str;
+
+ // Fq6 element containing {0, 0, 1, 0, 0, 0}
+ static const Fq6ElemStr fq6_0_0_1_0_0_0_str;
+
+ // arbitrary constant a (256 bit value)
+ static const BigNumStr bn_a_str;
+ static const FqElemStr fq_a_str;
+ static const Fq2ElemStr fq2_a_str;
+
+ // arbitrary constant b (256 bit value)
+ static const BigNumStr bn_b_str;
+ static const FqElemStr fq_b_str;
+
+ // a + b
+ static const FqElemStr fq_sum_ab_str;
+ static const Fq2ElemStr fq2_sum_ab_str;
+ static const Fq6ElemStr fq6_sum_ab_str;
+ static const Fq12ElemStr fq12_sum_ab_str;
+
+ // a * b
+ static const FqElemStr fq_mul_ab_str;
+ static const Fq2ElemStr fq2_mul_ab_str;
+
+ // 1/a
+ static const FqElemStr fq_inv_a_str;
+
+ // -a
+ static const FqElemStr fq_neg_a_str;
+
+ // pow(a, b), that is a raised to the power b
+ static const FqElemStr fq_exp_ab_str;
+
+ static const uint8_t sha_msg[3]; // predefined message for tests "abc"
+ static const FqElemStr fq_abc_sha256_str;
+ static const FqElemStr fq_abc_sha384_str;
+ static const FqElemStr fq_abc_sha512_str;
+
+ // arbitrary Fq12 constant a (unrelated to a above)
+ static const Fq12ElemStr fq12_g_str;
+ // arbitrary Fq12 constant b (unrelated to a above)
+ static const Fq12ElemStr fq12_h_str;
+ // arbitrary Fq12 constant c
+ static const Fq12ElemStr fq12_i_str;
+ // arbitrary Fq12 constant d
+ static const Fq12ElemStr fq12_j_str;
+ // arbitrary Fq12 constant e
+ static const Fq12ElemStr fq12_k_str;
+ // c * d
+ static const Fq12ElemStr fq12_mul_ij_str;
+ // e * b
+ static const Fq12ElemStr fq12_mul_gb_str;
+
+ // Fq Multi Exp Data
+ static const FqElemStr fq_multi_exp_base_1[1];
+ static const BigNumStr fq_multi_exp_exp_1[1];
+ static const FqElemStr fq_multi_exp_res_1;
+ static const std::vector<uint8_t> fq_multi_exp_exp_1_264;
+ static const FqElemStr fq_multi_exp_res_1_264;
+ static const FqElemStr fq_multi_exp_res_1_256_264;
+ static const FqElemStr fq_multi_exp_base_2[2];
+ static const BigNumStr fq_multi_exp_exp_2[2];
+ static const FqElemStr fq_multi_exp_res_2;
+ static const FqElemStr fq_multi_exp_base_3[3];
+ static const BigNumStr fq_multi_exp_exp_3[3];
+ static const FqElemStr fq_multi_exp_res_3;
+ static const FqElemStr fq_multi_exp_base_4[4];
+ static const BigNumStr fq_multi_exp_exp_4[4];
+ static const FqElemStr fq_multi_exp_res_4;
+ static const FqElemStr fq_multi_exp_base_5[5];
+ static const BigNumStr fq_multi_exp_exp_5[5];
+ static const FqElemStr fq_multi_exp_res_5;
+ static const FqElemStr fq_multi_exp_base_6[6];
+ static const BigNumStr fq_multi_exp_exp_6[6];
+ static const FqElemStr fq_multi_exp_res_6;
+
+ // EPID 1.1 GT Multi Exp Data
+ static const Fq6ElemStr epid11_GT_multi_exp_base_3[3];
+ static const std::vector<uint8_t> epid11_GT_multi_exp_exp_3[3];
+ static const Fq6ElemStr epid11_GT_multi_exp_res_3;
+
+ // Fq12 Multi Exp Data
+ static const Fq12ElemStr fq12_multi_exp_base_4[4];
+ static const BigNumStr fq12_multi_exp_exp_4[4];
+ static const Fq12ElemStr fq12_multi_exp_res_4;
+};
+
+const Fq2ElemStr FfElementTest::fq2_2_1_str = {
+ {{{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}}},
+ {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}}}}};
+const Fq6ElemStr FfElementTest::fq6_0_0_1_0_0_0_str = {
+ {{{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}},
+ {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}},
+ {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}}};
+
+// Intel(R) EPID 2.0 parameter p
+const BigNumStr FfElementTest::bn_p_str = {
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46, 0xE5, 0xF2,
+ 0x5E, 0xEE, 0x71, 0xA4, 0x9E, 0x0C, 0xDC, 0x65, 0xFB, 0x12, 0x99,
+ 0x92, 0x1A, 0xF6, 0x2D, 0x53, 0x6C, 0xD1, 0x0B, 0x50, 0x0D};
+
+// Intel(R) EPID 2.0 parameter p - 0x0D
+const FpElemStr FfElementTest::fp_p_str = {
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46, 0xE5, 0xF2,
+ 0x5E, 0xEE, 0x71, 0xA4, 0x9E, 0x0C, 0xDC, 0x65, 0xFB, 0x12, 0x99,
+ 0x92, 0x1A, 0xF6, 0x2D, 0x53, 0x6C, 0xD1, 0x0B, 0x50, 0x00};
+
+// Intel(R) EPID 2.0 parameter p - 1
+const BigNumStr FfElementTest::fp_pm1_str = {
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46, 0xE5, 0xF2,
+ 0x5E, 0xEE, 0x71, 0xA4, 0x9E, 0x0C, 0xDC, 0x65, 0xFB, 0x12, 0x99,
+ 0x92, 0x1A, 0xF6, 0x2D, 0x53, 0x6C, 0xD1, 0x0B, 0x50, 0x0C,
};
-/// Intel(R) EPID 2.0 parameter q
-const BigNumStr FfElementTest::epid20_q = {
+// Intel(R) EPID 2.0 parameter q
+const BigNumStr FfElementTest::bn_q_str = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46, 0xE5, 0xF2,
0x5E, 0xEE, 0x71, 0xA4, 0x9F, 0x0C, 0xDC, 0x65, 0xFB, 0x12, 0x98,
0x0A, 0x82, 0xD3, 0x29, 0x2D, 0xDB, 0xAE, 0xD3, 0x30, 0x13};
-const BigNumStr FfElementTest::epid20_p = {
+// Intel(R) EPID 2.0 parameter q - 1
+const FqElemStr FfElementTest::fq_qm1_str = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46, 0xE5, 0xF2,
- 0x5E, 0xEE, 0x71, 0xA4, 0x9E, 0x0C, 0xDC, 0x65, 0xFB, 0x12, 0x99,
- 0x92, 0x1A, 0xF6, 0x2D, 0x53, 0x6C, 0xD1, 0x0B, 0x50, 0x0D};
+ 0x5E, 0xEE, 0x71, 0xA4, 0x9F, 0x0C, 0xDC, 0x65, 0xFB, 0x12, 0x98,
+ 0x0A, 0x82, 0xD3, 0x29, 0x2D, 0xDB, 0xAE, 0xD3, 0x30, 0x12};
+
+const BigNumStr FfElementTest::bn_qm1_str = {
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46, 0xE5, 0xF2,
+ 0x5E, 0xEE, 0x71, 0xA4, 0x9F, 0x0C, 0xDC, 0x65, 0xFB, 0x12, 0x98,
+ 0x0A, 0x82, 0xD3, 0x29, 0x2D, 0xDB, 0xAE, 0xD3, 0x30, 0x12};
+
+// Intel(R) EPID 2.0 parameter q - 2
+const FqElemStr FfElementTest::fq_qm2_str = {
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46, 0xE5, 0xF2,
+ 0x5E, 0xEE, 0x71, 0xA4, 0x9F, 0x0C, 0xDC, 0x65, 0xFB, 0x12, 0x98,
+ 0x0A, 0x82, 0xD3, 0x29, 0x2D, 0xDB, 0xAE, 0xD3, 0x30, 0x11};
+
+// Intel(R) EPID 2.0 parameter q + 1
+const BigNumStr FfElementTest::bn_qp1_str = {
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46, 0xE5, 0xF2,
+ 0x5E, 0xEE, 0x71, 0xA4, 0x9F, 0x0C, 0xDC, 0x65, 0xFB, 0x12, 0x98,
+ 0x0A, 0x82, 0xD3, 0x29, 0x2D, 0xDB, 0xAE, 0xD3, 0x30, 0x14};
-const BigNumStr FfElementTest::bn_zero_data = {
+// Intel(R) EPID 2.0 parameter q - 0x3013
+const BigNumStr FfElementTest::fq_qm0x3013_str = {
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46, 0xE5, 0xF2,
+ 0x5E, 0xEE, 0x71, 0xA4, 0x9F, 0x0C, 0xDC, 0x65, 0xFB, 0x12, 0x98,
+ 0x0A, 0x82, 0xD3, 0x29, 0x2D, 0xDB, 0xAE, 0xD3, 0x00, 0x00};
+
+// Intel(R) EPID 1.1 parameter q
+const BigNumStr FfElementTest::bn_epid11_bn_q_str = {
+ 0x09, 0xF9, 0x24, 0xE5, 0xD9, 0xBC, 0x67, 0x7F, 0x81, 0x0D, 0xF0,
+ 0x25, 0x58, 0xF7, 0x53, 0x13, 0xA9, 0x8A, 0xA6, 0x10, 0x47, 0x65,
+ 0x5D, 0x73, 0x9E, 0xF1, 0x94, 0xEB, 0x05, 0xB1, 0xA7, 0x11};
+
+// Intel(R) EPID 1.1 parameter qnr
+const FqElemStr FfElementTest::fq_epid11_fq_qnr = {
+ {0x08, 0x66, 0xA7, 0x67, 0x36, 0x6E, 0x62, 0x71, 0xB7, 0xA6, 0x52, 0x94,
+ 0x8F, 0xFB, 0x25, 0x9E, 0xE6, 0x4F, 0x25, 0xE5, 0x26, 0x9A, 0x2B, 0x6E,
+ 0x7E, 0xF8, 0xA6, 0x39, 0xAE, 0x46, 0xAA, 0x24}};
+
+// Intel(R) EPID 1.1 parameter coeff
+const BigNumStr FfElementTest::bn_epid11_fq_coeffs[3] = {
+ {{{0x02, 0x16, 0x7A, 0x61, 0x53, 0xDD, 0xF6, 0xE2, 0x89, 0x15, 0xA0, 0x94,
+ 0xF1, 0xB5, 0xDC, 0x65, 0x21, 0x15, 0x62, 0xE1, 0x7D, 0xC5, 0x43, 0x89,
+ 0xEE, 0xB4, 0xEF, 0xC8, 0xA0, 0x8E, 0x34, 0x0F}}},
+
+ {{{0x04, 0x82, 0x27, 0xE1, 0xEB, 0x98, 0x64, 0xC2, 0x8D, 0x8F, 0xDD, 0x0E,
+ 0x82, 0x40, 0xAE, 0xD4, 0x31, 0x63, 0xD6, 0x46, 0x32, 0x16, 0x85, 0x7A,
+ 0xB7, 0x18, 0x68, 0xB8, 0x17, 0x02, 0x81, 0xA6}}},
+
+ {{{0x06, 0x20, 0x76, 0xE8, 0x54, 0x54, 0x53, 0xB4, 0xA9, 0xD8, 0x44, 0x4B,
+ 0xAA, 0xFB, 0x1C, 0xFD, 0xAE, 0x15, 0xCA, 0x29, 0x79, 0xA6, 0x24, 0xA4,
+ 0x0A, 0xF6, 0x1E, 0xAC, 0xED, 0xFB, 0x10, 0x41}}}};
+
+// zero
+const BigNumStr FfElementTest::bn_0_str = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-const FqElemStr FfElementTest::fq_zero_data = {
+const FqElemStr FfElementTest::fq_0_str = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-const BigNumStr FfElementTest::bn_one_data = {
+// one
+const BigNumStr FfElementTest::bn_1_str = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
-const BigNumStr FfElementTest::bn_two_data = {
+const FqElemStr FfElementTest::fq_1_str = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
+
+// two
+const BigNumStr FfElementTest::bn_2_str = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02};
-const FqElemStr FfElementTest::fq_one_data = {
+const FqElemStr FfElementTest::fq_2_str = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02};
+
+// three
+const FqElemStr FfElementTest::fq_3_str = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03};
+
+// four
+const FqElemStr FfElementTest::fq_4_str = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04};
+
+// five
+const FqElemStr FfElementTest::fq_5_str = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05};
-const BigNumStr FfElementTest::bn_a_data = {
+const BigNumStr FfElementTest::bn_0xffff_str = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff};
+
+// arbitrary constant a (256 bit value)
+const BigNumStr FfElementTest::bn_a_str = {
0x12, 0xA6, 0x5B, 0xD6, 0x91, 0x8D, 0x50, 0xA7, 0x66, 0xEB, 0x7D,
0x52, 0xE3, 0x40, 0x17, 0x60, 0x7F, 0xDF, 0x6C, 0xA1, 0x2C, 0x1A,
0x37, 0xE0, 0x92, 0xC0, 0xF7, 0xB9, 0x76, 0xAB, 0xB1, 0x8A};
-const FqElemStr FfElementTest::fq_a_data = {
+const FqElemStr FfElementTest::fq_a_str = {
0x12, 0xA6, 0x5B, 0xD6, 0x91, 0x8D, 0x50, 0xA7, 0x66, 0xEB, 0x7D,
0x52, 0xE3, 0x40, 0x17, 0x60, 0x7F, 0xDF, 0x6C, 0xA1, 0x2C, 0x1A,
0x37, 0xE0, 0x92, 0xC0, 0xF7, 0xB9, 0x76, 0xAB, 0xB1, 0x8A};
-const BigNumStr FfElementTest::bn_b_data = {
+const Fq2ElemStr FfElementTest::fq2_a_str = {
+ {{{{0x12, 0xA6, 0x5B, 0xD6, 0x91, 0x8D, 0x50, 0xA7, 0x66, 0xEB, 0x7D, 0x52,
+ 0xE3, 0x40, 0x17, 0x60, 0x7F, 0xDF, 0x6C, 0xA1, 0x2C, 0x1A, 0x37, 0xE0,
+ 0x92, 0xC0, 0xF7, 0xB9, 0x76, 0xAB, 0xB1, 0x8A}}},
+ {{{0xDD, 0x2B, 0xE9, 0x59, 0x24, 0xA5, 0xB3, 0xFD, 0xEB, 0xE1, 0x3C, 0xC0,
+ 0x73, 0x4E, 0x99, 0xEE, 0x36, 0xF6, 0xC0, 0x1A, 0x76, 0x01, 0x0A, 0xF0,
+ 0xCB, 0xB4, 0x71, 0x88, 0x95, 0xCB, 0x35, 0xBA}}}}};
+
+// arbitrary constant b (256 bit value)
+const BigNumStr FfElementTest::bn_b_str = {
0xE6, 0x65, 0x23, 0x9B, 0xD4, 0x07, 0x16, 0x83, 0x38, 0x23, 0xB2,
0x67, 0x57, 0xEB, 0x0F, 0x23, 0x3A, 0xF4, 0x8E, 0xDA, 0x71, 0x5E,
0xD9, 0x98, 0x63, 0x98, 0x2B, 0xBC, 0x78, 0xD1, 0x94, 0xF2};
-const FqElemStr FfElementTest::fq_b_data = {
+const FqElemStr FfElementTest::fq_b_str = {
0xE6, 0x65, 0x23, 0x9B, 0xD4, 0x07, 0x16, 0x83, 0x38, 0x23, 0xB2,
0x67, 0x57, 0xEB, 0x0F, 0x23, 0x3A, 0xF4, 0x8E, 0xDA, 0x71, 0x5E,
0xD9, 0x98, 0x63, 0x98, 0x2B, 0xBC, 0x78, 0xD1, 0x94, 0xF2};
-const FqElemStr FfElementTest::fq_mul_ab_data = {
+// a + b
+const FqElemStr FfElementTest::fq_sum_ab_str = {
+ 0xF9, 0x0B, 0x7F, 0x72, 0x65, 0x94, 0x67, 0x2A, 0x9F, 0x0F, 0x2F,
+ 0xBA, 0x3B, 0x2B, 0x26, 0x83, 0xBA, 0xD3, 0xFB, 0x7B, 0x9D, 0x79,
+ 0x11, 0x78, 0xF6, 0x59, 0x23, 0x75, 0xEF, 0x7D, 0x46, 0x7C};
+
+const Fq2ElemStr FfElementTest::fq2_sum_ab_str = {
+ {{{{0xF9, 0x0B, 0x7F, 0x72, 0x65, 0x94, 0x67, 0x2A, 0x9F, 0x0F, 0x2F, 0xBA,
+ 0x3B, 0x2B, 0x26, 0x83, 0xBA, 0xD3, 0xFB, 0x7B, 0x9D, 0x79, 0x11, 0x78,
+ 0xF6, 0x59, 0x23, 0x75, 0xEF, 0x7D, 0x46, 0x7C}}},
+ {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}}};
+
+const Fq6ElemStr FfElementTest::fq6_sum_ab_str = {
+ {{{{0xF9, 0x0B, 0x7F, 0x72, 0x65, 0x94, 0x67, 0x2A, 0x9F, 0x0F, 0x2F, 0xBA,
+ 0x3B, 0x2B, 0x26, 0x83, 0xBA, 0xD3, 0xFB, 0x7B, 0x9D, 0x79, 0x11, 0x78,
+ 0xF6, 0x59, 0x23, 0x75, 0xEF, 0x7D, 0x46, 0x7C},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}},
+ {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}},
+ {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}}};
+
+const Fq12ElemStr FfElementTest::fq12_sum_ab_str = {
+ {{{{{{0xF9, 0x0B, 0x7F, 0x72, 0x65, 0x94, 0x67, 0x2A, 0x9F, 0x0F, 0x2F,
+ 0xBA, 0x3B, 0x2B, 0x26, 0x83, 0xBA, 0xD3, 0xFB, 0x7B, 0x9D, 0x79,
+ 0x11, 0x78, 0xF6, 0x59, 0x23, 0x75, 0xEF, 0x7D, 0x46, 0x7C},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}},
+ {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}},
+ {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}}},
+
+ {{{{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}},
+ {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}},
+ {{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}}}}};
+
+// a * b
+const FqElemStr FfElementTest::fq_mul_ab_str = {
0xE4, 0xAB, 0xE3, 0xE4, 0x08, 0xC3, 0x8A, 0x00, 0x78, 0x50, 0x01,
0xA9, 0x4A, 0xFC, 0x43, 0x15, 0xA2, 0x99, 0x51, 0x20, 0x6B, 0x9C,
0x00, 0xCF, 0x82, 0x88, 0xBD, 0x39, 0x0B, 0xA2, 0x0B, 0x58};
-const FqElemStr FfElementTest::fq_inv_a_data = {
+const Fq2ElemStr FfElementTest::fq2_mul_ab_str = {
+ {{{{0xE4, 0xAB, 0xE3, 0xE4, 0x08, 0xC3, 0x8A, 0x00, 0x78, 0x50, 0x01, 0xA9,
+ 0x4A, 0xFC, 0x43, 0x15, 0xA2, 0x99, 0x51, 0x20, 0x6B, 0x9C, 0x00, 0xCF,
+ 0x82, 0x88, 0xBD, 0x39, 0x0B, 0xA2, 0x0B, 0x58}}},
+ {{{0xB4, 0xE4, 0x39, 0xEA, 0x70, 0xDE, 0x15, 0xC3, 0xC6, 0x91, 0xFD, 0x7F,
+ 0xBE, 0x2B, 0xF5, 0xD2, 0xC0, 0xB7, 0x20, 0xFC, 0x1F, 0x02, 0x33, 0xC9,
+ 0x39, 0x93, 0xB9, 0x5E, 0x55, 0x51, 0xB6, 0x46}}}}};
+
+// 1/a
+const FqElemStr FfElementTest::fq_inv_a_str = {
0x15, 0x17, 0x1A, 0x1E, 0x93, 0x71, 0x1B, 0x39, 0xC5, 0x97, 0xEF,
0x78, 0xA5, 0x51, 0x34, 0x62, 0x44, 0xAD, 0x8D, 0x51, 0xDF, 0x90,
0x7C, 0x6F, 0x56, 0xB6, 0xAB, 0x63, 0x5A, 0x68, 0x6D, 0xF6};
-const FqElemStr FfElementTest::fq_neg_a_data = {
+// -a
+const FqElemStr FfElementTest::fq_neg_a_str = {
0xED, 0x59, 0xA4, 0x29, 0x6E, 0x6F, 0xA0, 0x25, 0xDF, 0xFA, 0x75,
0x0C, 0x0B, 0x31, 0x8D, 0x3E, 0x8C, 0xFC, 0xF9, 0x59, 0xE6, 0x7D,
0xD2, 0xA2, 0x40, 0x68, 0x36, 0x22, 0x38, 0x27, 0x7E, 0x89};
-const FqElemStr FfElementTest::fq_exp_ab_data = {
+// pow(a, b)
+const FqElemStr FfElementTest::fq_exp_ab_str = {
0x29, 0x65, 0x68, 0x0E, 0x56, 0xB9, 0x8F, 0xBA, 0xA6, 0xEA, 0x8F,
0xE1, 0x13, 0x44, 0x3B, 0x12, 0x5C, 0xB9, 0xF8, 0x76, 0x42, 0x12,
0xCB, 0xB2, 0xED, 0xC0, 0x23, 0xA3, 0x5C, 0xAD, 0x38, 0xD1};
-const FqElemStr FfElementTest::fq_sum_ab_data = {
- 0xF9, 0x0B, 0x7F, 0x72, 0x65, 0x94, 0x67, 0x2A, 0x9F, 0x0F, 0x2F,
- 0xBA, 0x3B, 0x2B, 0x26, 0x83, 0xBA, 0xD3, 0xFB, 0x7B, 0x9D, 0x79,
- 0x11, 0x78, 0xF6, 0x59, 0x23, 0x75, 0xEF, 0x7D, 0x46, 0x7C};
-
-const FpElemStr FfElementTest::fp_p_data = {
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46, 0xE5, 0xF2,
- 0x5E, 0xEE, 0x71, 0xA4, 0x9E, 0x0C, 0xDC, 0x65, 0xFB, 0x12, 0x99,
- 0x92, 0x1A, 0xF6, 0x2D, 0x53, 0x6C, 0xD1, 0x0B, 0x50, 0x00};
const uint8_t FfElementTest::sha_msg[] = {'a', 'b', 'c'};
-const FqElemStr FfElementTest::fq_r_sha256 = {
+
+const FqElemStr FfElementTest::fq_abc_sha256_str = {
0xBA, 0x78, 0x16, 0xBF, 0x8F, 0x01, 0xCF, 0xEA, 0x41, 0x41, 0x40,
0xDE, 0x5D, 0xAE, 0x22, 0x23, 0xB0, 0x03, 0x61, 0xA3, 0x96, 0x17,
0x7A, 0x9C, 0xB4, 0x10, 0xFF, 0x61, 0xF2, 0x00, 0x15, 0xAD,
};
-const FqElemStr FfElementTest::fq_r_sha384 = {
+const FqElemStr FfElementTest::fq_abc_sha384_str = {
0x10, 0xAC, 0xE4, 0xE8, 0x8F, 0xBB, 0x96, 0xBF, 0x53, 0xB6, 0xAF,
0xE4, 0x4E, 0x95, 0xDE, 0xA5, 0x98, 0x8F, 0x10, 0xBF, 0x59, 0xC4,
0x11, 0xFE, 0x1F, 0x7A, 0xA6, 0x1E, 0x57, 0x3E, 0xE3, 0x3C,
};
-const FqElemStr FfElementTest::fq_r_sha512 = {
+const FqElemStr FfElementTest::fq_abc_sha512_str = {
0x14, 0xB4, 0x28, 0x89, 0xD2, 0x86, 0xA4, 0x79, 0xE3, 0x5B, 0xC4,
0x50, 0xD1, 0x3B, 0xF2, 0x35, 0xF7, 0x97, 0x91, 0x05, 0x3D, 0x64,
0xC0, 0x06, 0x45, 0x9F, 0xEC, 0xD8, 0xDB, 0x53, 0x3E, 0xC3,
};
+const Fq12ElemStr FfElementTest::fq12_g_str = {
+ {{{{{{0xBA, 0x10, 0x1F, 0xF6, 0x46, 0x8B, 0xE9, 0x32, 0x4F, 0xC0, 0xA5,
+ 0x01, 0xAD, 0x5E, 0xE2, 0x31, 0x16, 0x29, 0x96, 0xED, 0xA7, 0xDE,
+ 0x4C, 0xE1, 0xD2, 0x8D, 0x33, 0xCA, 0x50, 0xAB, 0x7B, 0xC6},
+ {0x15, 0xEB, 0x79, 0xF4, 0xEB, 0xDE, 0x30, 0xB6, 0xC4, 0x07, 0x7C,
+ 0x42, 0xCB, 0x04, 0x54, 0xF2, 0x1F, 0x4D, 0x1F, 0xC0, 0xDF, 0xA2,
+ 0x2B, 0x9E, 0x34, 0xC4, 0x4C, 0x84, 0x14, 0xD3, 0x62, 0x07}}},
+ {{{0xF1, 0x8B, 0x84, 0xD1, 0x46, 0x57, 0xB6, 0xE7, 0x80, 0xE1, 0x46,
+ 0x49, 0x1C, 0x0D, 0xEF, 0x81, 0x31, 0xB0, 0xBE, 0x8C, 0xB9, 0x08,
+ 0xD0, 0xD3, 0xC4, 0x56, 0xCA, 0xAD, 0xF9, 0x1D, 0x75, 0x19},
+ {0x3F, 0xEE, 0x7C, 0x43, 0xC1, 0xFA, 0x4E, 0x50, 0xB7, 0x19, 0x01,
+ 0x00, 0x6F, 0xD5, 0x16, 0xB6, 0xF4, 0x85, 0xE0, 0xEB, 0x2E, 0x5F,
+ 0x0A, 0x7E, 0xF8, 0xAC, 0xBC, 0x05, 0xEC, 0x73, 0xB5, 0x57}}},
+ {{{0xE3, 0xB3, 0x18, 0x29, 0xBB, 0xEF, 0x86, 0x50, 0x87, 0xCF, 0x70,
+ 0xBA, 0x13, 0x8B, 0xB1, 0xB6, 0x2D, 0x6F, 0x65, 0x3D, 0xA1, 0x0B,
+ 0xE3, 0x92, 0xC5, 0x72, 0x86, 0x6A, 0xB3, 0xEB, 0xE0, 0xE5},
+ {0xDA, 0x0E, 0x57, 0x87, 0xD5, 0xA9, 0x61, 0xA5, 0x1E, 0xCB, 0x04,
+ 0x86, 0xCD, 0xC3, 0x18, 0x2A, 0x36, 0xA0, 0x81, 0x73, 0xE7, 0x13,
+ 0x87, 0x80, 0x8D, 0x1A, 0xFE, 0x6E, 0x4B, 0xA3, 0x13, 0x03}}}}},
+ {{{{{0x66, 0x9E, 0x80, 0x4D, 0x8A, 0xAA, 0x00, 0x95, 0x72, 0xCE, 0xBB,
+ 0x51, 0xE8, 0x01, 0x09, 0x41, 0xD3, 0x63, 0x28, 0x05, 0xA4, 0xBE,
+ 0xD6, 0x41, 0xA6, 0x2F, 0x5F, 0xBF, 0x0B, 0x13, 0xB4, 0x54},
+ {0x5B, 0x50, 0x65, 0xDC, 0x6F, 0x29, 0xD6, 0xDA, 0xBF, 0xC2, 0x06,
+ 0xEA, 0x3B, 0xB2, 0xF1, 0xD4, 0x26, 0x5C, 0x92, 0x6B, 0x95, 0x6D,
+ 0x88, 0xAB, 0x8F, 0xC6, 0x9D, 0x31, 0xE4, 0x9B, 0x71, 0x49}}},
+ {{{0xE0, 0xCE, 0x97, 0x8F, 0xC9, 0x9F, 0xBC, 0xA8, 0x4A, 0xC6, 0xAA,
+ 0x4A, 0xC8, 0x0D, 0x2A, 0x60, 0x1A, 0x43, 0x40, 0x03, 0xB3, 0x53,
+ 0x30, 0x98, 0x1F, 0x3F, 0xDF, 0x5C, 0x0F, 0xF0, 0x84, 0x8E},
+ {0x5A, 0x5D, 0x41, 0xD2, 0x47, 0x78, 0x6D, 0x9F, 0x89, 0xCE, 0xF5,
+ 0x8E, 0xB6, 0x54, 0xA2, 0x26, 0xE5, 0x40, 0x39, 0x5C, 0x59, 0x08,
+ 0xB3, 0xDA, 0xF5, 0xF8, 0xA0, 0x18, 0x33, 0x57, 0xD1, 0x72}}},
+ {{{0xBB, 0xBA, 0x6C, 0xED, 0xE8, 0xA0, 0x5E, 0xC8, 0x81, 0xC5, 0xAC,
+ 0x15, 0x1B, 0xD0, 0xE6, 0xC8, 0x92, 0xF9, 0x43, 0x03, 0x5A, 0x00,
+ 0x42, 0xE3, 0x49, 0xA5, 0xF7, 0x19, 0x78, 0x8A, 0x39, 0x89},
+ {0x32, 0xAE, 0xBF, 0x4D, 0x4B, 0xB3, 0x33, 0x76, 0x16, 0xFD, 0x0B,
+ 0xFE, 0x42, 0x1E, 0x17, 0x37, 0x2A, 0x04, 0xEA, 0x26, 0xBA, 0x6E,
+ 0x2C, 0x36, 0xAF, 0x35, 0x1B, 0x75, 0x6D, 0x17, 0xDC, 0x8E}}}}}}};
+
+const Fq12ElemStr FfElementTest::fq12_h_str = {
+ {{{{{{0x41, 0xFB, 0xBE, 0xD2, 0x20, 0x95, 0xE5, 0xBA, 0x87, 0x54, 0x23,
+ 0xCC, 0x04, 0x97, 0x38, 0x4B, 0x69, 0x28, 0x18, 0x6D, 0xAE, 0x19,
+ 0xE3, 0x3D, 0xFE, 0x39, 0xE2, 0x1C, 0xC2, 0x53, 0x17, 0xF6},
+ {0xEA, 0xA3, 0x0F, 0x62, 0x6E, 0xBF, 0x6F, 0x8F, 0xBC, 0xFA, 0x6E,
+ 0x07, 0xD3, 0xD3, 0xAE, 0x5C, 0xAA, 0xB5, 0x9C, 0xD7, 0xB8, 0x5B,
+ 0x1B, 0x69, 0x52, 0x93, 0xBF, 0xDB, 0x87, 0x5C, 0x19, 0x07}}},
+ {{{0x1B, 0x03, 0xE1, 0x79, 0x3C, 0x10, 0x0B, 0x65, 0xBF, 0xD7, 0xF3,
+ 0x45, 0x1A, 0xD4, 0xDD, 0xB8, 0x67, 0x1A, 0x8F, 0x41, 0x1A, 0xD4,
+ 0x04, 0x3C, 0xD2, 0xA4, 0x3B, 0x47, 0xFE, 0xBD, 0xEA, 0x87},
+ {0xDF, 0x7F, 0x94, 0x9C, 0xB8, 0x65, 0x54, 0x8D, 0xD7, 0x0B, 0x33,
+ 0x26, 0x25, 0x89, 0xD4, 0x60, 0x0C, 0x89, 0x5F, 0x2C, 0x00, 0x7F,
+ 0xAF, 0x89, 0x35, 0xE5, 0xB9, 0x23, 0x7F, 0x79, 0x1A, 0x86}}},
+ {{{0xCE, 0x01, 0x4F, 0x24, 0x3C, 0x3A, 0xC3, 0x61, 0x5B, 0xD9, 0x2D,
+ 0x87, 0x94, 0xA3, 0xD2, 0x8B, 0x57, 0xC4, 0x07, 0xF8, 0x29, 0x5E,
+ 0x09, 0x23, 0xCA, 0xE9, 0x85, 0xA1, 0xDB, 0xF2, 0x0C, 0x8F},
+ {0xC2, 0xFB, 0x9A, 0xCC, 0xD9, 0x82, 0x63, 0x28, 0x83, 0xB7, 0x4F,
+ 0x99, 0x3A, 0x19, 0x11, 0xB0, 0xB4, 0xE7, 0x73, 0x94, 0x35, 0x19,
+ 0x6B, 0xC2, 0x5D, 0x2E, 0x8C, 0x33, 0xFF, 0x13, 0xCD, 0xBE}}}}},
+ {{{{{0x29, 0x43, 0xF6, 0xA0, 0xE9, 0xDC, 0x27, 0x27, 0x9B, 0x0A, 0x33,
+ 0xBC, 0x85, 0x6A, 0xBF, 0x8B, 0xC5, 0x89, 0x10, 0x92, 0xAE, 0x73,
+ 0xC9, 0x32, 0x46, 0x8D, 0x24, 0x1F, 0x32, 0x96, 0xED, 0x0B},
+ {0x44, 0x8C, 0x6D, 0xF6, 0x1A, 0x2F, 0xCA, 0x18, 0x8E, 0x84, 0xFF,
+ 0x5F, 0x5F, 0xAF, 0xC0, 0x52, 0x35, 0xA1, 0xB3, 0xA0, 0xDE, 0xEE,
+ 0x97, 0xBF, 0xB8, 0xFA, 0x8B, 0x9E, 0x00, 0x13, 0xE7, 0x26}}},
+ {{{0xFB, 0x78, 0xA1, 0x6D, 0x41, 0x92, 0xA6, 0xC6, 0x7F, 0xAD, 0xB7,
+ 0xFC, 0x4F, 0x5F, 0x48, 0x94, 0x7D, 0xB7, 0xF5, 0xCC, 0xB5, 0x7E,
+ 0x08, 0xCD, 0xBF, 0x58, 0xC9, 0x30, 0xEB, 0xE4, 0xA0, 0xBF},
+ {0x0C, 0x6A, 0x89, 0x18, 0x97, 0x37, 0x54, 0x76, 0x79, 0x3E, 0x8E,
+ 0xA6, 0x5B, 0x77, 0xCE, 0x4A, 0xCB, 0xD9, 0x8B, 0x7B, 0x32, 0x1A,
+ 0x30, 0x40, 0x49, 0xFF, 0x84, 0xE7, 0xBE, 0xD8, 0xCF, 0xFD}}},
+ {{{0x2D, 0x23, 0x54, 0xB5, 0x2E, 0x29, 0xE9, 0xC7, 0x62, 0x1B, 0x03,
+ 0x34, 0x3A, 0xEB, 0xC9, 0x69, 0x38, 0x9F, 0xD1, 0x2B, 0xDA, 0x8B,
+ 0x07, 0x58, 0x30, 0xF8, 0x38, 0x08, 0x09, 0x07, 0xCA, 0x5B},
+ {0x3A, 0x13, 0xED, 0xF4, 0x5D, 0xC9, 0x23, 0x66, 0x85, 0x8C, 0x6A,
+ 0x7D, 0xE9, 0x11, 0x17, 0xE6, 0x43, 0x2F, 0x12, 0xC5, 0x07, 0x63,
+ 0x84, 0x98, 0xA0, 0x1C, 0xDC, 0xF3, 0x91, 0x91, 0x11, 0x55}}}}}}};
+
+const Fq12ElemStr FfElementTest::fq12_i_str = {
+ {{{{{{0x0F, 0xD0, 0x1C, 0x59, 0x98, 0x52, 0x5A, 0x40, 0xFF, 0x26, 0x0A,
+ 0xFD, 0x70, 0xEC, 0x23, 0x48, 0x1B, 0x4B, 0x70, 0xA0, 0x15, 0xC5,
+ 0xB1, 0x8B, 0xA5, 0x75, 0xAC, 0xCE, 0xF3, 0x6C, 0xE8, 0xBA},
+ {0xA7, 0xFB, 0xF9, 0xEA, 0x18, 0x70, 0xD8, 0x9B, 0x3C, 0xC3, 0x66,
+ 0x10, 0x38, 0xAC, 0x16, 0x32, 0xDC, 0x9D, 0xF0, 0xD4, 0x2C, 0xE7,
+ 0xF6, 0x69, 0x47, 0x69, 0x84, 0xEE, 0x39, 0x5F, 0xD8, 0xCC}}},
+ {{{0x1B, 0xEF, 0x81, 0x13, 0x81, 0xB9, 0x56, 0xAE, 0xD0, 0xD4, 0xAE,
+ 0xCB, 0x24, 0x7C, 0x7B, 0x7F, 0xC0, 0x41, 0x42, 0x0A, 0x9D, 0x90,
+ 0x6B, 0x1E, 0x3A, 0xAD, 0x39, 0x7A, 0x1F, 0xEF, 0x56, 0x9E},
+ {0xBD, 0x84, 0x48, 0xAF, 0x65, 0x66, 0x33, 0xE5, 0x67, 0xF1, 0xC4,
+ 0x48, 0xF0, 0xB6, 0x61, 0x06, 0xC7, 0x78, 0xB3, 0xC1, 0x12, 0xB8,
+ 0x31, 0xD4, 0x69, 0x2E, 0x0E, 0xD3, 0xD4, 0x91, 0x81, 0x9A}}},
+ {{{0x23, 0x62, 0x9B, 0x83, 0x95, 0xF6, 0x7F, 0xF6, 0xCC, 0x6B, 0xEE,
+ 0x84, 0xF0, 0x5B, 0x93, 0xA6, 0x90, 0x48, 0x1A, 0xA7, 0xA8, 0xE8,
+ 0x10, 0xA5, 0x53, 0x7E, 0x4F, 0xD5, 0x0D, 0xB0, 0x86, 0xF7},
+ {0x1F, 0xB8, 0xB7, 0xD4, 0x2E, 0x41, 0x83, 0x2C, 0xFC, 0x62, 0x14,
+ 0xB8, 0xC2, 0xF6, 0xC1, 0x5E, 0xC1, 0xC1, 0x40, 0x8B, 0x28, 0xB5,
+ 0x1B, 0x85, 0xEE, 0x71, 0xC8, 0x14, 0x56, 0xB9, 0x3B, 0x90}}}}},
+ {{{{{0x4A, 0xFE, 0x73, 0xFA, 0xCF, 0x20, 0x67, 0x0E, 0x89, 0x1D, 0xCB,
+ 0x05, 0x38, 0x27, 0x1C, 0xD5, 0x7A, 0x0C, 0xAC, 0x92, 0x17, 0x94,
+ 0x7F, 0x10, 0x3E, 0xFF, 0x97, 0x23, 0x66, 0x8D, 0x70, 0xAE},
+ {0x80, 0x97, 0xFF, 0x88, 0xF8, 0x01, 0x2B, 0x99, 0x81, 0xEB, 0xF8,
+ 0x19, 0xEF, 0xDA, 0xE3, 0xAE, 0xD9, 0x9B, 0x4C, 0x13, 0xFC, 0x9E,
+ 0x18, 0xD6, 0xB0, 0xCF, 0x4E, 0x29, 0xA8, 0xCF, 0x01, 0xFA}}},
+ {{{0xDA, 0x22, 0x85, 0x18, 0x9A, 0x51, 0x17, 0xAC, 0x26, 0x57, 0xF6,
+ 0x73, 0x59, 0x24, 0xD5, 0xC9, 0x4D, 0xAC, 0xB6, 0xE4, 0x51, 0xF7,
+ 0x5E, 0x30, 0x5B, 0x25, 0x3D, 0x52, 0xA3, 0xE0, 0x4B, 0xA2},
+ {0xC3, 0x4C, 0x2F, 0x53, 0xD5, 0x92, 0x33, 0x7E, 0x8B, 0x66, 0x5F,
+ 0x48, 0x48, 0xCA, 0xA8, 0x98, 0x0F, 0x73, 0xD3, 0x60, 0xAF, 0x25,
+ 0x02, 0xEE, 0x64, 0xE7, 0x02, 0x89, 0x9A, 0xD2, 0x96, 0x45}}},
+ {{{0x04, 0xE1, 0x30, 0x9B, 0xD8, 0x85, 0xF0, 0x99, 0x7C, 0x01, 0xD5,
+ 0x58, 0x5A, 0x74, 0x0B, 0xD4, 0xF2, 0xFA, 0xC7, 0x59, 0x36, 0xFD,
+ 0x91, 0x07, 0x60, 0xF7, 0xDC, 0x11, 0x3E, 0x8A, 0xC6, 0x48},
+ {0x0D, 0x02, 0x30, 0x18, 0xD0, 0xB9, 0x6B, 0xD6, 0x39, 0x6A, 0x41,
+ 0x82, 0xDD, 0xE3, 0xCE, 0xB8, 0xB6, 0xF5, 0x61, 0x80, 0x61, 0x16,
+ 0xF4, 0x9A, 0xB8, 0x58, 0x1D, 0x3F, 0x4D, 0xC2, 0xCA, 0xCF}}}}}}};
+
+const Fq12ElemStr FfElementTest::fq12_j_str = {
+ {{{{{{0x3A, 0x30, 0x33, 0xA2, 0x14, 0xDF, 0xDC, 0x70, 0x48, 0xF3, 0xBA,
+ 0x3F, 0xCE, 0xFC, 0x69, 0x24, 0xAE, 0xA1, 0xF3, 0xCF, 0xD8, 0x77,
+ 0x69, 0x38, 0x38, 0xF4, 0x8E, 0xFB, 0x51, 0xFB, 0x10, 0x7C},
+ {0x73, 0xB4, 0xEE, 0xF9, 0x76, 0xBB, 0x45, 0xEC, 0x07, 0x24, 0x23,
+ 0xA3, 0x38, 0x64, 0x39, 0x4C, 0x03, 0x94, 0xF5, 0xEE, 0x5F, 0xC9,
+ 0x83, 0x4F, 0xD1, 0xA6, 0x4A, 0x05, 0x25, 0x0C, 0x46, 0x33}}},
+ {{{0xD4, 0x40, 0x47, 0xAE, 0xEC, 0xDA, 0x30, 0xF9, 0xE1, 0x28, 0xFB,
+ 0xB1, 0x4C, 0x62, 0xFB, 0x6C, 0x90, 0x0D, 0xB1, 0xEC, 0xAF, 0x2D,
+ 0x95, 0x64, 0x11, 0x93, 0xDA, 0x8E, 0xB8, 0x7D, 0xE4, 0xA3},
+ {0x8E, 0xA6, 0x9B, 0xAA, 0x58, 0xD5, 0xDC, 0x59, 0x1A, 0x51, 0x53,
+ 0x47, 0x30, 0x1C, 0x2B, 0xB0, 0xBB, 0x57, 0x57, 0x0A, 0x8C, 0x5F,
+ 0x62, 0x9C, 0x52, 0x28, 0xC0, 0x25, 0x27, 0xAE, 0xCD, 0x36}}},
+ {{{0xBF, 0x2D, 0x03, 0xB1, 0x33, 0xFD, 0x24, 0x81, 0x3C, 0x91, 0x43,
+ 0x90, 0x0C, 0x20, 0xC4, 0xE3, 0x69, 0x3F, 0xA9, 0xA2, 0x7C, 0xC2,
+ 0x48, 0x28, 0x1B, 0xF0, 0x81, 0x1F, 0x2B, 0x8F, 0x8D, 0x43},
+ {0x38, 0x18, 0x12, 0xA3, 0x89, 0xF1, 0xD7, 0x60, 0x89, 0x68, 0x6A,
+ 0xC4, 0xCC, 0x5D, 0xF4, 0xCE, 0x43, 0x95, 0x84, 0xCD, 0x01, 0x55,
+ 0xB8, 0x5D, 0x24, 0x50, 0xCD, 0xE3, 0x68, 0x1C, 0xFF, 0x59}}}}},
+ {{{{{0x0D, 0xAC, 0xCB, 0xE7, 0x9D, 0x68, 0x0F, 0x4A, 0xAF, 0xEB, 0xB5,
+ 0xFB, 0xF9, 0xB1, 0x58, 0x80, 0xD5, 0x71, 0x53, 0x26, 0x2E, 0x9C,
+ 0xCE, 0x10, 0xAC, 0xD2, 0x0A, 0xEB, 0xB4, 0x5C, 0xC8, 0xD7},
+ {0x16, 0x26, 0x66, 0x71, 0xDD, 0x67, 0xBA, 0xDB, 0x35, 0x76, 0x64,
+ 0xC6, 0x0B, 0x0B, 0x07, 0x4B, 0x65, 0xA2, 0xF7, 0x68, 0x9E, 0xFE,
+ 0xE8, 0xE3, 0xA7, 0x09, 0x79, 0xC5, 0xDF, 0x5E, 0x9C, 0xEC}}},
+ {{{0xEE, 0x83, 0x59, 0xB5, 0x89, 0x81, 0xA2, 0x87, 0xD7, 0x75, 0x65,
+ 0x90, 0xDE, 0x78, 0x37, 0x59, 0x04, 0x9B, 0x50, 0xC3, 0xBA, 0x90,
+ 0x09, 0x15, 0xAB, 0x17, 0xC5, 0xBF, 0x5B, 0xB9, 0xE4, 0x6C},
+ {0xA9, 0xB1, 0x49, 0x76, 0x25, 0x74, 0x5D, 0x9C, 0x78, 0xC5, 0x09,
+ 0xEE, 0xEB, 0xEB, 0x9D, 0x1C, 0x6C, 0xC0, 0x27, 0x9D, 0x66, 0xE6,
+ 0x7F, 0x31, 0xCD, 0xB0, 0x8A, 0xE4, 0x9E, 0xBD, 0x70, 0x18}}},
+ {{{0x88, 0xA1, 0x08, 0x39, 0xA2, 0x48, 0xA5, 0x98, 0xB6, 0xAD, 0x10,
+ 0x54, 0x07, 0xCD, 0xFC, 0x6D, 0xB1, 0x02, 0xFF, 0xE3, 0x92, 0xD7,
+ 0x9D, 0x48, 0xFB, 0xCE, 0x88, 0x46, 0x92, 0x07, 0x02, 0xBA},
+ {0xEE, 0xEB, 0xAE, 0x88, 0xB1, 0x4E, 0xD0, 0xF2, 0xCE, 0xD7, 0x57,
+ 0x07, 0xD4, 0x39, 0xD2, 0x7D, 0x1A, 0x0C, 0xEF, 0xF2, 0x84, 0x84,
+ 0x22, 0x8A, 0xB1, 0x80, 0x0D, 0xDC, 0x64, 0x86, 0xFD, 0x70}}}}}}};
+
+const Fq12ElemStr FfElementTest::fq12_mul_ij_str = {
+ {{{{{{0x4A, 0x0E, 0x83, 0x4F, 0x62, 0xCA, 0x56, 0x0B, 0x0F, 0x2E, 0xF3,
+ 0x1A, 0xC6, 0xFC, 0x76, 0x4F, 0x4B, 0x85, 0x78, 0x6F, 0x9D, 0xB9,
+ 0xBD, 0xC8, 0xBB, 0x7C, 0x73, 0x12, 0x28, 0xFF, 0xBC, 0x8F},
+ {0x18, 0x8E, 0x5E, 0x4B, 0x72, 0xA5, 0x4A, 0x99, 0xFC, 0xE7, 0x05,
+ 0xE5, 0xD2, 0x2C, 0x06, 0x95, 0xF5, 0xE4, 0xA5, 0x87, 0xCB, 0x85,
+ 0x25, 0xF8, 0xDA, 0x71, 0x7B, 0x9A, 0xF1, 0x52, 0xF9, 0x33}}},
+ {{{0x05, 0x5F, 0x15, 0x72, 0xA3, 0x61, 0xA6, 0x6C, 0xB8, 0x43, 0xBB,
+ 0xCA, 0x33, 0xB2, 0xDB, 0x59, 0xCA, 0xAB, 0xAD, 0xA0, 0x4D, 0xE3,
+ 0xB8, 0xF5, 0xC9, 0x8C, 0x06, 0x91, 0xE5, 0xE4, 0x5A, 0xAD},
+ {0xE7, 0x66, 0xCC, 0x2B, 0x2C, 0x11, 0x88, 0x29, 0xB1, 0x3C, 0x52,
+ 0xFE, 0x50, 0xDF, 0x8F, 0x15, 0x6A, 0x6B, 0xB8, 0x32, 0x96, 0x90,
+ 0x85, 0x03, 0x78, 0x88, 0x97, 0x7B, 0x5B, 0x50, 0x2E, 0xDE}}},
+ {{{0xE7, 0x53, 0x22, 0x11, 0xEB, 0xFF, 0x1B, 0x19, 0xAE, 0x5F, 0x58,
+ 0x3A, 0x4F, 0x6F, 0x34, 0xFB, 0x2A, 0x49, 0xCA, 0x4B, 0x9C, 0x31,
+ 0xFC, 0x74, 0x0F, 0x11, 0xCC, 0x45, 0xCD, 0xA2, 0x12, 0xCA},
+ {0xF4, 0x2F, 0x30, 0x9A, 0x6A, 0xCB, 0xEE, 0x88, 0x15, 0x56, 0x29,
+ 0x2A, 0xBF, 0x33, 0x7B, 0xDB, 0x59, 0x74, 0x4D, 0xC0, 0x64, 0xF0,
+ 0x0B, 0x9F, 0xF2, 0x65, 0xB7, 0x3A, 0xDA, 0xE2, 0xB5, 0x63}}}}},
+ {{{{{0x3A, 0x3E, 0x06, 0xEF, 0x73, 0xA3, 0xBC, 0xEA, 0xCC, 0x68, 0xD9,
+ 0xF5, 0x6E, 0x94, 0x1C, 0x54, 0x47, 0xF1, 0x99, 0x2C, 0x44, 0x64,
+ 0x45, 0x84, 0x50, 0x10, 0xFD, 0xC5, 0x16, 0x65, 0x89, 0xEC},
+ {0x72, 0xA6, 0x7E, 0x82, 0x7F, 0xE2, 0xE3, 0xEA, 0x82, 0xA3, 0x18,
+ 0xF4, 0x9B, 0x93, 0x4D, 0x79, 0xA0, 0x2C, 0xBF, 0x90, 0x0E, 0xDB,
+ 0x41, 0x09, 0x27, 0x44, 0x19, 0xD1, 0xB4, 0xE5, 0xC6, 0x8C}}},
+ {{{0xA5, 0xC7, 0x82, 0xBF, 0x00, 0x7B, 0x8D, 0x7A, 0x05, 0x7B, 0x7E,
+ 0x33, 0x60, 0x28, 0x34, 0x9C, 0x86, 0x5A, 0x6B, 0xCE, 0xA5, 0xED,
+ 0x26, 0x22, 0x63, 0x4A, 0xE9, 0x57, 0xCD, 0x55, 0xD2, 0xD3},
+ {0x0E, 0x73, 0x14, 0xE4, 0xEE, 0xE7, 0x3C, 0x43, 0xFC, 0xAE, 0x84,
+ 0x59, 0x2F, 0xEA, 0x35, 0x84, 0xA5, 0x77, 0xCE, 0xA8, 0xC5, 0xAA,
+ 0xB8, 0xDC, 0xB9, 0xD6, 0x71, 0x11, 0xE2, 0x95, 0x00, 0x97}}},
+ {{{0xBD, 0x50, 0xDA, 0x58, 0x1B, 0xDA, 0xB3, 0x25, 0x19, 0x2F, 0x9D,
+ 0xFA, 0x2C, 0xFB, 0x96, 0x26, 0xBB, 0x4A, 0x41, 0x82, 0xA9, 0x45,
+ 0x24, 0xEE, 0xEE, 0xEA, 0xD3, 0xC5, 0x94, 0xFC, 0x2A, 0x37},
+ {0x6A, 0x43, 0xB8, 0x6C, 0xBB, 0x98, 0xB7, 0x17, 0x03, 0xC0, 0x3D,
+ 0x6D, 0x59, 0x56, 0x3D, 0x23, 0x42, 0x94, 0x25, 0x64, 0xB9, 0x62,
+ 0xAD, 0x4D, 0x84, 0x9B, 0x3C, 0x05, 0x8C, 0xF0, 0xD3, 0xD3}}}}}},
+};
-///////////////////////////////////////////////////////////////////////
+const Fq12ElemStr FfElementTest::fq12_k_str = {
+ {{{{{{0xE4, 0xCA, 0x0B, 0xA8, 0x9C, 0x70, 0xE2, 0x20, 0x24, 0xD9, 0x8F,
+ 0x09, 0x12, 0x79, 0x55, 0x44, 0x8C, 0x58, 0x42, 0x8F, 0x18, 0x97,
+ 0x0A, 0xC3, 0x0A, 0x40, 0x68, 0x0E, 0x1E, 0x21, 0x7F, 0xB4},
+ {0x73, 0xCF, 0x8D, 0x54, 0x68, 0xAE, 0x1C, 0xC4, 0x95, 0x01, 0xE3,
+ 0x52, 0x33, 0xFE, 0x69, 0xB5, 0x23, 0x45, 0xEF, 0xFF, 0x79, 0x14,
+ 0xEF, 0x98, 0xA8, 0x4E, 0xB1, 0x2E, 0xE1, 0x15, 0x81, 0x0C}}},
+ {{{0x9F, 0x65, 0x90, 0x6A, 0x53, 0xD7, 0xF6, 0x73, 0x08, 0xDA, 0x45,
+ 0x11, 0xDE, 0xCF, 0xED, 0x4C, 0x8C, 0x21, 0x02, 0xF5, 0x3F, 0x97,
+ 0xB6, 0xB2, 0xF5, 0xC6, 0x58, 0xFC, 0x9A, 0xA6, 0xBB, 0xF9},
+ {0x3C, 0xD8, 0xFC, 0x86, 0x09, 0x1C, 0x16, 0xA4, 0x6F, 0x5E, 0x7A,
+ 0x81, 0x01, 0xF9, 0x8A, 0x6D, 0x38, 0xB5, 0xC9, 0x5F, 0xE9, 0x7D,
+ 0x6F, 0x46, 0x92, 0x49, 0x5B, 0xB8, 0x61, 0x03, 0x6F, 0x5E}}},
+ {{{0xDA, 0x53, 0xCB, 0x62, 0xCD, 0x82, 0x63, 0x96, 0xC7, 0xC0, 0x39,
+ 0xA4, 0x31, 0xEE, 0x15, 0x26, 0x1C, 0xE6, 0x4E, 0xE4, 0xB4, 0x40,
+ 0xFA, 0x65, 0xA3, 0xF4, 0x73, 0x03, 0x85, 0x84, 0x41, 0xF9},
+ {0x77, 0xF3, 0x90, 0xDC, 0x88, 0x26, 0xBD, 0x27, 0x9A, 0x9D, 0x37,
+ 0xF0, 0x80, 0xEE, 0x02, 0x1D, 0x3E, 0x4F, 0x88, 0xED, 0x8F, 0x89,
+ 0x90, 0xF1, 0x6D, 0x5D, 0x70, 0x49, 0x99, 0x07, 0x61, 0x22}}}}},
+ {{{{{0x43, 0x52, 0xBA, 0xEE, 0xA8, 0xE9, 0x8E, 0x2E, 0x83, 0x30, 0x41,
+ 0x85, 0xE3, 0x51, 0xB0, 0x8C, 0x86, 0x31, 0xEC, 0x02, 0x76, 0xE8,
+ 0x41, 0x1F, 0x88, 0xBC, 0x39, 0xA2, 0xE4, 0xC1, 0x34, 0xA7},
+ {0x1D, 0x5F, 0x8C, 0x23, 0x0F, 0xF0, 0xDC, 0xCD, 0xBA, 0x67, 0xD5,
+ 0x78, 0xD6, 0x8D, 0x32, 0x6A, 0xC1, 0x7F, 0x6F, 0x97, 0xCF, 0x46,
+ 0xF0, 0x04, 0x7B, 0xE3, 0x5A, 0xEE, 0x31, 0xC4, 0xC0, 0x79}}},
+ {{{0x96, 0xBC, 0x01, 0x78, 0x9F, 0xBE, 0x8B, 0xBA, 0x59, 0x22, 0xFB,
+ 0x64, 0x1B, 0x37, 0x5C, 0x33, 0x57, 0xAF, 0x83, 0x5A, 0x96, 0xEA,
+ 0x56, 0xAA, 0x6E, 0x9C, 0xFA, 0xE6, 0xF9, 0xDF, 0xD8, 0x44},
+ {0xBB, 0x4E, 0xBF, 0xA8, 0xEC, 0x0F, 0x16, 0xA8, 0x59, 0x1F, 0x49,
+ 0xF4, 0x8C, 0x80, 0x6C, 0x52, 0x7F, 0x74, 0x94, 0xC2, 0xE3, 0x29,
+ 0x34, 0x9C, 0x97, 0xB9, 0x5E, 0xED, 0xFD, 0x59, 0x9D, 0xD4}}},
+ {{{0x83, 0xFB, 0xC2, 0xAD, 0x72, 0xE8, 0xF3, 0x68, 0x43, 0xD0, 0xD4,
+ 0xDC, 0xB2, 0x36, 0xC1, 0xDB, 0x03, 0x29, 0xEE, 0x8C, 0x1A, 0x10,
+ 0xD7, 0xFB, 0xC2, 0xEA, 0xDA, 0xBA, 0x42, 0x18, 0xE6, 0xE4},
+ {0x63, 0x41, 0x6E, 0x8C, 0xB3, 0x14, 0x68, 0x9A, 0x0F, 0x64, 0x87,
+ 0x16, 0x02, 0xA3, 0x59, 0xF4, 0x60, 0x80, 0x04, 0x2B, 0xA4, 0xE6,
+ 0x10, 0x2D, 0x61, 0x59, 0x14, 0xFE, 0xAF, 0x84, 0xA0, 0x67}}}}}}};
+const Fq12ElemStr FfElementTest::fq12_mul_gb_str = {
+ {{{{{{0xE4, 0xCA, 0x0B, 0xA8, 0x9C, 0x70, 0xE2, 0x20, 0x24, 0xD9, 0x8F,
+ 0x09, 0x12, 0x79, 0x55, 0x44, 0x8C, 0x58, 0x42, 0x8F, 0x18, 0x97,
+ 0x0A, 0xC3, 0x0A, 0x40, 0x68, 0x0E, 0x1E, 0x21, 0x7F, 0xB4},
+ {0x73, 0xCF, 0x8D, 0x54, 0x68, 0xAE, 0x1C, 0xC4, 0x95, 0x01, 0xE3,
+ 0x52, 0x33, 0xFE, 0x69, 0xB5, 0x23, 0x45, 0xEF, 0xFF, 0x79, 0x14,
+ 0xEF, 0x98, 0xA8, 0x4E, 0xB1, 0x2E, 0xE1, 0x15, 0x81, 0x0C}}},
+ {{{0x9F, 0x65, 0x90, 0x6A, 0x53, 0xD7, 0xF6, 0x73, 0x08, 0xDA, 0x45,
+ 0x11, 0xDE, 0xCF, 0xED, 0x4C, 0x8C, 0x21, 0x02, 0xF5, 0x3F, 0x97,
+ 0xB6, 0xB2, 0xF5, 0xC6, 0x58, 0xFC, 0x9A, 0xA6, 0xBB, 0xF9},
+ {0x3C, 0xD8, 0xFC, 0x86, 0x09, 0x1C, 0x16, 0xA4, 0x6F, 0x5E, 0x7A,
+ 0x81, 0x01, 0xF9, 0x8A, 0x6D, 0x38, 0xB5, 0xC9, 0x5F, 0xE9, 0x7D,
+ 0x6F, 0x46, 0x92, 0x49, 0x5B, 0xB8, 0x61, 0x03, 0x6F, 0x5E}}},
+ {{{0xDA, 0x53, 0xCB, 0x62, 0xCD, 0x82, 0x63, 0x96, 0xC7, 0xC0, 0x39,
+ 0xA4, 0x31, 0xEE, 0x15, 0x26, 0x1C, 0xE6, 0x4E, 0xE4, 0xB4, 0x40,
+ 0xFA, 0x65, 0xA3, 0xF4, 0x73, 0x03, 0x85, 0x84, 0x41, 0xF9},
+ {0x77, 0xF3, 0x90, 0xDC, 0x88, 0x26, 0xBD, 0x27, 0x9A, 0x9D, 0x37,
+ 0xF0, 0x80, 0xEE, 0x02, 0x1D, 0x3E, 0x4F, 0x88, 0xED, 0x8F, 0x89,
+ 0x90, 0xF1, 0x6D, 0x5D, 0x70, 0x49, 0x99, 0x07, 0x61, 0x22}}}}},
+ {{{{{0xBC, 0xAD, 0x45, 0x11, 0x57, 0x13, 0x62, 0x9E, 0xC3, 0xB5, 0xB0,
+ 0xD9, 0x0B, 0x1F, 0xF4, 0x12, 0x86, 0xAA, 0x79, 0xF8, 0x9B, 0xAF,
+ 0xC9, 0x63, 0x4A, 0x6C, 0xF4, 0x38, 0xCA, 0x11, 0xFB, 0x6C},
+ {0xE2, 0xA0, 0x73, 0xDC, 0xF0, 0x0C, 0x13, 0xFF, 0x8C, 0x7E, 0x1C,
+ 0xE6, 0x17, 0xE4, 0x72, 0x34, 0x4B, 0x5C, 0xF6, 0x63, 0x43, 0x51,
+ 0x1A, 0x7E, 0x57, 0x45, 0xD2, 0xED, 0x7D, 0x0E, 0x6F, 0x9A}}},
+ {{{0x69, 0x43, 0xFE, 0x87, 0x60, 0x3E, 0x65, 0x12, 0xED, 0xC2, 0xF6,
+ 0xFA, 0xD3, 0x3A, 0x48, 0x6B, 0xB5, 0x2C, 0xE2, 0xA0, 0x7B, 0xAD,
+ 0xB3, 0xD8, 0x64, 0x8C, 0x32, 0xF4, 0xB4, 0xF3, 0x57, 0xCF},
+ {0x44, 0xB1, 0x40, 0x57, 0x13, 0xED, 0xDA, 0x24, 0xED, 0xC6, 0xA8,
+ 0x6A, 0x61, 0xF1, 0x38, 0x4C, 0x8D, 0x67, 0xD1, 0x38, 0x2F, 0x6E,
+ 0xD5, 0xE6, 0x3B, 0x6F, 0xCE, 0xED, 0xB1, 0x79, 0x92, 0x3F}}},
+ {{{0x7C, 0x04, 0x3D, 0x52, 0x8D, 0x13, 0xFD, 0x65, 0x03, 0x15, 0x1D,
+ 0x82, 0x3C, 0x3A, 0xE2, 0xC4, 0x09, 0xB2, 0x77, 0x6E, 0xF8, 0x87,
+ 0x32, 0x87, 0x10, 0x3E, 0x53, 0x21, 0x6C, 0xBA, 0x49, 0x2F},
+ {0x9C, 0xBE, 0x91, 0x73, 0x4C, 0xE8, 0x88, 0x33, 0x37, 0x81, 0x6B,
+ 0x48, 0xEB, 0xCE, 0x4A, 0xAA, 0xAC, 0x5C, 0x61, 0xCF, 0x6D, 0xB1,
+ 0xFA, 0x55, 0x71, 0xD0, 0x18, 0xDC, 0xFF, 0x4E, 0x8F, 0xAC}}}}}},
+};
+
+const FqElemStr FfElementTest::fq_multi_exp_base_1[1] = {{
+ 0x12, 0xA6, 0x5B, 0xD6, 0x91, 0x8D, 0x50, 0xA7, 0x66, 0xEB, 0x7D, 0x52,
+ 0xE3, 0x40, 0x17, 0x60, 0x7F, 0xDF, 0x6C, 0xA1, 0x2C, 0x1A, 0x37, 0xE0,
+ 0x92, 0xC0, 0xF7, 0xB9, 0x76, 0xAB, 0xB1, 0x8A,
+}};
+const BigNumStr FfElementTest::fq_multi_exp_exp_1[1] = {{
+ 0xFF, 0xFB, 0x3E, 0x5D, 0xFF, 0x9A, 0xFF, 0x02, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xF2, 0xE1, 0x85, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x81,
+ 0xFF, 0xFD, 0xFF, 0xEB, 0xFF, 0x29, 0xA7, 0xFF,
+}};
+const FqElemStr FfElementTest::fq_multi_exp_res_1 = {
+ 0x6A, 0x21, 0xEC, 0x89, 0xCC, 0x13, 0x2F, 0x6F, 0x29, 0x1B, 0x3A,
+ 0x94, 0xF6, 0xE6, 0xA8, 0xBD, 0x98, 0x25, 0x43, 0x7A, 0xDC, 0xC1,
+ 0x20, 0xBA, 0x30, 0xD8, 0x1C, 0x8E, 0x79, 0xFC, 0xDA, 0x67,
+};
+
+const std::vector<uint8_t> FfElementTest::fq_multi_exp_exp_1_264({
+ 0x08, 0xFF, 0xFB, 0x3E, 0x5D, 0xFF, 0x9A, 0xFF, 0x02, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xF2, 0xE1, 0x85, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x81, 0xFF, 0xFD, 0xFF, 0xEB, 0xFF, 0x29, 0xA7, 0xFF,
+});
+const FqElemStr FfElementTest::fq_multi_exp_res_1_264 = {
+ 0x71, 0x41, 0xa1, 0xdb, 0xd1, 0xd1, 0x50, 0xc2, 0x73, 0x07, 0xc1,
+ 0x93, 0xeb, 0xae, 0x89, 0x4c, 0x6e, 0x49, 0x74, 0xf7, 0x46, 0x23,
+ 0x75, 0xca, 0xc8, 0x67, 0x82, 0xaf, 0xcf, 0x35, 0x34, 0x1c};
+const FqElemStr FfElementTest::fq_multi_exp_res_1_256_264 = {
+ 0x10, 0x2f, 0x3a, 0xe5, 0x6e, 0x95, 0x92, 0x8f, 0x98, 0x03, 0x67,
+ 0x79, 0xec, 0x0c, 0xc9, 0x46, 0x07, 0xd9, 0xd9, 0x40, 0x46, 0x29,
+ 0x99, 0xe9, 0x23, 0xf9, 0x6b, 0x10, 0x35, 0x7c, 0xf1, 0xa3};
+
+const FqElemStr FfElementTest::fq_multi_exp_base_2[2] = {
+ {0xE6, 0x65, 0x23, 0x9B, 0xD4, 0x07, 0x16, 0x83, 0x38, 0x23, 0xB2, 0x67,
+ 0x57, 0xEB, 0x0F, 0x23, 0x3A, 0xF4, 0x8E, 0xDA, 0x71, 0x5E, 0xD9, 0x98,
+ 0x63, 0x98, 0x2B, 0xBC, 0x78, 0xD1, 0x94, 0xF2},
+ {0xDD, 0x2B, 0xE9, 0x59, 0x24, 0xA5, 0xB3, 0xFD, 0xEB, 0xE1, 0x3C, 0xC0,
+ 0x73, 0x4E, 0x99, 0xEE, 0x36, 0xF6, 0xC0, 0x1A, 0x76, 0x01, 0x0A, 0xF0,
+ 0xCB, 0xB4, 0x71, 0x88, 0x95, 0xCB, 0x35, 0xBA}};
+const BigNumStr FfElementTest::fq_multi_exp_exp_2[2] = {
+ {0x11, 0xFF, 0xFF, 0xFF, 0x4F, 0x59, 0xB1, 0xD3, 0x6B, 0x08, 0xFF, 0xFF,
+ 0x0B, 0xF3, 0xAF, 0x27, 0xFF, 0xB8, 0xFF, 0xFF, 0x98, 0xFF, 0xEB, 0xFF,
+ 0xF2, 0x6A, 0xFF, 0xFF, 0xEA, 0x31, 0xFF, 0xFF},
+ {0xE2, 0xFF, 0x03, 0x1D, 0xFF, 0x19, 0x81, 0xCB, 0xFF, 0xFF, 0x6B, 0xD5,
+ 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xBD, 0xFF, 0x5A, 0xFF, 0x5C, 0x7C, 0xFF,
+ 0x84, 0xFF, 0xFF, 0x8C, 0x03, 0xB2, 0x26, 0xFF}};
+const FqElemStr FfElementTest::fq_multi_exp_res_2 = {
+ 0x8A, 0xF7, 0x96, 0x53, 0x9C, 0xC3, 0x57, 0x89, 0x50, 0xE3, 0xAB,
+ 0x12, 0x62, 0xEA, 0x0C, 0xE4, 0x65, 0xA6, 0x91, 0x09, 0x93, 0x81,
+ 0xFC, 0xBB, 0x0E, 0xFA, 0xC1, 0xC4, 0xDC, 0x3F, 0x0A, 0xD1,
+};
+
+const FqElemStr FfElementTest::fq_multi_exp_base_3[3] = {
+ {0x24, 0x9D, 0xDD, 0x1A, 0xC0, 0x07, 0x1F, 0x65, 0xDF, 0xBB, 0xC7, 0x39,
+ 0x99, 0x44, 0x63, 0x8E, 0x7E, 0xB2, 0x85, 0x82, 0xC6, 0x4E, 0x2D, 0x39,
+ 0xA8, 0x3F, 0x12, 0xB4, 0xE9, 0x9D, 0x67, 0x28},
+ {0x6B, 0x51, 0x6B, 0x33, 0x0B, 0x2E, 0x2A, 0x94, 0x34, 0xCC, 0x7E, 0x97,
+ 0xFA, 0x85, 0x51, 0x44, 0x30, 0xE5, 0xF2, 0x68, 0x23, 0x31, 0x84, 0xFF,
+ 0xBB, 0x95, 0x9A, 0xB2, 0x80, 0x95, 0xC4, 0x91},
+ {0x77, 0xED, 0xA2, 0x53, 0xA3, 0xBF, 0x6C, 0x58, 0x16, 0x7D, 0xEF, 0x8A,
+ 0x7D, 0x38, 0x65, 0x3F, 0x92, 0xA6, 0x85, 0xD7, 0x9F, 0x80, 0xA4, 0xA1,
+ 0x70, 0x02, 0xE5, 0x66, 0xF2, 0xD8, 0xD7, 0xD2}};
+const BigNumStr FfElementTest::fq_multi_exp_exp_3[3] = {
+ {0xFF, 0xFF, 0xFF, 0xB4, 0x48, 0xFF, 0xFF, 0xFF, 0xA3, 0xFF, 0xE3, 0xFF,
+ 0x61, 0xFF, 0xA2, 0x97, 0x9A, 0xFF, 0x6F, 0x04, 0xC6, 0xB9, 0xFF, 0x22,
+ 0xFF, 0x20, 0x9E, 0xFF, 0x43, 0xFF, 0xFF, 0xFF},
+ {0xB1, 0x19, 0xBF, 0xFF, 0x74, 0x7F, 0xCC, 0x34, 0x1E, 0x30, 0x7D, 0xC5,
+ 0xC4, 0xFF, 0xE7, 0xF8, 0xFF, 0x5F, 0xFF, 0x73, 0xFF, 0x58, 0xFF, 0xD6,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEC, 0xFF, 0xFF},
+ {0xFF, 0xFF, 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, 0x26, 0xA8, 0xFF, 0xFF, 0xFF,
+ 0x3E, 0xFF, 0xFF, 0xFF, 0xE0, 0x4F, 0xFF, 0xE3, 0xFF, 0xFF, 0xEB, 0x04,
+ 0x4B, 0xFF, 0x5D, 0x55, 0xFF, 0x2D, 0xFF, 0xFF}};
+const FqElemStr FfElementTest::fq_multi_exp_res_3 = {
+ 0x04, 0x22, 0x21, 0xE7, 0x9F, 0xE3, 0x07, 0x2F, 0xA4, 0xBB, 0x56,
+ 0x84, 0xD5, 0x93, 0x4A, 0xDA, 0x5B, 0x89, 0x07, 0xBE, 0xC5, 0x5F,
+ 0xE6, 0x5C, 0x18, 0xF0, 0xF8, 0x8E, 0x8E, 0x00, 0xB9, 0x87,
+};
+const FqElemStr FfElementTest::fq_multi_exp_base_4[4] = {
+ {0x81, 0xEE, 0x78, 0x31, 0x4C, 0xC0, 0x3C, 0xDD, 0x16, 0x52, 0xC6, 0x7E,
+ 0x07, 0x4C, 0xFE, 0xC4, 0x50, 0x63, 0x5A, 0x40, 0xC8, 0xDF, 0x94, 0x23,
+ 0x1A, 0x90, 0xDD, 0x24, 0x61, 0x23, 0xDD, 0x87},
+ {0x76, 0xBB, 0x2C, 0x1C, 0xB3, 0x78, 0x93, 0x7E, 0x10, 0x29, 0xC3, 0xEC,
+ 0xBD, 0xA3, 0x75, 0x3A, 0xF1, 0x0B, 0xE1, 0xCA, 0xEE, 0x02, 0x58, 0x74,
+ 0xC7, 0xDC, 0xB8, 0x4F, 0x3F, 0x7B, 0xA2, 0xFC},
+ {0x3A, 0xD3, 0x04, 0xAA, 0x9D, 0x2A, 0xDE, 0x86, 0x56, 0x84, 0x80, 0x42,
+ 0xA5, 0x68, 0xD8, 0x6E, 0x65, 0xC4, 0x08, 0x07, 0x87, 0x4B, 0xC1, 0x92,
+ 0xCB, 0x68, 0x52, 0x6C, 0x5A, 0x4F, 0x7C, 0xFB},
+ {0x56, 0xE7, 0xBD, 0x59, 0x54, 0xCC, 0x20, 0x16, 0xAE, 0x36, 0xD1, 0xB0,
+ 0xE4, 0x82, 0x47, 0x27, 0x32, 0xD1, 0x38, 0x7C, 0x53, 0x7F, 0xDD, 0xF4,
+ 0xDE, 0xFA, 0xF7, 0x0F, 0xDD, 0xDF, 0x48, 0xA9}};
+const BigNumStr FfElementTest::fq_multi_exp_exp_4[4] = {
+ {0xFF, 0xA5, 0xC3, 0xFF, 0xFF, 0x09, 0x18, 0x18, 0x95, 0x40, 0xFF, 0xFF,
+ 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0x99, 0xFF, 0x25, 0xFF, 0xFF, 0x42, 0x07,
+ 0xB5, 0xFF, 0x26, 0xE0, 0x4F, 0xB5, 0xB4, 0xFF},
+ {0x1F, 0xFF, 0xAA, 0xF1, 0xFF, 0xFF, 0x7E, 0xFF, 0xFF, 0xFF, 0x07, 0xFF,
+ 0xE7, 0xDF, 0xFF, 0xEE, 0xFF, 0x57, 0xFF, 0xFF, 0xFF, 0xB8, 0xB3, 0x9C,
+ 0xFF, 0x8A, 0x89, 0xFF, 0xFE, 0x32, 0xFF, 0xC1},
+ {0x9A, 0xFF, 0xFF, 0x9B, 0xFF, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x36, 0xF0, 0xC5, 0xAE, 0x87, 0x41, 0xFF, 0x5C, 0xDD, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x59, 0xC9, 0xFF, 0x44, 0x5C, 0x58},
+ {0x00, 0xFF, 0x95, 0xFF, 0x21, 0xFF, 0xFF, 0x1D, 0x1A, 0x06, 0xD3, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xB0, 0x31, 0xFF, 0xFF, 0x1F,
+ 0x61, 0x48, 0xFF, 0xFF, 0xFF, 0x17, 0xC9, 0x79}};
+const FqElemStr FfElementTest::fq_multi_exp_res_4 = {
+ 0x26, 0x2C, 0x23, 0x55, 0xD5, 0xBD, 0x7B, 0x67, 0x60, 0xFE, 0x06,
+ 0x7B, 0xCC, 0xB8, 0x6B, 0xC9, 0x00, 0x81, 0xAE, 0xCB, 0xEC, 0x91,
+ 0x6D, 0x1B, 0x9E, 0x1C, 0xD8, 0xC0, 0x8D, 0x3F, 0x1B, 0x20,
+};
+const Fq12ElemStr FfElementTest::fq12_multi_exp_base_4[4] = {
+ {
+ {{{{{{0x2C, 0x86, 0xEE, 0x80, 0x61, 0x45, 0x8F, 0xFD, 0x96, 0xC2, 0x81,
+ 0x11, 0xE8, 0x96, 0xE2, 0xCA, 0x21, 0x78, 0xF7, 0xA3, 0x4B, 0xBA,
+ 0xDC, 0x0D, 0x34, 0x8A, 0x56, 0x12, 0x67, 0x8D, 0x72, 0x37},
+ {0xA8, 0xEB, 0x5F, 0x1A, 0x1B, 0xF0, 0x5C, 0xC6, 0x6F, 0xC2, 0xC5,
+ 0x03, 0xC4, 0x19, 0x85, 0xA6, 0xE0, 0x64, 0xFE, 0x71, 0x51, 0x46,
+ 0xDF, 0xC2, 0xD6, 0xF9, 0xA0, 0xD6, 0x84, 0xC1, 0x4A, 0x11}}},
+ {{{0xE0, 0x33, 0xA3, 0x1C, 0x73, 0x71, 0x62, 0x17, 0x10, 0x4C, 0xD8,
+ 0x3E, 0xEE, 0xA1, 0x38, 0x9F, 0xA5, 0xFB, 0x1D, 0xC4, 0x9D, 0x2F,
+ 0x08, 0x4A, 0xD3, 0x61, 0x37, 0x79, 0xAB, 0xC1, 0x37, 0x7E},
+ {0x90, 0xFD, 0xA3, 0x9D, 0x0C, 0x81, 0x52, 0xF4, 0x58, 0x24, 0x89,
+ 0xC4, 0xF4, 0xD4, 0x82, 0x33, 0xCA, 0x5D, 0xB4, 0x58, 0xA6, 0x1E,
+ 0xE6, 0x2B, 0x86, 0xEF, 0x56, 0xC4, 0x4F, 0x9B, 0x27, 0x3C}}},
+ {{{0x96, 0x54, 0xDA, 0xB5, 0x32, 0x23, 0x8A, 0x93, 0xCC, 0xA5, 0x7D,
+ 0x28, 0x4A, 0x97, 0xA4, 0x30, 0xA8, 0x11, 0xBC, 0x43, 0x22, 0x7F,
+ 0x02, 0x73, 0x0E, 0x5C, 0x63, 0x52, 0x2F, 0x4B, 0x5F, 0x7D},
+ {0xC3, 0x1E, 0x30, 0xAE, 0xAC, 0x8C, 0xE8, 0x93, 0xD6, 0xCE, 0x05,
+ 0x4B, 0x6B, 0x21, 0x01, 0x14, 0x4A, 0x1D, 0xD9, 0x08, 0x0C, 0xA1,
+ 0x4C, 0x0B, 0x44, 0x28, 0x9C, 0xB6, 0xD1, 0x96, 0xBD, 0x07}}}}},
+ {{{{{0x8B, 0x3D, 0x77, 0x4E, 0xBD, 0x7B, 0x9F, 0x65, 0x20, 0xDB, 0xA0,
+ 0x95, 0x25, 0x44, 0x44, 0x7A, 0xE3, 0xDC, 0xDD, 0x2F, 0xBA, 0x75,
+ 0x16, 0x19, 0xCB, 0x90, 0x31, 0x79, 0x38, 0xB6, 0x1A, 0x82},
+ {0xBC, 0xB6, 0x85, 0xCD, 0xEB, 0xB9, 0x13, 0x43, 0xEA, 0xC2, 0x78,
+ 0xBE, 0x25, 0x97, 0x1C, 0x6E, 0x18, 0x55, 0xFD, 0xCB, 0xE6, 0x7E,
+ 0x1E, 0x92, 0xAD, 0x48, 0xE7, 0xA7, 0x02, 0x87, 0x0B, 0x8F}}},
+ {{{0x16, 0xD7, 0x8E, 0x95, 0x8E, 0x62, 0x0A, 0xAD, 0x20, 0x2D, 0x6A,
+ 0x2B, 0x4E, 0x6F, 0xC1, 0xC2, 0x63, 0xBA, 0x82, 0xF3, 0x8C, 0xD0,
+ 0xA2, 0x09, 0xD3, 0xE5, 0xBA, 0x1F, 0x65, 0x35, 0xD0, 0x1C},
+ {0x09, 0x98, 0x47, 0x65, 0xF2, 0x90, 0xD4, 0xE2, 0xD0, 0x6F, 0x9E,
+ 0xDB, 0xA2, 0x14, 0x9B, 0x4B, 0x3D, 0xAA, 0x75, 0x25, 0x67, 0xF4,
+ 0x7D, 0x77, 0xE9, 0x24, 0xED, 0xEE, 0x1B, 0x07, 0x7F, 0xE0}}},
+ {{{0x7A, 0x34, 0xB7, 0x3C, 0x36, 0x0D, 0xCE, 0xF9, 0xBF, 0xF9, 0xE5,
+ 0x09, 0x86, 0xEB, 0xB9, 0xD8, 0xC4, 0x67, 0xC5, 0xCD, 0xD4, 0xBC,
+ 0xEE, 0x45, 0xF7, 0x11, 0x68, 0xD9, 0x23, 0x6D, 0xD6, 0x24},
+ {0x6E, 0x97, 0x83, 0x13, 0x76, 0x9F, 0x35, 0xEA, 0xB8, 0x47, 0x57,
+ 0x9B, 0x74, 0x47, 0x1F, 0x19, 0xE7, 0x97, 0x74, 0x1B, 0xB1, 0xA0,
+ 0xF3, 0x92, 0xDC, 0x35, 0xFD, 0x7F, 0x4F, 0x07, 0x22, 0xAC}}}}}},
+ },
+ {{{{{{{0xFD, 0x05, 0x41, 0x27, 0x00, 0x7A, 0xAD, 0x17, 0xBC, 0xBF, 0x22,
+ 0x5E, 0xDA, 0xEB, 0x7D, 0xAA, 0xB5, 0x2D, 0xC8, 0x61, 0xFE, 0x2C,
+ 0xBA, 0x9E, 0x54, 0x43, 0x94, 0xDC, 0xFD, 0x0E, 0x6D, 0x6D},
+ {0xA1, 0x5E, 0x05, 0xA5, 0x05, 0x55, 0xE7, 0x2A, 0xF7, 0x53, 0x37,
+ 0x2C, 0xEF, 0x44, 0x95, 0xCA, 0x2C, 0xE8, 0xEB, 0xAE, 0x61, 0x05,
+ 0x33, 0xE7, 0x0F, 0x30, 0x67, 0xBE, 0xCD, 0xB2, 0x93, 0x44}}},
+ {{{0x44, 0x31, 0x96, 0x4D, 0x72, 0x61, 0xCD, 0x23, 0x1F, 0x7B, 0x57,
+ 0x33, 0x39, 0xAC, 0x57, 0x53, 0x3D, 0x70, 0x57, 0xB3, 0x6D, 0xD5,
+ 0x8A, 0x89, 0x30, 0xBC, 0xED, 0x29, 0x19, 0x39, 0x6E, 0x6A},
+ {0x80, 0x21, 0x1E, 0xB7, 0x84, 0xB1, 0x0A, 0xA4, 0xD0, 0xFF, 0x59,
+ 0x31, 0xE9, 0xBA, 0x39, 0xF7, 0x81, 0xDF, 0x1B, 0x7B, 0xD9, 0xDB,
+ 0x02, 0x17, 0xBE, 0x97, 0x63, 0xBD, 0x37, 0x14, 0xB8, 0x8B}}},
+ {{{0x6C, 0xCC, 0x5B, 0xA3, 0xEE, 0xC8, 0x0B, 0x7B, 0xF5, 0xDE, 0xBC,
+ 0xB7, 0xA8, 0x25, 0x35, 0xAE, 0x0B, 0x30, 0x96, 0x33, 0x52, 0x13,
+ 0xA3, 0x89, 0x3A, 0x2E, 0xA4, 0x7E, 0x5F, 0x4E, 0xB1, 0xF7},
+ {0x87, 0xBA, 0x08, 0xB0, 0xFB, 0xCB, 0x31, 0xA6, 0x2B, 0x3E, 0xE7,
+ 0xC4, 0xCC, 0xA5, 0x14, 0x61, 0xC9, 0x18, 0xFC, 0x74, 0x59, 0x06,
+ 0xF4, 0xAD, 0xFC, 0x2D, 0x0C, 0x7D, 0xDB, 0x2A, 0xEC, 0xD4}}}}},
+ {{{{{0xE9, 0x31, 0x31, 0x50, 0x25, 0xB7, 0x0C, 0x48, 0x30, 0xD5, 0x78,
+ 0xB1, 0x10, 0xEA, 0x5D, 0xAA, 0xAA, 0x03, 0xEC, 0xE3, 0x0F, 0x36,
+ 0xA6, 0xBC, 0x18, 0x3A, 0x76, 0x87, 0xA3, 0xE9, 0x33, 0xDA},
+ {0x48, 0x78, 0x93, 0x64, 0x72, 0x9B, 0x2A, 0x1E, 0x0D, 0x50, 0x9F,
+ 0x6F, 0xBD, 0xA5, 0x18, 0xB1, 0xA8, 0x14, 0x9A, 0x1B, 0xB9, 0xB4,
+ 0x2C, 0x1F, 0x46, 0xB8, 0x9B, 0x7A, 0xC7, 0x84, 0xAE, 0x27}}},
+ {{{0xD1, 0xEC, 0x1C, 0xEC, 0x69, 0xF0, 0x35, 0x40, 0x77, 0x7E, 0x27,
+ 0x22, 0x36, 0x38, 0xDF, 0x15, 0xC2, 0xB3, 0xB8, 0x63, 0x4A, 0x6E,
+ 0x68, 0x8C, 0xC1, 0x39, 0x3C, 0x02, 0x4C, 0x2A, 0x31, 0x18},
+ {0x2E, 0x35, 0xF5, 0xCA, 0xA2, 0xE9, 0x24, 0x92, 0xD5, 0xE5, 0x2E,
+ 0x5D, 0x1C, 0x94, 0xD9, 0xC7, 0xF0, 0x22, 0x16, 0x20, 0xA8, 0x37,
+ 0xDD, 0x0E, 0xAB, 0x1B, 0x5E, 0x8B, 0xEE, 0x81, 0xC6, 0x17}}},
+ {{{0xF1, 0x29, 0x5D, 0x1D, 0x6F, 0x53, 0x5A, 0xB2, 0x20, 0x88, 0x3D,
+ 0xA4, 0x98, 0x81, 0xA4, 0xEF, 0x11, 0x1B, 0x64, 0x9E, 0x2C, 0x95,
+ 0xDD, 0xD7, 0x57, 0xB3, 0x95, 0xCA, 0x40, 0xB9, 0x0D, 0x62},
+ {0xDC, 0x86, 0x8B, 0xE6, 0xD3, 0x7B, 0x33, 0xEA, 0x50, 0x25, 0xE2,
+ 0x77, 0xE3, 0x0B, 0x5A, 0xC8, 0x81, 0xFC, 0xAE, 0x74, 0x38, 0x69,
+ 0x07, 0xF8, 0x4E, 0xD7, 0x85, 0xA6, 0x2F, 0x13, 0xB7, 0x0A}}}}}}},
+ {{{{{{{0xF4, 0xDC, 0xAC, 0x02, 0xC0, 0x95, 0x07, 0xDC, 0x12, 0x4F, 0x3A,
+ 0x01, 0xA9, 0xEE, 0xF3, 0x07, 0x46, 0x94, 0x47, 0x15, 0x63, 0xA6,
+ 0x8E, 0x0A, 0xC4, 0xC4, 0xE4, 0x23, 0x85, 0x63, 0xE4, 0x4E},
+ {0x9A, 0x9E, 0x9F, 0xC1, 0xED, 0x4E, 0x94, 0x10, 0xFE, 0x7D, 0x90,
+ 0xEF, 0x82, 0x21, 0xAC, 0x67, 0x24, 0x99, 0x86, 0xC6, 0x85, 0x8B,
+ 0x19, 0x9A, 0x9B, 0x90, 0x0B, 0xA4, 0x90, 0x78, 0x34, 0x53}}},
+ {{{0xB1, 0x4C, 0xBA, 0xB8, 0xC6, 0x40, 0x71, 0xC2, 0x17, 0x51, 0x05,
+ 0xC2, 0xC9, 0xBC, 0x03, 0x10, 0x4E, 0xFE, 0x2F, 0x94, 0xED, 0x13,
+ 0x35, 0x7B, 0x20, 0xA6, 0x59, 0x44, 0x81, 0xD0, 0xEC, 0x12},
+ {0x74, 0xA2, 0x4A, 0xFB, 0xD7, 0x28, 0x70, 0xAD, 0xDE, 0x86, 0x2F,
+ 0xEF, 0xF9, 0x50, 0x5D, 0x1E, 0x46, 0x3B, 0x82, 0x1C, 0x6A, 0xC9,
+ 0x3F, 0x32, 0xAE, 0xCD, 0x93, 0x2C, 0xA5, 0x70, 0x45, 0x24}}},
+ {{{0x38, 0x19, 0x79, 0xBF, 0x35, 0xF5, 0xC1, 0x53, 0x06, 0x42, 0xAA,
+ 0x6B, 0xF3, 0xB7, 0x8F, 0xFB, 0xFC, 0x28, 0x46, 0x9A, 0x65, 0x2A,
+ 0x45, 0x3D, 0x4C, 0x3C, 0x6B, 0x9C, 0x44, 0xC5, 0x82, 0xB8},
+ {0x80, 0xF9, 0xB3, 0x44, 0x95, 0x17, 0x39, 0x01, 0x6B, 0xD6, 0x1D,
+ 0x73, 0x22, 0x94, 0xFF, 0x6F, 0x7B, 0x4E, 0xB6, 0xA4, 0xE4, 0x6C,
+ 0xA8, 0xDB, 0x38, 0x74, 0x0B, 0xDB, 0xFA, 0x14, 0x99, 0x39}}}}},
+ {{{{{0x28, 0xEE, 0xFC, 0x62, 0xE5, 0x33, 0x9C, 0x63, 0xD5, 0x7F, 0x2C,
+ 0x4C, 0xF4, 0x76, 0x4C, 0xF7, 0x7B, 0x27, 0x2C, 0xA9, 0xB9, 0x01,
+ 0x3C, 0x58, 0xF7, 0xCE, 0xAA, 0x0A, 0x21, 0xC0, 0xA3, 0xA7},
+ {0xA1, 0x85, 0xBC, 0xFE, 0x55, 0xFC, 0x3B, 0x9B, 0x3D, 0xEF, 0x14,
+ 0x85, 0x8A, 0x4E, 0x5E, 0x1F, 0x4F, 0xC9, 0x86, 0xB8, 0xF2, 0xB2,
+ 0xE3, 0xE7, 0x7E, 0x87, 0xE2, 0x20, 0xD7, 0x85, 0x2C, 0xD1}}},
+ {{{0x13, 0xCB, 0x46, 0xAD, 0xD7, 0xEC, 0x66, 0xD5, 0x2B, 0x6E, 0x87,
+ 0x92, 0x13, 0xB2, 0x7D, 0x18, 0x69, 0x35, 0xCB, 0xF1, 0xBE, 0xC2,
+ 0x9D, 0xEB, 0xF5, 0x00, 0x0B, 0x73, 0xA3, 0xFD, 0x51, 0xDC},
+ {0x91, 0x0E, 0xE4, 0x46, 0x41, 0x23, 0xDD, 0x85, 0x53, 0x0C, 0xAE,
+ 0xF9, 0x74, 0xCF, 0x1C, 0x32, 0x22, 0xDA, 0x4A, 0x14, 0x80, 0x71,
+ 0x51, 0x23, 0xC3, 0xAB, 0x7E, 0xEC, 0x77, 0xCC, 0x59, 0x12}}},
+ {{{0x1C, 0x0F, 0x65, 0x6B, 0xD8, 0x41, 0xE0, 0x1B, 0x51, 0x9C, 0x89,
+ 0x26, 0xAB, 0x88, 0x63, 0x5D, 0xBB, 0x95, 0x92, 0x5B, 0x2C, 0x1D,
+ 0xDE, 0xC1, 0x88, 0xD6, 0xF1, 0x02, 0x48, 0xE0, 0xE2, 0xD1},
+ {0x40, 0x7F, 0xF1, 0x23, 0x4A, 0xCF, 0x36, 0xD5, 0xCF, 0x76, 0x0D,
+ 0x00, 0x2A, 0xF7, 0x5F, 0x31, 0xBB, 0xCC, 0x46, 0x84, 0x07, 0x04,
+ 0x98, 0x9C, 0xB4, 0x31, 0x15, 0x2D, 0x91, 0xF6, 0x29, 0x33}}}}}}},
+ {{{{{{{0xA8, 0x8E, 0x9A, 0xF9, 0x25, 0x12, 0x98, 0xE2, 0xC3, 0x61, 0x2E,
+ 0xE8, 0xD6, 0xA6, 0x77, 0x16, 0x49, 0x04, 0x75, 0x69, 0xD1, 0x83,
+ 0x2D, 0x3F, 0x2A, 0x79, 0xB6, 0x9B, 0xC9, 0x1D, 0x03, 0x90},
+ {0x2A, 0xD8, 0x11, 0x9F, 0x26, 0x36, 0xE7, 0xE9, 0x3A, 0x05, 0x4C,
+ 0x15, 0x49, 0x93, 0xDA, 0xE9, 0xD0, 0x5A, 0xE4, 0x8D, 0x8A, 0xFA,
+ 0x04, 0xF1, 0x20, 0x84, 0x56, 0xEC, 0x3C, 0x27, 0x19, 0x5C}}},
+ {{{0xF1, 0xAF, 0xBF, 0xF6, 0x0E, 0x58, 0x84, 0x2D, 0x94, 0x11, 0xF4,
+ 0xB5, 0xF4, 0x14, 0x51, 0xB0, 0x90, 0x46, 0x1A, 0x81, 0xED, 0xCF,
+ 0x91, 0x66, 0x58, 0xA6, 0x36, 0x3A, 0x52, 0x18, 0x5A, 0xC1},
+ {0x08, 0x4C, 0x99, 0xD3, 0xDC, 0xCE, 0x7F, 0xCE, 0x78, 0xE0, 0x38,
+ 0x87, 0x32, 0xF1, 0x80, 0x3C, 0x7B, 0x67, 0xAA, 0x6F, 0xDD, 0xE0,
+ 0xFC, 0xCB, 0xD0, 0xB0, 0x3A, 0x59, 0x52, 0x2A, 0x84, 0xE4}}},
+ {{{0xF8, 0x4A, 0xFF, 0x50, 0xA0, 0x65, 0xC4, 0xEE, 0xF4, 0x9C, 0xAA,
+ 0x34, 0x46, 0xF9, 0xD2, 0x6C, 0xA1, 0x61, 0x71, 0x49, 0x32, 0x25,
+ 0x84, 0x54, 0x90, 0x44, 0xBE, 0xA4, 0x0B, 0xF7, 0xFE, 0x26},
+ {0x81, 0x63, 0x73, 0xF7, 0x2F, 0xF2, 0xFA, 0x24, 0x52, 0xA4, 0xD9,
+ 0x4C, 0xC1, 0xA7, 0xA5, 0xC3, 0x03, 0x36, 0x13, 0x9B, 0x16, 0x45,
+ 0x16, 0xCB, 0x4B, 0x99, 0x38, 0xF3, 0x6D, 0xC8, 0x7E, 0xAB}}}}},
+ {{{{{0xB3, 0x53, 0xDF, 0xB6, 0x82, 0x60, 0x12, 0x11, 0x36, 0x69, 0x0E,
+ 0x05, 0x31, 0x8E, 0xCF, 0xD7, 0x3F, 0x32, 0xE7, 0x95, 0x84, 0x1D,
+ 0xC8, 0xB5, 0xBE, 0x49, 0x17, 0x9D, 0xCF, 0xA9, 0x5A, 0x2A},
+ {0xC4, 0x11, 0x86, 0xE8, 0x6C, 0x02, 0x56, 0xB0, 0x25, 0x2F, 0xA0,
+ 0x06, 0xB3, 0x62, 0xB2, 0x11, 0xAF, 0xBE, 0xA4, 0xE8, 0x61, 0x64,
+ 0x85, 0xFB, 0xEB, 0x1C, 0xF1, 0xBC, 0x2C, 0xAE, 0x10, 0x51}}},
+ {{{0x16, 0xA6, 0xC0, 0xB3, 0x86, 0x8E, 0x6D, 0x79, 0xB6, 0xBD, 0xDE,
+ 0x1E, 0x26, 0x06, 0x46, 0x65, 0x82, 0x84, 0x5A, 0x97, 0xD3, 0xB7,
+ 0x93, 0x78, 0x6B, 0x9D, 0x14, 0x33, 0x94, 0x43, 0x34, 0x04},
+ {0x45, 0xD1, 0x47, 0xD4, 0x2F, 0x17, 0xCF, 0xF1, 0xDD, 0xEA, 0x11,
+ 0x52, 0xAE, 0x01, 0x88, 0x3A, 0x10, 0xEE, 0x5C, 0x16, 0xCD, 0xB5,
+ 0x48, 0xE9, 0x16, 0x2C, 0x70, 0xB4, 0x1E, 0x19, 0x38, 0xE0}}},
+ {{{0x18, 0xE9, 0xAE, 0xC5, 0xDA, 0x74, 0x41, 0x2D, 0x70, 0x07, 0x60,
+ 0x37, 0x27, 0x66, 0xF7, 0x00, 0xBB, 0x79, 0x51, 0xF3, 0x7C, 0x8A,
+ 0x2B, 0xB5, 0x69, 0x6E, 0x10, 0x1F, 0xE0, 0x0A, 0x5E, 0xBE},
+ {0xB4, 0x4E, 0x0E, 0x02, 0x59, 0xB5, 0xCB, 0x4A, 0x6A, 0x86, 0x8B,
+ 0xCC, 0xA2, 0x13, 0xA0, 0xE9, 0xF2, 0x5C, 0xB0, 0x23, 0xB2, 0x15,
+ 0xF9, 0xBB, 0x43, 0xC1, 0x54, 0xF4, 0xC8, 0xAB, 0x16, 0xA6}}}}}}},
+};
+const BigNumStr FfElementTest::fq12_multi_exp_exp_4[4] = {
+ {
+ 0x14, 0x92, 0xD1, 0x1F, 0xAC, 0x90, 0x4D, 0xC3, 0x3E, 0xB8, 0xA7, 0xFE,
+ 0x35, 0x98, 0xDA, 0x94, 0xD6, 0xF3, 0x27, 0x29, 0x4B, 0x70, 0xCF, 0x0F,
+ 0xDA, 0x14, 0x97, 0xA1, 0x9B, 0x6B, 0x24, 0x08,
+ },
+ {
+ 0x76, 0x8D, 0xE5, 0xC2, 0xAB, 0x78, 0xD9, 0x76, 0x98, 0xFF, 0x92, 0xEA,
+ 0x95, 0x58, 0xC5, 0x0C, 0x6F, 0x1B, 0x35, 0xC4, 0xBF, 0x4A, 0x9E, 0xC2,
+ 0x6A, 0xEC, 0xE2, 0xF6, 0xAF, 0xEB, 0xAC, 0x06,
+ },
+ {
+ 0x50, 0x38, 0x60, 0x31, 0xAB, 0x05, 0xCC, 0xB1, 0xC2, 0x06, 0xA0, 0xD7,
+ 0x92, 0x12, 0xBD, 0x17, 0x81, 0xB9, 0x7E, 0x07, 0x9B, 0xD4, 0x3B, 0x2D,
+ 0x3C, 0x15, 0x3A, 0x5A, 0xF1, 0xC0, 0xC4, 0x75,
+ },
+ {
+ 0xA1, 0x3F, 0xEA, 0x99, 0x7E, 0xC7, 0x65, 0xF5, 0x41, 0xA6, 0xD6, 0xD3,
+ 0x77, 0xEC, 0x27, 0xF8, 0x6C, 0x18, 0x28, 0x69, 0x97, 0x08, 0x0E, 0x63,
+ 0x5A, 0xDA, 0xFE, 0x9F, 0xD1, 0x4A, 0x61, 0x4F,
+ },
+};
+const Fq12ElemStr FfElementTest::fq12_multi_exp_res_4 = {
+ {{{{{{0x3A, 0x30, 0x33, 0xA2, 0x14, 0xDF, 0xDC, 0x70, 0x48, 0xF3, 0xBA,
+ 0x3F, 0xCE, 0xFC, 0x69, 0x24, 0xAE, 0xA1, 0xF3, 0xCF, 0xD8, 0x77,
+ 0x69, 0x38, 0x38, 0xF4, 0x8E, 0xFB, 0x51, 0xFB, 0x10, 0x7C},
+ {0x73, 0xB4, 0xEE, 0xF9, 0x76, 0xBB, 0x45, 0xEC, 0x07, 0x24, 0x23,
+ 0xA3, 0x38, 0x64, 0x39, 0x4C, 0x03, 0x94, 0xF5, 0xEE, 0x5F, 0xC9,
+ 0x83, 0x4F, 0xD1, 0xA6, 0x4A, 0x05, 0x25, 0x0C, 0x46, 0x33}}},
+ {{{0xD4, 0x40, 0x47, 0xAE, 0xEC, 0xDA, 0x30, 0xF9, 0xE1, 0x28, 0xFB,
+ 0xB1, 0x4C, 0x62, 0xFB, 0x6C, 0x90, 0x0D, 0xB1, 0xEC, 0xAF, 0x2D,
+ 0x95, 0x64, 0x11, 0x93, 0xDA, 0x8E, 0xB8, 0x7D, 0xE4, 0xA3},
+ {0x8E, 0xA6, 0x9B, 0xAA, 0x58, 0xD5, 0xDC, 0x59, 0x1A, 0x51, 0x53,
+ 0x47, 0x30, 0x1C, 0x2B, 0xB0, 0xBB, 0x57, 0x57, 0x0A, 0x8C, 0x5F,
+ 0x62, 0x9C, 0x52, 0x28, 0xC0, 0x25, 0x27, 0xAE, 0xCD, 0x36}}},
+ {{{0xBF, 0x2D, 0x03, 0xB1, 0x33, 0xFD, 0x24, 0x81, 0x3C, 0x91, 0x43,
+ 0x90, 0x0C, 0x20, 0xC4, 0xE3, 0x69, 0x3F, 0xA9, 0xA2, 0x7C, 0xC2,
+ 0x48, 0x28, 0x1B, 0xF0, 0x81, 0x1F, 0x2B, 0x8F, 0x8D, 0x43},
+ {0x38, 0x18, 0x12, 0xA3, 0x89, 0xF1, 0xD7, 0x60, 0x89, 0x68, 0x6A,
+ 0xC4, 0xCC, 0x5D, 0xF4, 0xCE, 0x43, 0x95, 0x84, 0xCD, 0x01, 0x55,
+ 0xB8, 0x5D, 0x24, 0x50, 0xCD, 0xE3, 0x68, 0x1C, 0xFF, 0x59}}}}},
+ {{{{{0x0D, 0xAC, 0xCB, 0xE7, 0x9D, 0x68, 0x0F, 0x4A, 0xAF, 0xEB, 0xB5,
+ 0xFB, 0xF9, 0xB1, 0x58, 0x80, 0xD5, 0x71, 0x53, 0x26, 0x2E, 0x9C,
+ 0xCE, 0x10, 0xAC, 0xD2, 0x0A, 0xEB, 0xB4, 0x5C, 0xC8, 0xD7},
+ {0x16, 0x26, 0x66, 0x71, 0xDD, 0x67, 0xBA, 0xDB, 0x35, 0x76, 0x64,
+ 0xC6, 0x0B, 0x0B, 0x07, 0x4B, 0x65, 0xA2, 0xF7, 0x68, 0x9E, 0xFE,
+ 0xE8, 0xE3, 0xA7, 0x09, 0x79, 0xC5, 0xDF, 0x5E, 0x9C, 0xEC}}},
+ {{{0xEE, 0x83, 0x59, 0xB5, 0x89, 0x81, 0xA2, 0x87, 0xD7, 0x75, 0x65,
+ 0x90, 0xDE, 0x78, 0x37, 0x59, 0x04, 0x9B, 0x50, 0xC3, 0xBA, 0x90,
+ 0x09, 0x15, 0xAB, 0x17, 0xC5, 0xBF, 0x5B, 0xB9, 0xE4, 0x6C},
+ {0xA9, 0xB1, 0x49, 0x76, 0x25, 0x74, 0x5D, 0x9C, 0x78, 0xC5, 0x09,
+ 0xEE, 0xEB, 0xEB, 0x9D, 0x1C, 0x6C, 0xC0, 0x27, 0x9D, 0x66, 0xE6,
+ 0x7F, 0x31, 0xCD, 0xB0, 0x8A, 0xE4, 0x9E, 0xBD, 0x70, 0x18}}},
+ {{{0x88, 0xA1, 0x08, 0x39, 0xA2, 0x48, 0xA5, 0x98, 0xB6, 0xAD, 0x10,
+ 0x54, 0x07, 0xCD, 0xFC, 0x6D, 0xB1, 0x02, 0xFF, 0xE3, 0x92, 0xD7,
+ 0x9D, 0x48, 0xFB, 0xCE, 0x88, 0x46, 0x92, 0x07, 0x02, 0xBA},
+ {0xEE, 0xEB, 0xAE, 0x88, 0xB1, 0x4E, 0xD0, 0xF2, 0xCE, 0xD7, 0x57,
+ 0x07, 0xD4, 0x39, 0xD2, 0x7D, 0x1A, 0x0C, 0xEF, 0xF2, 0x84, 0x84,
+ 0x22, 0x8A, 0xB1, 0x80, 0x0D, 0xDC, 0x64, 0x86, 0xFD, 0x70}}}}}}};
+const FqElemStr FfElementTest::fq_multi_exp_base_5[5] = {
+ {0x7B, 0x26, 0x96, 0x84, 0x04, 0x0D, 0x6F, 0x10, 0xAA, 0x7F, 0xD0, 0x0C,
+ 0x41, 0x3A, 0x68, 0x48, 0xBF, 0x3D, 0xB5, 0xCE, 0x3A, 0x9C, 0xA9, 0x10,
+ 0xA4, 0x67, 0x7C, 0xC0, 0x41, 0x52, 0xCA, 0xE7},
+ {0x2E, 0xD9, 0xEF, 0x86, 0xB6, 0x32, 0x72, 0x89, 0x37, 0xCF, 0x16, 0xCE,
+ 0x27, 0x15, 0x7A, 0x95, 0xCF, 0x94, 0x1B, 0xF3, 0xCE, 0x49, 0x20, 0x29,
+ 0x9A, 0x61, 0x2E, 0x0A, 0xF5, 0xE1, 0xDC, 0x9F},
+ {0xE0, 0x19, 0x37, 0x44, 0xA7, 0x45, 0x49, 0x7E, 0x19, 0x02, 0x09, 0x78,
+ 0xBE, 0xA4, 0x65, 0x60, 0x7A, 0xF5, 0xC8, 0xAF, 0x97, 0x5E, 0xDA, 0x3A,
+ 0xB4, 0x16, 0x70, 0x31, 0xE3, 0xB4, 0x18, 0xA8},
+ {0xBC, 0x92, 0x29, 0x92, 0x14, 0xD3, 0x3F, 0xB8, 0xB8, 0x8C, 0x41, 0xDF,
+ 0xC5, 0xA1, 0xCA, 0x77, 0xE5, 0x73, 0xFE, 0xA7, 0xAC, 0x81, 0x66, 0x11,
+ 0x5A, 0x6D, 0x7D, 0x97, 0x13, 0x92, 0x8D, 0x1D},
+ {0xE1, 0xA0, 0x0D, 0xDC, 0x8F, 0x20, 0xF5, 0x2D, 0x1D, 0x1F, 0xBD, 0x24,
+ 0x8C, 0xC2, 0x26, 0x06, 0x89, 0xE9, 0x46, 0xA9, 0xD2, 0x44, 0x8F, 0x1A,
+ 0x8D, 0xAF, 0x20, 0x73, 0x60, 0x0B, 0x66, 0x9C}};
+
+const BigNumStr FfElementTest::fq_multi_exp_exp_5[5] = {
+ {0x78, 0xE6, 0x3F, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0x6E,
+ 0xE9, 0xFF, 0x4F, 0xFF, 0x23, 0xFF, 0x67, 0xB4, 0xED, 0xEE, 0xD7, 0xC6,
+ 0xFF, 0x4B, 0x0B, 0x6F, 0x1F, 0xD6, 0xFD, 0x7F},
+ {0xA1, 0x87, 0xFF, 0x1B, 0xFF, 0x85, 0x68, 0xFF, 0x1C, 0xFF, 0xD5, 0xFF,
+ 0x95, 0x73, 0xFF, 0xFF, 0xFF, 0x9E, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x5E,
+ 0x9E, 0x62, 0xFF, 0xFF, 0x97, 0xFF, 0xFF, 0xF3},
+ {0x2E, 0xE8, 0x1E, 0x35, 0xFF, 0x82, 0x0B, 0x99, 0xEC, 0x30, 0x2B, 0xCE,
+ 0xEC, 0x83, 0x05, 0xFF, 0x9E, 0x3C, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF,
+ 0x57, 0x26, 0x5B, 0x6C, 0xFF, 0xE6, 0x94, 0xFF},
+ {0xFF, 0xFF, 0xFF, 0xFF, 0x94, 0xFF, 0xFF, 0x79, 0xFC, 0xFF, 0x83, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xA9, 0xFF, 0x2F, 0x6B, 0xD1, 0xE7, 0xFF, 0xFF,
+ 0xFF, 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
+ {0x63, 0x53, 0x53, 0xFF, 0xFF, 0xFF, 0x4F, 0xFF, 0xFF, 0xFF, 0x09, 0xFF,
+ 0xC0, 0xD8, 0x17, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x45,
+ 0xFF, 0x3A, 0xFF, 0xFF, 0xFF, 0xFF, 0x60, 0x06}};
+
+const FqElemStr FfElementTest::fq_multi_exp_res_5 = {
+ 0x8F, 0x6D, 0x54, 0xCA, 0x00, 0x85, 0xD8, 0x78, 0xA4, 0x45, 0x36,
+ 0x7C, 0x23, 0xD0, 0x3C, 0x2D, 0x20, 0x78, 0xD9, 0xD7, 0xF1, 0xC3,
+ 0x99, 0xD9, 0xD3, 0x0A, 0x0E, 0x86, 0x98, 0xC2, 0xA7, 0x97,
+};
+const FqElemStr FfElementTest::fq_multi_exp_base_6[6] = {
+ {0x75, 0x18, 0x6A, 0x3D, 0xCC, 0x76, 0x33, 0x92, 0xD0, 0x57, 0xDA, 0xE0,
+ 0x37, 0x6F, 0x71, 0xD5, 0x9E, 0x7E, 0x65, 0xED, 0xD7, 0xFD, 0x82, 0xC0,
+ 0x6C, 0x83, 0x60, 0x30, 0xC1, 0xD3, 0x3D, 0x4D},
+ {0xF5, 0x3A, 0x20, 0xAB, 0x22, 0x47, 0x07, 0xAE, 0x71, 0xC1, 0x91, 0x73,
+ 0xEF, 0x1F, 0x1D, 0x76, 0x2E, 0xEE, 0x0D, 0xDE, 0xD9, 0xF8, 0x5C, 0x85,
+ 0xC7, 0x5B, 0x93, 0x88, 0xF6, 0xFF, 0x4C, 0xA5},
+ {0x21, 0xB3, 0x5E, 0xE8, 0xD2, 0xDA, 0x14, 0x1C, 0xB5, 0x2C, 0xFC, 0x61,
+ 0x9D, 0xEB, 0x65, 0x87, 0xBB, 0x5B, 0xBC, 0xFD, 0x37, 0x54, 0x6B, 0xDC,
+ 0xD9, 0xFA, 0x7A, 0xCD, 0x18, 0x7E, 0x8B, 0x89},
+ {0x70, 0xB7, 0x19, 0x42, 0xB4, 0x41, 0x2C, 0x1B, 0xBD, 0x7B, 0x25, 0x06,
+ 0xA2, 0x95, 0xB5, 0xB6, 0x70, 0xDF, 0x58, 0x71, 0xCA, 0x09, 0x12, 0x66,
+ 0x5A, 0x7B, 0xF0, 0x5F, 0x43, 0x69, 0x32, 0xF6},
+ {0x3D, 0x57, 0xE8, 0x3F, 0x1E, 0x39, 0x2B, 0xE5, 0xD0, 0xCF, 0xA9, 0xC8,
+ 0x72, 0x10, 0x7F, 0xC5, 0x4F, 0xAE, 0xE9, 0x73, 0x28, 0x4C, 0xFC, 0x3F,
+ 0xD5, 0xFF, 0xE8, 0xCF, 0x2C, 0xEB, 0x33, 0xD3},
+ {0x51, 0x80, 0x15, 0x1C, 0xE6, 0x9C, 0x4B, 0x80, 0x40, 0xBA, 0x40, 0x29,
+ 0x3A, 0x86, 0xA8, 0xB2, 0x66, 0x08, 0x97, 0x8D, 0xEB, 0x8B, 0xA7, 0x93,
+ 0xE3, 0x49, 0xC6, 0xC0, 0x46, 0x93, 0xC1, 0x75}};
+const BigNumStr FfElementTest::fq_multi_exp_exp_6[6] = {
+ {0xFF, 0xFF, 0xFF, 0x49, 0x50, 0xFF, 0x19, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x28, 0x4A, 0x0E, 0xFF, 0x74, 0xFF, 0xC7, 0xFF, 0xD9, 0x81, 0xFF,
+ 0xFF, 0xFF, 0xD5, 0x2C, 0xFF, 0xFF, 0xFF, 0xAE},
+ {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x0C, 0x03, 0xFF, 0x95, 0xFF, 0x11, 0x9D, 0xFF, 0x9B, 0xFF, 0xFF,
+ 0x68, 0x44, 0xFF, 0xC9, 0xFF, 0x10, 0xC7, 0xBF},
+ {0x64, 0xFF, 0x89, 0x4A, 0xFF, 0x20, 0xFF, 0xE7, 0xFF, 0x36, 0x23, 0xDD,
+ 0xFF, 0xFF, 0xFC, 0xFF, 0x6B, 0xFF, 0xFF, 0xFF, 0xFF, 0x48, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x94, 0xD3, 0x59, 0xBE},
+ {0x0F, 0xFF, 0x76, 0xA5, 0x9E, 0x02, 0x9B, 0xFF, 0xA1, 0xFF, 0xC2, 0xFF,
+ 0x9D, 0xFF, 0x23, 0xFF, 0xFF, 0xFF, 0xFF, 0x6B, 0x81, 0x2A, 0xFF, 0x98,
+ 0xFF, 0xFF, 0xB9, 0xFF, 0xB7, 0x78, 0xE6, 0xFF},
+ {0xAF, 0xF3, 0xFF, 0x3C, 0xA8, 0xFF, 0xB9, 0x3A, 0xFF, 0xFF, 0xFF, 0x70,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x85, 0xFF, 0xFF, 0x52,
+ 0xFF, 0x41, 0x10, 0x62, 0xFF, 0x51, 0x35, 0xFF},
+ {0xFF, 0xFF, 0xFF, 0xFF, 0xD3, 0xC3, 0xD9, 0xFF, 0xFF, 0x3A, 0x44, 0x88,
+ 0x04, 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, 0x64, 0xFF, 0xFF, 0x52, 0xFF, 0x7D,
+ 0x6B, 0x24, 0x6E, 0xFF, 0xFF, 0xFF, 0xA7, 0x71}};
+const FqElemStr FfElementTest::fq_multi_exp_res_6 = {
+ 0xFB, 0x89, 0x4F, 0xBB, 0x91, 0xEE, 0xD6, 0x57, 0x2D, 0x34, 0xF9,
+ 0x0B, 0xE3, 0xEB, 0x71, 0x1D, 0x63, 0x74, 0x96, 0x3B, 0xD4, 0x02,
+ 0x2F, 0x08, 0xDB, 0x95, 0x6A, 0x40, 0x68, 0xD4, 0x55, 0x76,
+};
+
+const Fq6ElemStr FfElementTest::epid11_GT_multi_exp_base_3[3] = {
+ {0x02, 0x7C, 0xAC, 0xE1, 0x58, 0x08, 0x6A, 0x83, 0x50, 0xD8, 0xBA, 0xBA,
+ 0x4B, 0x60, 0x6C, 0xEB, 0x51, 0xCE, 0x7E, 0x6D, 0x8E, 0xA8, 0x56, 0x41,
+ 0x33, 0xF3, 0xB0, 0xA6, 0xFC, 0xCD, 0xC8, 0x41, 0x05, 0x9E, 0xCC, 0x4F,
+ 0x51, 0x77, 0xD9, 0xEC, 0x57, 0x34, 0x48, 0x47, 0x22, 0x7A, 0x7C, 0xA1,
+ 0x14, 0xB8, 0x2A, 0xC9, 0x16, 0x0A, 0xB4, 0xB3, 0x5D, 0x44, 0x28, 0x23,
+ 0x80, 0x7A, 0x3E, 0xDA, 0x02, 0x6D, 0x03, 0x47, 0xCD, 0x2A, 0xAB, 0xA4,
+ 0xCE, 0x63, 0x0B, 0x5E, 0x3A, 0xF2, 0x96, 0x86, 0xA9, 0x9F, 0x2A, 0x9A,
+ 0xFF, 0x8F, 0x94, 0x91, 0xC8, 0x3C, 0xF2, 0x5A, 0xAA, 0xDA, 0x6B, 0x8E,
+ 0x02, 0xFC, 0x42, 0x4B, 0xFE, 0xF3, 0x23, 0x0A, 0xF8, 0x1A, 0x5C, 0x9A,
+ 0x5C, 0x0D, 0x71, 0xEF, 0x85, 0x64, 0xA6, 0x4D, 0x6A, 0x8B, 0x82, 0x58,
+ 0x2E, 0xBC, 0xFB, 0xB9, 0xDF, 0xB8, 0xCE, 0x3D, 0x03, 0xF3, 0x07, 0x18,
+ 0x4A, 0x13, 0x82, 0x8A, 0xEA, 0x24, 0x57, 0x72, 0xE2, 0x33, 0x9D, 0xB3,
+ 0x0C, 0x57, 0xCF, 0xAB, 0xDD, 0xEE, 0xF8, 0xD7, 0x2A, 0x75, 0xF5, 0xD7,
+ 0x28, 0xED, 0x0F, 0xB7, 0x02, 0xEC, 0x5F, 0xED, 0x50, 0xAE, 0x6B, 0xF3,
+ 0x80, 0x29, 0x7B, 0xA2, 0x75, 0x61, 0xFD, 0x20, 0x01, 0x2B, 0xDF, 0x8B,
+ 0x3C, 0x2A, 0xB9, 0x1D, 0x92, 0xED, 0x0F, 0xAD, 0x73, 0x74, 0x1E, 0xD8},
+ {0x06, 0xA6, 0x4A, 0x6B, 0x89, 0xD0, 0x07, 0x2A, 0xE6, 0x0B, 0x56, 0xD3,
+ 0x48, 0x17, 0xF6, 0x99, 0x31, 0x41, 0x21, 0x99, 0x51, 0xF6, 0xB1, 0x6C,
+ 0x02, 0xCD, 0x11, 0xE7, 0xCC, 0xD3, 0xC5, 0x6C, 0x06, 0xF4, 0x39, 0x62,
+ 0x37, 0x88, 0x37, 0xAD, 0x1F, 0x36, 0x81, 0xFA, 0xD7, 0x4B, 0x9F, 0x57,
+ 0x0F, 0x5B, 0xC3, 0x53, 0x14, 0x53, 0x41, 0x3A, 0x2B, 0xAB, 0x6E, 0xF4,
+ 0xD8, 0x7F, 0xC5, 0x67, 0x08, 0x70, 0xD7, 0x9B, 0x59, 0xE1, 0xE0, 0x57,
+ 0xE2, 0xF4, 0x04, 0x82, 0x06, 0x6A, 0xD5, 0xA2, 0x76, 0x64, 0x41, 0x7F,
+ 0x3B, 0xE6, 0x33, 0xB9, 0x39, 0x68, 0xDA, 0x0D, 0x13, 0x03, 0x63, 0xC8,
+ 0x07, 0x94, 0x70, 0xF9, 0xFB, 0xD8, 0x99, 0x31, 0xA1, 0x53, 0x1C, 0x20,
+ 0x43, 0x12, 0xEB, 0xFF, 0xA4, 0x5D, 0x64, 0x7C, 0x24, 0x9E, 0xE0, 0x03,
+ 0x80, 0x8E, 0xFB, 0xDC, 0xEE, 0xFD, 0x1F, 0xEF, 0x03, 0x43, 0x07, 0x44,
+ 0xEF, 0xB3, 0x71, 0x39, 0x77, 0x61, 0x5C, 0xA9, 0x32, 0x54, 0x33, 0x98,
+ 0xA2, 0x14, 0x6A, 0x13, 0x53, 0x22, 0x94, 0xA2, 0xCE, 0x15, 0xE7, 0xD0,
+ 0x30, 0xF2, 0x6B, 0x07, 0x02, 0x56, 0x28, 0xC3, 0xB1, 0x39, 0xF9, 0xC7,
+ 0xDA, 0xE2, 0xFD, 0xD0, 0xA8, 0x1B, 0xE8, 0xB2, 0xE3, 0x75, 0x02, 0xB8,
+ 0x90, 0xA4, 0xA5, 0x8F, 0x23, 0xA1, 0xCD, 0x75, 0xE7, 0x51, 0x37, 0xE5},
+ {0x09, 0x27, 0x38, 0x30, 0x06, 0x44, 0x13, 0xEF, 0xFE, 0x70, 0x5C, 0x4A,
+ 0x21, 0xFF, 0xF8, 0xF5, 0xBB, 0xC9, 0x6E, 0xA8, 0x7E, 0x00, 0xB1, 0xD7,
+ 0x5E, 0x55, 0xCF, 0xC7, 0x34, 0x6B, 0x8D, 0xD5, 0x04, 0xCE, 0x6E, 0xCA,
+ 0x11, 0x5A, 0xB3, 0x0C, 0x33, 0x79, 0x5F, 0xDE, 0xD9, 0xDB, 0x8C, 0xFA,
+ 0x73, 0x4E, 0x1E, 0xFA, 0xA1, 0x21, 0x6D, 0xA3, 0x6D, 0xE8, 0x69, 0x02,
+ 0x9E, 0xCC, 0x4D, 0x14, 0x09, 0xB5, 0x7C, 0xBA, 0x98, 0xC2, 0xE3, 0xAA,
+ 0x82, 0x6A, 0x0F, 0x1E, 0x4C, 0x6C, 0x9E, 0xB8, 0xB6, 0xA3, 0x5D, 0x06,
+ 0xFE, 0x99, 0x5C, 0x62, 0xA9, 0x19, 0x4E, 0x84, 0x61, 0xC7, 0xF9, 0x78,
+ 0x04, 0x39, 0xDA, 0xB4, 0x79, 0x32, 0x63, 0x60, 0xA6, 0x69, 0x86, 0x5C,
+ 0xFF, 0xB0, 0x71, 0xD0, 0xF5, 0x5E, 0x3C, 0xB2, 0x5D, 0x81, 0x4F, 0x9F,
+ 0xE4, 0xF7, 0x3B, 0xC7, 0xC5, 0x80, 0x5E, 0x8E, 0x01, 0x23, 0xFA, 0xFC,
+ 0x09, 0xAE, 0x12, 0x55, 0xF2, 0xD0, 0x50, 0x5C, 0xED, 0xC6, 0xD6, 0x81,
+ 0x9A, 0xA7, 0x93, 0xA3, 0xF4, 0xAC, 0xE5, 0x3E, 0xDB, 0x5A, 0x05, 0xB7,
+ 0x0B, 0x80, 0xAD, 0xA9, 0x08, 0xF1, 0x5A, 0xB5, 0x09, 0x23, 0x52, 0x65,
+ 0x46, 0x64, 0x79, 0xF2, 0x47, 0x04, 0x72, 0x48, 0x4E, 0x01, 0x55, 0x4A,
+ 0x67, 0x8D, 0x1E, 0x07, 0xC7, 0x46, 0x87, 0xF6, 0x50, 0xC3, 0xA6, 0x6B}};
+
+const std::vector<uint8_t> FfElementTest::epid11_GT_multi_exp_exp_3[3] = {
+ {0x00, 0x00, 0xAF, 0x5B, 0x22, 0x71, 0x98, 0xB6, 0xEB, 0x67, 0x3D, 0x94,
+ 0x4A, 0xB6, 0x5E, 0x99, 0x81, 0xC5, 0x96, 0x91, 0x55, 0xBA, 0x2F, 0x16,
+ 0x01, 0x4E, 0xE1, 0x25, 0xAD, 0xCA, 0x94, 0x88, 0x60, 0x3B, 0xA2, 0x56,
+ 0x0A, 0x94, 0x0B, 0x2C, 0x3E, 0xD0, 0x8F, 0x15, 0x07, 0x3D, 0xD5, 0xBE,
+ 0x72, 0x3E, 0x2D, 0x06, 0x74, 0xFF, 0x06, 0xED, 0x47, 0x28, 0x08, 0x0C,
+ 0xA0, 0x6F, 0xDB, 0x75, 0x55, 0x32, 0xDC, 0x97, 0x47, 0x60, 0x4E, 0x6F,
+ 0xB4, 0x29, 0x89, 0x0C},
+
+ {0x00, 0x00, 0x01, 0xB8, 0x40, 0xBB, 0xE1, 0x1C, 0x84, 0x8E, 0x02, 0xC0,
+ 0xEF, 0x69, 0x84, 0x90, 0xED, 0xEB, 0x99, 0x94, 0xBC, 0x79, 0x48, 0xC8,
+ 0x08, 0x3C, 0x25, 0xDA, 0xAC, 0xFF, 0x3A, 0xDD},
+
+ {0x00, 0x00, 0x37, 0x1E, 0xCD, 0x0F, 0x66, 0x09, 0x7D, 0x33, 0x9A, 0xDC,
+ 0x47, 0x28, 0xF7, 0x91, 0xF3, 0xC2, 0xBC, 0x3A, 0xA9, 0x05, 0x62, 0xFC,
+ 0xDD, 0x8C, 0x65, 0xC2, 0xA8, 0x14, 0x55, 0x52},
+};
+
+const Fq6ElemStr FfElementTest::epid11_GT_multi_exp_res_3 = {
+ 0x09, 0xCF, 0x1D, 0xB6, 0x97, 0x14, 0x58, 0xAA, 0x29, 0x7E, 0x03, 0x96,
+ 0xD2, 0xDC, 0xD4, 0x2C, 0x1F, 0x2F, 0xB0, 0xC1, 0x5E, 0x71, 0xFB, 0x0C,
+ 0x8D, 0xDB, 0xBD, 0x1D, 0x20, 0xD9, 0x9A, 0xA5, 0x02, 0x69, 0x62, 0x1C,
+ 0x5C, 0xE8, 0x12, 0x11, 0xB1, 0x49, 0x93, 0x29, 0x23, 0xAF, 0xB4, 0xFF,
+ 0x77, 0x1E, 0xC9, 0xA6, 0xA0, 0x6D, 0xD9, 0x38, 0x89, 0x1A, 0xC7, 0xB9,
+ 0xF9, 0x66, 0x25, 0xD3, 0x00, 0x59, 0xE1, 0xAC, 0x0D, 0xDE, 0xCF, 0xC0,
+ 0xCF, 0x50, 0x48, 0x6B, 0xCE, 0x32, 0x15, 0x79, 0x13, 0x71, 0x12, 0x9B,
+ 0x63, 0x09, 0x4D, 0x20, 0xD9, 0x4A, 0xCD, 0x4F, 0x00, 0x7F, 0x8A, 0x19,
+ 0x06, 0x3F, 0x0F, 0x3E, 0x83, 0xA3, 0xEE, 0x0F, 0xAB, 0x72, 0xC9, 0x9A,
+ 0x5D, 0xD1, 0x67, 0xBF, 0xF1, 0x0E, 0xAB, 0x9C, 0xE8, 0x50, 0x04, 0xA7,
+ 0x20, 0xAA, 0xF6, 0xB9, 0x8E, 0x2F, 0x69, 0x44, 0x02, 0x68, 0x7A, 0x2E,
+ 0x70, 0xD4, 0x7E, 0x83, 0x8F, 0xAB, 0x58, 0x3E, 0xD2, 0x95, 0xA0, 0x1A,
+ 0x61, 0xC8, 0x93, 0xA0, 0xCC, 0xA4, 0x90, 0xFB, 0x73, 0xC2, 0xD2, 0x91,
+ 0x70, 0x34, 0x6A, 0x67, 0x03, 0x67, 0x49, 0x84, 0xEE, 0x3B, 0x9E, 0x8B,
+ 0x6D, 0x47, 0x95, 0xBD, 0x0E, 0x47, 0x97, 0x9E, 0x0A, 0x87, 0x61, 0x83,
+ 0x80, 0xEF, 0x4F, 0x91, 0xA8, 0xA6, 0xB7, 0xC0, 0x44, 0xE2, 0x21, 0x8D};
+
+////////////////////////////////////////////////
// NewFfElement
TEST_F(FfElementTest, NewFailsGivenNullPointer) {
@@ -320,7 +1429,7 @@ TEST_F(FfElementTest, Default256BitElementIsZero) {
EXPECT_EQ(fq_zero_str, ff_elem_str);
}
-///////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////
// DeleteFfElement
TEST_F(FfElementTest, DeleteNullsPointer) {
@@ -337,7 +1446,7 @@ TEST_F(FfElementTest, DeleteWorksGivenNullPointer) {
EXPECT_NO_THROW(DeleteFfElement(&ff_elem));
}
-///////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////
// ReadFfElement
TEST_F(FfElementTest, ReadFailsGivenArgumentsMismatch) {
@@ -345,7 +1454,7 @@ TEST_F(FfElementTest, ReadFailsGivenArgumentsMismatch) {
EXPECT_EQ(kEpidBadArgErr,
ReadFfElement(this->fq12, buf, sizeof(Fq12ElemStr), this->fq_a));
EXPECT_EQ(kEpidBadArgErr,
- ReadFfElement(this->fq, buf, sizeof(FqElemStr), this->fq12_a));
+ ReadFfElement(this->fq, buf, sizeof(FqElemStr), this->fq12_result));
}
TEST_F(FfElementTest, ReadFailsGivenNullPointer) {
@@ -369,27 +1478,84 @@ TEST_F(FfElementTest, ReadFailsGivenInvalidBufferSize) {
TEST_F(FfElementTest, ReadFailsGivenElementDoesNotBelongToFF) {
// q does not belong to Fq
- FqElemStr ff_elem_str = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD,
- 0x46, 0xE5, 0xF2, 0x5E, 0xEE, 0x71, 0xA4, 0x9F,
- 0x0C, 0xDC, 0x65, 0xFB, 0x12, 0x98, 0x0A, 0x82,
- 0xD3, 0x29, 0x2D, 0xDB, 0xAE, 0xD3, 0x30, 0x13};
- EXPECT_EQ(kEpidBadArgErr, ReadFfElement(this->fq, &ff_elem_str,
- sizeof(ff_elem_str), this->fq_a));
+ EXPECT_EQ(kEpidBadArgErr, ReadFfElement(this->fq, &this->bn_q_str,
+ sizeof(this->bn_q_str), this->fq_a));
}
TEST_F(FfElementTest, Read256BitElementCorrectly) {
// q-1 is valid element of Fq
- FqElemStr ff_elem_str = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD,
- 0x46, 0xE5, 0xF2, 0x5E, 0xEE, 0x71, 0xA4, 0x9F,
- 0x0C, 0xDC, 0x65, 0xFB, 0x12, 0x98, 0x0A, 0x82,
- 0xD3, 0x29, 0x2D, 0xDB, 0xAE, 0xD3, 0x30, 0x12};
- ASSERT_EQ(kEpidNoErr, ReadFfElement(this->fq, &ff_elem_str,
- sizeof(ff_elem_str), this->fq_a));
+ ASSERT_EQ(kEpidNoErr, ReadFfElement(this->fq, &this->fq_qm1_str,
+ sizeof(this->fq_qm1_str), this->fq_a));
+
+ FqElemStr buf;
+ EXPECT_EQ(kEpidNoErr,
+ WriteFfElement(this->fq, this->fq_a, &buf, sizeof(buf)));
+ EXPECT_EQ(this->fq_qm1_str, buf);
+}
+
+TEST_F(FfElementTest, ReadIgnoreLeadingZerosForPrimeField) {
+ // q-1 is valid element of Fq
+ std::vector<uint8_t> ff_elem_str = {
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46, 0xE5,
+ 0xF2, 0x5E, 0xEE, 0x71, 0xA4, 0x9F, 0x0C, 0xDC, 0x65, 0xFB, 0x12,
+ 0x98, 0x0A, 0x82, 0xD3, 0x29, 0x2D, 0xDB, 0xAE, 0xD3, 0x30, 0x12};
+ ASSERT_EQ(kEpidNoErr, ReadFfElement(this->fq, ff_elem_str.data(),
+ ff_elem_str.size(), this->fq_a));
FqElemStr buf;
EXPECT_EQ(kEpidNoErr,
WriteFfElement(this->fq, this->fq_a, &buf, sizeof(buf)));
- EXPECT_EQ(ff_elem_str, buf);
+ EXPECT_EQ(this->fq_qm1_str, buf);
+}
+
+TEST_F(FfElementTest, ReadExpectExactSizeForFieldExtensions) {
+ uint8_t buf[sizeof(Fq2ElemStr) + 1] = {0};
+ EXPECT_EQ(kEpidBadArgErr,
+ ReadFfElement(this->fq2, buf, sizeof(buf), this->fq2_a));
+}
+
+///////////////////////////////////////////////////////////////////////
+// InitFfElementFromBn
+
+TEST_F(FfElementTest, InitFromBnFailsGivenNonPrimeField) {
+ BigNumStr str = {0x01};
+ FfElementObj ffe(&this->fq2);
+ BigNumObj bn(sizeof(str), str);
+ EXPECT_EQ(kEpidBadArgErr, InitFfElementFromBn(this->fq2, bn, ffe));
+}
+
+TEST_F(FfElementTest, InitFromBnFailsGivenNullPointer) {
+ BigNumStr str = {0x01};
+ FfElementObj ffe(&this->fq);
+ BigNumObj bn(sizeof(str), str);
+ EXPECT_EQ(kEpidBadArgErr, InitFfElementFromBn(nullptr, bn, ffe));
+ EXPECT_EQ(kEpidBadArgErr, InitFfElementFromBn(this->fq, nullptr, ffe));
+ EXPECT_EQ(kEpidBadArgErr, InitFfElementFromBn(this->fq, bn, nullptr));
+}
+
+TEST_F(FfElementTest, InitFromBnInFieldElementCorrectly) {
+ FfElementObj ffe(&this->fq);
+ BigNumObj qm1_bn(this->bn_qm1_str);
+ FqElemStr buf;
+
+ EXPECT_EQ(kEpidNoErr, InitFfElementFromBn(this->fq, qm1_bn, ffe));
+ EXPECT_EQ(kEpidNoErr, WriteFfElement(this->fq, ffe, &buf, sizeof(buf)));
+ EXPECT_EQ(this->fq_qm1_str, buf);
+}
+
+TEST_F(FfElementTest, InitFromBnOutOfFieldElementCorrectly) {
+ FfElementObj ffe(&this->fq);
+ BigNumObj q_bn(this->bn_q_str);
+ BigNumObj qp1_bn(this->bn_qp1_str);
+ FqElemStr buf;
+
+ EXPECT_EQ(kEpidNoErr, InitFfElementFromBn(this->fq, q_bn, ffe));
+ EXPECT_EQ(kEpidNoErr, WriteFfElement(this->fq, ffe, &buf, sizeof(buf)));
+ EXPECT_EQ(this->bn_0_str, buf);
+
+ EXPECT_EQ(kEpidNoErr, InitFfElementFromBn(this->fq, qp1_bn, ffe));
+ EXPECT_EQ(kEpidNoErr, WriteFfElement(this->fq, ffe, &buf, sizeof(buf)));
+ EXPECT_EQ(this->bn_1_str, buf);
}
///////////////////////////////////////////////////////////////////////
@@ -400,9 +1566,9 @@ TEST_F(FfElementTest, FfIsEqualFailsGivenArgumentsMismatch) {
EXPECT_EQ(kEpidBadArgErr,
FfIsEqual(this->fq12, this->fq_a, this->fq_b, &result));
EXPECT_EQ(kEpidBadArgErr,
- FfIsEqual(this->fq, this->fq12_a, this->fq_b, &result));
+ FfIsEqual(this->fq, this->fq12_g, this->fq_b, &result));
EXPECT_EQ(kEpidBadArgErr,
- FfIsEqual(this->fq, this->fq_a, this->fq12_b, &result));
+ FfIsEqual(this->fq, this->fq_a, this->fq12_h, &result));
}
TEST_F(FfElementTest, FfIsEqualFailsGivenNullPointer) {
@@ -428,174 +1594,29 @@ TEST_F(FfElementTest, Different256BitFiniteFieldElementsAreNotEqual) {
}
TEST_F(FfElementTest, Same256BitFiniteFieldElementsAreEqual) {
- THROW_ON_EPIDERR(ReadFfElement(this->fq, &(this->bn_a_data),
- sizeof(this->bn_a_data), this->fq_b));
+ FfElementObj fq_a_local(&this->fq, &this->fq_a_str, sizeof(this->fq_a_str));
bool result;
- EXPECT_EQ(kEpidNoErr, FfIsEqual(this->fq, this->fq_a, this->fq_b, &result));
+ EXPECT_EQ(kEpidNoErr, FfIsEqual(this->fq, this->fq_a, fq_a_local, &result));
EXPECT_TRUE(result);
}
TEST_F(FfElementTest, DifferentFq12ElementsAreNotEqual) {
- const Fq12ElemStr a_str = {
- 0xba, 0x10, 0x1f, 0xf6, 0x46, 0x8b, 0xe9, 0x32, 0x4f, 0xc0, 0xa5, 0x01,
- 0xad, 0x5e, 0xe2, 0x31, 0x16, 0x29, 0x96, 0xed, 0xa7, 0xde, 0x4c, 0xe1,
- 0xd2, 0x8d, 0x33, 0xca, 0x50, 0xab, 0x7b, 0xc6, 0x15, 0xeb, 0x79, 0xf4,
- 0xeb, 0xde, 0x30, 0xb6, 0xc4, 0x07, 0x7c, 0x42, 0xcb, 0x04, 0x54, 0xf2,
- 0x1f, 0x4d, 0x1f, 0xc0, 0xdf, 0xa2, 0x2b, 0x9e, 0x34, 0xc4, 0x4c, 0x84,
- 0x14, 0xd3, 0x62, 0x07, 0xf1, 0x8b, 0x84, 0xd1, 0x46, 0x57, 0xb6, 0xe7,
- 0x80, 0xe1, 0x46, 0x49, 0x1c, 0x0d, 0xef, 0x81, 0x31, 0xb0, 0xbe, 0x8c,
- 0xb9, 0x08, 0xd0, 0xd3, 0xc4, 0x56, 0xca, 0xad, 0xf9, 0x1d, 0x75, 0x19,
- 0x3f, 0xee, 0x7c, 0x43, 0xc1, 0xfa, 0x4e, 0x50, 0xb7, 0x19, 0x01, 0x00,
- 0x6f, 0xd5, 0x16, 0xb6, 0xf4, 0x85, 0xe0, 0xeb, 0x2e, 0x5f, 0x0a, 0x7e,
- 0xf8, 0xac, 0xbc, 0x05, 0xec, 0x73, 0xb5, 0x57, 0xe3, 0xb3, 0x18, 0x29,
- 0xbb, 0xef, 0x86, 0x50, 0x87, 0xcf, 0x70, 0xba, 0x13, 0x8b, 0xb1, 0xb6,
- 0x2d, 0x6f, 0x65, 0x3d, 0xa1, 0x0b, 0xe3, 0x92, 0xc5, 0x72, 0x86, 0x6a,
- 0xb3, 0xeb, 0xe0, 0xe5, 0xda, 0x0e, 0x57, 0x87, 0xd5, 0xa9, 0x61, 0xa5,
- 0x1e, 0xcb, 0x04, 0x86, 0xcd, 0xc3, 0x18, 0x2a, 0x36, 0xa0, 0x81, 0x73,
- 0xe7, 0x13, 0x87, 0x80, 0x8d, 0x1a, 0xfe, 0x6e, 0x4b, 0xa3, 0x13, 0x03,
- 0x66, 0x9e, 0x80, 0x4d, 0x8a, 0xaa, 0x00, 0x95, 0x72, 0xce, 0xbb, 0x51,
- 0xe8, 0x01, 0x09, 0x41, 0xd3, 0x63, 0x28, 0x05, 0xa4, 0xbe, 0xd6, 0x41,
- 0xa6, 0x2f, 0x5f, 0xbf, 0x0b, 0x13, 0xb4, 0x54, 0x5b, 0x50, 0x65, 0xdc,
- 0x6f, 0x29, 0xd6, 0xda, 0xbf, 0xc2, 0x06, 0xea, 0x3b, 0xb2, 0xf1, 0xd4,
- 0x26, 0x5c, 0x92, 0x6b, 0x95, 0x6d, 0x88, 0xab, 0x8f, 0xc6, 0x9d, 0x31,
- 0xe4, 0x9b, 0x71, 0x49, 0xe0, 0xce, 0x97, 0x8f, 0xc9, 0x9f, 0xbc, 0xa8,
- 0x4a, 0xc6, 0xaa, 0x4a, 0xc8, 0x0d, 0x2a, 0x60, 0x1a, 0x43, 0x40, 0x03,
- 0xb3, 0x53, 0x30, 0x98, 0x1f, 0x3f, 0xdf, 0x5c, 0x0f, 0xf0, 0x84, 0x8e,
- 0x5a, 0x5d, 0x41, 0xd2, 0x47, 0x78, 0x6d, 0x9f, 0x89, 0xce, 0xf5, 0x8e,
- 0xb6, 0x54, 0xa2, 0x26, 0xe5, 0x40, 0x39, 0x5c, 0x59, 0x08, 0xb3, 0xda,
- 0xf5, 0xf8, 0xa0, 0x18, 0x33, 0x57, 0xd1, 0x72, 0xbb, 0xba, 0x6c, 0xed,
- 0xe8, 0xa0, 0x5e, 0xc8, 0x81, 0xc5, 0xac, 0x15, 0x1b, 0xd0, 0xe6, 0xc8,
- 0x92, 0xf9, 0x43, 0x03, 0x5a, 0x00, 0x42, 0xe3, 0x49, 0xa5, 0xf7, 0x19,
- 0x78, 0x8a, 0x39, 0x89, 0x32, 0xae, 0xbf, 0x4d, 0x4b, 0xb3, 0x33, 0x76,
- 0x16, 0xfd, 0x0b, 0xfe, 0x42, 0x1e, 0x17, 0x37, 0x2a, 0x04, 0xea, 0x26,
- 0xba, 0x6e, 0x2c, 0x36, 0xaf, 0x35, 0x1b, 0x75, 0x6d, 0x17, 0xdc, 0x8e,
- };
- const Fq12ElemStr b_str = {
- 0x41, 0xfb, 0xbe, 0xd2, 0x20, 0x95, 0xe5, 0xba, 0x87, 0x54, 0x23, 0xcc,
- 0x04, 0x97, 0x38, 0x4b, 0x69, 0x28, 0x18, 0x6d, 0xae, 0x19, 0xe3, 0x3d,
- 0xfe, 0x39, 0xe2, 0x1c, 0xc2, 0x53, 0x17, 0xf6, 0xea, 0xa3, 0x0f, 0x62,
- 0x6e, 0xbf, 0x6f, 0x8f, 0xbc, 0xfa, 0x6e, 0x07, 0xd3, 0xd3, 0xae, 0x5c,
- 0xaa, 0xb5, 0x9c, 0xd7, 0xb8, 0x5b, 0x1b, 0x69, 0x52, 0x93, 0xbf, 0xdb,
- 0x87, 0x5c, 0x19, 0x07, 0x1b, 0x03, 0xe1, 0x79, 0x3c, 0x10, 0x0b, 0x65,
- 0xbf, 0xd7, 0xf3, 0x45, 0x1a, 0xd4, 0xdd, 0xb8, 0x67, 0x1a, 0x8f, 0x41,
- 0x1a, 0xd4, 0x04, 0x3c, 0xd2, 0xa4, 0x3b, 0x47, 0xfe, 0xbd, 0xea, 0x87,
- 0xdf, 0x7f, 0x94, 0x9c, 0xb8, 0x65, 0x54, 0x8d, 0xd7, 0x0b, 0x33, 0x26,
- 0x25, 0x89, 0xd4, 0x60, 0x0c, 0x89, 0x5f, 0x2c, 0x00, 0x7f, 0xaf, 0x89,
- 0x35, 0xe5, 0xb9, 0x23, 0x7f, 0x79, 0x1a, 0x86, 0xce, 0x01, 0x4f, 0x24,
- 0x3c, 0x3a, 0xc3, 0x61, 0x5b, 0xd9, 0x2d, 0x87, 0x94, 0xa3, 0xd2, 0x8b,
- 0x57, 0xc4, 0x07, 0xf8, 0x29, 0x5e, 0x09, 0x23, 0xca, 0xe9, 0x85, 0xa1,
- 0xdb, 0xf2, 0x0c, 0x8f, 0xc2, 0xfb, 0x9a, 0xcc, 0xd9, 0x82, 0x63, 0x28,
- 0x83, 0xb7, 0x4f, 0x99, 0x3a, 0x19, 0x11, 0xb0, 0xb4, 0xe7, 0x73, 0x94,
- 0x35, 0x19, 0x6b, 0xc2, 0x5d, 0x2e, 0x8c, 0x33, 0xff, 0x13, 0xcd, 0xbe,
- 0x29, 0x43, 0xf6, 0xa0, 0xe9, 0xdc, 0x27, 0x27, 0x9b, 0x0a, 0x33, 0xbc,
- 0x85, 0x6a, 0xbf, 0x8b, 0xc5, 0x89, 0x10, 0x92, 0xae, 0x73, 0xc9, 0x32,
- 0x46, 0x8d, 0x24, 0x1f, 0x32, 0x96, 0xed, 0x0b, 0x44, 0x8c, 0x6d, 0xf6,
- 0x1a, 0x2f, 0xca, 0x18, 0x8e, 0x84, 0xff, 0x5f, 0x5f, 0xaf, 0xc0, 0x52,
- 0x35, 0xa1, 0xb3, 0xa0, 0xde, 0xee, 0x97, 0xbf, 0xb8, 0xfa, 0x8b, 0x9e,
- 0x00, 0x13, 0xe7, 0x26, 0xfb, 0x78, 0xa1, 0x6d, 0x41, 0x92, 0xa6, 0xc6,
- 0x7f, 0xad, 0xb7, 0xfc, 0x4f, 0x5f, 0x48, 0x94, 0x7d, 0xb7, 0xf5, 0xcc,
- 0xb5, 0x7e, 0x08, 0xcd, 0xbf, 0x58, 0xc9, 0x30, 0xeb, 0xe4, 0xa0, 0xbf,
- 0x0c, 0x6a, 0x89, 0x18, 0x97, 0x37, 0x54, 0x76, 0x79, 0x3e, 0x8e, 0xa6,
- 0x5b, 0x77, 0xce, 0x4a, 0xcb, 0xd9, 0x8b, 0x7b, 0x32, 0x1a, 0x30, 0x40,
- 0x49, 0xff, 0x84, 0xe7, 0xbe, 0xd8, 0xcf, 0xfd, 0x2d, 0x23, 0x54, 0xb5,
- 0x2e, 0x29, 0xe9, 0xc7, 0x62, 0x1b, 0x03, 0x34, 0x3a, 0xeb, 0xc9, 0x69,
- 0x38, 0x9f, 0xd1, 0x2b, 0xda, 0x8b, 0x07, 0x58, 0x30, 0xf8, 0x38, 0x08,
- 0x09, 0x07, 0xca, 0x5b, 0x3a, 0x13, 0xed, 0xf4, 0x5d, 0xc9, 0x23, 0x66,
- 0x85, 0x8c, 0x6a, 0x7d, 0xe9, 0x11, 0x17, 0xe6, 0x43, 0x2f, 0x12, 0xc5,
- 0x07, 0x63, 0x84, 0x98, 0xa0, 0x1c, 0xdc, 0xf3, 0x91, 0x91, 0x11, 0x55,
- };
-
- THROW_ON_EPIDERR(
- ReadFfElement(this->fq12, &(a_str), sizeof(a_str), this->fq12_a));
- THROW_ON_EPIDERR(
- ReadFfElement(this->fq12, &(b_str), sizeof(b_str), this->fq12_b));
bool result;
EXPECT_EQ(kEpidNoErr,
- FfIsEqual(this->fq12, this->fq12_a, this->fq12_b, &result));
+ FfIsEqual(this->fq12, this->fq12_g, this->fq12_h, &result));
EXPECT_FALSE(result);
}
TEST_F(FfElementTest, SameFq12ElementsAreEqual) {
- const Fq12ElemStr a_str = {
- 0xba, 0x10, 0x1f, 0xf6, 0x46, 0x8b, 0xe9, 0x32, 0x4f, 0xc0, 0xa5, 0x01,
- 0xad, 0x5e, 0xe2, 0x31, 0x16, 0x29, 0x96, 0xed, 0xa7, 0xde, 0x4c, 0xe1,
- 0xd2, 0x8d, 0x33, 0xca, 0x50, 0xab, 0x7b, 0xc6, 0x15, 0xeb, 0x79, 0xf4,
- 0xeb, 0xde, 0x30, 0xb6, 0xc4, 0x07, 0x7c, 0x42, 0xcb, 0x04, 0x54, 0xf2,
- 0x1f, 0x4d, 0x1f, 0xc0, 0xdf, 0xa2, 0x2b, 0x9e, 0x34, 0xc4, 0x4c, 0x84,
- 0x14, 0xd3, 0x62, 0x07, 0xf1, 0x8b, 0x84, 0xd1, 0x46, 0x57, 0xb6, 0xe7,
- 0x80, 0xe1, 0x46, 0x49, 0x1c, 0x0d, 0xef, 0x81, 0x31, 0xb0, 0xbe, 0x8c,
- 0xb9, 0x08, 0xd0, 0xd3, 0xc4, 0x56, 0xca, 0xad, 0xf9, 0x1d, 0x75, 0x19,
- 0x3f, 0xee, 0x7c, 0x43, 0xc1, 0xfa, 0x4e, 0x50, 0xb7, 0x19, 0x01, 0x00,
- 0x6f, 0xd5, 0x16, 0xb6, 0xf4, 0x85, 0xe0, 0xeb, 0x2e, 0x5f, 0x0a, 0x7e,
- 0xf8, 0xac, 0xbc, 0x05, 0xec, 0x73, 0xb5, 0x57, 0xe3, 0xb3, 0x18, 0x29,
- 0xbb, 0xef, 0x86, 0x50, 0x87, 0xcf, 0x70, 0xba, 0x13, 0x8b, 0xb1, 0xb6,
- 0x2d, 0x6f, 0x65, 0x3d, 0xa1, 0x0b, 0xe3, 0x92, 0xc5, 0x72, 0x86, 0x6a,
- 0xb3, 0xeb, 0xe0, 0xe5, 0xda, 0x0e, 0x57, 0x87, 0xd5, 0xa9, 0x61, 0xa5,
- 0x1e, 0xcb, 0x04, 0x86, 0xcd, 0xc3, 0x18, 0x2a, 0x36, 0xa0, 0x81, 0x73,
- 0xe7, 0x13, 0x87, 0x80, 0x8d, 0x1a, 0xfe, 0x6e, 0x4b, 0xa3, 0x13, 0x03,
- 0x66, 0x9e, 0x80, 0x4d, 0x8a, 0xaa, 0x00, 0x95, 0x72, 0xce, 0xbb, 0x51,
- 0xe8, 0x01, 0x09, 0x41, 0xd3, 0x63, 0x28, 0x05, 0xa4, 0xbe, 0xd6, 0x41,
- 0xa6, 0x2f, 0x5f, 0xbf, 0x0b, 0x13, 0xb4, 0x54, 0x5b, 0x50, 0x65, 0xdc,
- 0x6f, 0x29, 0xd6, 0xda, 0xbf, 0xc2, 0x06, 0xea, 0x3b, 0xb2, 0xf1, 0xd4,
- 0x26, 0x5c, 0x92, 0x6b, 0x95, 0x6d, 0x88, 0xab, 0x8f, 0xc6, 0x9d, 0x31,
- 0xe4, 0x9b, 0x71, 0x49, 0xe0, 0xce, 0x97, 0x8f, 0xc9, 0x9f, 0xbc, 0xa8,
- 0x4a, 0xc6, 0xaa, 0x4a, 0xc8, 0x0d, 0x2a, 0x60, 0x1a, 0x43, 0x40, 0x03,
- 0xb3, 0x53, 0x30, 0x98, 0x1f, 0x3f, 0xdf, 0x5c, 0x0f, 0xf0, 0x84, 0x8e,
- 0x5a, 0x5d, 0x41, 0xd2, 0x47, 0x78, 0x6d, 0x9f, 0x89, 0xce, 0xf5, 0x8e,
- 0xb6, 0x54, 0xa2, 0x26, 0xe5, 0x40, 0x39, 0x5c, 0x59, 0x08, 0xb3, 0xda,
- 0xf5, 0xf8, 0xa0, 0x18, 0x33, 0x57, 0xd1, 0x72, 0xbb, 0xba, 0x6c, 0xed,
- 0xe8, 0xa0, 0x5e, 0xc8, 0x81, 0xc5, 0xac, 0x15, 0x1b, 0xd0, 0xe6, 0xc8,
- 0x92, 0xf9, 0x43, 0x03, 0x5a, 0x00, 0x42, 0xe3, 0x49, 0xa5, 0xf7, 0x19,
- 0x78, 0x8a, 0x39, 0x89, 0x32, 0xae, 0xbf, 0x4d, 0x4b, 0xb3, 0x33, 0x76,
- 0x16, 0xfd, 0x0b, 0xfe, 0x42, 0x1e, 0x17, 0x37, 0x2a, 0x04, 0xea, 0x26,
- 0xba, 0x6e, 0x2c, 0x36, 0xaf, 0x35, 0x1b, 0x75, 0x6d, 0x17, 0xdc, 0x8e,
- };
- const Fq12ElemStr b_str = {
- 0xba, 0x10, 0x1f, 0xf6, 0x46, 0x8b, 0xe9, 0x32, 0x4f, 0xc0, 0xa5, 0x01,
- 0xad, 0x5e, 0xe2, 0x31, 0x16, 0x29, 0x96, 0xed, 0xa7, 0xde, 0x4c, 0xe1,
- 0xd2, 0x8d, 0x33, 0xca, 0x50, 0xab, 0x7b, 0xc6, 0x15, 0xeb, 0x79, 0xf4,
- 0xeb, 0xde, 0x30, 0xb6, 0xc4, 0x07, 0x7c, 0x42, 0xcb, 0x04, 0x54, 0xf2,
- 0x1f, 0x4d, 0x1f, 0xc0, 0xdf, 0xa2, 0x2b, 0x9e, 0x34, 0xc4, 0x4c, 0x84,
- 0x14, 0xd3, 0x62, 0x07, 0xf1, 0x8b, 0x84, 0xd1, 0x46, 0x57, 0xb6, 0xe7,
- 0x80, 0xe1, 0x46, 0x49, 0x1c, 0x0d, 0xef, 0x81, 0x31, 0xb0, 0xbe, 0x8c,
- 0xb9, 0x08, 0xd0, 0xd3, 0xc4, 0x56, 0xca, 0xad, 0xf9, 0x1d, 0x75, 0x19,
- 0x3f, 0xee, 0x7c, 0x43, 0xc1, 0xfa, 0x4e, 0x50, 0xb7, 0x19, 0x01, 0x00,
- 0x6f, 0xd5, 0x16, 0xb6, 0xf4, 0x85, 0xe0, 0xeb, 0x2e, 0x5f, 0x0a, 0x7e,
- 0xf8, 0xac, 0xbc, 0x05, 0xec, 0x73, 0xb5, 0x57, 0xe3, 0xb3, 0x18, 0x29,
- 0xbb, 0xef, 0x86, 0x50, 0x87, 0xcf, 0x70, 0xba, 0x13, 0x8b, 0xb1, 0xb6,
- 0x2d, 0x6f, 0x65, 0x3d, 0xa1, 0x0b, 0xe3, 0x92, 0xc5, 0x72, 0x86, 0x6a,
- 0xb3, 0xeb, 0xe0, 0xe5, 0xda, 0x0e, 0x57, 0x87, 0xd5, 0xa9, 0x61, 0xa5,
- 0x1e, 0xcb, 0x04, 0x86, 0xcd, 0xc3, 0x18, 0x2a, 0x36, 0xa0, 0x81, 0x73,
- 0xe7, 0x13, 0x87, 0x80, 0x8d, 0x1a, 0xfe, 0x6e, 0x4b, 0xa3, 0x13, 0x03,
- 0x66, 0x9e, 0x80, 0x4d, 0x8a, 0xaa, 0x00, 0x95, 0x72, 0xce, 0xbb, 0x51,
- 0xe8, 0x01, 0x09, 0x41, 0xd3, 0x63, 0x28, 0x05, 0xa4, 0xbe, 0xd6, 0x41,
- 0xa6, 0x2f, 0x5f, 0xbf, 0x0b, 0x13, 0xb4, 0x54, 0x5b, 0x50, 0x65, 0xdc,
- 0x6f, 0x29, 0xd6, 0xda, 0xbf, 0xc2, 0x06, 0xea, 0x3b, 0xb2, 0xf1, 0xd4,
- 0x26, 0x5c, 0x92, 0x6b, 0x95, 0x6d, 0x88, 0xab, 0x8f, 0xc6, 0x9d, 0x31,
- 0xe4, 0x9b, 0x71, 0x49, 0xe0, 0xce, 0x97, 0x8f, 0xc9, 0x9f, 0xbc, 0xa8,
- 0x4a, 0xc6, 0xaa, 0x4a, 0xc8, 0x0d, 0x2a, 0x60, 0x1a, 0x43, 0x40, 0x03,
- 0xb3, 0x53, 0x30, 0x98, 0x1f, 0x3f, 0xdf, 0x5c, 0x0f, 0xf0, 0x84, 0x8e,
- 0x5a, 0x5d, 0x41, 0xd2, 0x47, 0x78, 0x6d, 0x9f, 0x89, 0xce, 0xf5, 0x8e,
- 0xb6, 0x54, 0xa2, 0x26, 0xe5, 0x40, 0x39, 0x5c, 0x59, 0x08, 0xb3, 0xda,
- 0xf5, 0xf8, 0xa0, 0x18, 0x33, 0x57, 0xd1, 0x72, 0xbb, 0xba, 0x6c, 0xed,
- 0xe8, 0xa0, 0x5e, 0xc8, 0x81, 0xc5, 0xac, 0x15, 0x1b, 0xd0, 0xe6, 0xc8,
- 0x92, 0xf9, 0x43, 0x03, 0x5a, 0x00, 0x42, 0xe3, 0x49, 0xa5, 0xf7, 0x19,
- 0x78, 0x8a, 0x39, 0x89, 0x32, 0xae, 0xbf, 0x4d, 0x4b, 0xb3, 0x33, 0x76,
- 0x16, 0xfd, 0x0b, 0xfe, 0x42, 0x1e, 0x17, 0x37, 0x2a, 0x04, 0xea, 0x26,
- 0xba, 0x6e, 0x2c, 0x36, 0xaf, 0x35, 0x1b, 0x75, 0x6d, 0x17, 0xdc, 0x8e,
- };
-
- THROW_ON_EPIDERR(
- ReadFfElement(this->fq12, &(a_str), sizeof(a_str), this->fq12_a));
- THROW_ON_EPIDERR(
- ReadFfElement(this->fq12, &(b_str), sizeof(b_str), this->fq12_b));
+ FfElementObj fq12_g_local(&this->fq12, &this->fq12_g_str,
+ sizeof(this->fq12_g_str));
bool result;
EXPECT_EQ(kEpidNoErr,
- FfIsEqual(this->fq12, this->fq12_a, this->fq12_b, &result));
+ FfIsEqual(this->fq12, this->fq12_g, fq12_g_local, &result));
EXPECT_TRUE(result);
}
-///////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////
// WriteFfElement
TEST_F(FfElementTest, WriteFailsGivenArgumentsMismatch) {
@@ -603,7 +1624,7 @@ TEST_F(FfElementTest, WriteFailsGivenArgumentsMismatch) {
EXPECT_EQ(kEpidBadArgErr,
WriteFfElement(this->fq12, this->fq_a, buf, sizeof(Fq12ElemStr)));
EXPECT_EQ(kEpidBadArgErr,
- WriteFfElement(this->fq, this->fq12_a, buf, sizeof(Fq12ElemStr)));
+ WriteFfElement(this->fq, this->fq12_g, buf, sizeof(Fq12ElemStr)));
}
TEST_F(FfElementTest, WriteFailsGivenNullPointer) {
@@ -630,617 +1651,483 @@ TEST_F(FfElementTest, WriteWorksGiven256BitElement) {
FqElemStr ff_elem_str;
EXPECT_EQ(kEpidNoErr, WriteFfElement(this->fq, this->fq_a, &ff_elem_str,
sizeof(ff_elem_str)));
- EXPECT_EQ(this->fq_a_data, ff_elem_str);
+ EXPECT_EQ(this->fq_a_str, ff_elem_str);
+}
+
+TEST_F(FfElementTest, WritePadPrimeFieldElement) {
+ FqElemStr ff_elem_str[2] = {0xcd};
+ EXPECT_EQ(kEpidNoErr, WriteFfElement(this->fq, this->fq_a, &ff_elem_str[0],
+ sizeof(ff_elem_str)));
+ EXPECT_EQ(this->fq_0_str, ff_elem_str[0]);
+ EXPECT_EQ(this->fq_a_str, ff_elem_str[1]);
+}
+
+TEST_F(FfElementTest, WriteExpectExactSizeForFieldExtensions) {
+ uint8_t buf[sizeof(Fq12ElemStr) + 1] = {0};
+ EXPECT_EQ(kEpidBadArgErr, WriteFfElement(this->fq12, this->fq12_g, buf,
+ sizeof(Fq12ElemStr) + 1));
+ EXPECT_EQ(kEpidBadArgErr, WriteFfElement(this->fq12, this->fq12_g, buf,
+ sizeof(Fq12ElemStr) - 1));
+ EXPECT_EQ(kEpidBadArgErr,
+ WriteFfElement(this->fq12, this->fq12_g, buf, sizeof(FqElemStr)));
}
///////////////////////////////////////////////////////////////////////
// FfNeg
TEST_F(FfElementTest, FfNegFailsGivenArgumentsMismatch) {
- EXPECT_EQ(kEpidBadArgErr, FfNeg(this->fq12, this->fq_a, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfNeg(this->fq, this->fq12_a, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfNeg(this->fq, this->fq_a, this->fq12_r));
+ EXPECT_EQ(kEpidBadArgErr, FfNeg(this->fq12, this->fq_a, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfNeg(this->fq, this->fq12_g, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfNeg(this->fq, this->fq_a, this->fq12_result));
}
TEST_F(FfElementTest, FfNegFailsGivenNullPointer) {
- EXPECT_EQ(kEpidBadArgErr, FfNeg(nullptr, this->fq_a, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfNeg(this->fq, nullptr, this->fq_r));
+ EXPECT_EQ(kEpidBadArgErr, FfNeg(nullptr, this->fq_a, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfNeg(this->fq, nullptr, this->fq_result));
EXPECT_EQ(kEpidBadArgErr, FfNeg(this->fq, this->fq_a, nullptr));
}
TEST_F(FfElementTest, FfNegSucceedsGivenElementZero) {
- FqElemStr fq_r_data;
- EXPECT_EQ(kEpidNoErr, FfNeg(this->fq, this->fq_zero, this->fq_r));
+ FqElemStr fq_r_str;
+ EXPECT_EQ(kEpidNoErr, FfNeg(this->fq, this->fq_0, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_zero_data, fq_r_data)
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_0_str, fq_r_str)
<< "FfNeg: Negate element does not match to reference neg zero value";
}
TEST_F(FfElementTest, FfNegSucceedsGivenNonZeroElement) {
- FqElemStr fq_r_data;
- EXPECT_EQ(kEpidNoErr, FfNeg(this->fq, this->fq_a, this->fq_r));
+ FqElemStr fq_r_str;
+ EXPECT_EQ(kEpidNoErr, FfNeg(this->fq, this->fq_a, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_neg_a_data, fq_r_data)
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_neg_a_str, fq_r_str)
<< "FfNeg: Negate element does not match to reference neg value";
}
-///////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////
// FfIsZero
TEST_F(FfElementTest, FfIsZeroFailsGivenNullPointer) {
bool result = false;
- EXPECT_EQ(kEpidBadArgErr, FfIsZero(nullptr, this->fq_zero, &result));
+ EXPECT_EQ(kEpidBadArgErr, FfIsZero(nullptr, this->fq_0, &result));
EXPECT_EQ(kEpidBadArgErr, FfIsZero(this->fq, nullptr, &result));
- EXPECT_EQ(kEpidBadArgErr, FfIsZero(this->fq, this->fq_zero, nullptr));
+ EXPECT_EQ(kEpidBadArgErr, FfIsZero(this->fq, this->fq_0, nullptr));
}
TEST_F(FfElementTest, FfIsZeroFailsGivenArgumentsMismatch) {
bool result;
EXPECT_EQ(kEpidBadArgErr, FfIsZero(this->fq12, this->fq_a, &result));
- EXPECT_EQ(kEpidBadArgErr, FfIsZero(this->fq, this->fq12_a, &result));
+ EXPECT_EQ(kEpidBadArgErr, FfIsZero(this->fq, this->fq12_g, &result));
}
TEST_F(FfElementTest, FfIsZeroSucceedsGivenZeroElement) {
bool result = false;
- EXPECT_EQ(kEpidNoErr, FfIsZero(this->fq, this->fq_zero, &result));
+ EXPECT_EQ(kEpidNoErr, FfIsZero(this->fq, this->fq_0, &result));
EXPECT_TRUE(result);
}
TEST_F(FfElementTest, FfIsZeroSucceedsGivenNonZeroElement) {
bool result = false;
- EXPECT_EQ(kEpidNoErr, FfIsZero(this->fq, this->fq_one, &result));
+ EXPECT_EQ(kEpidNoErr, FfIsZero(this->fq, this->fq_1, &result));
EXPECT_FALSE(result);
}
-///////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////
// FfMul
TEST_F(FfElementTest, FfMulFailsGivenNullPointer) {
- EXPECT_EQ(kEpidBadArgErr, FfMul(nullptr, this->fq_a, this->fq_b, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfMul(this->fq, nullptr, this->fq_b, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfMul(this->fq, this->fq_a, nullptr, this->fq_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfMul(nullptr, this->fq_a, this->fq_b, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfMul(this->fq, nullptr, this->fq_b, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfMul(this->fq, this->fq_a, nullptr, this->fq_result));
EXPECT_EQ(kEpidBadArgErr, FfMul(this->fq, this->fq_a, this->fq_b, nullptr));
}
TEST_F(FfElementTest, FfMulFailsGivenArgumentsMismatch) {
EXPECT_EQ(kEpidBadArgErr,
- FfMul(this->fq12, this->fq_a, this->fq_b, this->fq_r));
+ FfMul(this->fq12, this->fq_a, this->fq_b, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfMul(this->fq, this->fq12_a, this->fq_b, this->fq_r));
+ FfMul(this->fq, this->fq12_g, this->fq_b, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfMul(this->fq, this->fq_a, this->fq12_b, this->fq_r));
+ FfMul(this->fq, this->fq_a, this->fq12_h, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfMul(this->fq, this->fq_a, this->fq_b, this->fq12_r));
+ FfMul(this->fq, this->fq_a, this->fq_b, this->fq12_result));
EXPECT_EQ(kEpidBadArgErr,
- FfMul(this->fq2, this->fq_a, this->fq2_b, this->fq2_r));
+ FfMul(this->fq2, this->fq_a, this->fq2_a, this->fq2_result));
}
TEST_F(FfElementTest, FfMulSucceedsGivenElementZero) {
- FqElemStr fq_r_data;
+ FqElemStr fq_r_str;
- EXPECT_EQ(kEpidNoErr, FfMul(this->fq, this->fq_zero, this->fq_b, this->fq_r));
+ EXPECT_EQ(kEpidNoErr,
+ FfMul(this->fq, this->fq_0, this->fq_b, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_zero_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_0_str, fq_r_str);
- EXPECT_EQ(kEpidNoErr, FfMul(this->fq, this->fq_a, this->fq_zero, this->fq_r));
+ EXPECT_EQ(kEpidNoErr,
+ FfMul(this->fq, this->fq_a, this->fq_0, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_zero_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_0_str, fq_r_str);
}
TEST_F(FfElementTest, FfMulSucceedsGivenElementOne) {
- FqElemStr fq_r_data;
+ FqElemStr fq_r_str;
- EXPECT_EQ(kEpidNoErr, FfMul(this->fq, this->fq_one, this->fq_b, this->fq_r));
+ EXPECT_EQ(kEpidNoErr,
+ FfMul(this->fq, this->fq_1, this->fq_b, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_b_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_b_str, fq_r_str);
- EXPECT_EQ(kEpidNoErr, FfMul(this->fq, this->fq_a, this->fq_one, this->fq_r));
+ EXPECT_EQ(kEpidNoErr,
+ FfMul(this->fq, this->fq_a, this->fq_1, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_a_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_a_str, fq_a_str);
}
TEST_F(FfElementTest, FfMulSucceedsGivenTwoElements) {
- FqElemStr fq_r_data;
+ FqElemStr fq_r_str;
- EXPECT_EQ(kEpidNoErr, FfMul(this->fq, this->fq_a, this->fq_b, this->fq_r));
+ EXPECT_EQ(kEpidNoErr,
+ FfMul(this->fq, this->fq_a, this->fq_b, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_mul_ab_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_mul_ab_str, fq_r_str);
Fq2ElemStr fq2_r_str;
- const Fq2ElemStr fq2_a_str = {
- 0x12, 0xA6, 0x5B, 0xD6, 0x91, 0x8D, 0x50, 0xA7, 0x66, 0xEB, 0x7D,
- 0x52, 0xE3, 0x40, 0x17, 0x60, 0x7F, 0xDF, 0x6C, 0xA1, 0x2C, 0x1A,
- 0x37, 0xE0, 0x92, 0xC0, 0xF7, 0xB9, 0x76, 0xAB, 0xB1, 0x8A, 0xDD,
- 0x2B, 0xE9, 0x59, 0x24, 0xA5, 0xB3, 0xFD, 0xEB, 0xE1, 0x3C, 0xC0,
- 0x73, 0x4E, 0x99, 0xEE, 0x36, 0xF6, 0xC0, 0x1A, 0x76, 0x01, 0x0A,
- 0xF0, 0xCB, 0xB4, 0x71, 0x88, 0x95, 0xCB, 0x35, 0xBA};
-
- const Fq2ElemStr fq2_mul_ab_str = {
- 0xE4, 0xAB, 0xE3, 0xE4, 0x08, 0xC3, 0x8A, 0x00, 0x78, 0x50, 0x01,
- 0xA9, 0x4A, 0xFC, 0x43, 0x15, 0xA2, 0x99, 0x51, 0x20, 0x6B, 0x9C,
- 0x00, 0xCF, 0x82, 0x88, 0xBD, 0x39, 0x0B, 0xA2, 0x0B, 0x58, 0xB4,
- 0xE4, 0x39, 0xEA, 0x70, 0xDE, 0x15, 0xC3, 0xC6, 0x91, 0xFD, 0x7F,
- 0xBE, 0x2B, 0xF5, 0xD2, 0xC0, 0xB7, 0x20, 0xFC, 0x1F, 0x02, 0x33,
- 0xC9, 0x39, 0x93, 0xB9, 0x5E, 0x55, 0x51, 0xB6, 0x46};
+ THROW_ON_EPIDERR(
+ ReadFfElement(this->fq, &(fq_b_str), sizeof(fq_b_str), this->fq_b));
+ EXPECT_EQ(kEpidNoErr,
+ FfMul(this->fq2, this->fq2_a, this->fq_b, this->fq2_result));
+ THROW_ON_EPIDERR(WriteFfElement(this->fq2, this->fq2_result, &fq2_r_str,
+ sizeof(fq2_r_str)));
+ EXPECT_EQ(this->fq2_mul_ab_str, fq2_r_str);
+
+ Fq12ElemStr fq12_r_str;
+ THROW_ON_EPIDERR(ReadFfElement(this->fq12, &(this->fq12_i_str),
+ sizeof(this->fq12_i_str), this->fq12_i));
+ THROW_ON_EPIDERR(ReadFfElement(this->fq12, &(fq12_j_str), sizeof(fq12_j_str),
+ this->fq12_j));
+ EXPECT_EQ(kEpidNoErr,
+ FfMul(this->fq12, this->fq12_i, this->fq12_j, this->fq12_result));
+ THROW_ON_EPIDERR(WriteFfElement(this->fq12, this->fq12_result, &fq12_r_str,
+ sizeof(fq12_r_str)));
+ EXPECT_EQ(fq12_mul_ij_str, fq12_r_str);
+}
+
+////////////////////////////////////////////////
+// FfSub
+TEST_F(FfElementTest, FfSubFailsGivenArgumentsMismatch) {
+ EXPECT_EQ(kEpidBadArgErr,
+ FfSub(this->fq12, this->fq_a, this->fq_b, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfSub(this->fq, this->fq12_g, this->fq_b, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfSub(this->fq, this->fq_a, this->fq12_h, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfSub(this->fq, this->fq_a, this->fq_b, this->fq12_result));
+}
+
+TEST_F(FfElementTest, FfSubFailsGivenNullPtr) {
+ EXPECT_EQ(kEpidBadArgErr,
+ FfSub(nullptr, this->fq_a, this->fq_b, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfSub(this->fq, nullptr, this->fq_b, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfSub(this->fq, this->fq_a, nullptr, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfSub(this->fq, this->fq_a, this->fq_b, nullptr));
+}
+
+TEST_F(FfElementTest, FfSubSucceedsGivenElementZero) {
+ FqElemStr fq_r_str = {0x0};
+ // additive identity
+ EXPECT_EQ(kEpidNoErr,
+ FfSub(this->fq, this->fq_a, this->fq_0, this->fq_result));
THROW_ON_EPIDERR(
- ReadFfElement(this->fq2, &(fq2_a_str), sizeof(fq2_a_str), this->fq2_a));
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_a_str, fq_r_str);
+
+ EXPECT_EQ(kEpidNoErr,
+ FfSub(this->fq, this->fq_0, this->fq_0, this->fq_result));
THROW_ON_EPIDERR(
- ReadFfElement(this->fq, &(fq_b_data), sizeof(fq_b_data), this->fq_b));
- EXPECT_EQ(kEpidNoErr, FfMul(this->fq2, this->fq2_a, this->fq_b, this->fq2_r));
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_0_str, fq_r_str);
+}
+
+TEST_F(FfElementTest, FfSubSucceedsGivenTwoEqualElements) {
+ FqElemStr fq_r_str = {0x0};
+
+ EXPECT_EQ(kEpidNoErr,
+ FfSub(this->fq, this->fq_a, this->fq_a, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq2, this->fq2_r, &fq2_r_str, sizeof(fq2_r_str)));
- EXPECT_EQ(fq2_mul_ab_str, fq2_r_str);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_0_str, fq_r_str);
+}
+
+TEST_F(FfElementTest, FfSubSucceedsGivenTwoElements) {
+ FqElemStr fq_r_str = {0x0};
- Fq12ElemStr fq12_r_str;
- const Fq12ElemStr fq12_a_str = {
- 0x0f, 0xd0, 0x1c, 0x59, 0x98, 0x52, 0x5a, 0x40, 0xff, 0x26, 0x0a, 0xfd,
- 0x70, 0xec, 0x23, 0x48, 0x1b, 0x4b, 0x70, 0xa0, 0x15, 0xc5, 0xb1, 0x8b,
- 0xa5, 0x75, 0xac, 0xce, 0xf3, 0x6c, 0xe8, 0xba, 0xa7, 0xfb, 0xf9, 0xea,
- 0x18, 0x70, 0xd8, 0x9b, 0x3c, 0xc3, 0x66, 0x10, 0x38, 0xac, 0x16, 0x32,
- 0xdc, 0x9d, 0xf0, 0xd4, 0x2c, 0xe7, 0xf6, 0x69, 0x47, 0x69, 0x84, 0xee,
- 0x39, 0x5f, 0xd8, 0xcc, 0x1b, 0xef, 0x81, 0x13, 0x81, 0xb9, 0x56, 0xae,
- 0xd0, 0xd4, 0xae, 0xcb, 0x24, 0x7c, 0x7b, 0x7f, 0xc0, 0x41, 0x42, 0x0a,
- 0x9d, 0x90, 0x6b, 0x1e, 0x3a, 0xad, 0x39, 0x7a, 0x1f, 0xef, 0x56, 0x9e,
- 0xbd, 0x84, 0x48, 0xaf, 0x65, 0x66, 0x33, 0xe5, 0x67, 0xf1, 0xc4, 0x48,
- 0xf0, 0xb6, 0x61, 0x06, 0xc7, 0x78, 0xb3, 0xc1, 0x12, 0xb8, 0x31, 0xd4,
- 0x69, 0x2e, 0x0e, 0xd3, 0xd4, 0x91, 0x81, 0x9a, 0x23, 0x62, 0x9b, 0x83,
- 0x95, 0xf6, 0x7f, 0xf6, 0xcc, 0x6b, 0xee, 0x84, 0xf0, 0x5b, 0x93, 0xa6,
- 0x90, 0x48, 0x1a, 0xa7, 0xa8, 0xe8, 0x10, 0xa5, 0x53, 0x7e, 0x4f, 0xd5,
- 0x0d, 0xb0, 0x86, 0xf7, 0x1f, 0xb8, 0xb7, 0xd4, 0x2e, 0x41, 0x83, 0x2c,
- 0xfc, 0x62, 0x14, 0xb8, 0xc2, 0xf6, 0xc1, 0x5e, 0xc1, 0xc1, 0x40, 0x8b,
- 0x28, 0xb5, 0x1b, 0x85, 0xee, 0x71, 0xc8, 0x14, 0x56, 0xb9, 0x3b, 0x90,
- 0x4a, 0xfe, 0x73, 0xfa, 0xcf, 0x20, 0x67, 0x0e, 0x89, 0x1d, 0xcb, 0x05,
- 0x38, 0x27, 0x1c, 0xd5, 0x7a, 0x0c, 0xac, 0x92, 0x17, 0x94, 0x7f, 0x10,
- 0x3e, 0xff, 0x97, 0x23, 0x66, 0x8d, 0x70, 0xae, 0x80, 0x97, 0xff, 0x88,
- 0xf8, 0x01, 0x2b, 0x99, 0x81, 0xeb, 0xf8, 0x19, 0xef, 0xda, 0xe3, 0xae,
- 0xd9, 0x9b, 0x4c, 0x13, 0xfc, 0x9e, 0x18, 0xd6, 0xb0, 0xcf, 0x4e, 0x29,
- 0xa8, 0xcf, 0x01, 0xfa, 0xda, 0x22, 0x85, 0x18, 0x9a, 0x51, 0x17, 0xac,
- 0x26, 0x57, 0xf6, 0x73, 0x59, 0x24, 0xd5, 0xc9, 0x4d, 0xac, 0xb6, 0xe4,
- 0x51, 0xf7, 0x5e, 0x30, 0x5b, 0x25, 0x3d, 0x52, 0xa3, 0xe0, 0x4b, 0xa2,
- 0xc3, 0x4c, 0x2f, 0x53, 0xd5, 0x92, 0x33, 0x7e, 0x8b, 0x66, 0x5f, 0x48,
- 0x48, 0xca, 0xa8, 0x98, 0x0f, 0x73, 0xd3, 0x60, 0xaf, 0x25, 0x02, 0xee,
- 0x64, 0xe7, 0x02, 0x89, 0x9a, 0xd2, 0x96, 0x45, 0x04, 0xe1, 0x30, 0x9b,
- 0xd8, 0x85, 0xf0, 0x99, 0x7c, 0x01, 0xd5, 0x58, 0x5a, 0x74, 0x0b, 0xd4,
- 0xf2, 0xfa, 0xc7, 0x59, 0x36, 0xfd, 0x91, 0x07, 0x60, 0xf7, 0xdc, 0x11,
- 0x3e, 0x8a, 0xc6, 0x48, 0x0d, 0x02, 0x30, 0x18, 0xd0, 0xb9, 0x6b, 0xd6,
- 0x39, 0x6a, 0x41, 0x82, 0xdd, 0xe3, 0xce, 0xb8, 0xb6, 0xf5, 0x61, 0x80,
- 0x61, 0x16, 0xf4, 0x9a, 0xb8, 0x58, 0x1d, 0x3f, 0x4d, 0xc2, 0xca, 0xcf,
- };
- const Fq12ElemStr fq12_b_str = {
- 0x3a, 0x30, 0x33, 0xa2, 0x14, 0xdf, 0xdc, 0x70, 0x48, 0xf3, 0xba, 0x3f,
- 0xce, 0xfc, 0x69, 0x24, 0xae, 0xa1, 0xf3, 0xcf, 0xd8, 0x77, 0x69, 0x38,
- 0x38, 0xf4, 0x8e, 0xfb, 0x51, 0xfb, 0x10, 0x7c, 0x73, 0xb4, 0xee, 0xf9,
- 0x76, 0xbb, 0x45, 0xec, 0x07, 0x24, 0x23, 0xa3, 0x38, 0x64, 0x39, 0x4c,
- 0x03, 0x94, 0xf5, 0xee, 0x5f, 0xc9, 0x83, 0x4f, 0xd1, 0xa6, 0x4a, 0x05,
- 0x25, 0x0c, 0x46, 0x33, 0xd4, 0x40, 0x47, 0xae, 0xec, 0xda, 0x30, 0xf9,
- 0xe1, 0x28, 0xfb, 0xb1, 0x4c, 0x62, 0xfb, 0x6c, 0x90, 0x0d, 0xb1, 0xec,
- 0xaf, 0x2d, 0x95, 0x64, 0x11, 0x93, 0xda, 0x8e, 0xb8, 0x7d, 0xe4, 0xa3,
- 0x8e, 0xa6, 0x9b, 0xaa, 0x58, 0xd5, 0xdc, 0x59, 0x1a, 0x51, 0x53, 0x47,
- 0x30, 0x1c, 0x2b, 0xb0, 0xbb, 0x57, 0x57, 0x0a, 0x8c, 0x5f, 0x62, 0x9c,
- 0x52, 0x28, 0xc0, 0x25, 0x27, 0xae, 0xcd, 0x36, 0xbf, 0x2d, 0x03, 0xb1,
- 0x33, 0xfd, 0x24, 0x81, 0x3c, 0x91, 0x43, 0x90, 0x0c, 0x20, 0xc4, 0xe3,
- 0x69, 0x3f, 0xa9, 0xa2, 0x7c, 0xc2, 0x48, 0x28, 0x1b, 0xf0, 0x81, 0x1f,
- 0x2b, 0x8f, 0x8d, 0x43, 0x38, 0x18, 0x12, 0xa3, 0x89, 0xf1, 0xd7, 0x60,
- 0x89, 0x68, 0x6a, 0xc4, 0xcc, 0x5d, 0xf4, 0xce, 0x43, 0x95, 0x84, 0xcd,
- 0x01, 0x55, 0xb8, 0x5d, 0x24, 0x50, 0xcd, 0xe3, 0x68, 0x1c, 0xff, 0x59,
- 0x0d, 0xac, 0xcb, 0xe7, 0x9d, 0x68, 0x0f, 0x4a, 0xaf, 0xeb, 0xb5, 0xfb,
- 0xf9, 0xb1, 0x58, 0x80, 0xd5, 0x71, 0x53, 0x26, 0x2e, 0x9c, 0xce, 0x10,
- 0xac, 0xd2, 0x0a, 0xeb, 0xb4, 0x5c, 0xc8, 0xd7, 0x16, 0x26, 0x66, 0x71,
- 0xdd, 0x67, 0xba, 0xdb, 0x35, 0x76, 0x64, 0xc6, 0x0b, 0x0b, 0x07, 0x4b,
- 0x65, 0xa2, 0xf7, 0x68, 0x9e, 0xfe, 0xe8, 0xe3, 0xa7, 0x09, 0x79, 0xc5,
- 0xdf, 0x5e, 0x9c, 0xec, 0xee, 0x83, 0x59, 0xb5, 0x89, 0x81, 0xa2, 0x87,
- 0xd7, 0x75, 0x65, 0x90, 0xde, 0x78, 0x37, 0x59, 0x04, 0x9b, 0x50, 0xc3,
- 0xba, 0x90, 0x09, 0x15, 0xab, 0x17, 0xc5, 0xbf, 0x5b, 0xb9, 0xe4, 0x6c,
- 0xa9, 0xb1, 0x49, 0x76, 0x25, 0x74, 0x5d, 0x9c, 0x78, 0xc5, 0x09, 0xee,
- 0xeb, 0xeb, 0x9d, 0x1c, 0x6c, 0xc0, 0x27, 0x9d, 0x66, 0xe6, 0x7f, 0x31,
- 0xcd, 0xb0, 0x8a, 0xe4, 0x9e, 0xbd, 0x70, 0x18, 0x88, 0xa1, 0x08, 0x39,
- 0xa2, 0x48, 0xa5, 0x98, 0xb6, 0xad, 0x10, 0x54, 0x07, 0xcd, 0xfc, 0x6d,
- 0xb1, 0x02, 0xff, 0xe3, 0x92, 0xd7, 0x9d, 0x48, 0xfb, 0xce, 0x88, 0x46,
- 0x92, 0x07, 0x02, 0xba, 0xee, 0xeb, 0xae, 0x88, 0xb1, 0x4e, 0xd0, 0xf2,
- 0xce, 0xd7, 0x57, 0x07, 0xd4, 0x39, 0xd2, 0x7d, 0x1a, 0x0c, 0xef, 0xf2,
- 0x84, 0x84, 0x22, 0x8a, 0xb1, 0x80, 0x0d, 0xdc, 0x64, 0x86, 0xfd, 0x70,
- };
- const Fq12ElemStr fq12_mul_ab_str = {
- 0x4a, 0x0e, 0x83, 0x4f, 0x62, 0xca, 0x56, 0x0b, 0x0f, 0x2e, 0xf3, 0x1a,
- 0xc6, 0xfc, 0x76, 0x4f, 0x4b, 0x85, 0x78, 0x6f, 0x9d, 0xb9, 0xbd, 0xc8,
- 0xbb, 0x7c, 0x73, 0x12, 0x28, 0xff, 0xbc, 0x8f, 0x18, 0x8e, 0x5e, 0x4b,
- 0x72, 0xa5, 0x4a, 0x99, 0xfc, 0xe7, 0x05, 0xe5, 0xd2, 0x2c, 0x06, 0x95,
- 0xf5, 0xe4, 0xa5, 0x87, 0xcb, 0x85, 0x25, 0xf8, 0xda, 0x71, 0x7b, 0x9a,
- 0xf1, 0x52, 0xf9, 0x33, 0x05, 0x5f, 0x15, 0x72, 0xa3, 0x61, 0xa6, 0x6c,
- 0xb8, 0x43, 0xbb, 0xca, 0x33, 0xb2, 0xdb, 0x59, 0xca, 0xab, 0xad, 0xa0,
- 0x4d, 0xe3, 0xb8, 0xf5, 0xc9, 0x8c, 0x06, 0x91, 0xe5, 0xe4, 0x5a, 0xad,
- 0xe7, 0x66, 0xcc, 0x2b, 0x2c, 0x11, 0x88, 0x29, 0xb1, 0x3c, 0x52, 0xfe,
- 0x50, 0xdf, 0x8f, 0x15, 0x6a, 0x6b, 0xb8, 0x32, 0x96, 0x90, 0x85, 0x03,
- 0x78, 0x88, 0x97, 0x7b, 0x5b, 0x50, 0x2e, 0xde, 0xe7, 0x53, 0x22, 0x11,
- 0xeb, 0xff, 0x1b, 0x19, 0xae, 0x5f, 0x58, 0x3a, 0x4f, 0x6f, 0x34, 0xfb,
- 0x2a, 0x49, 0xca, 0x4b, 0x9c, 0x31, 0xfc, 0x74, 0x0f, 0x11, 0xcc, 0x45,
- 0xcd, 0xa2, 0x12, 0xca, 0xf4, 0x2f, 0x30, 0x9a, 0x6a, 0xcb, 0xee, 0x88,
- 0x15, 0x56, 0x29, 0x2a, 0xbf, 0x33, 0x7b, 0xdb, 0x59, 0x74, 0x4d, 0xc0,
- 0x64, 0xf0, 0x0b, 0x9f, 0xf2, 0x65, 0xb7, 0x3a, 0xda, 0xe2, 0xb5, 0x63,
- 0x3a, 0x3e, 0x06, 0xef, 0x73, 0xa3, 0xbc, 0xea, 0xcc, 0x68, 0xd9, 0xf5,
- 0x6e, 0x94, 0x1c, 0x54, 0x47, 0xf1, 0x99, 0x2c, 0x44, 0x64, 0x45, 0x84,
- 0x50, 0x10, 0xfd, 0xc5, 0x16, 0x65, 0x89, 0xec, 0x72, 0xa6, 0x7e, 0x82,
- 0x7f, 0xe2, 0xe3, 0xea, 0x82, 0xa3, 0x18, 0xf4, 0x9b, 0x93, 0x4d, 0x79,
- 0xa0, 0x2c, 0xbf, 0x90, 0x0e, 0xdb, 0x41, 0x09, 0x27, 0x44, 0x19, 0xd1,
- 0xb4, 0xe5, 0xc6, 0x8c, 0xa5, 0xc7, 0x82, 0xbf, 0x00, 0x7b, 0x8d, 0x7a,
- 0x05, 0x7b, 0x7e, 0x33, 0x60, 0x28, 0x34, 0x9c, 0x86, 0x5a, 0x6b, 0xce,
- 0xa5, 0xed, 0x26, 0x22, 0x63, 0x4a, 0xe9, 0x57, 0xcd, 0x55, 0xd2, 0xd3,
- 0x0e, 0x73, 0x14, 0xe4, 0xee, 0xe7, 0x3c, 0x43, 0xfc, 0xae, 0x84, 0x59,
- 0x2f, 0xea, 0x35, 0x84, 0xa5, 0x77, 0xce, 0xa8, 0xc5, 0xaa, 0xb8, 0xdc,
- 0xb9, 0xd6, 0x71, 0x11, 0xe2, 0x95, 0x00, 0x97, 0xbd, 0x50, 0xda, 0x58,
- 0x1b, 0xda, 0xb3, 0x25, 0x19, 0x2f, 0x9d, 0xfa, 0x2c, 0xfb, 0x96, 0x26,
- 0xbb, 0x4a, 0x41, 0x82, 0xa9, 0x45, 0x24, 0xee, 0xee, 0xea, 0xd3, 0xc5,
- 0x94, 0xfc, 0x2a, 0x37, 0x6a, 0x43, 0xb8, 0x6c, 0xbb, 0x98, 0xb7, 0x17,
- 0x03, 0xc0, 0x3d, 0x6d, 0x59, 0x56, 0x3d, 0x23, 0x42, 0x94, 0x25, 0x64,
- 0xb9, 0x62, 0xad, 0x4d, 0x84, 0x9b, 0x3c, 0x05, 0x8c, 0xf0, 0xd3, 0xd3,
- };
- THROW_ON_EPIDERR(ReadFfElement(this->fq12, &(fq12_a_str), sizeof(fq12_a_str),
- this->fq12_a));
- THROW_ON_EPIDERR(ReadFfElement(this->fq12, &(fq12_b_str), sizeof(fq12_b_str),
- this->fq12_b));
EXPECT_EQ(kEpidNoErr,
- FfMul(this->fq12, this->fq12_a, this->fq12_b, this->fq12_r));
- THROW_ON_EPIDERR(WriteFfElement(this->fq12, this->fq12_r, &fq12_r_str,
- sizeof(fq12_r_str)));
- EXPECT_EQ(fq12_mul_ab_str, fq12_r_str);
+ FfSub(this->fq, this->fq_sum_ab, this->fq_b, this->fq_result));
+ THROW_ON_EPIDERR(
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_a_str, fq_r_str);
}
-///////////////////////////////////////////////////////////////////////
+TEST_F(FfElementTest, FfSubSucceedsGivenTwoElementsFq2) {
+ FfElementObj a(&this->fq2, &this->bn_a_str, sizeof(this->bn_a_str));
+ FfElementObj b(&this->fq2, &this->bn_b_str, sizeof(this->bn_b_str));
+ FfElementObj sum_ab(&this->fq2, this->fq2_sum_ab_str);
+ FfElementObj r(&this->fq2);
+
+ EXPECT_EQ(kEpidNoErr, FfSub(this->fq2, sum_ab, b, r));
+ EXPECT_EQ(a, r);
+}
+TEST_F(FfElementTest, FfSubSucceedsGivenTwoElementsFq6) {
+ FfElementObj a(&this->fq6, &this->bn_a_str, sizeof(this->bn_a_str));
+ FfElementObj b(&this->fq6, &this->bn_b_str, sizeof(this->bn_b_str));
+ FfElementObj sum_ab(&this->fq6, this->fq6_sum_ab_str);
+ FfElementObj r(&this->fq6);
+
+ EXPECT_EQ(kEpidNoErr, FfSub(this->fq6, sum_ab, b, r));
+ EXPECT_EQ(a, r);
+}
+TEST_F(FfElementTest, FfSubSucceedsGivenTwoElementsFq12) {
+ FfElementObj a(&this->fq12, &this->bn_a_str, sizeof(this->bn_a_str));
+ FfElementObj b(&this->fq12, &this->bn_b_str, sizeof(this->bn_b_str));
+ FfElementObj sum_ab(&this->fq12, this->fq12_sum_ab_str);
+ FfElementObj r(&this->fq12);
+
+ EXPECT_EQ(kEpidNoErr, FfSub(this->fq12, sum_ab, b, r));
+ EXPECT_EQ(a, r);
+}
+
+////////////////////////////////////////////////
// FfAdd
TEST_F(FfElementTest, FfAddFailsGivenArgumentsMismatch) {
EXPECT_EQ(kEpidBadArgErr,
- FfAdd(this->fq12, this->fq_a, this->fq_b, this->fq_r));
+ FfAdd(this->fq12, this->fq_a, this->fq_b, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfAdd(this->fq, this->fq12_a, this->fq_b, this->fq_r));
+ FfAdd(this->fq, this->fq12_g, this->fq_b, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfAdd(this->fq, this->fq_a, this->fq12_b, this->fq_r));
+ FfAdd(this->fq, this->fq_a, this->fq12_h, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfAdd(this->fq, this->fq_a, this->fq_b, this->fq12_r));
+ FfAdd(this->fq, this->fq_a, this->fq_b, this->fq12_result));
}
TEST_F(FfElementTest, FfAddFailsGivenNullPtr) {
- EXPECT_EQ(kEpidBadArgErr, FfAdd(nullptr, this->fq_a, this->fq_b, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfAdd(this->fq, nullptr, this->fq_b, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfAdd(this->fq, this->fq_a, nullptr, this->fq_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfAdd(nullptr, this->fq_a, this->fq_b, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfAdd(this->fq, nullptr, this->fq_b, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfAdd(this->fq, this->fq_a, nullptr, this->fq_result));
EXPECT_EQ(kEpidBadArgErr, FfAdd(this->fq, this->fq_a, this->fq_b, nullptr));
}
TEST_F(FfElementTest, FfAddSucceedsGivenElementZero) {
- FqElemStr fq_r_data = {0x0};
+ FqElemStr fq_r_str = {0x0};
// additive identity
- EXPECT_EQ(kEpidNoErr, FfAdd(this->fq, this->fq_a, this->fq_zero, this->fq_r));
+ EXPECT_EQ(kEpidNoErr,
+ FfAdd(this->fq, this->fq_a, this->fq_0, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_a_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_a_str, fq_r_str);
- EXPECT_EQ(kEpidNoErr, FfAdd(this->fq, this->fq_zero, this->fq_b, this->fq_r));
+ EXPECT_EQ(kEpidNoErr,
+ FfAdd(this->fq, this->fq_0, this->fq_b, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_b_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_b_str, fq_r_str);
EXPECT_EQ(kEpidNoErr,
- FfAdd(this->fq, this->fq_zero, this->fq_zero, this->fq_r));
+ FfAdd(this->fq, this->fq_0, this->fq_0, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_zero_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_0_str, fq_r_str);
}
TEST_F(FfElementTest, FfAddSucceedsGivenTwoElements) {
- FqElemStr fq_r_data = {0x0};
+ FqElemStr fq_r_str = {0x0};
- EXPECT_EQ(kEpidNoErr, FfAdd(this->fq, this->fq_a, this->fq_b, this->fq_r));
+ EXPECT_EQ(kEpidNoErr,
+ FfAdd(this->fq, this->fq_a, this->fq_b, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_sum_ab_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_sum_ab_str, fq_r_str);
}
TEST_F(FfElementTest, FfAddSucceedsGivenTwoElementsFq2) {
- const Fq2ElemStr sum_ab_data = {
- 0xF9, 0x0B, 0x7F, 0x72, 0x65, 0x94, 0x67, 0x2A, 0x9F, 0x0F, 0x2F,
- 0xBA, 0x3B, 0x2B, 0x26, 0x83, 0xBA, 0xD3, 0xFB, 0x7B, 0x9D, 0x79,
- 0x11, 0x78, 0xF6, 0x59, 0x23, 0x75, 0xEF, 0x7D, 0x46, 0x7C, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
- FfElementObj a(&this->fq2, &this->bn_a_data, sizeof(this->bn_a_data));
- FfElementObj b(&this->fq2, &this->bn_b_data, sizeof(this->bn_b_data));
+ FfElementObj a(&this->fq2, &this->bn_a_str, sizeof(this->bn_a_str));
+ FfElementObj b(&this->fq2, &this->bn_b_str, sizeof(this->bn_b_str));
FfElementObj r(&this->fq2);
EXPECT_EQ(kEpidNoErr, FfAdd(this->fq2, a, b, r));
- EXPECT_EQ(FfElementObj(&this->fq2, sum_ab_data), r);
+ EXPECT_EQ(FfElementObj(&this->fq2, this->fq2_sum_ab_str), r);
}
TEST_F(FfElementTest, FfAddSucceedsGivenTwoElementsFq6) {
- const Fq6ElemStr sum_ab_data = {
- 0xF9, 0x0B, 0x7F, 0x72, 0x65, 0x94, 0x67, 0x2A, 0x9F, 0x0F, 0x2F, 0xBA,
- 0x3B, 0x2B, 0x26, 0x83, 0xBA, 0xD3, 0xFB, 0x7B, 0x9D, 0x79, 0x11, 0x78,
- 0xF6, 0x59, 0x23, 0x75, 0xEF, 0x7D, 0x46, 0x7C, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
- FfElementObj a(&this->fq6, &this->bn_a_data, sizeof(this->bn_a_data));
- FfElementObj b(&this->fq6, &this->bn_b_data, sizeof(this->bn_b_data));
+ FfElementObj a(&this->fq6, &this->bn_a_str, sizeof(this->bn_a_str));
+ FfElementObj b(&this->fq6, &this->bn_b_str, sizeof(this->bn_b_str));
FfElementObj r(&this->fq6);
EXPECT_EQ(kEpidNoErr, FfAdd(this->fq6, a, b, r));
- EXPECT_EQ(FfElementObj(&this->fq6, sum_ab_data), r);
+ EXPECT_EQ(FfElementObj(&this->fq6, this->fq6_sum_ab_str), r);
}
TEST_F(FfElementTest, FfAddSucceedsGivenTwoElementsFq12) {
- const Fq12ElemStr sum_ab_data = {
- 0xF9, 0x0B, 0x7F, 0x72, 0x65, 0x94, 0x67, 0x2A, 0x9F, 0x0F, 0x2F, 0xBA,
- 0x3B, 0x2B, 0x26, 0x83, 0xBA, 0xD3, 0xFB, 0x7B, 0x9D, 0x79, 0x11, 0x78,
- 0xF6, 0x59, 0x23, 0x75, 0xEF, 0x7D, 0x46, 0x7C, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- FfElementObj a(&this->fq12, &this->bn_a_data, sizeof(this->bn_a_data));
- FfElementObj b(&this->fq12, &this->bn_b_data, sizeof(this->bn_b_data));
+ FfElementObj a(&this->fq12, &this->bn_a_str, sizeof(this->bn_a_str));
+ FfElementObj b(&this->fq12, &this->bn_b_str, sizeof(this->bn_b_str));
FfElementObj r(&this->fq12);
EXPECT_EQ(kEpidNoErr, FfAdd(this->fq12, a, b, r));
- EXPECT_EQ(FfElementObj(&this->fq12, sum_ab_data), r);
+ EXPECT_EQ(FfElementObj(&this->fq12, this->fq12_sum_ab_str), r);
}
-///////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////
// FfInv
TEST_F(FfElementTest, FfInvFailsGivenNullPointer) {
- EXPECT_EQ(kEpidBadArgErr, FfInv(nullptr, (this->fq_a), this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfInv(this->fq, nullptr, this->fq_r));
+ EXPECT_EQ(kEpidBadArgErr, FfInv(nullptr, (this->fq_a), this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfInv(this->fq, nullptr, this->fq_result));
EXPECT_EQ(kEpidBadArgErr, FfInv(this->fq, this->fq_a, nullptr));
}
TEST_F(FfElementTest, FfInvFailsGivenArgumentsMismatch) {
- EXPECT_EQ(kEpidBadArgErr, FfInv(this->fq12, this->fq_a, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfInv(this->fq, this->fq12_a, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfInv(this->fq, this->fq_a, this->fq12_r));
+ EXPECT_EQ(kEpidBadArgErr, FfInv(this->fq12, this->fq_a, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfInv(this->fq, this->fq12_g, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfInv(this->fq, this->fq_a, this->fq12_result));
}
TEST_F(FfElementTest, FfInvFailsGivenElementZero) {
- EXPECT_EQ(kEpidDivByZeroErr, FfInv(this->fq, this->fq_zero, this->fq_r));
+ EXPECT_EQ(kEpidDivByZeroErr, FfInv(this->fq, this->fq_0, this->fq_result));
}
TEST_F(FfElementTest, FfInvSucceedsGivenElementOne) {
- FqElemStr fq_r_data;
+ FqElemStr fq_r_str;
- EXPECT_EQ(kEpidNoErr, FfInv(this->fq, this->fq_one, this->fq_r));
+ EXPECT_EQ(kEpidNoErr, FfInv(this->fq, this->fq_1, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_one_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_1_str, fq_r_str);
}
TEST_F(FfElementTest, FfInvSucceedsGivenAnElement) {
- FqElemStr fq_r_data;
+ FqElemStr fq_r_str;
- EXPECT_EQ(kEpidNoErr, FfInv(this->fq, this->fq_a, this->fq_r));
+ EXPECT_EQ(kEpidNoErr, FfInv(this->fq, this->fq_a, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_inv_a_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_inv_a_str, fq_r_str);
}
-///////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////
// FfExp
TEST_F(FfElementTest, FfExpFailsGivenNullPointer) {
EXPECT_EQ(kEpidBadArgErr,
- FfExp(nullptr, this->fq_a, this->exponent_b, this->fq_r));
+ FfExp(nullptr, this->fq_a, this->bn_a, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfExp(this->fq, nullptr, this->exponent_b, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfExp(this->fq, this->fq_a, nullptr, this->fq_r));
+ FfExp(this->fq, nullptr, this->bn_a, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfExp(this->fq, this->fq_a, this->exponent_b, nullptr));
+ FfExp(this->fq, this->fq_a, nullptr, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfExp(this->fq, this->fq_a, this->bn_a, nullptr));
}
TEST_F(FfElementTest, FfExpFailsGivenArgumentsMismatch) {
EXPECT_EQ(kEpidBadArgErr,
- FfExp(this->fq12, this->fq_a, this->exponent_zero, this->fq_r));
+ FfExp(this->fq12, this->fq_a, this->bn_0, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfExp(this->fq, this->fq12_a, this->exponent_zero, this->fq_r));
+ FfExp(this->fq, this->fq12_g, this->bn_0, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfExp(this->fq, this->fq_a, this->exponent_zero, this->fq12_r));
+ FfExp(this->fq, this->fq_a, this->bn_0, this->fq12_result));
}
TEST_F(FfElementTest, FfExpSucceedsGivenElementZero) {
- FqElemStr fq_r_data;
+ FqElemStr fq_r_str;
EXPECT_EQ(kEpidNoErr,
- FfExp(this->fq, this->fq_zero, this->exponent_b, this->fq_r));
+ FfExp(this->fq, this->fq_0, this->bn_a, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_zero_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_0_str, fq_r_str);
}
TEST_F(FfElementTest, FfExpSucceedsGivenExponentZero) {
- FqElemStr fq_r_data;
+ FqElemStr fq_r_str;
EXPECT_EQ(kEpidNoErr,
- FfExp(this->fq, this->fq_a, this->exponent_zero, this->fq_r));
+ FfExp(this->fq, this->fq_a, this->bn_0, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_one_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_1_str, fq_r_str);
}
TEST_F(FfElementTest, FfExpSucceedsGivenElementOne) {
- FqElemStr fq_r_data;
+ FqElemStr fq_r_str;
EXPECT_EQ(kEpidNoErr,
- FfExp(this->fq, this->fq_one, this->exponent_b, this->fq_r));
+ FfExp(this->fq, this->fq_1, this->bn_a, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_one_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_1_str, fq_r_str);
}
TEST_F(FfElementTest, FfExpSucceedsGivenExponentOne) {
- FqElemStr fq_r_data;
+ FqElemStr fq_r_str;
EXPECT_EQ(kEpidNoErr,
- FfExp(this->fq, this->fq_a, this->exponent_one, this->fq_r));
+ FfExp(this->fq, this->fq_a, this->bn_1, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_a_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_a_str, fq_r_str);
}
TEST_F(FfElementTest, FfExpSucceedsGivenAnElement) {
- FqElemStr fq_r_data;
+ FqElemStr fq_r_str;
EXPECT_EQ(kEpidNoErr,
- FfExp(this->fq, this->fq_a, this->exponent_b, this->fq_r));
+ FfExp(this->fq, this->fq_a, this->bn_a, this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_exp_ab_data, fq_r_data);
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_exp_ab_str, fq_r_str);
Fq12ElemStr fq12_r_str;
- const Fq12ElemStr fq12_a_str = {
- 0xe4, 0xca, 0x0b, 0xa8, 0x9c, 0x70, 0xe2, 0x20, 0x24, 0xd9, 0x8f, 0x09,
- 0x12, 0x79, 0x55, 0x44, 0x8c, 0x58, 0x42, 0x8f, 0x18, 0x97, 0x0a, 0xc3,
- 0x0a, 0x40, 0x68, 0x0e, 0x1e, 0x21, 0x7f, 0xb4, 0x73, 0xcf, 0x8d, 0x54,
- 0x68, 0xae, 0x1c, 0xc4, 0x95, 0x01, 0xe3, 0x52, 0x33, 0xfe, 0x69, 0xb5,
- 0x23, 0x45, 0xef, 0xff, 0x79, 0x14, 0xef, 0x98, 0xa8, 0x4e, 0xb1, 0x2e,
- 0xe1, 0x15, 0x81, 0x0c, 0x9f, 0x65, 0x90, 0x6a, 0x53, 0xd7, 0xf6, 0x73,
- 0x08, 0xda, 0x45, 0x11, 0xde, 0xcf, 0xed, 0x4c, 0x8c, 0x21, 0x02, 0xf5,
- 0x3f, 0x97, 0xb6, 0xb2, 0xf5, 0xc6, 0x58, 0xfc, 0x9a, 0xa6, 0xbb, 0xf9,
- 0x3c, 0xd8, 0xfc, 0x86, 0x09, 0x1c, 0x16, 0xa4, 0x6f, 0x5e, 0x7a, 0x81,
- 0x01, 0xf9, 0x8a, 0x6d, 0x38, 0xb5, 0xc9, 0x5f, 0xe9, 0x7d, 0x6f, 0x46,
- 0x92, 0x49, 0x5b, 0xb8, 0x61, 0x03, 0x6f, 0x5e, 0xda, 0x53, 0xcb, 0x62,
- 0xcd, 0x82, 0x63, 0x96, 0xc7, 0xc0, 0x39, 0xa4, 0x31, 0xee, 0x15, 0x26,
- 0x1c, 0xe6, 0x4e, 0xe4, 0xb4, 0x40, 0xfa, 0x65, 0xa3, 0xf4, 0x73, 0x03,
- 0x85, 0x84, 0x41, 0xf9, 0x77, 0xf3, 0x90, 0xdc, 0x88, 0x26, 0xbd, 0x27,
- 0x9a, 0x9d, 0x37, 0xf0, 0x80, 0xee, 0x02, 0x1d, 0x3e, 0x4f, 0x88, 0xed,
- 0x8f, 0x89, 0x90, 0xf1, 0x6d, 0x5d, 0x70, 0x49, 0x99, 0x07, 0x61, 0x22,
- 0x43, 0x52, 0xba, 0xee, 0xa8, 0xe9, 0x8e, 0x2e, 0x83, 0x30, 0x41, 0x85,
- 0xe3, 0x51, 0xb0, 0x8c, 0x86, 0x31, 0xec, 0x02, 0x76, 0xe8, 0x41, 0x1f,
- 0x88, 0xbc, 0x39, 0xa2, 0xe4, 0xc1, 0x34, 0xa7, 0x1d, 0x5f, 0x8c, 0x23,
- 0x0f, 0xf0, 0xdc, 0xcd, 0xba, 0x67, 0xd5, 0x78, 0xd6, 0x8d, 0x32, 0x6a,
- 0xc1, 0x7f, 0x6f, 0x97, 0xcf, 0x46, 0xf0, 0x04, 0x7b, 0xe3, 0x5a, 0xee,
- 0x31, 0xc4, 0xc0, 0x79, 0x96, 0xbc, 0x01, 0x78, 0x9f, 0xbe, 0x8b, 0xba,
- 0x59, 0x22, 0xfb, 0x64, 0x1b, 0x37, 0x5c, 0x33, 0x57, 0xaf, 0x83, 0x5a,
- 0x96, 0xea, 0x56, 0xaa, 0x6e, 0x9c, 0xfa, 0xe6, 0xf9, 0xdf, 0xd8, 0x44,
- 0xbb, 0x4e, 0xbf, 0xa8, 0xec, 0x0f, 0x16, 0xa8, 0x59, 0x1f, 0x49, 0xf4,
- 0x8c, 0x80, 0x6c, 0x52, 0x7f, 0x74, 0x94, 0xc2, 0xe3, 0x29, 0x34, 0x9c,
- 0x97, 0xb9, 0x5e, 0xed, 0xfd, 0x59, 0x9d, 0xd4, 0x83, 0xfb, 0xc2, 0xad,
- 0x72, 0xe8, 0xf3, 0x68, 0x43, 0xd0, 0xd4, 0xdc, 0xb2, 0x36, 0xc1, 0xdb,
- 0x03, 0x29, 0xee, 0x8c, 0x1a, 0x10, 0xd7, 0xfb, 0xc2, 0xea, 0xda, 0xba,
- 0x42, 0x18, 0xe6, 0xe4, 0x63, 0x41, 0x6e, 0x8c, 0xb3, 0x14, 0x68, 0x9a,
- 0x0f, 0x64, 0x87, 0x16, 0x02, 0xa3, 0x59, 0xf4, 0x60, 0x80, 0x04, 0x2b,
- 0xa4, 0xe6, 0x10, 0x2d, 0x61, 0x59, 0x14, 0xfe, 0xaf, 0x84, 0xa0, 0x67,
- };
- BigNumStr exponent_b_str = {
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf0, 0xcd, 0x46, 0xe5, 0xf2,
- 0x5e, 0xee, 0x71, 0xa4, 0x9e, 0x0c, 0xdc, 0x65, 0xfb, 0x12, 0x99,
- 0x92, 0x1a, 0xf6, 0x2d, 0x53, 0x6c, 0xd1, 0x0b, 0x50, 0x0c,
- };
- const Fq12ElemStr fq12_exp_ab_str = {
- 0xe4, 0xca, 0x0b, 0xa8, 0x9c, 0x70, 0xe2, 0x20, 0x24, 0xd9, 0x8f, 0x09,
- 0x12, 0x79, 0x55, 0x44, 0x8c, 0x58, 0x42, 0x8f, 0x18, 0x97, 0x0a, 0xc3,
- 0x0a, 0x40, 0x68, 0x0e, 0x1e, 0x21, 0x7f, 0xb4, 0x73, 0xcf, 0x8d, 0x54,
- 0x68, 0xae, 0x1c, 0xc4, 0x95, 0x01, 0xe3, 0x52, 0x33, 0xfe, 0x69, 0xb5,
- 0x23, 0x45, 0xef, 0xff, 0x79, 0x14, 0xef, 0x98, 0xa8, 0x4e, 0xb1, 0x2e,
- 0xe1, 0x15, 0x81, 0x0c, 0x9f, 0x65, 0x90, 0x6a, 0x53, 0xd7, 0xf6, 0x73,
- 0x08, 0xda, 0x45, 0x11, 0xde, 0xcf, 0xed, 0x4c, 0x8c, 0x21, 0x02, 0xf5,
- 0x3f, 0x97, 0xb6, 0xb2, 0xf5, 0xc6, 0x58, 0xfc, 0x9a, 0xa6, 0xbb, 0xf9,
- 0x3c, 0xd8, 0xfc, 0x86, 0x09, 0x1c, 0x16, 0xa4, 0x6f, 0x5e, 0x7a, 0x81,
- 0x01, 0xf9, 0x8a, 0x6d, 0x38, 0xb5, 0xc9, 0x5f, 0xe9, 0x7d, 0x6f, 0x46,
- 0x92, 0x49, 0x5b, 0xb8, 0x61, 0x03, 0x6f, 0x5e, 0xda, 0x53, 0xcb, 0x62,
- 0xcd, 0x82, 0x63, 0x96, 0xc7, 0xc0, 0x39, 0xa4, 0x31, 0xee, 0x15, 0x26,
- 0x1c, 0xe6, 0x4e, 0xe4, 0xb4, 0x40, 0xfa, 0x65, 0xa3, 0xf4, 0x73, 0x03,
- 0x85, 0x84, 0x41, 0xf9, 0x77, 0xf3, 0x90, 0xdc, 0x88, 0x26, 0xbd, 0x27,
- 0x9a, 0x9d, 0x37, 0xf0, 0x80, 0xee, 0x02, 0x1d, 0x3e, 0x4f, 0x88, 0xed,
- 0x8f, 0x89, 0x90, 0xf1, 0x6d, 0x5d, 0x70, 0x49, 0x99, 0x07, 0x61, 0x22,
- 0xbc, 0xad, 0x45, 0x11, 0x57, 0x13, 0x62, 0x9e, 0xc3, 0xb5, 0xb0, 0xd9,
- 0x0b, 0x1f, 0xf4, 0x12, 0x86, 0xaa, 0x79, 0xf8, 0x9b, 0xaf, 0xc9, 0x63,
- 0x4a, 0x6c, 0xf4, 0x38, 0xca, 0x11, 0xfb, 0x6c, 0xe2, 0xa0, 0x73, 0xdc,
- 0xf0, 0x0c, 0x13, 0xff, 0x8c, 0x7e, 0x1c, 0xe6, 0x17, 0xe4, 0x72, 0x34,
- 0x4b, 0x5c, 0xf6, 0x63, 0x43, 0x51, 0x1a, 0x7e, 0x57, 0x45, 0xd2, 0xed,
- 0x7d, 0x0e, 0x6f, 0x9a, 0x69, 0x43, 0xfe, 0x87, 0x60, 0x3e, 0x65, 0x12,
- 0xed, 0xc2, 0xf6, 0xfa, 0xd3, 0x3a, 0x48, 0x6b, 0xb5, 0x2c, 0xe2, 0xa0,
- 0x7b, 0xad, 0xb3, 0xd8, 0x64, 0x8c, 0x32, 0xf4, 0xb4, 0xf3, 0x57, 0xcf,
- 0x44, 0xb1, 0x40, 0x57, 0x13, 0xed, 0xda, 0x24, 0xed, 0xc6, 0xa8, 0x6a,
- 0x61, 0xf1, 0x38, 0x4c, 0x8d, 0x67, 0xd1, 0x38, 0x2f, 0x6e, 0xd5, 0xe6,
- 0x3b, 0x6f, 0xce, 0xed, 0xb1, 0x79, 0x92, 0x3f, 0x7c, 0x04, 0x3d, 0x52,
- 0x8d, 0x13, 0xfd, 0x65, 0x03, 0x15, 0x1d, 0x82, 0x3c, 0x3a, 0xe2, 0xc4,
- 0x09, 0xb2, 0x77, 0x6e, 0xf8, 0x87, 0x32, 0x87, 0x10, 0x3e, 0x53, 0x21,
- 0x6c, 0xba, 0x49, 0x2f, 0x9c, 0xbe, 0x91, 0x73, 0x4c, 0xe8, 0x88, 0x33,
- 0x37, 0x81, 0x6b, 0x48, 0xeb, 0xce, 0x4a, 0xaa, 0xac, 0x5c, 0x61, 0xcf,
- 0x6d, 0xb1, 0xfa, 0x55, 0x71, 0xd0, 0x18, 0xdc, 0xff, 0x4e, 0x8f, 0xac,
- };
-
- THROW_ON_EPIDERR(ReadFfElement(this->fq12, &(fq12_a_str), sizeof(fq12_a_str),
- this->fq12_a));
- THROW_ON_EPIDERR(
- ReadBigNum(&exponent_b_str, sizeof(exponent_b_str), this->exponent_b));
+
+ BigNumObj bn_pm1(sizeof(this->fp_pm1_str), this->fp_pm1_str);
EXPECT_EQ(kEpidNoErr,
- FfExp(this->fq12, this->fq12_a, this->exponent_b, this->fq12_r));
- THROW_ON_EPIDERR(WriteFfElement(this->fq12, this->fq12_r, &fq12_r_str,
+ FfExp(this->fq12, this->fq12_k, bn_pm1, this->fq12_result));
+ THROW_ON_EPIDERR(WriteFfElement(this->fq12, this->fq12_result, &fq12_r_str,
sizeof(fq12_r_str)));
- EXPECT_EQ(fq12_exp_ab_str, fq12_r_str);
+ EXPECT_EQ(this->fq12_mul_gb_str, fq12_r_str);
}
-///////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////
// FfHash
TEST_F(FfElementTest, FfHashFailsGivenArgumentsMismatch) {
- EXPECT_EQ(kEpidBadArgErr, FfHash(this->fq12, this->sha_msg,
- sizeof(this->sha_msg), kSha256, this->fq_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfHash(this->fq12, this->sha_msg, sizeof(this->sha_msg), kSha256,
+ this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
FfHash(this->fq, this->sha_msg, sizeof(this->sha_msg), kSha256,
- this->fq12_r));
+ this->fq12_result));
}
TEST_F(FfElementTest, FfHashFailsGivenNullPointer) {
uint8_t const msg[] = {0};
EXPECT_EQ(kEpidBadArgErr,
- FfHash(nullptr, msg, sizeof(msg), kSha256, this->fq_r));
+ FfHash(nullptr, msg, sizeof(msg), kSha256, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfHash(this->fq, nullptr, sizeof(msg), kSha256, this->fq_r));
+ FfHash(this->fq, nullptr, sizeof(msg), kSha256, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
FfHash(this->fq, msg, sizeof(msg), kSha256, nullptr));
}
@@ -1248,110 +2135,97 @@ TEST_F(FfElementTest, FfHashFailsGivenNullPointer) {
TEST_F(FfElementTest, FfHashFailsGivenUnsupportedHashAlg) {
uint8_t const msg[] = {0};
EXPECT_EQ(kEpidHashAlgorithmNotSupported,
- FfHash(this->fq, msg, sizeof(msg), kSha512_256, this->fq_r));
+ FfHash(this->fq, msg, sizeof(msg), kSha512_256, this->fq_result));
EXPECT_EQ(kEpidHashAlgorithmNotSupported,
- FfHash(this->fq, msg, sizeof(msg), kSha3_256, this->fq_r));
+ FfHash(this->fq, msg, sizeof(msg), kSha3_256, this->fq_result));
EXPECT_EQ(kEpidHashAlgorithmNotSupported,
- FfHash(this->fq, msg, sizeof(msg), kSha3_384, this->fq_r));
+ FfHash(this->fq, msg, sizeof(msg), kSha3_384, this->fq_result));
EXPECT_EQ(kEpidHashAlgorithmNotSupported,
- FfHash(this->fq, msg, sizeof(msg), kSha3_512, this->fq_r));
+ FfHash(this->fq, msg, sizeof(msg), kSha3_512, this->fq_result));
}
TEST_F(FfElementTest, FfHashFailsGivenIncorrectMsgLen) {
uint8_t const msg[] = {0};
size_t len_greater_int_max = (size_t)INT_MAX + 1;
- EXPECT_EQ(kEpidBadArgErr, FfHash(this->fq, msg, 0, kSha256, this->fq_r));
+ EXPECT_EQ(kEpidBadArgErr, FfHash(this->fq, msg, 0, kSha256, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
FfHash(this->fq, msg, std::numeric_limits<size_t>::max(), kSha256,
- this->fq_r));
- EXPECT_EQ(kEpidBadArgErr,
- FfHash(this->fq, msg, len_greater_int_max, kSha256, this->fq_r));
+ this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfHash(this->fq, msg, len_greater_int_max, kSha256,
+ this->fq_result));
}
TEST_F(FfElementTest, FfHashWorksGivenSHA256HashAlg) {
- FqElemStr fq_r_data;
- EXPECT_EQ(kEpidNoErr,
- FfHash(this->fq, sha_msg, sizeof(sha_msg), kSha256, this->fq_r));
+ FqElemStr fq_r_str;
+ EXPECT_EQ(kEpidNoErr, FfHash(this->fq, sha_msg, sizeof(sha_msg), kSha256,
+ this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_r_sha256, fq_r_data)
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_abc_sha256_str, fq_r_str)
<< "FfHash: Hash element does not match to reference value";
}
TEST_F(FfElementTest, FfHashWorksGivenSHA384HashAlg) {
- FqElemStr fq_r_data;
- EXPECT_EQ(kEpidNoErr,
- FfHash(this->fq, sha_msg, sizeof(sha_msg), kSha384, this->fq_r));
+ FqElemStr fq_r_str;
+ EXPECT_EQ(kEpidNoErr, FfHash(this->fq, sha_msg, sizeof(sha_msg), kSha384,
+ this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_r_sha384, fq_r_data)
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_abc_sha384_str, fq_r_str)
<< "FfHash: Hash element does not match to reference value";
}
TEST_F(FfElementTest, FfHashWorksGivenSHA512HashAlg) {
- FqElemStr fq_r_data;
- EXPECT_EQ(kEpidNoErr,
- FfHash(this->fq, sha_msg, sizeof(sha_msg), kSha512, this->fq_r));
+ FqElemStr fq_r_str;
+ EXPECT_EQ(kEpidNoErr, FfHash(this->fq, sha_msg, sizeof(sha_msg), kSha512,
+ this->fq_result));
THROW_ON_EPIDERR(
- WriteFfElement(this->fq, this->fq_r, &fq_r_data, sizeof(fq_r_data)));
- EXPECT_EQ(this->fq_r_sha512, fq_r_data)
+ WriteFfElement(this->fq, this->fq_result, &fq_r_str, sizeof(fq_r_str)));
+ EXPECT_EQ(this->fq_abc_sha512_str, fq_r_str)
<< "FfHash: Hash element does not match to reference value";
}
-///////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////
// FfMultiExp
TEST_F(FfElementTest, FfMultiExpFailsGivenArgumentsMismatch) {
FfElement const* p[] = {this->fq_a, this->fq_b};
- FfElement const* p12[] = {this->fq12_a, this->fq12_b};
- const BigNumStr bnm0 = {0};
- const BigNumStr bnm1 = {0};
- BigNumStr const* b[] = {&bnm0, &bnm1};
- EXPECT_EQ(kEpidBadArgErr, FfMultiExp(this->fq12, p, b, 2, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfMultiExp(this->fq, p12, b, 2, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfMultiExp(this->fq, p, b, 2, this->fq12_r));
+ FfElement const* p12[] = {this->fq12_g, this->fq12_h};
+ BigNumStr const* b[] = {&this->bn_0_str, &this->bn_0_str};
+ EXPECT_EQ(kEpidBadArgErr, FfMultiExp(this->fq12, p, b, 2, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfMultiExp(this->fq, p12, b, 2, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfMultiExp(this->fq, p, b, 2, this->fq12_result));
}
TEST_F(FfElementTest, FfMultiExpFailsGivenNullPointer) {
FfElement const* p[] = {this->fq_a, this->fq_b};
FfElement const* p_withnull[] = {nullptr, this->fq_b};
- const BigNumStr bnm0 = {{0x11, 0xFF, 0xFF, 0xFF, 0x4F, 0x59, 0xB1, 0xD3, 0x6B,
- 0x08, 0xFF, 0xFF, 0x0B, 0xF3, 0xAF, 0x27, 0xFF, 0xB8,
- 0xFF, 0xFF, 0x98, 0xFF, 0xEB, 0xFF, 0xF2, 0x6A, 0xFF,
- 0xFF, 0xEA, 0x31, 0xFF, 0xFF}};
- const BigNumStr bnm1 = {{0xE2, 0xFF, 0x03, 0x1D, 0xFF, 0x19, 0x81, 0xCB, 0xFF,
- 0xFF, 0x6B, 0xD5, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xBD,
- 0xFF, 0x5A, 0xFF, 0x5C, 0x7C, 0xFF, 0x84, 0xFF, 0xFF,
- 0x8C, 0x03, 0xB2, 0x26, 0xFF}};
- BigNumStr const* b[] = {&bnm0, &bnm1};
- BigNumStr const* b_withnull[] = {nullptr, &bnm1};
+ BigNumStr const* b[] = {&fq_multi_exp_exp_2[0], &this->fq_multi_exp_exp_2[1]};
+ BigNumStr const* b_withnull[] = {nullptr, &this->fq_multi_exp_exp_2[1]};
size_t m = 2;
- EXPECT_EQ(kEpidBadArgErr, FfMultiExp(nullptr, p, b, m, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfMultiExp(this->fq, nullptr, b, m, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfMultiExp(this->fq, p, nullptr, m, this->fq_r));
+ EXPECT_EQ(kEpidBadArgErr, FfMultiExp(nullptr, p, b, m, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfMultiExp(this->fq, nullptr, b, m, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfMultiExp(this->fq, p, nullptr, m, this->fq_result));
EXPECT_EQ(kEpidBadArgErr, FfMultiExp(this->fq, p, b, m, nullptr));
- EXPECT_EQ(kEpidBadArgErr, FfMultiExp(this->fq, p_withnull, b, m, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfMultiExp(this->fq, p, b_withnull, m, this->fq_r));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfMultiExp(this->fq, p_withnull, b, m, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfMultiExp(this->fq, p, b_withnull, m, this->fq_result));
}
TEST_F(FfElementTest, FfMultiExpFailsGivenIncorrectMLen) {
FfElement const* p[] = {this->fq_a, this->fq_b};
- const BigNumStr bnm0 = {{0x11, 0xFF, 0xFF, 0xFF, 0x4F, 0x59, 0xB1, 0xD3, 0x6B,
- 0x08, 0xFF, 0xFF, 0x0B, 0xF3, 0xAF, 0x27, 0xFF, 0xB8,
- 0xFF, 0xFF, 0x98, 0xFF, 0xEB, 0xFF, 0xF2, 0x6A, 0xFF,
- 0xFF, 0xEA, 0x31, 0xFF, 0xFF}};
- const BigNumStr bnm1 = {{0xE2, 0xFF, 0x03, 0x1D, 0xFF, 0x19, 0x81, 0xCB, 0xFF,
- 0xFF, 0x6B, 0xD5, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xBD,
- 0xFF, 0x5A, 0xFF, 0x5C, 0x7C, 0xFF, 0x84, 0xFF, 0xFF,
- 0x8C, 0x03, 0xB2, 0x26, 0xFF}};
- BigNumStr const* b[] = {&bnm0, &bnm1};
+ BigNumStr const* b[] = {&this->fq_multi_exp_exp_2[0],
+ &this->fq_multi_exp_exp_2[1]};
size_t len_greater_int_max = (size_t)INT_MAX + 1;
- EXPECT_EQ(kEpidBadArgErr, FfMultiExp(this->fq, p, b, 0, this->fq_r));
+ EXPECT_EQ(kEpidBadArgErr, FfMultiExp(this->fq, p, b, 0, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
FfMultiExp(this->fq, p, b, std::numeric_limits<size_t>::max(),
- this->fq_r));
+ this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfMultiExp(this->fq, p, b, len_greater_int_max, this->fq_r));
+ FfMultiExp(this->fq, p, b, len_greater_int_max, this->fq_result));
}
TEST_F(FfElementTest, FfMultiExpWorksGivenOneExponent) {
@@ -1360,32 +2234,17 @@ TEST_F(FfElementTest, FfMultiExpWorksGivenOneExponent) {
FfElement const* p[1];
BigNumStr const* b[1];
int m = 0;
- const FqElemStr ffe[] = {{
- 0x12, 0xA6, 0x5B, 0xD6, 0x91, 0x8D, 0x50, 0xA7, 0x66, 0xEB, 0x7D, 0x52,
- 0xE3, 0x40, 0x17, 0x60, 0x7F, 0xDF, 0x6C, 0xA1, 0x2C, 0x1A, 0x37, 0xE0,
- 0x92, 0xC0, 0xF7, 0xB9, 0x76, 0xAB, 0xB1, 0x8A,
- }};
- const BigNumStr bnm[] = {{
- 0xFF, 0xFB, 0x3E, 0x5D, 0xFF, 0x9A, 0xFF, 0x02, 0x00, 0xFF, 0xFF, 0xFF,
- 0xF2, 0xE1, 0x85, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x81,
- 0xFF, 0xFD, 0xFF, 0xEB, 0xFF, 0x29, 0xA7, 0xFF,
- }};
- const FqElemStr res = {
- 0x6A, 0x21, 0xEC, 0x89, 0xCC, 0x13, 0x2F, 0x6F, 0x29, 0x1B, 0x3A,
- 0x94, 0xF6, 0xE6, 0xA8, 0xBD, 0x98, 0x25, 0x43, 0x7A, 0xDC, 0xC1,
- 0x20, 0xBA, 0x30, 0xD8, 0x1C, 0x8E, 0x79, 0xFC, 0xDA, 0x67,
- };
// prepare data for test
for (m = 0; m < 1; m++) {
- fq_exp[m] = FfElementObj(&this->fq, ffe[m]);
+ fq_exp[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_1[m]);
// initialize data for test
p[m] = fq_exp[m];
- b[m] = &bnm[m];
+ b[m] = &this->fq_multi_exp_exp_1[m];
}
// do test
EXPECT_EQ(kEpidNoErr, FfMultiExp(this->fq, p, b, 1, r));
// verify calculation is correct
- EXPECT_EQ(FfElementObj(&this->fq, res), r)
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_1), r)
<< "FfMultiExp: Finite field element does not match with reference value";
}
@@ -1395,35 +2254,16 @@ TEST_F(FfElementTest, FfMultiExpWorksGivenTwoExponents) {
FfElement const* p[2];
BigNumStr const* b[2];
int m = 0;
- const FqElemStr ffe[] = {
- {0xE6, 0x65, 0x23, 0x9B, 0xD4, 0x07, 0x16, 0x83, 0x38, 0x23, 0xB2, 0x67,
- 0x57, 0xEB, 0x0F, 0x23, 0x3A, 0xF4, 0x8E, 0xDA, 0x71, 0x5E, 0xD9, 0x98,
- 0x63, 0x98, 0x2B, 0xBC, 0x78, 0xD1, 0x94, 0xF2},
- {0xDD, 0x2B, 0xE9, 0x59, 0x24, 0xA5, 0xB3, 0xFD, 0xEB, 0xE1, 0x3C, 0xC0,
- 0x73, 0x4E, 0x99, 0xEE, 0x36, 0xF6, 0xC0, 0x1A, 0x76, 0x01, 0x0A, 0xF0,
- 0xCB, 0xB4, 0x71, 0x88, 0x95, 0xCB, 0x35, 0xBA}};
- const BigNumStr bnm[] = {
- {0x11, 0xFF, 0xFF, 0xFF, 0x4F, 0x59, 0xB1, 0xD3, 0x6B, 0x08, 0xFF, 0xFF,
- 0x0B, 0xF3, 0xAF, 0x27, 0xFF, 0xB8, 0xFF, 0xFF, 0x98, 0xFF, 0xEB, 0xFF,
- 0xF2, 0x6A, 0xFF, 0xFF, 0xEA, 0x31, 0xFF, 0xFF},
- {0xE2, 0xFF, 0x03, 0x1D, 0xFF, 0x19, 0x81, 0xCB, 0xFF, 0xFF, 0x6B, 0xD5,
- 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xBD, 0xFF, 0x5A, 0xFF, 0x5C, 0x7C, 0xFF,
- 0x84, 0xFF, 0xFF, 0x8C, 0x03, 0xB2, 0x26, 0xFF}};
- const FqElemStr res = {
- 0x8A, 0xF7, 0x96, 0x53, 0x9C, 0xC3, 0x57, 0x89, 0x50, 0xE3, 0xAB,
- 0x12, 0x62, 0xEA, 0x0C, 0xE4, 0x65, 0xA6, 0x91, 0x09, 0x93, 0x81,
- 0xFC, 0xBB, 0x0E, 0xFA, 0xC1, 0xC4, 0xDC, 0x3F, 0x0A, 0xD1,
- };
// prepare data for test
for (m = 0; m < 2; m++) {
- fq_exp[m] = FfElementObj(&this->fq, ffe[m]);
+ fq_exp[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_2[m]);
// initialize data for test
p[m] = fq_exp[m];
- b[m] = &bnm[m];
+ b[m] = &this->fq_multi_exp_exp_2[m];
}
// do test
EXPECT_EQ(kEpidNoErr, FfMultiExp(this->fq, p, b, 2, r));
- EXPECT_EQ(FfElementObj(&this->fq, res), r)
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_2), r)
<< "FfMultiExp: Finite field element does not match with reference value";
}
@@ -1433,41 +2273,16 @@ TEST_F(FfElementTest, FfMultiExpWorksGivenThreeExponents) {
FfElement const* p[3];
BigNumStr const* b[3];
int m = 0;
- const FqElemStr ffe[] = {
- {0x24, 0x9D, 0xDD, 0x1A, 0xC0, 0x07, 0x1F, 0x65, 0xDF, 0xBB, 0xC7, 0x39,
- 0x99, 0x44, 0x63, 0x8E, 0x7E, 0xB2, 0x85, 0x82, 0xC6, 0x4E, 0x2D, 0x39,
- 0xA8, 0x3F, 0x12, 0xB4, 0xE9, 0x9D, 0x67, 0x28},
- {0x6B, 0x51, 0x6B, 0x33, 0x0B, 0x2E, 0x2A, 0x94, 0x34, 0xCC, 0x7E, 0x97,
- 0xFA, 0x85, 0x51, 0x44, 0x30, 0xE5, 0xF2, 0x68, 0x23, 0x31, 0x84, 0xFF,
- 0xBB, 0x95, 0x9A, 0xB2, 0x80, 0x95, 0xC4, 0x91},
- {0x77, 0xED, 0xA2, 0x53, 0xA3, 0xBF, 0x6C, 0x58, 0x16, 0x7D, 0xEF, 0x8A,
- 0x7D, 0x38, 0x65, 0x3F, 0x92, 0xA6, 0x85, 0xD7, 0x9F, 0x80, 0xA4, 0xA1,
- 0x70, 0x02, 0xE5, 0x66, 0xF2, 0xD8, 0xD7, 0xD2}};
- const BigNumStr bnm[] = {
- {0xFF, 0xFF, 0xFF, 0xB4, 0x48, 0xFF, 0xFF, 0xFF, 0xA3, 0xFF, 0xE3, 0xFF,
- 0x61, 0xFF, 0xA2, 0x97, 0x9A, 0xFF, 0x6F, 0x04, 0xC6, 0xB9, 0xFF, 0x22,
- 0xFF, 0x20, 0x9E, 0xFF, 0x43, 0xFF, 0xFF, 0xFF},
- {0xB1, 0x19, 0xBF, 0xFF, 0x74, 0x7F, 0xCC, 0x34, 0x1E, 0x30, 0x7D, 0xC5,
- 0xC4, 0xFF, 0xE7, 0xF8, 0xFF, 0x5F, 0xFF, 0x73, 0xFF, 0x58, 0xFF, 0xD6,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEC, 0xFF, 0xFF},
- {0xFF, 0xFF, 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, 0x26, 0xA8, 0xFF, 0xFF, 0xFF,
- 0x3E, 0xFF, 0xFF, 0xFF, 0xE0, 0x4F, 0xFF, 0xE3, 0xFF, 0xFF, 0xEB, 0x04,
- 0x4B, 0xFF, 0x5D, 0x55, 0xFF, 0x2D, 0xFF, 0xFF}};
- const FqElemStr res = {
- 0x04, 0x22, 0x21, 0xE7, 0x9F, 0xE3, 0x07, 0x2F, 0xA4, 0xBB, 0x56,
- 0x84, 0xD5, 0x93, 0x4A, 0xDA, 0x5B, 0x89, 0x07, 0xBE, 0xC5, 0x5F,
- 0xE6, 0x5C, 0x18, 0xF0, 0xF8, 0x8E, 0x8E, 0x00, 0xB9, 0x87,
- };
// prepare data for test
for (m = 0; m < 3; m++) {
- fq_exp[m] = FfElementObj(&this->fq, ffe[m]);
+ fq_exp[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_3[m]);
// initialize data for test
p[m] = fq_exp[m];
- b[m] = &bnm[m];
+ b[m] = &this->fq_multi_exp_exp_3[m];
}
// do test
EXPECT_EQ(kEpidNoErr, FfMultiExp(this->fq, p, b, 3, r));
- EXPECT_EQ(FfElementObj(&this->fq, res), r)
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_3), r)
<< "FfMultiExp: Finite field element does not match with reference value";
}
@@ -1477,269 +2292,35 @@ TEST_F(FfElementTest, FfMultiExpWorksGivenFourExponents) {
FfElement const* p[4];
BigNumStr const* b[4];
int m = 0;
- const FqElemStr ffe[] = {
- {0x81, 0xEE, 0x78, 0x31, 0x4C, 0xC0, 0x3C, 0xDD, 0x16, 0x52, 0xC6, 0x7E,
- 0x07, 0x4C, 0xFE, 0xC4, 0x50, 0x63, 0x5A, 0x40, 0xC8, 0xDF, 0x94, 0x23,
- 0x1A, 0x90, 0xDD, 0x24, 0x61, 0x23, 0xDD, 0x87},
- {0x76, 0xBB, 0x2C, 0x1C, 0xB3, 0x78, 0x93, 0x7E, 0x10, 0x29, 0xC3, 0xEC,
- 0xBD, 0xA3, 0x75, 0x3A, 0xF1, 0x0B, 0xE1, 0xCA, 0xEE, 0x02, 0x58, 0x74,
- 0xC7, 0xDC, 0xB8, 0x4F, 0x3F, 0x7B, 0xA2, 0xFC},
- {0x3A, 0xD3, 0x04, 0xAA, 0x9D, 0x2A, 0xDE, 0x86, 0x56, 0x84, 0x80, 0x42,
- 0xA5, 0x68, 0xD8, 0x6E, 0x65, 0xC4, 0x08, 0x07, 0x87, 0x4B, 0xC1, 0x92,
- 0xCB, 0x68, 0x52, 0x6C, 0x5A, 0x4F, 0x7C, 0xFB},
- {0x56, 0xE7, 0xBD, 0x59, 0x54, 0xCC, 0x20, 0x16, 0xAE, 0x36, 0xD1, 0xB0,
- 0xE4, 0x82, 0x47, 0x27, 0x32, 0xD1, 0x38, 0x7C, 0x53, 0x7F, 0xDD, 0xF4,
- 0xDE, 0xFA, 0xF7, 0x0F, 0xDD, 0xDF, 0x48, 0xA9}};
- const BigNumStr bnm[] = {
- {0xFF, 0xA5, 0xC3, 0xFF, 0xFF, 0x09, 0x18, 0x18, 0x95, 0x40, 0xFF, 0xFF,
- 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0x99, 0xFF, 0x25, 0xFF, 0xFF, 0x42, 0x07,
- 0xB5, 0xFF, 0x26, 0xE0, 0x4F, 0xB5, 0xB4, 0xFF},
- {0x1F, 0xFF, 0xAA, 0xF1, 0xFF, 0xFF, 0x7E, 0xFF, 0xFF, 0xFF, 0x07, 0xFF,
- 0xE7, 0xDF, 0xFF, 0xEE, 0xFF, 0x57, 0xFF, 0xFF, 0xFF, 0xB8, 0xB3, 0x9C,
- 0xFF, 0x8A, 0x89, 0xFF, 0xFE, 0x32, 0xFF, 0xC1},
- {0x9A, 0xFF, 0xFF, 0x9B, 0xFF, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0x36, 0xF0, 0xC5, 0xAE, 0x87, 0x41, 0xFF, 0x5C, 0xDD, 0xFF, 0xFF,
- 0xFF, 0xFF, 0x59, 0xC9, 0xFF, 0x44, 0x5C, 0x58},
- {0x00, 0xFF, 0x95, 0xFF, 0x21, 0xFF, 0xFF, 0x1D, 0x1A, 0x06, 0xD3, 0xFF,
- 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xB0, 0x31, 0xFF, 0xFF, 0x1F,
- 0x61, 0x48, 0xFF, 0xFF, 0xFF, 0x17, 0xC9, 0x79}};
- const FqElemStr res = {
- 0x26, 0x2C, 0x23, 0x55, 0xD5, 0xBD, 0x7B, 0x67, 0x60, 0xFE, 0x06,
- 0x7B, 0xCC, 0xB8, 0x6B, 0xC9, 0x00, 0x81, 0xAE, 0xCB, 0xEC, 0x91,
- 0x6D, 0x1B, 0x9E, 0x1C, 0xD8, 0xC0, 0x8D, 0x3F, 0x1B, 0x20,
- };
// prepare data for test
for (m = 0; m < 4; m++) {
- fq_exp[m] = FfElementObj(&this->fq, ffe[m]);
+ fq_exp[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_4[m]);
// initialize data for test
p[m] = fq_exp[m];
- b[m] = &bnm[m];
+ b[m] = &this->fq_multi_exp_exp_4[m];
}
// do test
EXPECT_EQ(kEpidNoErr, FfMultiExp(this->fq, p, b, 4, r));
- EXPECT_EQ(FfElementObj(&this->fq, res), r)
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_4), r)
<< "FfMultiExp: Finite field element does not match with reference value";
+}
- const Fq12ElemStr ff12e[] = {
- {
- 0x2c, 0x86, 0xee, 0x80, 0x61, 0x45, 0x8f, 0xfd, 0x96, 0xc2, 0x81,
- 0x11, 0xe8, 0x96, 0xe2, 0xca, 0x21, 0x78, 0xf7, 0xa3, 0x4b, 0xba,
- 0xdc, 0x0d, 0x34, 0x8a, 0x56, 0x12, 0x67, 0x8d, 0x72, 0x37, 0xa8,
- 0xeb, 0x5f, 0x1a, 0x1b, 0xf0, 0x5c, 0xc6, 0x6f, 0xc2, 0xc5, 0x03,
- 0xc4, 0x19, 0x85, 0xa6, 0xe0, 0x64, 0xfe, 0x71, 0x51, 0x46, 0xdf,
- 0xc2, 0xd6, 0xf9, 0xa0, 0xd6, 0x84, 0xc1, 0x4a, 0x11, 0xe0, 0x33,
- 0xa3, 0x1c, 0x73, 0x71, 0x62, 0x17, 0x10, 0x4c, 0xd8, 0x3e, 0xee,
- 0xa1, 0x38, 0x9f, 0xa5, 0xfb, 0x1d, 0xc4, 0x9d, 0x2f, 0x08, 0x4a,
- 0xd3, 0x61, 0x37, 0x79, 0xab, 0xc1, 0x37, 0x7e, 0x90, 0xfd, 0xa3,
- 0x9d, 0x0c, 0x81, 0x52, 0xf4, 0x58, 0x24, 0x89, 0xc4, 0xf4, 0xd4,
- 0x82, 0x33, 0xca, 0x5d, 0xb4, 0x58, 0xa6, 0x1e, 0xe6, 0x2b, 0x86,
- 0xef, 0x56, 0xc4, 0x4f, 0x9b, 0x27, 0x3c, 0x96, 0x54, 0xda, 0xb5,
- 0x32, 0x23, 0x8a, 0x93, 0xcc, 0xa5, 0x7d, 0x28, 0x4a, 0x97, 0xa4,
- 0x30, 0xa8, 0x11, 0xbc, 0x43, 0x22, 0x7f, 0x02, 0x73, 0x0e, 0x5c,
- 0x63, 0x52, 0x2f, 0x4b, 0x5f, 0x7d, 0xc3, 0x1e, 0x30, 0xae, 0xac,
- 0x8c, 0xe8, 0x93, 0xd6, 0xce, 0x05, 0x4b, 0x6b, 0x21, 0x01, 0x14,
- 0x4a, 0x1d, 0xd9, 0x08, 0x0c, 0xa1, 0x4c, 0x0b, 0x44, 0x28, 0x9c,
- 0xb6, 0xd1, 0x96, 0xbd, 0x07, 0x8b, 0x3d, 0x77, 0x4e, 0xbd, 0x7b,
- 0x9f, 0x65, 0x20, 0xdb, 0xa0, 0x95, 0x25, 0x44, 0x44, 0x7a, 0xe3,
- 0xdc, 0xdd, 0x2f, 0xba, 0x75, 0x16, 0x19, 0xcb, 0x90, 0x31, 0x79,
- 0x38, 0xb6, 0x1a, 0x82, 0xbc, 0xb6, 0x85, 0xcd, 0xeb, 0xb9, 0x13,
- 0x43, 0xea, 0xc2, 0x78, 0xbe, 0x25, 0x97, 0x1c, 0x6e, 0x18, 0x55,
- 0xfd, 0xcb, 0xe6, 0x7e, 0x1e, 0x92, 0xad, 0x48, 0xe7, 0xa7, 0x02,
- 0x87, 0x0b, 0x8f, 0x16, 0xd7, 0x8e, 0x95, 0x8e, 0x62, 0x0a, 0xad,
- 0x20, 0x2d, 0x6a, 0x2b, 0x4e, 0x6f, 0xc1, 0xc2, 0x63, 0xba, 0x82,
- 0xf3, 0x8c, 0xd0, 0xa2, 0x09, 0xd3, 0xe5, 0xba, 0x1f, 0x65, 0x35,
- 0xd0, 0x1c, 0x09, 0x98, 0x47, 0x65, 0xf2, 0x90, 0xd4, 0xe2, 0xd0,
- 0x6f, 0x9e, 0xdb, 0xa2, 0x14, 0x9b, 0x4b, 0x3d, 0xaa, 0x75, 0x25,
- 0x67, 0xf4, 0x7d, 0x77, 0xe9, 0x24, 0xed, 0xee, 0x1b, 0x07, 0x7f,
- 0xe0, 0x7a, 0x34, 0xb7, 0x3c, 0x36, 0x0d, 0xce, 0xf9, 0xbf, 0xf9,
- 0xe5, 0x09, 0x86, 0xeb, 0xb9, 0xd8, 0xc4, 0x67, 0xc5, 0xcd, 0xd4,
- 0xbc, 0xee, 0x45, 0xf7, 0x11, 0x68, 0xd9, 0x23, 0x6d, 0xd6, 0x24,
- 0x6e, 0x97, 0x83, 0x13, 0x76, 0x9f, 0x35, 0xea, 0xb8, 0x47, 0x57,
- 0x9b, 0x74, 0x47, 0x1f, 0x19, 0xe7, 0x97, 0x74, 0x1b, 0xb1, 0xa0,
- 0xf3, 0x92, 0xdc, 0x35, 0xfd, 0x7f, 0x4f, 0x07, 0x22, 0xac,
- },
- {
- 0xfd, 0x05, 0x41, 0x27, 0x00, 0x7a, 0xad, 0x17, 0xbc, 0xbf, 0x22,
- 0x5e, 0xda, 0xeb, 0x7d, 0xaa, 0xb5, 0x2d, 0xc8, 0x61, 0xfe, 0x2c,
- 0xba, 0x9e, 0x54, 0x43, 0x94, 0xdc, 0xfd, 0x0e, 0x6d, 0x6d, 0xa1,
- 0x5e, 0x05, 0xa5, 0x05, 0x55, 0xe7, 0x2a, 0xf7, 0x53, 0x37, 0x2c,
- 0xef, 0x44, 0x95, 0xca, 0x2c, 0xe8, 0xeb, 0xae, 0x61, 0x05, 0x33,
- 0xe7, 0x0f, 0x30, 0x67, 0xbe, 0xcd, 0xb2, 0x93, 0x44, 0x44, 0x31,
- 0x96, 0x4d, 0x72, 0x61, 0xcd, 0x23, 0x1f, 0x7b, 0x57, 0x33, 0x39,
- 0xac, 0x57, 0x53, 0x3d, 0x70, 0x57, 0xb3, 0x6d, 0xd5, 0x8a, 0x89,
- 0x30, 0xbc, 0xed, 0x29, 0x19, 0x39, 0x6e, 0x6a, 0x80, 0x21, 0x1e,
- 0xb7, 0x84, 0xb1, 0x0a, 0xa4, 0xd0, 0xff, 0x59, 0x31, 0xe9, 0xba,
- 0x39, 0xf7, 0x81, 0xdf, 0x1b, 0x7b, 0xd9, 0xdb, 0x02, 0x17, 0xbe,
- 0x97, 0x63, 0xbd, 0x37, 0x14, 0xb8, 0x8b, 0x6c, 0xcc, 0x5b, 0xa3,
- 0xee, 0xc8, 0x0b, 0x7b, 0xf5, 0xde, 0xbc, 0xb7, 0xa8, 0x25, 0x35,
- 0xae, 0x0b, 0x30, 0x96, 0x33, 0x52, 0x13, 0xa3, 0x89, 0x3a, 0x2e,
- 0xa4, 0x7e, 0x5f, 0x4e, 0xb1, 0xf7, 0x87, 0xba, 0x08, 0xb0, 0xfb,
- 0xcb, 0x31, 0xa6, 0x2b, 0x3e, 0xe7, 0xc4, 0xcc, 0xa5, 0x14, 0x61,
- 0xc9, 0x18, 0xfc, 0x74, 0x59, 0x06, 0xf4, 0xad, 0xfc, 0x2d, 0x0c,
- 0x7d, 0xdb, 0x2a, 0xec, 0xd4, 0xe9, 0x31, 0x31, 0x50, 0x25, 0xb7,
- 0x0c, 0x48, 0x30, 0xd5, 0x78, 0xb1, 0x10, 0xea, 0x5d, 0xaa, 0xaa,
- 0x03, 0xec, 0xe3, 0x0f, 0x36, 0xa6, 0xbc, 0x18, 0x3a, 0x76, 0x87,
- 0xa3, 0xe9, 0x33, 0xda, 0x48, 0x78, 0x93, 0x64, 0x72, 0x9b, 0x2a,
- 0x1e, 0x0d, 0x50, 0x9f, 0x6f, 0xbd, 0xa5, 0x18, 0xb1, 0xa8, 0x14,
- 0x9a, 0x1b, 0xb9, 0xb4, 0x2c, 0x1f, 0x46, 0xb8, 0x9b, 0x7a, 0xc7,
- 0x84, 0xae, 0x27, 0xd1, 0xec, 0x1c, 0xec, 0x69, 0xf0, 0x35, 0x40,
- 0x77, 0x7e, 0x27, 0x22, 0x36, 0x38, 0xdf, 0x15, 0xc2, 0xb3, 0xb8,
- 0x63, 0x4a, 0x6e, 0x68, 0x8c, 0xc1, 0x39, 0x3c, 0x02, 0x4c, 0x2a,
- 0x31, 0x18, 0x2e, 0x35, 0xf5, 0xca, 0xa2, 0xe9, 0x24, 0x92, 0xd5,
- 0xe5, 0x2e, 0x5d, 0x1c, 0x94, 0xd9, 0xc7, 0xf0, 0x22, 0x16, 0x20,
- 0xa8, 0x37, 0xdd, 0x0e, 0xab, 0x1b, 0x5e, 0x8b, 0xee, 0x81, 0xc6,
- 0x17, 0xf1, 0x29, 0x5d, 0x1d, 0x6f, 0x53, 0x5a, 0xb2, 0x20, 0x88,
- 0x3d, 0xa4, 0x98, 0x81, 0xa4, 0xef, 0x11, 0x1b, 0x64, 0x9e, 0x2c,
- 0x95, 0xdd, 0xd7, 0x57, 0xb3, 0x95, 0xca, 0x40, 0xb9, 0x0d, 0x62,
- 0xdc, 0x86, 0x8b, 0xe6, 0xd3, 0x7b, 0x33, 0xea, 0x50, 0x25, 0xe2,
- 0x77, 0xe3, 0x0b, 0x5a, 0xc8, 0x81, 0xfc, 0xae, 0x74, 0x38, 0x69,
- 0x07, 0xf8, 0x4e, 0xd7, 0x85, 0xa6, 0x2f, 0x13, 0xb7, 0x0a,
- },
- {
- 0xf4, 0xdc, 0xac, 0x02, 0xc0, 0x95, 0x07, 0xdc, 0x12, 0x4f, 0x3a,
- 0x01, 0xa9, 0xee, 0xf3, 0x07, 0x46, 0x94, 0x47, 0x15, 0x63, 0xa6,
- 0x8e, 0x0a, 0xc4, 0xc4, 0xe4, 0x23, 0x85, 0x63, 0xe4, 0x4e, 0x9a,
- 0x9e, 0x9f, 0xc1, 0xed, 0x4e, 0x94, 0x10, 0xfe, 0x7d, 0x90, 0xef,
- 0x82, 0x21, 0xac, 0x67, 0x24, 0x99, 0x86, 0xc6, 0x85, 0x8b, 0x19,
- 0x9a, 0x9b, 0x90, 0x0b, 0xa4, 0x90, 0x78, 0x34, 0x53, 0xb1, 0x4c,
- 0xba, 0xb8, 0xc6, 0x40, 0x71, 0xc2, 0x17, 0x51, 0x05, 0xc2, 0xc9,
- 0xbc, 0x03, 0x10, 0x4e, 0xfe, 0x2f, 0x94, 0xed, 0x13, 0x35, 0x7b,
- 0x20, 0xa6, 0x59, 0x44, 0x81, 0xd0, 0xec, 0x12, 0x74, 0xa2, 0x4a,
- 0xfb, 0xd7, 0x28, 0x70, 0xad, 0xde, 0x86, 0x2f, 0xef, 0xf9, 0x50,
- 0x5d, 0x1e, 0x46, 0x3b, 0x82, 0x1c, 0x6a, 0xc9, 0x3f, 0x32, 0xae,
- 0xcd, 0x93, 0x2c, 0xa5, 0x70, 0x45, 0x24, 0x38, 0x19, 0x79, 0xbf,
- 0x35, 0xf5, 0xc1, 0x53, 0x06, 0x42, 0xaa, 0x6b, 0xf3, 0xb7, 0x8f,
- 0xfb, 0xfc, 0x28, 0x46, 0x9a, 0x65, 0x2a, 0x45, 0x3d, 0x4c, 0x3c,
- 0x6b, 0x9c, 0x44, 0xc5, 0x82, 0xb8, 0x80, 0xf9, 0xb3, 0x44, 0x95,
- 0x17, 0x39, 0x01, 0x6b, 0xd6, 0x1d, 0x73, 0x22, 0x94, 0xff, 0x6f,
- 0x7b, 0x4e, 0xb6, 0xa4, 0xe4, 0x6c, 0xa8, 0xdb, 0x38, 0x74, 0x0b,
- 0xdb, 0xfa, 0x14, 0x99, 0x39, 0x28, 0xee, 0xfc, 0x62, 0xe5, 0x33,
- 0x9c, 0x63, 0xd5, 0x7f, 0x2c, 0x4c, 0xf4, 0x76, 0x4c, 0xf7, 0x7b,
- 0x27, 0x2c, 0xa9, 0xb9, 0x01, 0x3c, 0x58, 0xf7, 0xce, 0xaa, 0x0a,
- 0x21, 0xc0, 0xa3, 0xa7, 0xa1, 0x85, 0xbc, 0xfe, 0x55, 0xfc, 0x3b,
- 0x9b, 0x3d, 0xef, 0x14, 0x85, 0x8a, 0x4e, 0x5e, 0x1f, 0x4f, 0xc9,
- 0x86, 0xb8, 0xf2, 0xb2, 0xe3, 0xe7, 0x7e, 0x87, 0xe2, 0x20, 0xd7,
- 0x85, 0x2c, 0xd1, 0x13, 0xcb, 0x46, 0xad, 0xd7, 0xec, 0x66, 0xd5,
- 0x2b, 0x6e, 0x87, 0x92, 0x13, 0xb2, 0x7d, 0x18, 0x69, 0x35, 0xcb,
- 0xf1, 0xbe, 0xc2, 0x9d, 0xeb, 0xf5, 0x00, 0x0b, 0x73, 0xa3, 0xfd,
- 0x51, 0xdc, 0x91, 0x0e, 0xe4, 0x46, 0x41, 0x23, 0xdd, 0x85, 0x53,
- 0x0c, 0xae, 0xf9, 0x74, 0xcf, 0x1c, 0x32, 0x22, 0xda, 0x4a, 0x14,
- 0x80, 0x71, 0x51, 0x23, 0xc3, 0xab, 0x7e, 0xec, 0x77, 0xcc, 0x59,
- 0x12, 0x1c, 0x0f, 0x65, 0x6b, 0xd8, 0x41, 0xe0, 0x1b, 0x51, 0x9c,
- 0x89, 0x26, 0xab, 0x88, 0x63, 0x5d, 0xbb, 0x95, 0x92, 0x5b, 0x2c,
- 0x1d, 0xde, 0xc1, 0x88, 0xd6, 0xf1, 0x02, 0x48, 0xe0, 0xe2, 0xd1,
- 0x40, 0x7f, 0xf1, 0x23, 0x4a, 0xcf, 0x36, 0xd5, 0xcf, 0x76, 0x0d,
- 0x00, 0x2a, 0xf7, 0x5f, 0x31, 0xbb, 0xcc, 0x46, 0x84, 0x07, 0x04,
- 0x98, 0x9c, 0xb4, 0x31, 0x15, 0x2d, 0x91, 0xf6, 0x29, 0x33,
- },
- {
- 0xa8, 0x8e, 0x9a, 0xf9, 0x25, 0x12, 0x98, 0xe2, 0xc3, 0x61, 0x2e,
- 0xe8, 0xd6, 0xa6, 0x77, 0x16, 0x49, 0x04, 0x75, 0x69, 0xd1, 0x83,
- 0x2d, 0x3f, 0x2a, 0x79, 0xb6, 0x9b, 0xc9, 0x1d, 0x03, 0x90, 0x2a,
- 0xd8, 0x11, 0x9f, 0x26, 0x36, 0xe7, 0xe9, 0x3a, 0x05, 0x4c, 0x15,
- 0x49, 0x93, 0xda, 0xe9, 0xd0, 0x5a, 0xe4, 0x8d, 0x8a, 0xfa, 0x04,
- 0xf1, 0x20, 0x84, 0x56, 0xec, 0x3c, 0x27, 0x19, 0x5c, 0xf1, 0xaf,
- 0xbf, 0xf6, 0x0e, 0x58, 0x84, 0x2d, 0x94, 0x11, 0xf4, 0xb5, 0xf4,
- 0x14, 0x51, 0xb0, 0x90, 0x46, 0x1a, 0x81, 0xed, 0xcf, 0x91, 0x66,
- 0x58, 0xa6, 0x36, 0x3a, 0x52, 0x18, 0x5a, 0xc1, 0x08, 0x4c, 0x99,
- 0xd3, 0xdc, 0xce, 0x7f, 0xce, 0x78, 0xe0, 0x38, 0x87, 0x32, 0xf1,
- 0x80, 0x3c, 0x7b, 0x67, 0xaa, 0x6f, 0xdd, 0xe0, 0xfc, 0xcb, 0xd0,
- 0xb0, 0x3a, 0x59, 0x52, 0x2a, 0x84, 0xe4, 0xf8, 0x4a, 0xff, 0x50,
- 0xa0, 0x65, 0xc4, 0xee, 0xf4, 0x9c, 0xaa, 0x34, 0x46, 0xf9, 0xd2,
- 0x6c, 0xa1, 0x61, 0x71, 0x49, 0x32, 0x25, 0x84, 0x54, 0x90, 0x44,
- 0xbe, 0xa4, 0x0b, 0xf7, 0xfe, 0x26, 0x81, 0x63, 0x73, 0xf7, 0x2f,
- 0xf2, 0xfa, 0x24, 0x52, 0xa4, 0xd9, 0x4c, 0xc1, 0xa7, 0xa5, 0xc3,
- 0x03, 0x36, 0x13, 0x9b, 0x16, 0x45, 0x16, 0xcb, 0x4b, 0x99, 0x38,
- 0xf3, 0x6d, 0xc8, 0x7e, 0xab, 0xb3, 0x53, 0xdf, 0xb6, 0x82, 0x60,
- 0x12, 0x11, 0x36, 0x69, 0x0e, 0x05, 0x31, 0x8e, 0xcf, 0xd7, 0x3f,
- 0x32, 0xe7, 0x95, 0x84, 0x1d, 0xc8, 0xb5, 0xbe, 0x49, 0x17, 0x9d,
- 0xcf, 0xa9, 0x5a, 0x2a, 0xc4, 0x11, 0x86, 0xe8, 0x6c, 0x02, 0x56,
- 0xb0, 0x25, 0x2f, 0xa0, 0x06, 0xb3, 0x62, 0xb2, 0x11, 0xaf, 0xbe,
- 0xa4, 0xe8, 0x61, 0x64, 0x85, 0xfb, 0xeb, 0x1c, 0xf1, 0xbc, 0x2c,
- 0xae, 0x10, 0x51, 0x16, 0xa6, 0xc0, 0xb3, 0x86, 0x8e, 0x6d, 0x79,
- 0xb6, 0xbd, 0xde, 0x1e, 0x26, 0x06, 0x46, 0x65, 0x82, 0x84, 0x5a,
- 0x97, 0xd3, 0xb7, 0x93, 0x78, 0x6b, 0x9d, 0x14, 0x33, 0x94, 0x43,
- 0x34, 0x04, 0x45, 0xd1, 0x47, 0xd4, 0x2f, 0x17, 0xcf, 0xf1, 0xdd,
- 0xea, 0x11, 0x52, 0xae, 0x01, 0x88, 0x3a, 0x10, 0xee, 0x5c, 0x16,
- 0xcd, 0xb5, 0x48, 0xe9, 0x16, 0x2c, 0x70, 0xb4, 0x1e, 0x19, 0x38,
- 0xe0, 0x18, 0xe9, 0xae, 0xc5, 0xda, 0x74, 0x41, 0x2d, 0x70, 0x07,
- 0x60, 0x37, 0x27, 0x66, 0xf7, 0x00, 0xbb, 0x79, 0x51, 0xf3, 0x7c,
- 0x8a, 0x2b, 0xb5, 0x69, 0x6e, 0x10, 0x1f, 0xe0, 0x0a, 0x5e, 0xbe,
- 0xb4, 0x4e, 0x0e, 0x02, 0x59, 0xb5, 0xcb, 0x4a, 0x6a, 0x86, 0x8b,
- 0xcc, 0xa2, 0x13, 0xa0, 0xe9, 0xf2, 0x5c, 0xb0, 0x23, 0xb2, 0x15,
- 0xf9, 0xbb, 0x43, 0xc1, 0x54, 0xf4, 0xc8, 0xab, 0x16, 0xa6,
- },
- };
- const BigNumStr bnm12[] = {
- {
- 0x14, 0x92, 0xd1, 0x1f, 0xac, 0x90, 0x4d, 0xc3, 0x3e, 0xb8, 0xa7,
- 0xfe, 0x35, 0x98, 0xda, 0x94, 0xd6, 0xf3, 0x27, 0x29, 0x4b, 0x70,
- 0xcf, 0x0f, 0xda, 0x14, 0x97, 0xa1, 0x9b, 0x6b, 0x24, 0x08,
- },
- {
- 0x76, 0x8d, 0xe5, 0xc2, 0xab, 0x78, 0xd9, 0x76, 0x98, 0xff, 0x92,
- 0xea, 0x95, 0x58, 0xc5, 0x0c, 0x6f, 0x1b, 0x35, 0xc4, 0xbf, 0x4a,
- 0x9e, 0xc2, 0x6a, 0xec, 0xe2, 0xf6, 0xaf, 0xeb, 0xac, 0x06,
- },
- {
- 0x50, 0x38, 0x60, 0x31, 0xab, 0x05, 0xcc, 0xb1, 0xc2, 0x06, 0xa0,
- 0xd7, 0x92, 0x12, 0xbd, 0x17, 0x81, 0xb9, 0x7e, 0x07, 0x9b, 0xd4,
- 0x3b, 0x2d, 0x3c, 0x15, 0x3a, 0x5a, 0xf1, 0xc0, 0xc4, 0x75,
- },
- {
- 0xa1, 0x3f, 0xea, 0x99, 0x7e, 0xc7, 0x65, 0xf5, 0x41, 0xa6, 0xd6,
- 0xd3, 0x77, 0xec, 0x27, 0xf8, 0x6c, 0x18, 0x28, 0x69, 0x97, 0x08,
- 0x0e, 0x63, 0x5a, 0xda, 0xfe, 0x9f, 0xd1, 0x4a, 0x61, 0x4f,
- },
- };
- const Fq12ElemStr fq12_expected_result_str = {
- 0x3a, 0x30, 0x33, 0xa2, 0x14, 0xdf, 0xdc, 0x70, 0x48, 0xf3, 0xba, 0x3f,
- 0xce, 0xfc, 0x69, 0x24, 0xae, 0xa1, 0xf3, 0xcf, 0xd8, 0x77, 0x69, 0x38,
- 0x38, 0xf4, 0x8e, 0xfb, 0x51, 0xfb, 0x10, 0x7c, 0x73, 0xb4, 0xee, 0xf9,
- 0x76, 0xbb, 0x45, 0xec, 0x07, 0x24, 0x23, 0xa3, 0x38, 0x64, 0x39, 0x4c,
- 0x03, 0x94, 0xf5, 0xee, 0x5f, 0xc9, 0x83, 0x4f, 0xd1, 0xa6, 0x4a, 0x05,
- 0x25, 0x0c, 0x46, 0x33, 0xd4, 0x40, 0x47, 0xae, 0xec, 0xda, 0x30, 0xf9,
- 0xe1, 0x28, 0xfb, 0xb1, 0x4c, 0x62, 0xfb, 0x6c, 0x90, 0x0d, 0xb1, 0xec,
- 0xaf, 0x2d, 0x95, 0x64, 0x11, 0x93, 0xda, 0x8e, 0xb8, 0x7d, 0xe4, 0xa3,
- 0x8e, 0xa6, 0x9b, 0xaa, 0x58, 0xd5, 0xdc, 0x59, 0x1a, 0x51, 0x53, 0x47,
- 0x30, 0x1c, 0x2b, 0xb0, 0xbb, 0x57, 0x57, 0x0a, 0x8c, 0x5f, 0x62, 0x9c,
- 0x52, 0x28, 0xc0, 0x25, 0x27, 0xae, 0xcd, 0x36, 0xbf, 0x2d, 0x03, 0xb1,
- 0x33, 0xfd, 0x24, 0x81, 0x3c, 0x91, 0x43, 0x90, 0x0c, 0x20, 0xc4, 0xe3,
- 0x69, 0x3f, 0xa9, 0xa2, 0x7c, 0xc2, 0x48, 0x28, 0x1b, 0xf0, 0x81, 0x1f,
- 0x2b, 0x8f, 0x8d, 0x43, 0x38, 0x18, 0x12, 0xa3, 0x89, 0xf1, 0xd7, 0x60,
- 0x89, 0x68, 0x6a, 0xc4, 0xcc, 0x5d, 0xf4, 0xce, 0x43, 0x95, 0x84, 0xcd,
- 0x01, 0x55, 0xb8, 0x5d, 0x24, 0x50, 0xcd, 0xe3, 0x68, 0x1c, 0xff, 0x59,
- 0x0d, 0xac, 0xcb, 0xe7, 0x9d, 0x68, 0x0f, 0x4a, 0xaf, 0xeb, 0xb5, 0xfb,
- 0xf9, 0xb1, 0x58, 0x80, 0xd5, 0x71, 0x53, 0x26, 0x2e, 0x9c, 0xce, 0x10,
- 0xac, 0xd2, 0x0a, 0xeb, 0xb4, 0x5c, 0xc8, 0xd7, 0x16, 0x26, 0x66, 0x71,
- 0xdd, 0x67, 0xba, 0xdb, 0x35, 0x76, 0x64, 0xc6, 0x0b, 0x0b, 0x07, 0x4b,
- 0x65, 0xa2, 0xf7, 0x68, 0x9e, 0xfe, 0xe8, 0xe3, 0xa7, 0x09, 0x79, 0xc5,
- 0xdf, 0x5e, 0x9c, 0xec, 0xee, 0x83, 0x59, 0xb5, 0x89, 0x81, 0xa2, 0x87,
- 0xd7, 0x75, 0x65, 0x90, 0xde, 0x78, 0x37, 0x59, 0x04, 0x9b, 0x50, 0xc3,
- 0xba, 0x90, 0x09, 0x15, 0xab, 0x17, 0xc5, 0xbf, 0x5b, 0xb9, 0xe4, 0x6c,
- 0xa9, 0xb1, 0x49, 0x76, 0x25, 0x74, 0x5d, 0x9c, 0x78, 0xc5, 0x09, 0xee,
- 0xeb, 0xeb, 0x9d, 0x1c, 0x6c, 0xc0, 0x27, 0x9d, 0x66, 0xe6, 0x7f, 0x31,
- 0xcd, 0xb0, 0x8a, 0xe4, 0x9e, 0xbd, 0x70, 0x18, 0x88, 0xa1, 0x08, 0x39,
- 0xa2, 0x48, 0xa5, 0x98, 0xb6, 0xad, 0x10, 0x54, 0x07, 0xcd, 0xfc, 0x6d,
- 0xb1, 0x02, 0xff, 0xe3, 0x92, 0xd7, 0x9d, 0x48, 0xfb, 0xce, 0x88, 0x46,
- 0x92, 0x07, 0x02, 0xba, 0xee, 0xeb, 0xae, 0x88, 0xb1, 0x4e, 0xd0, 0xf2,
- 0xce, 0xd7, 0x57, 0x07, 0xd4, 0x39, 0xd2, 0x7d, 0x1a, 0x0c, 0xef, 0xf2,
- 0x84, 0x84, 0x22, 0x8a, 0xb1, 0x80, 0x0d, 0xdc, 0x64, 0x86, 0xfd, 0x70,
- };
-
+TEST_F(FfElementTest, FfMultiExpWorksGivenFourFq12Exponents) {
FfElementObj r12(&this->fq12);
FfElementObj fq12_exp[4];
-
+ FfElement const* p[4];
+ BigNumStr const* b[4];
+ int m = 0;
// prepare data for test
for (m = 0; m < 4; m++) {
- fq12_exp[m] = FfElementObj(&this->fq12, ff12e[m]);
+ fq12_exp[m] = FfElementObj(&this->fq12, this->fq12_multi_exp_base_4[m]);
// initialize data for test
p[m] = fq12_exp[m];
- b[m] = &bnm12[m];
+ b[m] = &this->fq12_multi_exp_exp_4[m];
}
// do test
EXPECT_EQ(kEpidNoErr, FfMultiExp(this->fq12, p, b, 4, r12));
- EXPECT_EQ(FfElementObj(&this->fq12, fq12_expected_result_str), r12)
+ EXPECT_EQ(FfElementObj(&this->fq12, this->fq12_multi_exp_res_4), r12)
<< "FfMultiExp: Finite field element does not match with reference value";
}
@@ -1749,55 +2330,16 @@ TEST_F(FfElementTest, FfMultiExpWorksGivenFiveExponents) {
FfElement const* p[5];
BigNumStr const* b[5];
int m = 0;
- const FqElemStr ffe[] = {
- {0x7B, 0x26, 0x96, 0x84, 0x04, 0x0D, 0x6F, 0x10, 0xAA, 0x7F, 0xD0, 0x0C,
- 0x41, 0x3A, 0x68, 0x48, 0xBF, 0x3D, 0xB5, 0xCE, 0x3A, 0x9C, 0xA9, 0x10,
- 0xA4, 0x67, 0x7C, 0xC0, 0x41, 0x52, 0xCA, 0xE7},
- {0x2E, 0xD9, 0xEF, 0x86, 0xB6, 0x32, 0x72, 0x89, 0x37, 0xCF, 0x16, 0xCE,
- 0x27, 0x15, 0x7A, 0x95, 0xCF, 0x94, 0x1B, 0xF3, 0xCE, 0x49, 0x20, 0x29,
- 0x9A, 0x61, 0x2E, 0x0A, 0xF5, 0xE1, 0xDC, 0x9F},
- {0xE0, 0x19, 0x37, 0x44, 0xA7, 0x45, 0x49, 0x7E, 0x19, 0x02, 0x09, 0x78,
- 0xBE, 0xA4, 0x65, 0x60, 0x7A, 0xF5, 0xC8, 0xAF, 0x97, 0x5E, 0xDA, 0x3A,
- 0xB4, 0x16, 0x70, 0x31, 0xE3, 0xB4, 0x18, 0xA8},
- {0xBC, 0x92, 0x29, 0x92, 0x14, 0xD3, 0x3F, 0xB8, 0xB8, 0x8C, 0x41, 0xDF,
- 0xC5, 0xA1, 0xCA, 0x77, 0xE5, 0x73, 0xFE, 0xA7, 0xAC, 0x81, 0x66, 0x11,
- 0x5A, 0x6D, 0x7D, 0x97, 0x13, 0x92, 0x8D, 0x1D},
- {0xE1, 0xA0, 0x0D, 0xDC, 0x8F, 0x20, 0xF5, 0x2D, 0x1D, 0x1F, 0xBD, 0x24,
- 0x8C, 0xC2, 0x26, 0x06, 0x89, 0xE9, 0x46, 0xA9, 0xD2, 0x44, 0x8F, 0x1A,
- 0x8D, 0xAF, 0x20, 0x73, 0x60, 0x0B, 0x66, 0x9C}};
-
- const BigNumStr bnm[] = {
- {0x78, 0xE6, 0x3F, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0x6E,
- 0xE9, 0xFF, 0x4F, 0xFF, 0x23, 0xFF, 0x67, 0xB4, 0xED, 0xEE, 0xD7, 0xC6,
- 0xFF, 0x4B, 0x0B, 0x6F, 0x1F, 0xD6, 0xFD, 0x7F},
- {0xA1, 0x87, 0xFF, 0x1B, 0xFF, 0x85, 0x68, 0xFF, 0x1C, 0xFF, 0xD5, 0xFF,
- 0x95, 0x73, 0xFF, 0xFF, 0xFF, 0x9E, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x5E,
- 0x9E, 0x62, 0xFF, 0xFF, 0x97, 0xFF, 0xFF, 0xF3},
- {0x2E, 0xE8, 0x1E, 0x35, 0xFF, 0x82, 0x0B, 0x99, 0xEC, 0x30, 0x2B, 0xCE,
- 0xEC, 0x83, 0x05, 0xFF, 0x9E, 0x3C, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF,
- 0x57, 0x26, 0x5B, 0x6C, 0xFF, 0xE6, 0x94, 0xFF},
- {0xFF, 0xFF, 0xFF, 0xFF, 0x94, 0xFF, 0xFF, 0x79, 0xFC, 0xFF, 0x83, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xA9, 0xFF, 0x2F, 0x6B, 0xD1, 0xE7, 0xFF, 0xFF,
- 0xFF, 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
- {0x63, 0x53, 0x53, 0xFF, 0xFF, 0xFF, 0x4F, 0xFF, 0xFF, 0xFF, 0x09, 0xFF,
- 0xC0, 0xD8, 0x17, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x45,
- 0xFF, 0x3A, 0xFF, 0xFF, 0xFF, 0xFF, 0x60, 0x06}};
-
- const FqElemStr res = {
- 0x8F, 0x6D, 0x54, 0xCA, 0x00, 0x85, 0xD8, 0x78, 0xA4, 0x45, 0x36,
- 0x7C, 0x23, 0xD0, 0x3C, 0x2D, 0x20, 0x78, 0xD9, 0xD7, 0xF1, 0xC3,
- 0x99, 0xD9, 0xD3, 0x0A, 0x0E, 0x86, 0x98, 0xC2, 0xA7, 0x97,
- };
// prepare data for test
for (m = 0; m < 5; m++) {
- fq_exp[m] = FfElementObj(&this->fq, ffe[m]);
+ fq_exp[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_5[m]);
// initialize data for test
p[m] = fq_exp[m];
- b[m] = &bnm[m];
+ b[m] = &this->fq_multi_exp_exp_5[m];
}
// do test
EXPECT_EQ(kEpidNoErr, FfMultiExp(this->fq, p, b, 5, r));
- EXPECT_EQ(FfElementObj(&this->fq, res), r)
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_5), r)
<< "FfMultiExp: Finite field element does not match with reference value";
}
@@ -1807,119 +2349,295 @@ TEST_F(FfElementTest, FfMultiExpWorksGivenSixExponents) {
FfElement const* p[6];
BigNumStr const* b[6];
int m = 0;
- const FqElemStr ffe[] = {
- {0x75, 0x18, 0x6A, 0x3D, 0xCC, 0x76, 0x33, 0x92, 0xD0, 0x57, 0xDA, 0xE0,
- 0x37, 0x6F, 0x71, 0xD5, 0x9E, 0x7E, 0x65, 0xED, 0xD7, 0xFD, 0x82, 0xC0,
- 0x6C, 0x83, 0x60, 0x30, 0xC1, 0xD3, 0x3D, 0x4D},
- {0xF5, 0x3A, 0x20, 0xAB, 0x22, 0x47, 0x07, 0xAE, 0x71, 0xC1, 0x91, 0x73,
- 0xEF, 0x1F, 0x1D, 0x76, 0x2E, 0xEE, 0x0D, 0xDE, 0xD9, 0xF8, 0x5C, 0x85,
- 0xC7, 0x5B, 0x93, 0x88, 0xF6, 0xFF, 0x4C, 0xA5},
- {0x21, 0xB3, 0x5E, 0xE8, 0xD2, 0xDA, 0x14, 0x1C, 0xB5, 0x2C, 0xFC, 0x61,
- 0x9D, 0xEB, 0x65, 0x87, 0xBB, 0x5B, 0xBC, 0xFD, 0x37, 0x54, 0x6B, 0xDC,
- 0xD9, 0xFA, 0x7A, 0xCD, 0x18, 0x7E, 0x8B, 0x89},
- {0x70, 0xB7, 0x19, 0x42, 0xB4, 0x41, 0x2C, 0x1B, 0xBD, 0x7B, 0x25, 0x06,
- 0xA2, 0x95, 0xB5, 0xB6, 0x70, 0xDF, 0x58, 0x71, 0xCA, 0x09, 0x12, 0x66,
- 0x5A, 0x7B, 0xF0, 0x5F, 0x43, 0x69, 0x32, 0xF6},
- {0x3D, 0x57, 0xE8, 0x3F, 0x1E, 0x39, 0x2B, 0xE5, 0xD0, 0xCF, 0xA9, 0xC8,
- 0x72, 0x10, 0x7F, 0xC5, 0x4F, 0xAE, 0xE9, 0x73, 0x28, 0x4C, 0xFC, 0x3F,
- 0xD5, 0xFF, 0xE8, 0xCF, 0x2C, 0xEB, 0x33, 0xD3},
- {0x51, 0x80, 0x15, 0x1C, 0xE6, 0x9C, 0x4B, 0x80, 0x40, 0xBA, 0x40, 0x29,
- 0x3A, 0x86, 0xA8, 0xB2, 0x66, 0x08, 0x97, 0x8D, 0xEB, 0x8B, 0xA7, 0x93,
- 0xE3, 0x49, 0xC6, 0xC0, 0x46, 0x93, 0xC1, 0x75}};
- const BigNumStr bnm[] = {
- {0xFF, 0xFF, 0xFF, 0x49, 0x50, 0xFF, 0x19, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF,
- 0xFF, 0x28, 0x4A, 0x0E, 0xFF, 0x74, 0xFF, 0xC7, 0xFF, 0xD9, 0x81, 0xFF,
- 0xFF, 0xFF, 0xD5, 0x2C, 0xFF, 0xFF, 0xFF, 0xAE},
- {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0x0C, 0x03, 0xFF, 0x95, 0xFF, 0x11, 0x9D, 0xFF, 0x9B, 0xFF, 0xFF,
- 0x68, 0x44, 0xFF, 0xC9, 0xFF, 0x10, 0xC7, 0xBF},
- {0x64, 0xFF, 0x89, 0x4A, 0xFF, 0x20, 0xFF, 0xE7, 0xFF, 0x36, 0x23, 0xDD,
- 0xFF, 0xFF, 0xFC, 0xFF, 0x6B, 0xFF, 0xFF, 0xFF, 0xFF, 0x48, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x94, 0xD3, 0x59, 0xBE},
- {0x0F, 0xFF, 0x76, 0xA5, 0x9E, 0x02, 0x9B, 0xFF, 0xA1, 0xFF, 0xC2, 0xFF,
- 0x9D, 0xFF, 0x23, 0xFF, 0xFF, 0xFF, 0xFF, 0x6B, 0x81, 0x2A, 0xFF, 0x98,
- 0xFF, 0xFF, 0xB9, 0xFF, 0xB7, 0x78, 0xE6, 0xFF},
- {0xAF, 0xF3, 0xFF, 0x3C, 0xA8, 0xFF, 0xB9, 0x3A, 0xFF, 0xFF, 0xFF, 0x70,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x85, 0xFF, 0xFF, 0x52,
- 0xFF, 0x41, 0x10, 0x62, 0xFF, 0x51, 0x35, 0xFF},
- {0xFF, 0xFF, 0xFF, 0xFF, 0xD3, 0xC3, 0xD9, 0xFF, 0xFF, 0x3A, 0x44, 0x88,
- 0x04, 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, 0x64, 0xFF, 0xFF, 0x52, 0xFF, 0x7D,
- 0x6B, 0x24, 0x6E, 0xFF, 0xFF, 0xFF, 0xA7, 0x71}};
- const FqElemStr res = {
- 0xFB, 0x89, 0x4F, 0xBB, 0x91, 0xEE, 0xD6, 0x57, 0x2D, 0x34, 0xF9,
- 0x0B, 0xE3, 0xEB, 0x71, 0x1D, 0x63, 0x74, 0x96, 0x3B, 0xD4, 0x02,
- 0x2F, 0x08, 0xDB, 0x95, 0x6A, 0x40, 0x68, 0xD4, 0x55, 0x76,
- };
// prepare data for test
for (m = 0; m < 6; m++) {
- fq_exp[m] = FfElementObj(&this->fq, ffe[m]);
+ fq_exp[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_6[m]);
// initialize data for test
p[m] = fq_exp[m];
- b[m] = &bnm[m];
+ b[m] = &this->fq_multi_exp_exp_6[m];
}
// do test
EXPECT_EQ(kEpidNoErr, FfMultiExp(this->fq, p, b, 6, r));
- EXPECT_EQ(FfElementObj(&this->fq, res), r)
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_6), r)
<< "FfMultiExp: Finite field element does not match with reference value";
}
+
+///////////////////////////////////////////////////////////////////////
+// FfMultiExpBn
+
+TEST_F(FfElementTest, FfMultiExpBnFailsGivenArgumentsMismatch) {
+ FfElement const* p[] = {this->fq_a, this->fq_b};
+ FfElement const* p12[] = {this->fq12_g, this->fq12_h};
+ BigNum const* b[] = {bn_0, bn_0};
+ EXPECT_EQ(kEpidBadArgErr, FfMultiExpBn(this->fq12, p, b, 2, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfMultiExpBn(this->fq, p12, b, 2, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfMultiExpBn(this->fq, p, b, 2, this->fq12_result));
+}
+
+TEST_F(FfElementTest, FfMultiExpBnFailsGivenNullPointer) {
+ FfElement const* p[] = {this->fq_a, this->fq_b};
+ FfElement const* p_withnull[] = {nullptr, this->fq_b};
+ BigNumObj bn_exp_0(this->fq_multi_exp_exp_2[0]);
+ BigNumObj bn_exp_1(this->fq_multi_exp_exp_2[1]);
+ BigNum const* b[] = {bn_exp_0, bn_exp_1};
+ BigNum const* b_withnull[] = {nullptr, bn_exp_1};
+ size_t m = 2;
+ EXPECT_EQ(kEpidBadArgErr, FfMultiExpBn(nullptr, p, b, m, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfMultiExpBn(this->fq, nullptr, b, m, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfMultiExpBn(this->fq, p, nullptr, m, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfMultiExpBn(this->fq, p, b, m, nullptr));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfMultiExpBn(this->fq, p_withnull, b, m, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfMultiExpBn(this->fq, p, b_withnull, m, this->fq_result));
+}
+
+TEST_F(FfElementTest, FfMultiExpBnFailsGivenIncorrectMLen) {
+ FfElement const* p[] = {this->fq_a, this->fq_b};
+ BigNumObj bn_exp_0(this->fq_multi_exp_exp_2[0]);
+ BigNumObj bn_exp_1(this->fq_multi_exp_exp_2[1]);
+ BigNum const* b[] = {bn_exp_0, bn_exp_1};
+ size_t len_greater_int_max = (size_t)INT_MAX + 1;
+ EXPECT_EQ(kEpidBadArgErr, FfMultiExpBn(this->fq, p, b, 0, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfMultiExpBn(this->fq, p, b, std::numeric_limits<size_t>::max(),
+ this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfMultiExpBn(this->fq, p, b, len_greater_int_max, this->fq_result));
+}
+
+TEST_F(FfElementTest, FfMultiExpBnWorksGivenOneExponent) {
+ const int items = 1;
+ FfElementObj r(&this->fq);
+ FfElementObj fq_base[1];
+ BigNumObj bn_exp[1];
+ FfElement const* p[1];
+ BigNum const* b[1];
+ int m = 0;
+ // prepare data for test
+ for (m = 0; m < items; m++) {
+ fq_base[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_1[m]);
+ bn_exp[m] = BigNumObj(this->fq_multi_exp_exp_1[m]);
+ // initialize data for test
+ p[m] = fq_base[m];
+ b[m] = bn_exp[m];
+ }
+ // do test
+ EXPECT_EQ(kEpidNoErr, FfMultiExpBn(this->fq, p, b, items, r));
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_1), r)
+ << "FfMultiExpBn: Finite field element does not "
+ "match with reference value";
+}
+
+TEST_F(FfElementTest, FfMultiExpBnWorksGivenTwoExponents) {
+ const int items = 2;
+ FfElementObj r(&this->fq);
+ FfElementObj fq_base[2];
+ BigNumObj bn_exp[2];
+ FfElement const* p[2];
+ BigNum const* b[2];
+ int m = 0;
+ // prepare data for test
+ for (m = 0; m < items; m++) {
+ fq_base[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_2[m]);
+ bn_exp[m] = BigNumObj(this->fq_multi_exp_exp_2[m]);
+ // initialize data for test
+ p[m] = fq_base[m];
+ b[m] = bn_exp[m];
+ }
+ // do test
+ EXPECT_EQ(kEpidNoErr, FfMultiExpBn(this->fq, p, b, items, r));
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_2), r)
+ << "FfMultiExpBn: Finite field element does not "
+ "match with reference value";
+}
+TEST_F(FfElementTest, FfMultiExpBnWorksGivenThreeExponents) {
+ const int items = 3;
+ FfElementObj r(&this->fq);
+ FfElementObj fq_base[3];
+ BigNumObj bn_exp[3];
+ FfElement const* p[3];
+ BigNum const* b[3];
+ int m = 0;
+ // prepare data for test
+ for (m = 0; m < items; m++) {
+ fq_base[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_3[m]);
+ bn_exp[m] = BigNumObj(this->fq_multi_exp_exp_3[m]);
+ // initialize data for test
+ p[m] = fq_base[m];
+ b[m] = bn_exp[m];
+ }
+ // do test
+ EXPECT_EQ(kEpidNoErr, FfMultiExpBn(this->fq, p, b, items, r));
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_3), r)
+ << "FfMultiExpBn: Finite field element does not "
+ "match with reference value";
+}
+
+TEST_F(FfElementTest, FfMultiExpBnWorksGivenFourExponents) {
+ const int items = 4;
+ FfElementObj r(&this->fq);
+ FfElementObj fq_base[4];
+ BigNumObj bn_exp[4];
+ FfElement const* p[4];
+ BigNum const* b[4];
+ int m = 0;
+ // prepare data for test
+ for (m = 0; m < items; m++) {
+ fq_base[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_4[m]);
+ bn_exp[m] = BigNumObj(this->fq_multi_exp_exp_4[m]);
+ // initialize data for test
+ p[m] = fq_base[m];
+ b[m] = bn_exp[m];
+ }
+ // do test
+ EXPECT_EQ(kEpidNoErr, FfMultiExpBn(this->fq, p, b, items, r));
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_4), r)
+ << "FfMultiExpBn: Finite field element does not "
+ "match with reference value";
+}
+
+TEST_F(FfElementTest, DISABLED_FfMultiExpBnWorksGivenFourFq12Exponents) {
+ const int items = 4;
+ FfElementObj fq12_r(&this->fq12);
+ FfElementObj fq12_base[4];
+ BigNumObj fq12_bn_exp[4];
+ FfElement const* fq12_p[4];
+ BigNum const* fq12_b[4];
+ int m = 0;
+ // prepare data for test
+ for (m = 0; m < items; m++) {
+ fq12_base[m] = FfElementObj(&this->fq12, this->fq12_multi_exp_base_4[m]);
+ fq12_bn_exp[m] = BigNumObj(this->fq12_multi_exp_exp_4[m]);
+ // initialize data for test
+ fq12_p[m] = fq12_base[m];
+ fq12_b[m] = fq12_bn_exp[m];
+ }
+ // do test
+ EXPECT_EQ(kEpidNoErr,
+ FfMultiExpBn(this->fq12, fq12_p, fq12_b, items, fq12_r));
+ EXPECT_EQ(FfElementObj(&this->fq12, this->fq_multi_exp_res_4), fq12_r)
+ << "FfMultiExpBn: Finite field element does not "
+ "match with reference value";
+}
+
+TEST_F(FfElementTest, FfMultiExpBnWorksGivenFiveExponents) {
+ const int items = 5;
+ FfElementObj r(&this->fq);
+ FfElementObj fq_base[5];
+ BigNumObj bn_exp[5];
+ FfElement const* p[5];
+ BigNum const* b[5];
+ int m = 0;
+ // prepare data for test
+ for (m = 0; m < items; m++) {
+ fq_base[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_5[m]);
+ bn_exp[m] = BigNumObj(this->fq_multi_exp_exp_5[m]);
+ // initialize data for test
+ p[m] = fq_base[m];
+ b[m] = bn_exp[m];
+ }
+ // do test
+ EXPECT_EQ(kEpidNoErr, FfMultiExpBn(this->fq, p, b, items, r));
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_5), r)
+ << "FfSscmMultiExp: Finite field element does not "
+ "match with reference value";
+}
+
+TEST_F(FfElementTest, FfMultiExpBnWorksGivenSixExponents) {
+ const int items = 6;
+ FfElementObj r(&this->fq);
+ FfElementObj fq_base[6];
+ BigNumObj bn_exp[6];
+ FfElement const* p[6];
+ BigNum const* b[6];
+ int m = 0;
+ // prepare data for test
+ for (m = 0; m < items; m++) {
+ fq_base[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_6[m]);
+ bn_exp[m] = BigNumObj(this->fq_multi_exp_exp_6[m]);
+ // initialize data for test
+ p[m] = fq_base[m];
+ b[m] = bn_exp[m];
+ }
+ // do test
+ EXPECT_EQ(kEpidNoErr, FfMultiExpBn(this->fq, p, b, items, r));
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_6), r)
+ << "FfSscmMultiExp: Finite field element does not "
+ "match with reference value";
+}
+
+TEST_F(FfElementTest, FfMultiExpBnWorksOverEpid11GT) {
+ const int items = 3;
+ FfElementObj r(&this->epid11_GT);
+ FfElementObj ff_base[3];
+ BigNumObj bn_exp[3];
+ FfElement const* p[3];
+ BigNum const* b[3];
+ int m = 0;
+ // prepare data for test
+ for (m = 0; m < items; m++) {
+ ff_base[m] =
+ FfElementObj(&this->epid11_GT, this->epid11_GT_multi_exp_base_3[m]);
+ bn_exp[m] = BigNumObj(this->epid11_GT_multi_exp_exp_3[m]);
+ // initialize data for test
+ p[m] = ff_base[m];
+ b[m] = bn_exp[m];
+ }
+ // do test
+ EXPECT_EQ(kEpidNoErr, FfMultiExpBn(this->epid11_GT, p, b, items, r));
+ EXPECT_EQ(FfElementObj(&this->epid11_GT, this->epid11_GT_multi_exp_res_3), r)
+ << "FfSscmMultiExp: Finite field element does not "
+ "match with reference value";
+}
+
///////////////////////////////////////////////////////////////////////
// FfSscmMultiExp
TEST_F(FfElementTest, SscmFfMultiExpFailsGivenArgumentsMismatch) {
FfElement const* p[] = {this->fq_a, this->fq_b};
- FfElement const* p12[] = {this->fq12_a, this->fq12_b};
- const BigNumStr bnm0 = {0};
- const BigNumStr bnm1 = {0};
- BigNumStr const* b[] = {&bnm0, &bnm1};
- EXPECT_EQ(kEpidBadArgErr, FfSscmMultiExp(this->fq12, p, b, 2, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfSscmMultiExp(this->fq, p12, b, 2, this->fq_r));
- EXPECT_EQ(kEpidBadArgErr, FfSscmMultiExp(this->fq, p, b, 2, this->fq12_r));
+ FfElement const* p12[] = {this->fq12_g, this->fq12_h};
+ BigNumStr const* b[] = {&this->bn_0_str, &this->bn_0_str};
+ EXPECT_EQ(kEpidBadArgErr,
+ FfSscmMultiExp(this->fq12, p, b, 2, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfSscmMultiExp(this->fq, p12, b, 2, this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfSscmMultiExp(this->fq, p, b, 2, this->fq12_result));
}
TEST_F(FfElementTest, SscmFfMultiExpFailsGivenNullPointer) {
FfElement const* p[] = {this->fq_a, this->fq_b};
FfElement const* p_withnull[] = {nullptr, this->fq_b};
- const BigNumStr bnm0 = {{0x11, 0xFF, 0xFF, 0xFF, 0x4F, 0x59, 0xB1, 0xD3, 0x6B,
- 0x08, 0xFF, 0xFF, 0x0B, 0xF3, 0xAF, 0x27, 0xFF, 0xB8,
- 0xFF, 0xFF, 0x98, 0xFF, 0xEB, 0xFF, 0xF2, 0x6A, 0xFF,
- 0xFF, 0xEA, 0x31, 0xFF, 0xFF}};
- const BigNumStr bnm1 = {{0xE2, 0xFF, 0x03, 0x1D, 0xFF, 0x19, 0x81, 0xCB, 0xFF,
- 0xFF, 0x6B, 0xD5, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xBD,
- 0xFF, 0x5A, 0xFF, 0x5C, 0x7C, 0xFF, 0x84, 0xFF, 0xFF,
- 0x8C, 0x03, 0xB2, 0x26, 0xFF}};
- BigNumStr const* b[] = {&bnm0, &bnm1};
- BigNumStr const* b_withnull[] = {nullptr, &bnm1};
+ BigNumStr const* b[] = {&this->fq_multi_exp_exp_2[0],
+ &this->fq_multi_exp_exp_2[1]};
+ BigNumStr const* b_withnull[] = {nullptr, &this->fq_multi_exp_exp_2[1]};
size_t m = 2;
- EXPECT_EQ(kEpidBadArgErr, FfSscmMultiExp(nullptr, p, b, m, this->fq_r));
+ EXPECT_EQ(kEpidBadArgErr, FfSscmMultiExp(nullptr, p, b, m, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfSscmMultiExp(this->fq, nullptr, b, m, this->fq_r));
+ FfSscmMultiExp(this->fq, nullptr, b, m, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfSscmMultiExp(this->fq, p, nullptr, m, this->fq_r));
+ FfSscmMultiExp(this->fq, p, nullptr, m, this->fq_result));
EXPECT_EQ(kEpidBadArgErr, FfSscmMultiExp(this->fq, p, b, m, nullptr));
EXPECT_EQ(kEpidBadArgErr,
- FfSscmMultiExp(this->fq, p_withnull, b, m, this->fq_r));
+ FfSscmMultiExp(this->fq, p_withnull, b, m, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
- FfSscmMultiExp(this->fq, p, b_withnull, m, this->fq_r));
+ FfSscmMultiExp(this->fq, p, b_withnull, m, this->fq_result));
}
TEST_F(FfElementTest, SscmFfMultiExpFailsGivenIncorrectMLen) {
FfElement const* p[] = {this->fq_a, this->fq_b};
- const BigNumStr bnm0 = {{0x11, 0xFF, 0xFF, 0xFF, 0x4F, 0x59, 0xB1, 0xD3, 0x6B,
- 0x08, 0xFF, 0xFF, 0x0B, 0xF3, 0xAF, 0x27, 0xFF, 0xB8,
- 0xFF, 0xFF, 0x98, 0xFF, 0xEB, 0xFF, 0xF2, 0x6A, 0xFF,
- 0xFF, 0xEA, 0x31, 0xFF, 0xFF}};
- const BigNumStr bnm1 = {{0xE2, 0xFF, 0x03, 0x1D, 0xFF, 0x19, 0x81, 0xCB, 0xFF,
- 0xFF, 0x6B, 0xD5, 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xBD,
- 0xFF, 0x5A, 0xFF, 0x5C, 0x7C, 0xFF, 0x84, 0xFF, 0xFF,
- 0x8C, 0x03, 0xB2, 0x26, 0xFF}};
- BigNumStr const* b[] = {&bnm0, &bnm1};
+ BigNumStr const* b[] = {&this->fq_multi_exp_exp_2[0],
+ &this->fq_multi_exp_exp_2[1]};
size_t len_greater_int_max = (size_t)INT_MAX + 1;
- EXPECT_EQ(kEpidBadArgErr, FfSscmMultiExp(this->fq, p, b, 0, this->fq_r));
+ EXPECT_EQ(kEpidBadArgErr, FfSscmMultiExp(this->fq, p, b, 0, this->fq_result));
EXPECT_EQ(kEpidBadArgErr,
FfSscmMultiExp(this->fq, p, b, std::numeric_limits<size_t>::max(),
- this->fq_r));
- EXPECT_EQ(kEpidBadArgErr,
- FfSscmMultiExp(this->fq, p, b, len_greater_int_max, this->fq_r));
+ this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr, FfSscmMultiExp(this->fq, p, b, len_greater_int_max,
+ this->fq_result));
}
TEST_F(FfElementTest, SscmFfMultiExpWorksGivenOneExponent) {
@@ -1928,31 +2646,16 @@ TEST_F(FfElementTest, SscmFfMultiExpWorksGivenOneExponent) {
FfElement const* p[1];
BigNumStr const* b[1];
int m = 0;
- const FqElemStr ffe[] = {{
- 0x12, 0xA6, 0x5B, 0xD6, 0x91, 0x8D, 0x50, 0xA7, 0x66, 0xEB, 0x7D, 0x52,
- 0xE3, 0x40, 0x17, 0x60, 0x7F, 0xDF, 0x6C, 0xA1, 0x2C, 0x1A, 0x37, 0xE0,
- 0x92, 0xC0, 0xF7, 0xB9, 0x76, 0xAB, 0xB1, 0x8A,
- }};
- const BigNumStr bnm[] = {{
- 0xFF, 0xFB, 0x3E, 0x5D, 0xFF, 0x9A, 0xFF, 0x02, 0x00, 0xFF, 0xFF, 0xFF,
- 0xF2, 0xE1, 0x85, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x81,
- 0xFF, 0xFD, 0xFF, 0xEB, 0xFF, 0x29, 0xA7, 0xFF,
- }};
- const FqElemStr res = {
- 0x6A, 0x21, 0xEC, 0x89, 0xCC, 0x13, 0x2F, 0x6F, 0x29, 0x1B, 0x3A,
- 0x94, 0xF6, 0xE6, 0xA8, 0xBD, 0x98, 0x25, 0x43, 0x7A, 0xDC, 0xC1,
- 0x20, 0xBA, 0x30, 0xD8, 0x1C, 0x8E, 0x79, 0xFC, 0xDA, 0x67,
- };
// prepare data for test
for (m = 0; m < 1; m++) {
- fq_exp[m] = FfElementObj(&this->fq, ffe[m]);
+ fq_exp[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_1[m]);
// initialize data for test
p[m] = fq_exp[m];
- b[m] = &bnm[m];
+ b[m] = &this->fq_multi_exp_exp_1[m];
}
// do test
EXPECT_EQ(kEpidNoErr, FfSscmMultiExp(this->fq, p, b, 1, r));
- EXPECT_EQ(FfElementObj(&this->fq, res), r)
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_1), r)
<< "FfSscmMultiExp: Finite field element does not "
"match with reference value";
}
@@ -1963,35 +2666,16 @@ TEST_F(FfElementTest, SscmFfMultiExpWorksGivenTwoExponents) {
FfElement const* p[2];
BigNumStr const* b[2];
int m = 0;
- const FqElemStr ffe[] = {
- {0xE6, 0x65, 0x23, 0x9B, 0xD4, 0x07, 0x16, 0x83, 0x38, 0x23, 0xB2, 0x67,
- 0x57, 0xEB, 0x0F, 0x23, 0x3A, 0xF4, 0x8E, 0xDA, 0x71, 0x5E, 0xD9, 0x98,
- 0x63, 0x98, 0x2B, 0xBC, 0x78, 0xD1, 0x94, 0xF2},
- {0xDD, 0x2B, 0xE9, 0x59, 0x24, 0xA5, 0xB3, 0xFD, 0xEB, 0xE1, 0x3C, 0xC0,
- 0x73, 0x4E, 0x99, 0xEE, 0x36, 0xF6, 0xC0, 0x1A, 0x76, 0x01, 0x0A, 0xF0,
- 0xCB, 0xB4, 0x71, 0x88, 0x95, 0xCB, 0x35, 0xBA}};
- const BigNumStr bnm[] = {
- {0x11, 0xFF, 0xFF, 0xFF, 0x4F, 0x59, 0xB1, 0xD3, 0x6B, 0x08, 0xFF, 0xFF,
- 0x0B, 0xF3, 0xAF, 0x27, 0xFF, 0xB8, 0xFF, 0xFF, 0x98, 0xFF, 0xEB, 0xFF,
- 0xF2, 0x6A, 0xFF, 0xFF, 0xEA, 0x31, 0xFF, 0xFF},
- {0xE2, 0xFF, 0x03, 0x1D, 0xFF, 0x19, 0x81, 0xCB, 0xFF, 0xFF, 0x6B, 0xD5,
- 0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xBD, 0xFF, 0x5A, 0xFF, 0x5C, 0x7C, 0xFF,
- 0x84, 0xFF, 0xFF, 0x8C, 0x03, 0xB2, 0x26, 0xFF}};
- const FqElemStr res = {
- 0x8A, 0xF7, 0x96, 0x53, 0x9C, 0xC3, 0x57, 0x89, 0x50, 0xE3, 0xAB,
- 0x12, 0x62, 0xEA, 0x0C, 0xE4, 0x65, 0xA6, 0x91, 0x09, 0x93, 0x81,
- 0xFC, 0xBB, 0x0E, 0xFA, 0xC1, 0xC4, 0xDC, 0x3F, 0x0A, 0xD1,
- };
// prepare data for test
for (m = 0; m < 2; m++) {
- fq_exp[m] = FfElementObj(&this->fq, ffe[m]);
+ fq_exp[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_2[m]);
// initialize data for test
p[m] = fq_exp[m];
- b[m] = &bnm[m];
+ b[m] = &this->fq_multi_exp_exp_2[m];
}
// do test
EXPECT_EQ(kEpidNoErr, FfSscmMultiExp(this->fq, p, b, 2, r));
- EXPECT_EQ(FfElementObj(&this->fq, res), r)
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_2), r)
<< "FfSscmMultiExp: Finite field element does not "
"match with reference value";
}
@@ -2002,41 +2686,16 @@ TEST_F(FfElementTest, SscmFfMultiExpWorksGivenThreeExponents) {
FfElement const* p[3];
BigNumStr const* b[3];
int m = 0;
- const FqElemStr ffe[] = {
- {0x24, 0x9D, 0xDD, 0x1A, 0xC0, 0x07, 0x1F, 0x65, 0xDF, 0xBB, 0xC7, 0x39,
- 0x99, 0x44, 0x63, 0x8E, 0x7E, 0xB2, 0x85, 0x82, 0xC6, 0x4E, 0x2D, 0x39,
- 0xA8, 0x3F, 0x12, 0xB4, 0xE9, 0x9D, 0x67, 0x28},
- {0x6B, 0x51, 0x6B, 0x33, 0x0B, 0x2E, 0x2A, 0x94, 0x34, 0xCC, 0x7E, 0x97,
- 0xFA, 0x85, 0x51, 0x44, 0x30, 0xE5, 0xF2, 0x68, 0x23, 0x31, 0x84, 0xFF,
- 0xBB, 0x95, 0x9A, 0xB2, 0x80, 0x95, 0xC4, 0x91},
- {0x77, 0xED, 0xA2, 0x53, 0xA3, 0xBF, 0x6C, 0x58, 0x16, 0x7D, 0xEF, 0x8A,
- 0x7D, 0x38, 0x65, 0x3F, 0x92, 0xA6, 0x85, 0xD7, 0x9F, 0x80, 0xA4, 0xA1,
- 0x70, 0x02, 0xE5, 0x66, 0xF2, 0xD8, 0xD7, 0xD2}};
- const BigNumStr bnm[] = {
- {0xFF, 0xFF, 0xFF, 0xB4, 0x48, 0xFF, 0xFF, 0xFF, 0xA3, 0xFF, 0xE3, 0xFF,
- 0x61, 0xFF, 0xA2, 0x97, 0x9A, 0xFF, 0x6F, 0x04, 0xC6, 0xB9, 0xFF, 0x22,
- 0xFF, 0x20, 0x9E, 0xFF, 0x43, 0xFF, 0xFF, 0xFF},
- {0xB1, 0x19, 0xBF, 0xFF, 0x74, 0x7F, 0xCC, 0x34, 0x1E, 0x30, 0x7D, 0xC5,
- 0xC4, 0xFF, 0xE7, 0xF8, 0xFF, 0x5F, 0xFF, 0x73, 0xFF, 0x58, 0xFF, 0xD6,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEC, 0xFF, 0xFF},
- {0xFF, 0xFF, 0x0D, 0xFF, 0xFF, 0xFF, 0xFF, 0x26, 0xA8, 0xFF, 0xFF, 0xFF,
- 0x3E, 0xFF, 0xFF, 0xFF, 0xE0, 0x4F, 0xFF, 0xE3, 0xFF, 0xFF, 0xEB, 0x04,
- 0x4B, 0xFF, 0x5D, 0x55, 0xFF, 0x2D, 0xFF, 0xFF}};
- const FqElemStr res = {
- 0x04, 0x22, 0x21, 0xE7, 0x9F, 0xE3, 0x07, 0x2F, 0xA4, 0xBB, 0x56,
- 0x84, 0xD5, 0x93, 0x4A, 0xDA, 0x5B, 0x89, 0x07, 0xBE, 0xC5, 0x5F,
- 0xE6, 0x5C, 0x18, 0xF0, 0xF8, 0x8E, 0x8E, 0x00, 0xB9, 0x87,
- };
// prepare data for test
for (m = 0; m < 3; m++) {
- fq_exp[m] = FfElementObj(&this->fq, ffe[m]);
+ fq_exp[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_3[m]);
// initialize data for test
p[m] = fq_exp[m];
- b[m] = &bnm[m];
+ b[m] = &this->fq_multi_exp_exp_3[m];
}
// do test
EXPECT_EQ(kEpidNoErr, FfSscmMultiExp(this->fq, p, b, 3, r));
- EXPECT_EQ(FfElementObj(&this->fq, res), r)
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_3), r)
<< "FfSscmMultiExp: Finite field element does not "
"match with reference value";
}
@@ -2047,270 +2706,36 @@ TEST_F(FfElementTest, SscmFfMultiExpWorksGivenFourExponents) {
FfElement const* p[4];
BigNumStr const* b[4];
int m = 0;
- const FqElemStr ffe[] = {
- {0x81, 0xEE, 0x78, 0x31, 0x4C, 0xC0, 0x3C, 0xDD, 0x16, 0x52, 0xC6, 0x7E,
- 0x07, 0x4C, 0xFE, 0xC4, 0x50, 0x63, 0x5A, 0x40, 0xC8, 0xDF, 0x94, 0x23,
- 0x1A, 0x90, 0xDD, 0x24, 0x61, 0x23, 0xDD, 0x87},
- {0x76, 0xBB, 0x2C, 0x1C, 0xB3, 0x78, 0x93, 0x7E, 0x10, 0x29, 0xC3, 0xEC,
- 0xBD, 0xA3, 0x75, 0x3A, 0xF1, 0x0B, 0xE1, 0xCA, 0xEE, 0x02, 0x58, 0x74,
- 0xC7, 0xDC, 0xB8, 0x4F, 0x3F, 0x7B, 0xA2, 0xFC},
- {0x3A, 0xD3, 0x04, 0xAA, 0x9D, 0x2A, 0xDE, 0x86, 0x56, 0x84, 0x80, 0x42,
- 0xA5, 0x68, 0xD8, 0x6E, 0x65, 0xC4, 0x08, 0x07, 0x87, 0x4B, 0xC1, 0x92,
- 0xCB, 0x68, 0x52, 0x6C, 0x5A, 0x4F, 0x7C, 0xFB},
- {0x56, 0xE7, 0xBD, 0x59, 0x54, 0xCC, 0x20, 0x16, 0xAE, 0x36, 0xD1, 0xB0,
- 0xE4, 0x82, 0x47, 0x27, 0x32, 0xD1, 0x38, 0x7C, 0x53, 0x7F, 0xDD, 0xF4,
- 0xDE, 0xFA, 0xF7, 0x0F, 0xDD, 0xDF, 0x48, 0xA9}};
- const BigNumStr bnm[] = {
- {0xFF, 0xA5, 0xC3, 0xFF, 0xFF, 0x09, 0x18, 0x18, 0x95, 0x40, 0xFF, 0xFF,
- 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0x99, 0xFF, 0x25, 0xFF, 0xFF, 0x42, 0x07,
- 0xB5, 0xFF, 0x26, 0xE0, 0x4F, 0xB5, 0xB4, 0xFF},
- {0x1F, 0xFF, 0xAA, 0xF1, 0xFF, 0xFF, 0x7E, 0xFF, 0xFF, 0xFF, 0x07, 0xFF,
- 0xE7, 0xDF, 0xFF, 0xEE, 0xFF, 0x57, 0xFF, 0xFF, 0xFF, 0xB8, 0xB3, 0x9C,
- 0xFF, 0x8A, 0x89, 0xFF, 0xFE, 0x32, 0xFF, 0xC1},
- {0x9A, 0xFF, 0xFF, 0x9B, 0xFF, 0xAB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0x36, 0xF0, 0xC5, 0xAE, 0x87, 0x41, 0xFF, 0x5C, 0xDD, 0xFF, 0xFF,
- 0xFF, 0xFF, 0x59, 0xC9, 0xFF, 0x44, 0x5C, 0x58},
- {0x00, 0xFF, 0x95, 0xFF, 0x21, 0xFF, 0xFF, 0x1D, 0x1A, 0x06, 0xD3, 0xFF,
- 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xB0, 0x31, 0xFF, 0xFF, 0x1F,
- 0x61, 0x48, 0xFF, 0xFF, 0xFF, 0x17, 0xC9, 0x79}};
- const FqElemStr res = {
- 0x26, 0x2C, 0x23, 0x55, 0xD5, 0xBD, 0x7B, 0x67, 0x60, 0xFE, 0x06,
- 0x7B, 0xCC, 0xB8, 0x6B, 0xC9, 0x00, 0x81, 0xAE, 0xCB, 0xEC, 0x91,
- 0x6D, 0x1B, 0x9E, 0x1C, 0xD8, 0xC0, 0x8D, 0x3F, 0x1B, 0x20,
- };
// prepare data for test
for (m = 0; m < 4; m++) {
- fq_exp[m] = FfElementObj(&this->fq, ffe[m]);
+ fq_exp[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_4[m]);
// initialize data for test
p[m] = fq_exp[m];
- b[m] = &bnm[m];
+ b[m] = &this->fq_multi_exp_exp_4[m];
}
// do test
EXPECT_EQ(kEpidNoErr, FfSscmMultiExp(this->fq, p, b, 4, r));
- EXPECT_EQ(FfElementObj(&this->fq, res), r)
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_4), r)
<< "FfSscmMultiExp: Finite field element does not "
"match with reference value";
+}
- const Fq12ElemStr ff12e[] = {
- {
- 0x2c, 0x86, 0xee, 0x80, 0x61, 0x45, 0x8f, 0xfd, 0x96, 0xc2, 0x81,
- 0x11, 0xe8, 0x96, 0xe2, 0xca, 0x21, 0x78, 0xf7, 0xa3, 0x4b, 0xba,
- 0xdc, 0x0d, 0x34, 0x8a, 0x56, 0x12, 0x67, 0x8d, 0x72, 0x37, 0xa8,
- 0xeb, 0x5f, 0x1a, 0x1b, 0xf0, 0x5c, 0xc6, 0x6f, 0xc2, 0xc5, 0x03,
- 0xc4, 0x19, 0x85, 0xa6, 0xe0, 0x64, 0xfe, 0x71, 0x51, 0x46, 0xdf,
- 0xc2, 0xd6, 0xf9, 0xa0, 0xd6, 0x84, 0xc1, 0x4a, 0x11, 0xe0, 0x33,
- 0xa3, 0x1c, 0x73, 0x71, 0x62, 0x17, 0x10, 0x4c, 0xd8, 0x3e, 0xee,
- 0xa1, 0x38, 0x9f, 0xa5, 0xfb, 0x1d, 0xc4, 0x9d, 0x2f, 0x08, 0x4a,
- 0xd3, 0x61, 0x37, 0x79, 0xab, 0xc1, 0x37, 0x7e, 0x90, 0xfd, 0xa3,
- 0x9d, 0x0c, 0x81, 0x52, 0xf4, 0x58, 0x24, 0x89, 0xc4, 0xf4, 0xd4,
- 0x82, 0x33, 0xca, 0x5d, 0xb4, 0x58, 0xa6, 0x1e, 0xe6, 0x2b, 0x86,
- 0xef, 0x56, 0xc4, 0x4f, 0x9b, 0x27, 0x3c, 0x96, 0x54, 0xda, 0xb5,
- 0x32, 0x23, 0x8a, 0x93, 0xcc, 0xa5, 0x7d, 0x28, 0x4a, 0x97, 0xa4,
- 0x30, 0xa8, 0x11, 0xbc, 0x43, 0x22, 0x7f, 0x02, 0x73, 0x0e, 0x5c,
- 0x63, 0x52, 0x2f, 0x4b, 0x5f, 0x7d, 0xc3, 0x1e, 0x30, 0xae, 0xac,
- 0x8c, 0xe8, 0x93, 0xd6, 0xce, 0x05, 0x4b, 0x6b, 0x21, 0x01, 0x14,
- 0x4a, 0x1d, 0xd9, 0x08, 0x0c, 0xa1, 0x4c, 0x0b, 0x44, 0x28, 0x9c,
- 0xb6, 0xd1, 0x96, 0xbd, 0x07, 0x8b, 0x3d, 0x77, 0x4e, 0xbd, 0x7b,
- 0x9f, 0x65, 0x20, 0xdb, 0xa0, 0x95, 0x25, 0x44, 0x44, 0x7a, 0xe3,
- 0xdc, 0xdd, 0x2f, 0xba, 0x75, 0x16, 0x19, 0xcb, 0x90, 0x31, 0x79,
- 0x38, 0xb6, 0x1a, 0x82, 0xbc, 0xb6, 0x85, 0xcd, 0xeb, 0xb9, 0x13,
- 0x43, 0xea, 0xc2, 0x78, 0xbe, 0x25, 0x97, 0x1c, 0x6e, 0x18, 0x55,
- 0xfd, 0xcb, 0xe6, 0x7e, 0x1e, 0x92, 0xad, 0x48, 0xe7, 0xa7, 0x02,
- 0x87, 0x0b, 0x8f, 0x16, 0xd7, 0x8e, 0x95, 0x8e, 0x62, 0x0a, 0xad,
- 0x20, 0x2d, 0x6a, 0x2b, 0x4e, 0x6f, 0xc1, 0xc2, 0x63, 0xba, 0x82,
- 0xf3, 0x8c, 0xd0, 0xa2, 0x09, 0xd3, 0xe5, 0xba, 0x1f, 0x65, 0x35,
- 0xd0, 0x1c, 0x09, 0x98, 0x47, 0x65, 0xf2, 0x90, 0xd4, 0xe2, 0xd0,
- 0x6f, 0x9e, 0xdb, 0xa2, 0x14, 0x9b, 0x4b, 0x3d, 0xaa, 0x75, 0x25,
- 0x67, 0xf4, 0x7d, 0x77, 0xe9, 0x24, 0xed, 0xee, 0x1b, 0x07, 0x7f,
- 0xe0, 0x7a, 0x34, 0xb7, 0x3c, 0x36, 0x0d, 0xce, 0xf9, 0xbf, 0xf9,
- 0xe5, 0x09, 0x86, 0xeb, 0xb9, 0xd8, 0xc4, 0x67, 0xc5, 0xcd, 0xd4,
- 0xbc, 0xee, 0x45, 0xf7, 0x11, 0x68, 0xd9, 0x23, 0x6d, 0xd6, 0x24,
- 0x6e, 0x97, 0x83, 0x13, 0x76, 0x9f, 0x35, 0xea, 0xb8, 0x47, 0x57,
- 0x9b, 0x74, 0x47, 0x1f, 0x19, 0xe7, 0x97, 0x74, 0x1b, 0xb1, 0xa0,
- 0xf3, 0x92, 0xdc, 0x35, 0xfd, 0x7f, 0x4f, 0x07, 0x22, 0xac,
- },
- {
- 0xfd, 0x05, 0x41, 0x27, 0x00, 0x7a, 0xad, 0x17, 0xbc, 0xbf, 0x22,
- 0x5e, 0xda, 0xeb, 0x7d, 0xaa, 0xb5, 0x2d, 0xc8, 0x61, 0xfe, 0x2c,
- 0xba, 0x9e, 0x54, 0x43, 0x94, 0xdc, 0xfd, 0x0e, 0x6d, 0x6d, 0xa1,
- 0x5e, 0x05, 0xa5, 0x05, 0x55, 0xe7, 0x2a, 0xf7, 0x53, 0x37, 0x2c,
- 0xef, 0x44, 0x95, 0xca, 0x2c, 0xe8, 0xeb, 0xae, 0x61, 0x05, 0x33,
- 0xe7, 0x0f, 0x30, 0x67, 0xbe, 0xcd, 0xb2, 0x93, 0x44, 0x44, 0x31,
- 0x96, 0x4d, 0x72, 0x61, 0xcd, 0x23, 0x1f, 0x7b, 0x57, 0x33, 0x39,
- 0xac, 0x57, 0x53, 0x3d, 0x70, 0x57, 0xb3, 0x6d, 0xd5, 0x8a, 0x89,
- 0x30, 0xbc, 0xed, 0x29, 0x19, 0x39, 0x6e, 0x6a, 0x80, 0x21, 0x1e,
- 0xb7, 0x84, 0xb1, 0x0a, 0xa4, 0xd0, 0xff, 0x59, 0x31, 0xe9, 0xba,
- 0x39, 0xf7, 0x81, 0xdf, 0x1b, 0x7b, 0xd9, 0xdb, 0x02, 0x17, 0xbe,
- 0x97, 0x63, 0xbd, 0x37, 0x14, 0xb8, 0x8b, 0x6c, 0xcc, 0x5b, 0xa3,
- 0xee, 0xc8, 0x0b, 0x7b, 0xf5, 0xde, 0xbc, 0xb7, 0xa8, 0x25, 0x35,
- 0xae, 0x0b, 0x30, 0x96, 0x33, 0x52, 0x13, 0xa3, 0x89, 0x3a, 0x2e,
- 0xa4, 0x7e, 0x5f, 0x4e, 0xb1, 0xf7, 0x87, 0xba, 0x08, 0xb0, 0xfb,
- 0xcb, 0x31, 0xa6, 0x2b, 0x3e, 0xe7, 0xc4, 0xcc, 0xa5, 0x14, 0x61,
- 0xc9, 0x18, 0xfc, 0x74, 0x59, 0x06, 0xf4, 0xad, 0xfc, 0x2d, 0x0c,
- 0x7d, 0xdb, 0x2a, 0xec, 0xd4, 0xe9, 0x31, 0x31, 0x50, 0x25, 0xb7,
- 0x0c, 0x48, 0x30, 0xd5, 0x78, 0xb1, 0x10, 0xea, 0x5d, 0xaa, 0xaa,
- 0x03, 0xec, 0xe3, 0x0f, 0x36, 0xa6, 0xbc, 0x18, 0x3a, 0x76, 0x87,
- 0xa3, 0xe9, 0x33, 0xda, 0x48, 0x78, 0x93, 0x64, 0x72, 0x9b, 0x2a,
- 0x1e, 0x0d, 0x50, 0x9f, 0x6f, 0xbd, 0xa5, 0x18, 0xb1, 0xa8, 0x14,
- 0x9a, 0x1b, 0xb9, 0xb4, 0x2c, 0x1f, 0x46, 0xb8, 0x9b, 0x7a, 0xc7,
- 0x84, 0xae, 0x27, 0xd1, 0xec, 0x1c, 0xec, 0x69, 0xf0, 0x35, 0x40,
- 0x77, 0x7e, 0x27, 0x22, 0x36, 0x38, 0xdf, 0x15, 0xc2, 0xb3, 0xb8,
- 0x63, 0x4a, 0x6e, 0x68, 0x8c, 0xc1, 0x39, 0x3c, 0x02, 0x4c, 0x2a,
- 0x31, 0x18, 0x2e, 0x35, 0xf5, 0xca, 0xa2, 0xe9, 0x24, 0x92, 0xd5,
- 0xe5, 0x2e, 0x5d, 0x1c, 0x94, 0xd9, 0xc7, 0xf0, 0x22, 0x16, 0x20,
- 0xa8, 0x37, 0xdd, 0x0e, 0xab, 0x1b, 0x5e, 0x8b, 0xee, 0x81, 0xc6,
- 0x17, 0xf1, 0x29, 0x5d, 0x1d, 0x6f, 0x53, 0x5a, 0xb2, 0x20, 0x88,
- 0x3d, 0xa4, 0x98, 0x81, 0xa4, 0xef, 0x11, 0x1b, 0x64, 0x9e, 0x2c,
- 0x95, 0xdd, 0xd7, 0x57, 0xb3, 0x95, 0xca, 0x40, 0xb9, 0x0d, 0x62,
- 0xdc, 0x86, 0x8b, 0xe6, 0xd3, 0x7b, 0x33, 0xea, 0x50, 0x25, 0xe2,
- 0x77, 0xe3, 0x0b, 0x5a, 0xc8, 0x81, 0xfc, 0xae, 0x74, 0x38, 0x69,
- 0x07, 0xf8, 0x4e, 0xd7, 0x85, 0xa6, 0x2f, 0x13, 0xb7, 0x0a,
- },
- {
- 0xf4, 0xdc, 0xac, 0x02, 0xc0, 0x95, 0x07, 0xdc, 0x12, 0x4f, 0x3a,
- 0x01, 0xa9, 0xee, 0xf3, 0x07, 0x46, 0x94, 0x47, 0x15, 0x63, 0xa6,
- 0x8e, 0x0a, 0xc4, 0xc4, 0xe4, 0x23, 0x85, 0x63, 0xe4, 0x4e, 0x9a,
- 0x9e, 0x9f, 0xc1, 0xed, 0x4e, 0x94, 0x10, 0xfe, 0x7d, 0x90, 0xef,
- 0x82, 0x21, 0xac, 0x67, 0x24, 0x99, 0x86, 0xc6, 0x85, 0x8b, 0x19,
- 0x9a, 0x9b, 0x90, 0x0b, 0xa4, 0x90, 0x78, 0x34, 0x53, 0xb1, 0x4c,
- 0xba, 0xb8, 0xc6, 0x40, 0x71, 0xc2, 0x17, 0x51, 0x05, 0xc2, 0xc9,
- 0xbc, 0x03, 0x10, 0x4e, 0xfe, 0x2f, 0x94, 0xed, 0x13, 0x35, 0x7b,
- 0x20, 0xa6, 0x59, 0x44, 0x81, 0xd0, 0xec, 0x12, 0x74, 0xa2, 0x4a,
- 0xfb, 0xd7, 0x28, 0x70, 0xad, 0xde, 0x86, 0x2f, 0xef, 0xf9, 0x50,
- 0x5d, 0x1e, 0x46, 0x3b, 0x82, 0x1c, 0x6a, 0xc9, 0x3f, 0x32, 0xae,
- 0xcd, 0x93, 0x2c, 0xa5, 0x70, 0x45, 0x24, 0x38, 0x19, 0x79, 0xbf,
- 0x35, 0xf5, 0xc1, 0x53, 0x06, 0x42, 0xaa, 0x6b, 0xf3, 0xb7, 0x8f,
- 0xfb, 0xfc, 0x28, 0x46, 0x9a, 0x65, 0x2a, 0x45, 0x3d, 0x4c, 0x3c,
- 0x6b, 0x9c, 0x44, 0xc5, 0x82, 0xb8, 0x80, 0xf9, 0xb3, 0x44, 0x95,
- 0x17, 0x39, 0x01, 0x6b, 0xd6, 0x1d, 0x73, 0x22, 0x94, 0xff, 0x6f,
- 0x7b, 0x4e, 0xb6, 0xa4, 0xe4, 0x6c, 0xa8, 0xdb, 0x38, 0x74, 0x0b,
- 0xdb, 0xfa, 0x14, 0x99, 0x39, 0x28, 0xee, 0xfc, 0x62, 0xe5, 0x33,
- 0x9c, 0x63, 0xd5, 0x7f, 0x2c, 0x4c, 0xf4, 0x76, 0x4c, 0xf7, 0x7b,
- 0x27, 0x2c, 0xa9, 0xb9, 0x01, 0x3c, 0x58, 0xf7, 0xce, 0xaa, 0x0a,
- 0x21, 0xc0, 0xa3, 0xa7, 0xa1, 0x85, 0xbc, 0xfe, 0x55, 0xfc, 0x3b,
- 0x9b, 0x3d, 0xef, 0x14, 0x85, 0x8a, 0x4e, 0x5e, 0x1f, 0x4f, 0xc9,
- 0x86, 0xb8, 0xf2, 0xb2, 0xe3, 0xe7, 0x7e, 0x87, 0xe2, 0x20, 0xd7,
- 0x85, 0x2c, 0xd1, 0x13, 0xcb, 0x46, 0xad, 0xd7, 0xec, 0x66, 0xd5,
- 0x2b, 0x6e, 0x87, 0x92, 0x13, 0xb2, 0x7d, 0x18, 0x69, 0x35, 0xcb,
- 0xf1, 0xbe, 0xc2, 0x9d, 0xeb, 0xf5, 0x00, 0x0b, 0x73, 0xa3, 0xfd,
- 0x51, 0xdc, 0x91, 0x0e, 0xe4, 0x46, 0x41, 0x23, 0xdd, 0x85, 0x53,
- 0x0c, 0xae, 0xf9, 0x74, 0xcf, 0x1c, 0x32, 0x22, 0xda, 0x4a, 0x14,
- 0x80, 0x71, 0x51, 0x23, 0xc3, 0xab, 0x7e, 0xec, 0x77, 0xcc, 0x59,
- 0x12, 0x1c, 0x0f, 0x65, 0x6b, 0xd8, 0x41, 0xe0, 0x1b, 0x51, 0x9c,
- 0x89, 0x26, 0xab, 0x88, 0x63, 0x5d, 0xbb, 0x95, 0x92, 0x5b, 0x2c,
- 0x1d, 0xde, 0xc1, 0x88, 0xd6, 0xf1, 0x02, 0x48, 0xe0, 0xe2, 0xd1,
- 0x40, 0x7f, 0xf1, 0x23, 0x4a, 0xcf, 0x36, 0xd5, 0xcf, 0x76, 0x0d,
- 0x00, 0x2a, 0xf7, 0x5f, 0x31, 0xbb, 0xcc, 0x46, 0x84, 0x07, 0x04,
- 0x98, 0x9c, 0xb4, 0x31, 0x15, 0x2d, 0x91, 0xf6, 0x29, 0x33,
- },
- {
- 0xa8, 0x8e, 0x9a, 0xf9, 0x25, 0x12, 0x98, 0xe2, 0xc3, 0x61, 0x2e,
- 0xe8, 0xd6, 0xa6, 0x77, 0x16, 0x49, 0x04, 0x75, 0x69, 0xd1, 0x83,
- 0x2d, 0x3f, 0x2a, 0x79, 0xb6, 0x9b, 0xc9, 0x1d, 0x03, 0x90, 0x2a,
- 0xd8, 0x11, 0x9f, 0x26, 0x36, 0xe7, 0xe9, 0x3a, 0x05, 0x4c, 0x15,
- 0x49, 0x93, 0xda, 0xe9, 0xd0, 0x5a, 0xe4, 0x8d, 0x8a, 0xfa, 0x04,
- 0xf1, 0x20, 0x84, 0x56, 0xec, 0x3c, 0x27, 0x19, 0x5c, 0xf1, 0xaf,
- 0xbf, 0xf6, 0x0e, 0x58, 0x84, 0x2d, 0x94, 0x11, 0xf4, 0xb5, 0xf4,
- 0x14, 0x51, 0xb0, 0x90, 0x46, 0x1a, 0x81, 0xed, 0xcf, 0x91, 0x66,
- 0x58, 0xa6, 0x36, 0x3a, 0x52, 0x18, 0x5a, 0xc1, 0x08, 0x4c, 0x99,
- 0xd3, 0xdc, 0xce, 0x7f, 0xce, 0x78, 0xe0, 0x38, 0x87, 0x32, 0xf1,
- 0x80, 0x3c, 0x7b, 0x67, 0xaa, 0x6f, 0xdd, 0xe0, 0xfc, 0xcb, 0xd0,
- 0xb0, 0x3a, 0x59, 0x52, 0x2a, 0x84, 0xe4, 0xf8, 0x4a, 0xff, 0x50,
- 0xa0, 0x65, 0xc4, 0xee, 0xf4, 0x9c, 0xaa, 0x34, 0x46, 0xf9, 0xd2,
- 0x6c, 0xa1, 0x61, 0x71, 0x49, 0x32, 0x25, 0x84, 0x54, 0x90, 0x44,
- 0xbe, 0xa4, 0x0b, 0xf7, 0xfe, 0x26, 0x81, 0x63, 0x73, 0xf7, 0x2f,
- 0xf2, 0xfa, 0x24, 0x52, 0xa4, 0xd9, 0x4c, 0xc1, 0xa7, 0xa5, 0xc3,
- 0x03, 0x36, 0x13, 0x9b, 0x16, 0x45, 0x16, 0xcb, 0x4b, 0x99, 0x38,
- 0xf3, 0x6d, 0xc8, 0x7e, 0xab, 0xb3, 0x53, 0xdf, 0xb6, 0x82, 0x60,
- 0x12, 0x11, 0x36, 0x69, 0x0e, 0x05, 0x31, 0x8e, 0xcf, 0xd7, 0x3f,
- 0x32, 0xe7, 0x95, 0x84, 0x1d, 0xc8, 0xb5, 0xbe, 0x49, 0x17, 0x9d,
- 0xcf, 0xa9, 0x5a, 0x2a, 0xc4, 0x11, 0x86, 0xe8, 0x6c, 0x02, 0x56,
- 0xb0, 0x25, 0x2f, 0xa0, 0x06, 0xb3, 0x62, 0xb2, 0x11, 0xaf, 0xbe,
- 0xa4, 0xe8, 0x61, 0x64, 0x85, 0xfb, 0xeb, 0x1c, 0xf1, 0xbc, 0x2c,
- 0xae, 0x10, 0x51, 0x16, 0xa6, 0xc0, 0xb3, 0x86, 0x8e, 0x6d, 0x79,
- 0xb6, 0xbd, 0xde, 0x1e, 0x26, 0x06, 0x46, 0x65, 0x82, 0x84, 0x5a,
- 0x97, 0xd3, 0xb7, 0x93, 0x78, 0x6b, 0x9d, 0x14, 0x33, 0x94, 0x43,
- 0x34, 0x04, 0x45, 0xd1, 0x47, 0xd4, 0x2f, 0x17, 0xcf, 0xf1, 0xdd,
- 0xea, 0x11, 0x52, 0xae, 0x01, 0x88, 0x3a, 0x10, 0xee, 0x5c, 0x16,
- 0xcd, 0xb5, 0x48, 0xe9, 0x16, 0x2c, 0x70, 0xb4, 0x1e, 0x19, 0x38,
- 0xe0, 0x18, 0xe9, 0xae, 0xc5, 0xda, 0x74, 0x41, 0x2d, 0x70, 0x07,
- 0x60, 0x37, 0x27, 0x66, 0xf7, 0x00, 0xbb, 0x79, 0x51, 0xf3, 0x7c,
- 0x8a, 0x2b, 0xb5, 0x69, 0x6e, 0x10, 0x1f, 0xe0, 0x0a, 0x5e, 0xbe,
- 0xb4, 0x4e, 0x0e, 0x02, 0x59, 0xb5, 0xcb, 0x4a, 0x6a, 0x86, 0x8b,
- 0xcc, 0xa2, 0x13, 0xa0, 0xe9, 0xf2, 0x5c, 0xb0, 0x23, 0xb2, 0x15,
- 0xf9, 0xbb, 0x43, 0xc1, 0x54, 0xf4, 0xc8, 0xab, 0x16, 0xa6,
- },
- };
- const BigNumStr bnm12[] = {
- {
- 0x14, 0x92, 0xd1, 0x1f, 0xac, 0x90, 0x4d, 0xc3, 0x3e, 0xb8, 0xa7,
- 0xfe, 0x35, 0x98, 0xda, 0x94, 0xd6, 0xf3, 0x27, 0x29, 0x4b, 0x70,
- 0xcf, 0x0f, 0xda, 0x14, 0x97, 0xa1, 0x9b, 0x6b, 0x24, 0x08,
- },
- {
- 0x76, 0x8d, 0xe5, 0xc2, 0xab, 0x78, 0xd9, 0x76, 0x98, 0xff, 0x92,
- 0xea, 0x95, 0x58, 0xc5, 0x0c, 0x6f, 0x1b, 0x35, 0xc4, 0xbf, 0x4a,
- 0x9e, 0xc2, 0x6a, 0xec, 0xe2, 0xf6, 0xaf, 0xeb, 0xac, 0x06,
- },
- {
- 0x50, 0x38, 0x60, 0x31, 0xab, 0x05, 0xcc, 0xb1, 0xc2, 0x06, 0xa0,
- 0xd7, 0x92, 0x12, 0xbd, 0x17, 0x81, 0xb9, 0x7e, 0x07, 0x9b, 0xd4,
- 0x3b, 0x2d, 0x3c, 0x15, 0x3a, 0x5a, 0xf1, 0xc0, 0xc4, 0x75,
- },
- {
- 0xa1, 0x3f, 0xea, 0x99, 0x7e, 0xc7, 0x65, 0xf5, 0x41, 0xa6, 0xd6,
- 0xd3, 0x77, 0xec, 0x27, 0xf8, 0x6c, 0x18, 0x28, 0x69, 0x97, 0x08,
- 0x0e, 0x63, 0x5a, 0xda, 0xfe, 0x9f, 0xd1, 0x4a, 0x61, 0x4f,
- },
- };
- const Fq12ElemStr fq12_expected_result_str = {
- 0x3a, 0x30, 0x33, 0xa2, 0x14, 0xdf, 0xdc, 0x70, 0x48, 0xf3, 0xba, 0x3f,
- 0xce, 0xfc, 0x69, 0x24, 0xae, 0xa1, 0xf3, 0xcf, 0xd8, 0x77, 0x69, 0x38,
- 0x38, 0xf4, 0x8e, 0xfb, 0x51, 0xfb, 0x10, 0x7c, 0x73, 0xb4, 0xee, 0xf9,
- 0x76, 0xbb, 0x45, 0xec, 0x07, 0x24, 0x23, 0xa3, 0x38, 0x64, 0x39, 0x4c,
- 0x03, 0x94, 0xf5, 0xee, 0x5f, 0xc9, 0x83, 0x4f, 0xd1, 0xa6, 0x4a, 0x05,
- 0x25, 0x0c, 0x46, 0x33, 0xd4, 0x40, 0x47, 0xae, 0xec, 0xda, 0x30, 0xf9,
- 0xe1, 0x28, 0xfb, 0xb1, 0x4c, 0x62, 0xfb, 0x6c, 0x90, 0x0d, 0xb1, 0xec,
- 0xaf, 0x2d, 0x95, 0x64, 0x11, 0x93, 0xda, 0x8e, 0xb8, 0x7d, 0xe4, 0xa3,
- 0x8e, 0xa6, 0x9b, 0xaa, 0x58, 0xd5, 0xdc, 0x59, 0x1a, 0x51, 0x53, 0x47,
- 0x30, 0x1c, 0x2b, 0xb0, 0xbb, 0x57, 0x57, 0x0a, 0x8c, 0x5f, 0x62, 0x9c,
- 0x52, 0x28, 0xc0, 0x25, 0x27, 0xae, 0xcd, 0x36, 0xbf, 0x2d, 0x03, 0xb1,
- 0x33, 0xfd, 0x24, 0x81, 0x3c, 0x91, 0x43, 0x90, 0x0c, 0x20, 0xc4, 0xe3,
- 0x69, 0x3f, 0xa9, 0xa2, 0x7c, 0xc2, 0x48, 0x28, 0x1b, 0xf0, 0x81, 0x1f,
- 0x2b, 0x8f, 0x8d, 0x43, 0x38, 0x18, 0x12, 0xa3, 0x89, 0xf1, 0xd7, 0x60,
- 0x89, 0x68, 0x6a, 0xc4, 0xcc, 0x5d, 0xf4, 0xce, 0x43, 0x95, 0x84, 0xcd,
- 0x01, 0x55, 0xb8, 0x5d, 0x24, 0x50, 0xcd, 0xe3, 0x68, 0x1c, 0xff, 0x59,
- 0x0d, 0xac, 0xcb, 0xe7, 0x9d, 0x68, 0x0f, 0x4a, 0xaf, 0xeb, 0xb5, 0xfb,
- 0xf9, 0xb1, 0x58, 0x80, 0xd5, 0x71, 0x53, 0x26, 0x2e, 0x9c, 0xce, 0x10,
- 0xac, 0xd2, 0x0a, 0xeb, 0xb4, 0x5c, 0xc8, 0xd7, 0x16, 0x26, 0x66, 0x71,
- 0xdd, 0x67, 0xba, 0xdb, 0x35, 0x76, 0x64, 0xc6, 0x0b, 0x0b, 0x07, 0x4b,
- 0x65, 0xa2, 0xf7, 0x68, 0x9e, 0xfe, 0xe8, 0xe3, 0xa7, 0x09, 0x79, 0xc5,
- 0xdf, 0x5e, 0x9c, 0xec, 0xee, 0x83, 0x59, 0xb5, 0x89, 0x81, 0xa2, 0x87,
- 0xd7, 0x75, 0x65, 0x90, 0xde, 0x78, 0x37, 0x59, 0x04, 0x9b, 0x50, 0xc3,
- 0xba, 0x90, 0x09, 0x15, 0xab, 0x17, 0xc5, 0xbf, 0x5b, 0xb9, 0xe4, 0x6c,
- 0xa9, 0xb1, 0x49, 0x76, 0x25, 0x74, 0x5d, 0x9c, 0x78, 0xc5, 0x09, 0xee,
- 0xeb, 0xeb, 0x9d, 0x1c, 0x6c, 0xc0, 0x27, 0x9d, 0x66, 0xe6, 0x7f, 0x31,
- 0xcd, 0xb0, 0x8a, 0xe4, 0x9e, 0xbd, 0x70, 0x18, 0x88, 0xa1, 0x08, 0x39,
- 0xa2, 0x48, 0xa5, 0x98, 0xb6, 0xad, 0x10, 0x54, 0x07, 0xcd, 0xfc, 0x6d,
- 0xb1, 0x02, 0xff, 0xe3, 0x92, 0xd7, 0x9d, 0x48, 0xfb, 0xce, 0x88, 0x46,
- 0x92, 0x07, 0x02, 0xba, 0xee, 0xeb, 0xae, 0x88, 0xb1, 0x4e, 0xd0, 0xf2,
- 0xce, 0xd7, 0x57, 0x07, 0xd4, 0x39, 0xd2, 0x7d, 0x1a, 0x0c, 0xef, 0xf2,
- 0x84, 0x84, 0x22, 0x8a, 0xb1, 0x80, 0x0d, 0xdc, 0x64, 0x86, 0xfd, 0x70,
- };
-
+TEST_F(FfElementTest, SscmFfMultiExpWorksGivenFourFq12Exponents) {
FfElementObj r12(&this->fq12);
FfElementObj fq12_exp[4];
-
+ FfElement const* p[4];
+ BigNumStr const* b[4];
+ int m = 0;
// prepare data for test
for (m = 0; m < 4; m++) {
- fq12_exp[m] = FfElementObj(&this->fq12, ff12e[m]);
+ fq12_exp[m] = FfElementObj(&this->fq12, this->fq12_multi_exp_base_4[m]);
// initialize data for test
p[m] = fq12_exp[m];
- b[m] = &bnm12[m];
+ b[m] = &this->fq12_multi_exp_exp_4[m];
}
// do test
EXPECT_EQ(kEpidNoErr, FfSscmMultiExp(this->fq12, p, b, 4, r12));
- EXPECT_EQ(FfElementObj(&this->fq12, fq12_expected_result_str), r12)
+ EXPECT_EQ(FfElementObj(&this->fq12, this->fq12_multi_exp_res_4), r12)
<< "FfSscmMultiExp: Finite field element does not match with reference "
"value";
}
@@ -2321,55 +2746,16 @@ TEST_F(FfElementTest, SscmFfMultiExpWorksGivenFiveExponents) {
FfElement const* p[5];
BigNumStr const* b[5];
int m = 0;
- const FqElemStr ffe[] = {
- {0x7B, 0x26, 0x96, 0x84, 0x04, 0x0D, 0x6F, 0x10, 0xAA, 0x7F, 0xD0, 0x0C,
- 0x41, 0x3A, 0x68, 0x48, 0xBF, 0x3D, 0xB5, 0xCE, 0x3A, 0x9C, 0xA9, 0x10,
- 0xA4, 0x67, 0x7C, 0xC0, 0x41, 0x52, 0xCA, 0xE7},
- {0x2E, 0xD9, 0xEF, 0x86, 0xB6, 0x32, 0x72, 0x89, 0x37, 0xCF, 0x16, 0xCE,
- 0x27, 0x15, 0x7A, 0x95, 0xCF, 0x94, 0x1B, 0xF3, 0xCE, 0x49, 0x20, 0x29,
- 0x9A, 0x61, 0x2E, 0x0A, 0xF5, 0xE1, 0xDC, 0x9F},
- {0xE0, 0x19, 0x37, 0x44, 0xA7, 0x45, 0x49, 0x7E, 0x19, 0x02, 0x09, 0x78,
- 0xBE, 0xA4, 0x65, 0x60, 0x7A, 0xF5, 0xC8, 0xAF, 0x97, 0x5E, 0xDA, 0x3A,
- 0xB4, 0x16, 0x70, 0x31, 0xE3, 0xB4, 0x18, 0xA8},
- {0xBC, 0x92, 0x29, 0x92, 0x14, 0xD3, 0x3F, 0xB8, 0xB8, 0x8C, 0x41, 0xDF,
- 0xC5, 0xA1, 0xCA, 0x77, 0xE5, 0x73, 0xFE, 0xA7, 0xAC, 0x81, 0x66, 0x11,
- 0x5A, 0x6D, 0x7D, 0x97, 0x13, 0x92, 0x8D, 0x1D},
- {0xE1, 0xA0, 0x0D, 0xDC, 0x8F, 0x20, 0xF5, 0x2D, 0x1D, 0x1F, 0xBD, 0x24,
- 0x8C, 0xC2, 0x26, 0x06, 0x89, 0xE9, 0x46, 0xA9, 0xD2, 0x44, 0x8F, 0x1A,
- 0x8D, 0xAF, 0x20, 0x73, 0x60, 0x0B, 0x66, 0x9C}};
-
- const BigNumStr bnm[] = {
- {0x78, 0xE6, 0x3F, 0x42, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0x6E,
- 0xE9, 0xFF, 0x4F, 0xFF, 0x23, 0xFF, 0x67, 0xB4, 0xED, 0xEE, 0xD7, 0xC6,
- 0xFF, 0x4B, 0x0B, 0x6F, 0x1F, 0xD6, 0xFD, 0x7F},
- {0xA1, 0x87, 0xFF, 0x1B, 0xFF, 0x85, 0x68, 0xFF, 0x1C, 0xFF, 0xD5, 0xFF,
- 0x95, 0x73, 0xFF, 0xFF, 0xFF, 0x9E, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0x5E,
- 0x9E, 0x62, 0xFF, 0xFF, 0x97, 0xFF, 0xFF, 0xF3},
- {0x2E, 0xE8, 0x1E, 0x35, 0xFF, 0x82, 0x0B, 0x99, 0xEC, 0x30, 0x2B, 0xCE,
- 0xEC, 0x83, 0x05, 0xFF, 0x9E, 0x3C, 0xFF, 0xFF, 0xA1, 0xFF, 0xFF, 0xFF,
- 0x57, 0x26, 0x5B, 0x6C, 0xFF, 0xE6, 0x94, 0xFF},
- {0xFF, 0xFF, 0xFF, 0xFF, 0x94, 0xFF, 0xFF, 0x79, 0xFC, 0xFF, 0x83, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xA9, 0xFF, 0x2F, 0x6B, 0xD1, 0xE7, 0xFF, 0xFF,
- 0xFF, 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
- {0x63, 0x53, 0x53, 0xFF, 0xFF, 0xFF, 0x4F, 0xFF, 0xFF, 0xFF, 0x09, 0xFF,
- 0xC0, 0xD8, 0x17, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x45,
- 0xFF, 0x3A, 0xFF, 0xFF, 0xFF, 0xFF, 0x60, 0x06}};
-
- const FqElemStr res = {
- 0x8F, 0x6D, 0x54, 0xCA, 0x00, 0x85, 0xD8, 0x78, 0xA4, 0x45, 0x36,
- 0x7C, 0x23, 0xD0, 0x3C, 0x2D, 0x20, 0x78, 0xD9, 0xD7, 0xF1, 0xC3,
- 0x99, 0xD9, 0xD3, 0x0A, 0x0E, 0x86, 0x98, 0xC2, 0xA7, 0x97,
- };
// prepare data for test
for (m = 0; m < 5; m++) {
- fq_exp[m] = FfElementObj(&this->fq, ffe[m]);
+ fq_exp[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_5[m]);
// initialize data for test
p[m] = fq_exp[m];
- b[m] = &bnm[m];
+ b[m] = &this->fq_multi_exp_exp_5[m];
}
// do test
EXPECT_EQ(kEpidNoErr, FfSscmMultiExp(this->fq, p, b, 5, r));
- EXPECT_EQ(FfElementObj(&this->fq, res), r)
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_5), r)
<< "FfSscmMultiExp: Finite field element does not "
"match with reference value";
}
@@ -2380,137 +2766,89 @@ TEST_F(FfElementTest, SscmFfMultiExpWorksGivenSixExponents) {
FfElement const* p[6];
BigNumStr const* b[6];
int m = 0;
- const FqElemStr ffe[] = {
- {0x75, 0x18, 0x6A, 0x3D, 0xCC, 0x76, 0x33, 0x92, 0xD0, 0x57, 0xDA, 0xE0,
- 0x37, 0x6F, 0x71, 0xD5, 0x9E, 0x7E, 0x65, 0xED, 0xD7, 0xFD, 0x82, 0xC0,
- 0x6C, 0x83, 0x60, 0x30, 0xC1, 0xD3, 0x3D, 0x4D},
- {0xF5, 0x3A, 0x20, 0xAB, 0x22, 0x47, 0x07, 0xAE, 0x71, 0xC1, 0x91, 0x73,
- 0xEF, 0x1F, 0x1D, 0x76, 0x2E, 0xEE, 0x0D, 0xDE, 0xD9, 0xF8, 0x5C, 0x85,
- 0xC7, 0x5B, 0x93, 0x88, 0xF6, 0xFF, 0x4C, 0xA5},
- {0x21, 0xB3, 0x5E, 0xE8, 0xD2, 0xDA, 0x14, 0x1C, 0xB5, 0x2C, 0xFC, 0x61,
- 0x9D, 0xEB, 0x65, 0x87, 0xBB, 0x5B, 0xBC, 0xFD, 0x37, 0x54, 0x6B, 0xDC,
- 0xD9, 0xFA, 0x7A, 0xCD, 0x18, 0x7E, 0x8B, 0x89},
- {0x70, 0xB7, 0x19, 0x42, 0xB4, 0x41, 0x2C, 0x1B, 0xBD, 0x7B, 0x25, 0x06,
- 0xA2, 0x95, 0xB5, 0xB6, 0x70, 0xDF, 0x58, 0x71, 0xCA, 0x09, 0x12, 0x66,
- 0x5A, 0x7B, 0xF0, 0x5F, 0x43, 0x69, 0x32, 0xF6},
- {0x3D, 0x57, 0xE8, 0x3F, 0x1E, 0x39, 0x2B, 0xE5, 0xD0, 0xCF, 0xA9, 0xC8,
- 0x72, 0x10, 0x7F, 0xC5, 0x4F, 0xAE, 0xE9, 0x73, 0x28, 0x4C, 0xFC, 0x3F,
- 0xD5, 0xFF, 0xE8, 0xCF, 0x2C, 0xEB, 0x33, 0xD3},
- {0x51, 0x80, 0x15, 0x1C, 0xE6, 0x9C, 0x4B, 0x80, 0x40, 0xBA, 0x40, 0x29,
- 0x3A, 0x86, 0xA8, 0xB2, 0x66, 0x08, 0x97, 0x8D, 0xEB, 0x8B, 0xA7, 0x93,
- 0xE3, 0x49, 0xC6, 0xC0, 0x46, 0x93, 0xC1, 0x75}};
- const BigNumStr bnm[] = {
- {0xFF, 0xFF, 0xFF, 0x49, 0x50, 0xFF, 0x19, 0xFF, 0xEB, 0xFF, 0xFF, 0xFF,
- 0xFF, 0x28, 0x4A, 0x0E, 0xFF, 0x74, 0xFF, 0xC7, 0xFF, 0xD9, 0x81, 0xFF,
- 0xFF, 0xFF, 0xD5, 0x2C, 0xFF, 0xFF, 0xFF, 0xAE},
- {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0x0C, 0x03, 0xFF, 0x95, 0xFF, 0x11, 0x9D, 0xFF, 0x9B, 0xFF, 0xFF,
- 0x68, 0x44, 0xFF, 0xC9, 0xFF, 0x10, 0xC7, 0xBF},
- {0x64, 0xFF, 0x89, 0x4A, 0xFF, 0x20, 0xFF, 0xE7, 0xFF, 0x36, 0x23, 0xDD,
- 0xFF, 0xFF, 0xFC, 0xFF, 0x6B, 0xFF, 0xFF, 0xFF, 0xFF, 0x48, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x94, 0xD3, 0x59, 0xBE},
- {0x0F, 0xFF, 0x76, 0xA5, 0x9E, 0x02, 0x9B, 0xFF, 0xA1, 0xFF, 0xC2, 0xFF,
- 0x9D, 0xFF, 0x23, 0xFF, 0xFF, 0xFF, 0xFF, 0x6B, 0x81, 0x2A, 0xFF, 0x98,
- 0xFF, 0xFF, 0xB9, 0xFF, 0xB7, 0x78, 0xE6, 0xFF},
- {0xAF, 0xF3, 0xFF, 0x3C, 0xA8, 0xFF, 0xB9, 0x3A, 0xFF, 0xFF, 0xFF, 0x70,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x85, 0xFF, 0xFF, 0x52,
- 0xFF, 0x41, 0x10, 0x62, 0xFF, 0x51, 0x35, 0xFF},
- {0xFF, 0xFF, 0xFF, 0xFF, 0xD3, 0xC3, 0xD9, 0xFF, 0xFF, 0x3A, 0x44, 0x88,
- 0x04, 0xFF, 0x0B, 0xFF, 0xFF, 0xFF, 0x64, 0xFF, 0xFF, 0x52, 0xFF, 0x7D,
- 0x6B, 0x24, 0x6E, 0xFF, 0xFF, 0xFF, 0xA7, 0x71}};
- const FqElemStr res = {
- 0xFB, 0x89, 0x4F, 0xBB, 0x91, 0xEE, 0xD6, 0x57, 0x2D, 0x34, 0xF9,
- 0x0B, 0xE3, 0xEB, 0x71, 0x1D, 0x63, 0x74, 0x96, 0x3B, 0xD4, 0x02,
- 0x2F, 0x08, 0xDB, 0x95, 0x6A, 0x40, 0x68, 0xD4, 0x55, 0x76,
- };
// prepare data for test
for (m = 0; m < 6; m++) {
- fq_exp[m] = FfElementObj(&this->fq, ffe[m]);
+ fq_exp[m] = FfElementObj(&this->fq, this->fq_multi_exp_base_6[m]);
// initialize data for test
p[m] = fq_exp[m];
- b[m] = &bnm[m];
+ b[m] = &this->fq_multi_exp_exp_6[m];
}
// do test
EXPECT_EQ(kEpidNoErr, FfSscmMultiExp(this->fq, p, b, 6, r));
- EXPECT_EQ(FfElementObj(&this->fq, res), r)
+ EXPECT_EQ(FfElementObj(&this->fq, this->fq_multi_exp_res_6), r)
<< "FfSscmMultiExp: Finite field element does not "
"match with reference value";
}
-///////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////
// FfGetRandom
TEST_F(FfElementTest, FfGetRandomFailsGivenArgumentsMismatch) {
Prng my_prng;
- EXPECT_EQ(kEpidBadArgErr, FfGetRandom(this->fq12, &this->bn_one_data,
- &Prng::Generate, &my_prng, this->fq_r));
EXPECT_EQ(kEpidBadArgErr,
- FfGetRandom(this->fq, &this->bn_one_data, &Prng::Generate, &my_prng,
- this->fq12_r));
+ FfGetRandom(this->fq12, &this->bn_1_str, &Prng::Generate, &my_prng,
+ this->fq_result));
+ EXPECT_EQ(kEpidBadArgErr,
+ FfGetRandom(this->fq, &this->bn_1_str, &Prng::Generate, &my_prng,
+ this->fq12_result));
}
TEST_F(FfElementTest, FfGetRandomFailsGivenNullPtr) {
Prng my_prng;
FfElementObj r(&this->fq);
- EXPECT_EQ(kEpidBadArgErr, FfGetRandom(nullptr, &this->bn_one_data,
+ EXPECT_EQ(kEpidBadArgErr, FfGetRandom(nullptr, &this->bn_1_str,
&Prng::Generate, &my_prng, r));
EXPECT_EQ(kEpidBadArgErr,
FfGetRandom(this->fq, nullptr, &Prng::Generate, &my_prng, r));
EXPECT_EQ(kEpidBadArgErr,
- FfGetRandom(this->fq, &this->bn_one_data, nullptr, &my_prng, r));
- EXPECT_EQ(kEpidBadArgErr, FfGetRandom(this->fq, &this->bn_one_data,
+ FfGetRandom(this->fq, &this->bn_1_str, nullptr, &my_prng, r));
+ EXPECT_EQ(kEpidBadArgErr, FfGetRandom(this->fq, &this->bn_1_str,
&Prng::Generate, &my_prng, nullptr));
}
TEST_F(FfElementTest, FfGetRandomSucceedsGivenFq2) {
Prng my_prng;
FfElementObj r(&this->fq2);
- EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq2, &this->bn_one_data,
- &Prng::Generate, &my_prng, r));
+ EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq2, &this->bn_1_str, &Prng::Generate,
+ &my_prng, r));
}
TEST_F(FfElementTest, FfGetRandomSucceedsGivenFq6) {
Prng my_prng;
FfElementObj r(&this->fq6);
- EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq6, &this->bn_one_data,
- &Prng::Generate, &my_prng, r));
+ EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq6, &this->bn_1_str, &Prng::Generate,
+ &my_prng, r));
}
TEST_F(FfElementTest, FfGetRandomSucceedsGivenFq12) {
Prng my_prng;
FfElementObj r(&this->fq12);
- EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq12, &this->bn_one_data,
+ EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq12, &this->bn_1_str,
&Prng::Generate, &my_prng, r));
}
TEST_F(FfElementTest, FfGetRandomSuccedsGivenLowBound) {
Prng my_prng;
FfElementObj r(&this->fq);
- const BigNumStr bn_low_data1 = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff};
- const BigNumStr bn_low_data2 = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff};
FqElemStr buf;
unsigned int result;
- EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq, &this->bn_one_data,
- &Prng::Generate, &my_prng, r));
+ EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq, &this->bn_1_str, &Prng::Generate,
+ &my_prng, r));
THROW_ON_EPIDERR(WriteFfElement(this->fq, r, &buf, sizeof(buf)));
- THROW_ON_EPIDERR(Cmp_OctStr256(&this->bn_one_data.data, &buf.data, &result));
+ THROW_ON_EPIDERR(Cmp_OctStr256(&this->bn_1_str.data, &buf.data, &result));
EXPECT_EQ(result, (unsigned int)2);
- EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq, &this->bn_two_data,
- &Prng::Generate, &my_prng, r));
+ EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq, &this->bn_2_str, &Prng::Generate,
+ &my_prng, r));
THROW_ON_EPIDERR(WriteFfElement(this->fq, r, &buf, sizeof(buf)));
- THROW_ON_EPIDERR(Cmp_OctStr256(&this->bn_two_data.data, &buf.data, &result));
+ THROW_ON_EPIDERR(Cmp_OctStr256(&this->bn_2_str.data, &buf.data, &result));
EXPECT_EQ(result, (unsigned int)2);
- EXPECT_EQ(kEpidNoErr,
- FfGetRandom(this->fq, &bn_low_data1, &Prng::Generate, &my_prng, r));
+ EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq, &this->bn_0xffff_str,
+ &Prng::Generate, &my_prng, r));
THROW_ON_EPIDERR(WriteFfElement(this->fq, r, &buf, sizeof(buf)));
- THROW_ON_EPIDERR(Cmp_OctStr256(&bn_low_data1.data, &buf.data, &result));
+ THROW_ON_EPIDERR(
+ Cmp_OctStr256(&this->bn_0xffff_str.data, &buf.data, &result));
EXPECT_EQ(result, (unsigned int)2);
- EXPECT_EQ(kEpidNoErr,
- FfGetRandom(this->fq, &bn_low_data2, &Prng::Generate, &my_prng, r));
+ EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq, &this->bn_0xffff_str,
+ &Prng::Generate, &my_prng, r));
THROW_ON_EPIDERR(WriteFfElement(this->fq, r, &buf, sizeof(buf)));
- THROW_ON_EPIDERR(Cmp_OctStr256(&bn_low_data2.data, &buf.data, &result));
+ THROW_ON_EPIDERR(
+ Cmp_OctStr256(&this->bn_0xffff_str.data, &buf.data, &result));
EXPECT_EQ(result, (unsigned int)2);
}
@@ -2519,10 +2857,10 @@ TEST_F(FfElementTest, FfGetRandomGeneratesDifferentNumbers) {
FfElementObj r1(&this->fq);
FfElementObj r2(&this->fq);
bool result;
- EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq, &this->bn_one_data,
- &Prng::Generate, &my_prng, r1));
- EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq, &this->bn_one_data,
- &Prng::Generate, &my_prng, r2));
+ EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq, &this->bn_1_str, &Prng::Generate,
+ &my_prng, r1));
+ EXPECT_EQ(kEpidNoErr, FfGetRandom(this->fq, &this->bn_1_str, &Prng::Generate,
+ &my_prng, r2));
THROW_ON_EPIDERR(FfIsEqual(this->fq, r1, r2, &result));
EXPECT_FALSE(result);
}
@@ -2532,12 +2870,120 @@ TEST_F(FfElementTest, FfGetRandomFailsOnMaxIterGivenLargeLowBound) {
// FfGetRandom generates random data between [low_bound, modulus-1]
// modulus in this case is Intel(R) EPID 2.0 parameter q
// giving low_bound = modulus - {0x30, 0x13} should get kEpidRandMaxIterErr
- const BigNumStr bn_low_data = {
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46, 0xE5, 0xF2,
- 0x5E, 0xEE, 0x71, 0xA4, 0x9F, 0x0C, 0xDC, 0x65, 0xFB, 0x12, 0x98,
- 0x0A, 0x82, 0xD3, 0x29, 0x2D, 0xDB, 0xAE, 0xD3, 0x00, 0x00};
- EXPECT_EQ(kEpidRandMaxIterErr,
- FfGetRandom(this->fq, &bn_low_data, &Prng::Generate, &my_prng, r));
+ EXPECT_EQ(kEpidRandMaxIterErr, FfGetRandom(this->fq, &this->fq_qm0x3013_str,
+ &Prng::Generate, &my_prng, r));
+}
+
+////////////////////////////////////////////////
+// FfSqrt
+TEST_F(FfElementTest, FfSqrtFailsGivenNullPtr) {
+ FfElementObj r(&this->fq);
+ EXPECT_EQ(kEpidBadArgErr, FfSqrt(nullptr, this->fq_4, r));
+ EXPECT_EQ(kEpidBadArgErr, FfSqrt(this->fq, nullptr, r));
+ EXPECT_EQ(kEpidBadArgErr, FfSqrt(this->fq, this->fq_4, nullptr));
+}
+
+TEST_F(FfElementTest, FfSqrtWorksForOne) {
+ FfElementObj r(&this->fq);
+ FfElementObj s(&this->fq);
+ EXPECT_EQ(kEpidNoErr, FfSqrt(this->fq, this->fq_1, r));
+ EXPECT_EQ(this->fq_1, r);
+}
+
+TEST_F(FfElementTest, FfSqrtFailsForTwo) {
+ FfElementObj r(&this->fq);
+ EXPECT_EQ(kEpidMathQuadraticNonResidueError, FfSqrt(this->fq, this->fq_2, r));
+}
+
+TEST_F(FfElementTest, FfSqrtFailsForThree) {
+ FfElementObj r(&this->fq);
+ EXPECT_EQ(kEpidMathQuadraticNonResidueError, FfSqrt(this->fq, this->fq_3, r));
+}
+
+TEST_F(FfElementTest, FfSqrtWorksForFour) {
+ FfElementObj r(&this->fq);
+ EXPECT_EQ(kEpidNoErr, FfSqrt(this->fq, this->fq_4, r));
+ EXPECT_EQ(this->fq_qm2, r);
+}
+
+TEST_F(FfElementTest, FfSqrtFailsForFive) {
+ FfElementObj r(&this->fq);
+ EXPECT_EQ(kEpidMathQuadraticNonResidueError, FfSqrt(this->fq, this->fq_5, r));
+}
+
+TEST_F(FfElementTest, FfSqrtWorksForEpid11Prime) {
+ // given b_str value ensure sqrt algorithm step 7 if clause is triggered
+ const BigNumStr b_str = {0x06, 0xc1, 0x26, 0xe8, 0xa5, 0xa5, 0x21, 0x19,
+ 0x07, 0x42, 0x49, 0x77, 0x7c, 0x5c, 0x98, 0x7f,
+ 0xd4, 0x0c, 0x42, 0xf5, 0x25, 0x2c, 0xac, 0xb9,
+ 0x7e, 0x09, 0x70, 0xf0, 0x84, 0x3b, 0x81, 0x46};
+ FfElementObj b(&this->epid11_fq, &b_str, sizeof((b_str)));
+
+ FfElementObj r(&this->epid11_fq);
+ FfElementObj s(&this->epid11_fq);
+ FfElementObj r2(&this->epid11_fq);
+
+ EXPECT_EQ(kEpidNoErr, FfMul(this->epid11_fq, b, b, s));
+ EXPECT_EQ(kEpidNoErr, FfSqrt(this->epid11_fq, s, r));
+ EXPECT_EQ(kEpidNoErr, FfMul(this->epid11_fq, r, r, r2));
+ EXPECT_EQ(s, r2);
+}
+
+TEST_F(FfElementTest, FfSqrtReturnsARoot) {
+ Prng my_prng;
+ FfElementObj r(&this->fq);
+ FfElementObj b(&this->fq);
+ FfElementObj s(&this->fq);
+ FfElementObj r2(&this->fq);
+ unsigned int i;
+ for (i = 0; i < 1000; i++) {
+ ASSERT_EQ(kEpidNoErr, FfGetRandom(this->fq, &this->bn_2_str,
+ &Prng::Generate, &my_prng, b));
+ ASSERT_EQ(kEpidNoErr, FfMul(this->fq, b, b, s));
+ ASSERT_EQ(kEpidNoErr, FfSqrt(this->fq, s, r));
+ ASSERT_EQ(kEpidNoErr, FfMul(this->fq, r, r, r2));
+ ASSERT_EQ(s, r2);
+ }
+}
+
+TEST_F(FfElementTest, FfSqrtReturnsARootInEpid11) {
+ Prng my_prng;
+ FfElementObj r(&this->epid11_fq);
+ FfElementObj b(&this->epid11_fq);
+ FfElementObj s(&this->epid11_fq);
+ FfElementObj r2(&this->epid11_fq);
+ unsigned int i;
+ for (i = 0; i < 1000; i++) {
+ ASSERT_EQ(kEpidNoErr, FfGetRandom(this->epid11_fq, &this->bn_2_str,
+ &Prng::Generate, &my_prng, b));
+ ASSERT_EQ(kEpidNoErr, FfMul(this->epid11_fq, b, b, s));
+ ASSERT_EQ(kEpidNoErr, FfSqrt(this->epid11_fq, s, r));
+ ASSERT_EQ(kEpidNoErr, FfMul(this->epid11_fq, r, r, r2));
+ ASSERT_EQ(s, r2);
+ }
+}
+
+TEST_F(FfElementTest, FfSqrtReturnsARoot224Prime) {
+ const BigNumStr prime_224r1 = {
+ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
+ FiniteFieldObj f_q(prime_224r1);
+
+ Prng my_prng;
+ FfElementObj r(&f_q);
+ FfElementObj b(&f_q);
+ FfElementObj s(&f_q);
+ FfElementObj r2(&f_q);
+ unsigned int i;
+ for (i = 0; i < 100; i++) {
+ EXPECT_EQ(kEpidNoErr,
+ FfGetRandom(f_q, &this->bn_2_str, &Prng::Generate, &my_prng, b));
+ EXPECT_EQ(kEpidNoErr, FfMul(f_q, b, b, s));
+ EXPECT_EQ(kEpidNoErr, FfSqrt(f_q, s, r));
+ EXPECT_EQ(kEpidNoErr, FfMul(f_q, r, r, r2));
+ EXPECT_EQ(s, r2);
+ }
}
} // namespace
diff --git a/epid/common/math/unittests/finitefield-test.cc b/epid/common/math/unittests/finitefield-test.cc
index 78b18e9..badce2c 100644
--- a/epid/common/math/unittests/finitefield-test.cc
+++ b/epid/common/math/unittests/finitefield-test.cc
@@ -29,6 +29,10 @@ extern "C" {
#include "epid/common/math/finitefield.h"
}
+#ifndef COUNT_OF
+#define COUNT_OF(a) (sizeof(a) / sizeof((a)[0]))
+#endif // COUNT_OF
+
namespace {
/// Intel(R) EPID 2.0 parameters q, beta, xi and v
BigNumStr q = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF0, 0xCD, 0x46, 0xE5,
@@ -65,6 +69,25 @@ Fq6ElemStr v = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}}};
+
+FqElemStr qnr = {{0x08, 0x66, 0xA7, 0x67, 0x36, 0x6E, 0x62, 0x71, 0xB7, 0xA6,
+ 0x52, 0x94, 0x8F, 0xFB, 0x25, 0x9E, 0xE6, 0x4F, 0x25, 0xE5,
+ 0x26, 0x9A, 0x2B, 0x6E, 0x7E, 0xF8, 0xA6, 0x39, 0xAE, 0x46,
+ 0xAA, 0x24}};
+
+const BigNumStr coeffs[3] = {
+ {{{0x02, 0x16, 0x7A, 0x61, 0x53, 0xDD, 0xF6, 0xE2, 0x89, 0x15, 0xA0, 0x94,
+ 0xF1, 0xB5, 0xDC, 0x65, 0x21, 0x15, 0x62, 0xE1, 0x7D, 0xC5, 0x43, 0x89,
+ 0xEE, 0xB4, 0xEF, 0xC8, 0xA0, 0x8E, 0x34, 0x0F}}},
+
+ {{{0x04, 0x82, 0x27, 0xE1, 0xEB, 0x98, 0x64, 0xC2, 0x8D, 0x8F, 0xDD, 0x0E,
+ 0x82, 0x40, 0xAE, 0xD4, 0x31, 0x63, 0xD6, 0x46, 0x32, 0x16, 0x85, 0x7A,
+ 0xB7, 0x18, 0x68, 0xB8, 0x17, 0x02, 0x81, 0xA6}}},
+
+ {{{0x06, 0x20, 0x76, 0xE8, 0x54, 0x54, 0x53, 0xB4, 0xA9, 0xD8, 0x44, 0x4B,
+ 0xAA, 0xFB, 0x1C, 0xFD, 0xAE, 0x15, 0xCA, 0x29, 0x79, 0xA6, 0x24, 0xA4,
+ 0x0A, 0xF6, 0x1E, 0xAC, 0xED, 0xFB, 0x10, 0x41}}}};
+
TEST(FiniteField, DeleteWorksGivenNewlyCreatedFiniteField) {
FiniteField* finitefield = nullptr;
EpidStatus sts = NewFiniteField(&q, &finitefield);
@@ -170,4 +193,59 @@ TEST(FiniteField, BinomialExtensionCanBuildEpid2GtField) {
DeleteFiniteField(&binom_ext_fq12_ptr);
}
+TEST(FiniteField, PolynomialExtensionFailsGivenNullPointer) {
+ FiniteField* ext_finite_field_ptr = nullptr;
+ FiniteFieldObj ground_field(q);
+ EXPECT_EQ(kEpidBadArgErr,
+ NewFiniteFieldViaPolynomialExtension(
+ nullptr, coeffs, COUNT_OF(coeffs), &ext_finite_field_ptr));
+ DeleteFiniteField(&ext_finite_field_ptr);
+ EXPECT_EQ(kEpidBadArgErr,
+ NewFiniteFieldViaPolynomialExtension(ground_field, nullptr, 2,
+ &ext_finite_field_ptr));
+ DeleteFiniteField(&ext_finite_field_ptr);
+ EXPECT_EQ(kEpidBadArgErr, NewFiniteFieldViaPolynomialExtension(
+ ground_field, coeffs, 2, nullptr));
+}
+
+TEST(FiniteField, PolynomialExtensionFailsGivenBadDegree) {
+ FiniteField* ext_finite_field_ptr = nullptr;
+ FiniteFieldObj ground_field(q);
+ FfElementObj ground_element(&ground_field, beta);
+ EXPECT_EQ(kEpidBadArgErr,
+ NewFiniteFieldViaPolynomialExtension(ground_field, coeffs, 0,
+ &ext_finite_field_ptr));
+ DeleteFiniteField(&ext_finite_field_ptr);
+ EXPECT_EQ(kEpidBadArgErr,
+ NewFiniteFieldViaPolynomialExtension(ground_field, coeffs, -1,
+ &ext_finite_field_ptr));
+ DeleteFiniteField(&ext_finite_field_ptr);
+ EXPECT_EQ(kEpidBadArgErr,
+ NewFiniteFieldViaPolynomialExtension(ground_field, coeffs, -99,
+ &ext_finite_field_ptr));
+ DeleteFiniteField(&ext_finite_field_ptr);
+}
+
+TEST(FiniteField, CanBuildEpid11GtField) {
+ // construct Fq finite field
+ FiniteFieldObj fq(q);
+
+ // construct Fqd finite field
+ FiniteFieldObj fqd(fq, coeffs, COUNT_OF(coeffs));
+
+ // Fqk ground element is {-qnr, 0, 0}
+ FfElementObj neg_qnr(&fq);
+ THROW_ON_EPIDERR(FfNeg(fq, FfElementObj(&fq, qnr), neg_qnr));
+ Fq3ElemStr ground_element_str = {0};
+ THROW_ON_EPIDERR(WriteFfElement(fq, neg_qnr, &ground_element_str.a[0],
+ sizeof(ground_element_str.a[0])));
+ FfElementObj ground_element(&fqd, ground_element_str);
+
+ // construct Fqk finite field
+ FiniteField* gt_ptr = nullptr;
+ EXPECT_EQ(kEpidNoErr,
+ NewFiniteFieldViaBinomalExtension(fqd, ground_element, 2, &gt_ptr));
+ DeleteFiniteField(&gt_ptr);
+}
+
} // namespace
diff --git a/epid/common/math/unittests/octstrconvert-test.cc b/epid/common/math/unittests/octstrconvert-test.cc
index 5813429..2ad606b 100644
--- a/epid/common/math/unittests/octstrconvert-test.cc
+++ b/epid/common/math/unittests/octstrconvert-test.cc
@@ -24,7 +24,10 @@
#include "epid/common/stdtypes.h"
#include "gtest/gtest.h"
-#include "epid/common/math/bignum-internal.h"
+
+extern "C" {
+#include "epid/common/math/src/bignum-internal.h"
+}
namespace {
diff --git a/epid/common/math/unittests/pairing-test.cc b/epid/common/math/unittests/pairing-test.cc
index aab5dea..a688307 100644
--- a/epid/common/math/unittests/pairing-test.cc
+++ b/epid/common/math/unittests/pairing-test.cc
@@ -32,9 +32,9 @@
extern "C" {
#include "epid/common/math/pairing.h"
-#include "epid/common/math/ecgroup-internal.h"
-#include "epid/common/math/finitefield-internal.h"
-#include "epid/common/math/pairing-internal.h"
+#include "epid/common/math/src/ecgroup-internal.h"
+#include "epid/common/math/src/finitefield-internal.h"
+#include "epid/common/math/src/pairing-internal.h"
}
/// compares Fq12ElemStr values
diff --git a/epid/common/math/unittests/tatepairing-test.cc b/epid/common/math/unittests/tatepairing-test.cc
new file mode 100644
index 0000000..1a15f6a
--- /dev/null
+++ b/epid/common/math/unittests/tatepairing-test.cc
@@ -0,0 +1,231 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Intel(R) EPID 1.1 Pairing unit tests.
+ */
+
+#include <cstring>
+
+#include "gtest/gtest.h"
+
+#include "epid/common-testhelper/errors-testhelper.h"
+#include "epid/common-testhelper/1.1/epid_params-testhelper.h"
+#include "epid/common-testhelper/ffelement_wrapper-testhelper.h"
+
+extern "C" {
+#include "epid/common/math/tatepairing.h"
+}
+
+/// compares Epid11GtElemStr values
+bool operator==(Epid11GtElemStr const& lhs, Epid11GtElemStr const& rhs) {
+ return 0 == std::memcmp(&lhs, &rhs, sizeof(lhs));
+}
+
+namespace {
+
+class Epid11PairingTest : public ::testing::Test {
+ public:
+ virtual void SetUp() { params = new Epid11ParamsObj(); }
+ virtual void TearDown() { delete params; }
+
+ static const Epid11G1ElemStr kGaElemStr;
+ static const Epid11G2ElemStr kGbElemStr;
+ Epid11ParamsObj* params;
+};
+
+const Epid11G1ElemStr Epid11PairingTest::kGaElemStr = {
+ 0x02, 0x5A, 0xC4, 0xC5, 0xCD, 0x7D, 0xAA, 0xFD, 0x26, 0xE5, 0x0B,
+ 0xA9, 0xB4, 0xE1, 0x72, 0xA1, 0x65, 0x2D, 0x84, 0xAD, 0x34, 0x34,
+ 0xF8, 0x62, 0x98, 0x6A, 0x15, 0xBE, 0xEA, 0xE3, 0xCC, 0x56, 0x05,
+ 0x70, 0x5F, 0x4F, 0x11, 0xAF, 0x45, 0xCF, 0x04, 0x1B, 0x96, 0xAD,
+ 0xEB, 0x26, 0xEE, 0x95, 0x65, 0x4B, 0xD3, 0xD6, 0x5C, 0x13, 0x76,
+ 0xB7, 0x7A, 0xA1, 0xC6, 0xDA, 0xED, 0x5A, 0x40, 0xCE};
+
+const Epid11G2ElemStr Epid11PairingTest::kGbElemStr = {
+ 0x02, 0x10, 0x9A, 0xF4, 0x06, 0x32, 0x30, 0x89, 0xCB, 0x95, 0xE9, 0x55,
+ 0x0E, 0x9D, 0xAF, 0x0E, 0x98, 0xCD, 0xCA, 0xDC, 0xB1, 0xFF, 0xFC, 0xD1,
+ 0x45, 0x66, 0xBB, 0x86, 0x46, 0x1E, 0x8C, 0x30, 0x04, 0x78, 0x53, 0xE1,
+ 0x3F, 0x96, 0xC5, 0xE4, 0x15, 0x23, 0x7B, 0x1F, 0x3F, 0x2C, 0xD3, 0x95,
+ 0x40, 0xBC, 0x7A, 0x31, 0x1F, 0x14, 0x38, 0x9E, 0x1A, 0xA5, 0xD6, 0x63,
+ 0x10, 0x91, 0xE4, 0xD3, 0x00, 0xB4, 0x02, 0xBC, 0x47, 0xFA, 0xA6, 0x29,
+ 0x82, 0x0B, 0xB1, 0xD5, 0xFF, 0xF2, 0xE6, 0xB0, 0xC6, 0xAE, 0xE8, 0x7B,
+ 0x91, 0xD9, 0xEE, 0x66, 0x07, 0x1F, 0xFD, 0xA2, 0xE7, 0x02, 0x66, 0xDD,
+ 0x05, 0x2E, 0xF8, 0xC6, 0xC1, 0x6A, 0xEF, 0x3C, 0xC1, 0x95, 0xF6, 0x26,
+ 0xCE, 0x5E, 0x55, 0xD1, 0x64, 0x13, 0x28, 0xB1, 0x18, 0x57, 0xD8, 0x1B,
+ 0x84, 0xFA, 0xEC, 0x7E, 0x5D, 0x99, 0x06, 0x49, 0x05, 0x73, 0x35, 0xA9,
+ 0xA7, 0xF2, 0xA1, 0x92, 0x5F, 0x3E, 0x7C, 0xDF, 0xAC, 0xFE, 0x0F, 0xF5,
+ 0x08, 0xD0, 0x3C, 0xAE, 0xCD, 0x58, 0x00, 0x5F, 0xD0, 0x84, 0x7E, 0xEA,
+ 0x63, 0x57, 0xFE, 0xC6, 0x01, 0x56, 0xDA, 0xF3, 0x72, 0x61, 0xDA, 0xC6,
+ 0x93, 0xB0, 0xAC, 0xEF, 0xAA, 0xD4, 0x51, 0x6D, 0xCA, 0x71, 0x1E, 0x06,
+ 0x73, 0xEA, 0x83, 0xB2, 0xB1, 0x99, 0x4A, 0x4D, 0x4A, 0x0D, 0x35, 0x07};
+
+///////////////////////////////////////////////////////////////////////
+// NewEpid11PairingState / DeleteEpid11PairingState
+
+// test that delete works in a "normal" valid case.
+TEST_F(Epid11PairingTest, DeleteWorksGivenNewlyCreatedPairingState) {
+ Epid11PairingState* ps = nullptr;
+ THROW_ON_EPIDERR(NewEpid11PairingState(this->params->G1, this->params->G2,
+ this->params->GT, &ps));
+ EXPECT_NO_THROW(DeleteEpid11PairingState(&ps));
+}
+
+// test that delete works if there is nothing to do
+TEST_F(Epid11PairingTest, DeleteWorksGivenNullPointer) {
+ EXPECT_NO_THROW(DeleteEpid11PairingState(nullptr));
+ Epid11PairingState* ps = nullptr;
+ EXPECT_NO_THROW(DeleteEpid11PairingState(&ps));
+}
+
+// test that new succeeds with valid parameters
+TEST_F(Epid11PairingTest, NewSucceedsGivenValidParameters) {
+ Epid11PairingState* ps = nullptr;
+ EXPECT_EQ(kEpidNoErr,
+ NewEpid11PairingState(this->params->G1, this->params->G2,
+ this->params->GT, &ps));
+ DeleteEpid11PairingState(&ps);
+}
+
+// test that new fails if any options are NULL
+TEST_F(Epid11PairingTest, NewFailsGivenNullParameters) {
+ Epid11PairingState* ps = nullptr;
+ EXPECT_EQ(kEpidBadArgErr, NewEpid11PairingState(nullptr, this->params->G2,
+ this->params->GT, &ps));
+ DeleteEpid11PairingState(&ps);
+ EXPECT_EQ(kEpidBadArgErr, NewEpid11PairingState(this->params->G1, nullptr,
+ this->params->GT, &ps));
+ DeleteEpid11PairingState(&ps);
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ NewEpid11PairingState(this->params->G1, this->params->G2, nullptr, &ps));
+ DeleteEpid11PairingState(&ps);
+ EXPECT_EQ(kEpidBadArgErr,
+ NewEpid11PairingState(this->params->G1, this->params->G2,
+ this->params->GT, nullptr));
+}
+
+// test that new checks that G1 is valid
+TEST_F(Epid11PairingTest, NewFailsGivenInvalidG1) {
+ Epid11PairingState* ps = nullptr;
+ EXPECT_EQ(kEpidBadArgErr,
+ NewEpid11PairingState(this->params->G2, this->params->G2,
+ this->params->GT, &ps));
+ DeleteEpid11PairingState(&ps);
+}
+
+// test that new checks that G2 is valid
+TEST_F(Epid11PairingTest, NewFailsGivenInvalidG2) {
+ Epid11PairingState* ps = nullptr;
+ EXPECT_EQ(kEpidBadArgErr,
+ NewEpid11PairingState(this->params->G1, this->params->G1,
+ this->params->GT, &ps));
+ DeleteEpid11PairingState(&ps);
+}
+
+// test that new checks that GT is valid
+TEST_F(Epid11PairingTest, NewFailsGivenInvalidGT) {
+ FiniteFieldObj GFp;
+ Epid11PairingState* ps = nullptr;
+ EXPECT_EQ(kEpidBadArgErr, NewEpid11PairingState(this->params->G1,
+ this->params->G2, GFp, &ps));
+ DeleteEpid11PairingState(&ps);
+}
+///////////////////////////////////////////////////////////////////////
+// Pairing
+TEST_F(Epid11PairingTest, PairingWorksFromG1AndG2ToGt) {
+ Epid11GtElemStr r_expected_str = {
+ 0x02, 0xE1, 0x84, 0x16, 0x53, 0x10, 0x0E, 0xEC, 0xFB, 0xDE, 0xF3, 0x5E,
+ 0x2E, 0x26, 0xEE, 0x45, 0x0C, 0xD7, 0x97, 0xA7, 0x35, 0x43, 0x08, 0x5E,
+ 0x03, 0xB9, 0xFE, 0x91, 0x8A, 0x02, 0x14, 0xB4, 0x07, 0x7F, 0x8A, 0x5E,
+ 0xFD, 0xE1, 0x83, 0xC9, 0xCE, 0x1C, 0xC9, 0xF1, 0xCC, 0xB0, 0x52, 0x81,
+ 0xAD, 0x80, 0x2D, 0x13, 0x1C, 0x32, 0xEC, 0xAF, 0xA0, 0x8B, 0x66, 0x05,
+ 0x0A, 0x89, 0x26, 0xAD, 0x06, 0x75, 0x3B, 0x3B, 0xE5, 0xFB, 0x62, 0x20,
+ 0xA8, 0xC3, 0x91, 0xC6, 0x26, 0xC6, 0x58, 0x71, 0xB1, 0x85, 0x06, 0xBD,
+ 0xAE, 0x06, 0x51, 0xF9, 0x86, 0x2A, 0xC1, 0x5A, 0x11, 0xBA, 0x17, 0xE1,
+ 0x01, 0x4B, 0x22, 0x66, 0xEB, 0xCF, 0x7E, 0x2B, 0xE7, 0x0A, 0xF2, 0x77,
+ 0x1C, 0xE6, 0x48, 0x8F, 0x3E, 0xD8, 0x7D, 0x71, 0xF1, 0x78, 0x4C, 0x80,
+ 0x93, 0xF8, 0x08, 0xB7, 0xCB, 0xAF, 0x04, 0xDF, 0x04, 0x5C, 0x19, 0x3C,
+ 0xD3, 0x29, 0x11, 0xE7, 0xC5, 0x58, 0x68, 0xEA, 0x65, 0xBB, 0x48, 0x5F,
+ 0x3A, 0x62, 0xD9, 0x62, 0x40, 0x57, 0x53, 0x19, 0x9B, 0xB5, 0x6C, 0x52,
+ 0x0C, 0x33, 0x27, 0x14, 0x06, 0x6A, 0xAD, 0xB0, 0x38, 0x41, 0xD0, 0xA5,
+ 0x37, 0x54, 0xC5, 0x3E, 0x3B, 0x5F, 0x1A, 0xAF, 0x75, 0x8F, 0xCA, 0x42,
+ 0xB9, 0xA6, 0x1E, 0x18, 0xB2, 0x6B, 0x31, 0x7D, 0x5C, 0xC6, 0xE8, 0xDC};
+
+ Epid11GtElemStr r_str = {0};
+
+ FfElementObj r(&this->params->GT);
+ EcPointObj ga_elem(&this->params->G1, this->kGaElemStr);
+ EcPointObj gb_elem(&this->params->G2, this->kGbElemStr);
+
+ Epid11PairingState* ps = nullptr;
+ THROW_ON_EPIDERR(NewEpid11PairingState(this->params->G1, this->params->G2,
+ this->params->GT, &ps));
+ EXPECT_EQ(kEpidNoErr, Epid11Pairing(ps, ga_elem, gb_elem, r));
+ DeleteEpid11PairingState(&ps);
+
+ THROW_ON_EPIDERR(WriteFfElement(this->params->GT, r, &r_str, sizeof(r_str)));
+ EXPECT_EQ(r_expected_str, r_str);
+}
+
+TEST_F(Epid11PairingTest, PairingGivenPointAtInfinityReturns1) {
+ Epid11GtElemStr r_expected_str = {0};
+ r_expected_str.a[0].a[0].data.data[31] = 1;
+
+ Epid11GtElemStr r_str = {0};
+
+ FfElementObj r(&this->params->GT);
+ EcPointObj ga_elem(&this->params->G1);
+ EcPointObj gb_elem(&this->params->G2, this->kGbElemStr);
+
+ Epid11PairingState* ps = nullptr;
+ THROW_ON_EPIDERR(NewEpid11PairingState(this->params->G1, this->params->G2,
+ this->params->GT, &ps));
+ EXPECT_EQ(kEpidNoErr, Epid11Pairing(ps, ga_elem, gb_elem, r));
+ DeleteEpid11PairingState(&ps);
+
+ THROW_ON_EPIDERR(WriteFfElement(this->params->GT, r, &r_str, sizeof(r_str)));
+ EXPECT_EQ(r_expected_str, r_str);
+}
+
+TEST_F(Epid11PairingTest, PairingFailsOnPointMissmatch) {
+ FfElementObj r(&this->params->GT);
+
+ EcPointObj ga_elem(&this->params->G1, this->kGaElemStr);
+ EcPointObj gb_elem(&this->params->G2, this->kGbElemStr);
+
+ Epid11PairingState* ps = nullptr;
+ THROW_ON_EPIDERR(NewEpid11PairingState(this->params->G1, this->params->G2,
+ this->params->GT, &ps));
+ EXPECT_EQ(kEpidBadArgErr, Epid11Pairing(ps, gb_elem, ga_elem, r));
+ DeleteEpid11PairingState(&ps);
+}
+
+TEST_F(Epid11PairingTest, PairingFailsOnInvalidPointInG1) {
+ FfElementObj r(&this->params->GT);
+
+ EcPointObj ga_elem(&this->params->G3);
+ EcPointObj gb_elem(&this->params->G2, this->kGbElemStr);
+
+ Epid11PairingState* ps = nullptr;
+ THROW_ON_EPIDERR(NewEpid11PairingState(this->params->G1, this->params->G2,
+ this->params->GT, &ps));
+ EXPECT_EQ(kEpidBadArgErr, Epid11Pairing(ps, gb_elem, ga_elem, r));
+ DeleteEpid11PairingState(&ps);
+}
+
+} // namespace
diff --git a/epid/common/commitment.c b/epid/common/src/commitment.c
index 7cb3f9c..790a2be 100644
--- a/epid/common/commitment.c
+++ b/epid/common/src/commitment.c
@@ -19,13 +19,13 @@
* \brief Commitment hash implementation.
*/
#include <limits.h>
-#include "epid/common/commitment.h"
-#include "epid/common/memory.h"
+#include "epid/common/src/commitment.h"
+#include "epid/common/src/memory.h"
EpidStatus SetKeySpecificCommitValues(GroupPubKey const* pub_key,
CommitValues* values) {
static const Epid2Params params = {
-#include "epid/common/epid2params_ate.inc"
+#include "epid/common/src/epid2params_ate.inc"
};
if (!pub_key || !values) return kEpidBadArgErr;
@@ -101,6 +101,7 @@ EpidStatus CalculateCommitmentHash(CommitValues const* values, FiniteField* Fp,
if (kEpidNoErr != sts) break;
// get m into buffer
if (msg) {
+ // Memory copy is used to copy a message of variable length
if (0 != memcpy_S(t3mconcat_buf + sizeof(FpElemStr),
t3mconcat_size - sizeof(FpElemStr), msg, msg_len)) {
sts = kEpidBadArgErr;
diff --git a/epid/common/commitment.h b/epid/common/src/commitment.h
index c607d58..4676cd9 100644
--- a/epid/common/commitment.h
+++ b/epid/common/src/commitment.h
@@ -13,8 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################*/
-#ifndef EPID_COMMON_COMMITMENT_H_
-#define EPID_COMMON_COMMITMENT_H_
+#ifndef EPID_COMMON_SRC_COMMITMENT_H_
+#define EPID_COMMON_SRC_COMMITMENT_H_
/*!
* \file
* \brief Commitment hash interface.
@@ -117,4 +117,4 @@ EpidStatus CalculateCommitmentHash(CommitValues const* values, FiniteField* Fp,
size_t msg_len, FfElement* c);
/*! @} */
-#endif // EPID_COMMON_COMMITMENT_H_
+#endif // EPID_COMMON_SRC_COMMITMENT_H_
diff --git a/epid/common/endian_convert.h b/epid/common/src/endian_convert.h
index 432f2b4..2336f7e 100644
--- a/epid/common/endian_convert.h
+++ b/epid/common/src/endian_convert.h
@@ -13,8 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################*/
-#ifndef EPID_COMMON_ENDIAN_CONVERT_H_
-#define EPID_COMMON_ENDIAN_CONVERT_H_
+#ifndef EPID_COMMON_SRC_ENDIAN_CONVERT_H_
+#define EPID_COMMON_SRC_ENDIAN_CONVERT_H_
#include <stdint.h>
@@ -26,7 +26,7 @@
*/
#if !defined(ntohl)
-/// Macros to transform oct str 32 into uint_32
+/// Macro to transform oct str 32 into uint_32
#define ntohl(u32) \
((uint32_t)(((((unsigned char*)&(u32))[0]) << 24) + \
((((unsigned char*)&(u32))[1]) << 16) + \
@@ -34,5 +34,14 @@
(((unsigned char*)&(u32))[3])))
#endif
+#if !defined(htonl)
+/// Macro to transform uint_32 to network order
+#define htonl(u32) \
+ (uint32_t)(((((uint32_t)(u32)) & 0xFF) << 24) | \
+ ((((uint32_t)(u32)) & 0xFF00) << 8) | \
+ ((((uint32_t)(u32)) & 0xFF0000) >> 8) | \
+ ((((uint32_t)(u32)) & 0xFF000000) >> 24))
+#endif
+
/*! @} */
-#endif // EPID_COMMON_ENDIAN_CONVERT_H_
+#endif // EPID_COMMON_SRC_ENDIAN_CONVERT_H_
diff --git a/epid/common/epid2params.c b/epid/common/src/epid2params.c
index 3530262..0d60f53 100644
--- a/epid/common/epid2params.c
+++ b/epid/common/src/epid2params.c
@@ -18,8 +18,8 @@
* \file
* \brief Intel(R) EPID 2.0 constant parameters implementation.
*/
-#include "epid/common/epid2params.h"
-#include "epid/common/memory.h"
+#include "epid/common/src/epid2params.h"
+#include "epid/common/src/memory.h"
/// create a new Finite Field Fp
static EpidStatus NewFp(Epid2Params const* param, FiniteField** Fp);
@@ -62,7 +62,7 @@ EpidStatus CreateEpid2Params(Epid2Params_** params) {
Epid2Params_* internal_param = NULL;
BigNumStr t_str = {0};
Epid2Params params_str = {
-#include "epid/common/epid2params_ate.inc"
+#include "epid/common/src/epid2params_ate.inc"
};
if (!params) {
return kEpidBadArgErr;
diff --git a/epid/common/epid2params.h b/epid/common/src/epid2params.h
index a079f27..22978f3 100644
--- a/epid/common/epid2params.h
+++ b/epid/common/src/epid2params.h
@@ -13,8 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################*/
-#ifndef EPID_COMMON_EPID2PARAMS_H_
-#define EPID_COMMON_EPID2PARAMS_H_
+#ifndef EPID_COMMON_SRC_EPID2PARAMS_H_
+#define EPID_COMMON_SRC_EPID2PARAMS_H_
/*!
* \file
* \brief Intel(R) EPID 2.0 constant parameters interface.
@@ -72,4 +72,4 @@ EpidStatus CreateEpid2Params(Epid2Params_** params);
*/
void DeleteEpid2Params(Epid2Params_** epid_params);
/*! @} */
-#endif // EPID_COMMON_EPID2PARAMS_H_
+#endif // EPID_COMMON_SRC_EPID2PARAMS_H_
diff --git a/epid/common/epid2params_ate.inc b/epid/common/src/epid2params_ate.inc
index c13c95d..c13c95d 100644
--- a/epid/common/epid2params_ate.inc
+++ b/epid/common/src/epid2params_ate.inc
diff --git a/epid/common/errors.c b/epid/common/src/errors.c
index 8809074..8f364ba 100644
--- a/epid/common/errors.c
+++ b/epid/common/src/errors.c
@@ -37,10 +37,10 @@ static const struct ErrorTextEntry kEnumToText[] = {
{kEpidNoErr, "no error"},
{kEpidErr, "unspecified error"},
{kEpidSigInvalid, "invalid signature"},
- {kEpidSigRevokedinGroupRl, "signature revoked in GroupRl"},
- {kEpidSigRevokedinPrivRl, "signature revoked in PrivRl"},
- {kEpidSigRevokedinSigRl, "signature revoked in SigRl"},
- {kEpidSigRevokedinVerifierRl, "signature revoked in VerifierRl"},
+ {kEpidSigRevokedInGroupRl, "signature revoked in GroupRl"},
+ {kEpidSigRevokedInPrivRl, "signature revoked in PrivRl"},
+ {kEpidSigRevokedInSigRl, "signature revoked in SigRl"},
+ {kEpidSigRevokedInVerifierRl, "signature revoked in VerifierRl"},
{kEpidNotImpl, "not implemented"},
{kEpidBadArgErr, "bad arguments"},
{kEpidNoMemErr, "could not allocate memory"},
@@ -51,7 +51,8 @@ static const struct ErrorTextEntry kEnumToText[] = {
{kEpidHashAlgorithmNotSupported, "unsupported hash algorithm type"},
{kEpidRandMaxIterErr, "reached max iteration for random number generation"},
{kEpidDuplicateErr, "argument would add duplicate entry"},
-};
+ {kEpidInconsistentBasenameSetErr,
+ "the set basename is inconsistent with supplied parameters"}};
char const* EpidStatusToString(EpidStatus e) {
size_t i = 0;
diff --git a/epid/common/src/file_parser-internal.h b/epid/common/src/file_parser-internal.h
new file mode 100644
index 0000000..2a1d88c
--- /dev/null
+++ b/epid/common/src/file_parser-internal.h
@@ -0,0 +1,47 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/// Internal functions of Epid issuer material parsing utilities.
+/*!
+ * \file
+ */
+#ifndef EPID_COMMON_SRC_FILE_PARSER_INTERNAL_H_
+#define EPID_COMMON_SRC_FILE_PARSER_INTERNAL_H_
+
+#include <stddef.h>
+
+#include "epid/common/file_parser.h"
+#include "epid/common/types.h"
+#include "epid/common/errors.h"
+
+/// Verifies CA certificate to contain EC secp256r1 parameters
+/*!
+
+Verifies that certificate contains EC secp256r1 parameters,
+creates static copies of these parameters and compares them with
+ones in cert. Also verifies that certificate contains correct file header.
+
+\param[in] cert
+The issuing CA public key certificate.
+
+\returns ::EpidStatus
+
+\retval ::kEpidBadArgErr
+Verification failed.
+
+*/
+EpidStatus EpidVerifyCaCertificate(EpidCaCertificate const* cert);
+
+#endif // EPID_COMMON_SRC_FILE_PARSER_INTERNAL_H_
diff --git a/epid/common/file_parser.c b/epid/common/src/file_parser.c
index 63c89bb..b452f8d 100644
--- a/epid/common/file_parser.c
+++ b/epid/common/src/file_parser.c
@@ -25,7 +25,12 @@
#include <string.h>
#include "epid/common/math/ecdsa.h"
-#include "epid/common/memory.h"
+#include "epid/common/src/memory.h"
+#include "epid/common/src/file_parser-internal.h"
+
+const OctStr16 kEpidVersionCode[kNumEpidVersions] = {
+ {0x01, 0x00}, {0x02, 0x00},
+};
const OctStr16 kEpidFileTypeCode[kNumFileTypes] = {
{0x00, 0x11}, {0x00, 0x0C}, {0x00, 0x0D}, {0x00, 0x0E},
@@ -43,10 +48,10 @@ typedef struct EpidGroupPubKeyCertificate {
} EpidGroupPubKeyCertificate;
/// Intel(R) EPID version
-static const OctStr16 epid_version = {0x02, 0x00};
+static const OctStr16 kEpidVersion = {0x02, 0x00};
/// Verify that certificate contains of EC secp256r1 parameters
-static EpidStatus EpidVerifyCaCertificate(EpidCaCertificate const* cert) {
+EpidStatus EpidVerifyCaCertificate(EpidCaCertificate const* cert) {
// Prime of GF(p) for secp256r1
static const unsigned char secp256r1_p[] = {
// 2^256 -2^224 +2^192 +2^96 -1
@@ -89,7 +94,7 @@ static EpidStatus EpidVerifyCaCertificate(EpidCaCertificate const* cert) {
// Verify that certificate contains of correct file header
if (0 !=
- memcmp(&cert->header.epid_version, &epid_version, sizeof(epid_version))) {
+ memcmp(&cert->header.epid_version, &kEpidVersion, sizeof(kEpidVersion))) {
return kEpidBadArgErr;
}
if (0 != memcmp(&cert->header.file_type,
@@ -121,6 +126,66 @@ static EpidStatus EpidVerifyCaCertificate(EpidCaCertificate const* cert) {
return kEpidNoErr;
}
+EpidStatus EpidParseFileHeader(void const* buf, size_t len,
+ EpidVersion* epid_version,
+ EpidFileType* file_type) {
+ EpidFileHeader* header = (EpidFileHeader*)buf;
+ if (!buf || len < sizeof(EpidFileHeader)) return kEpidBadArgErr;
+
+ if (epid_version) {
+ if (0 == memcmp((void*)&header->epid_version, &kEpidVersionCode[kEpid1x],
+ sizeof(header->epid_version))) {
+ *epid_version = kEpid1x;
+ } else if (0 == memcmp((void*)&header->epid_version,
+ &kEpidVersionCode[kEpid2x],
+ sizeof(header->epid_version))) {
+ *epid_version = kEpid2x;
+ } else {
+ // set default value
+ *epid_version = kNumEpidVersions;
+ }
+ }
+ if (file_type) {
+ if (0 == memcmp((void*)&header->file_type,
+ &kEpidFileTypeCode[kIssuingCaPubKeyFile],
+ sizeof(header->file_type))) {
+ *file_type = kIssuingCaPubKeyFile;
+ } else if (0 == memcmp((void*)&header->file_type,
+ &kEpidFileTypeCode[kGroupPubKeyFile],
+ sizeof(header->file_type))) {
+ *file_type = kGroupPubKeyFile;
+ } else if (0 == memcmp((void*)&header->file_type,
+ &kEpidFileTypeCode[kPrivRlFile],
+ sizeof(header->file_type))) {
+ *file_type = kPrivRlFile;
+ } else if (0 == memcmp((void*)&header->file_type,
+ &kEpidFileTypeCode[kSigRlFile],
+ sizeof(header->file_type))) {
+ *file_type = kSigRlFile;
+ } else if (0 == memcmp((void*)&header->file_type,
+ &kEpidFileTypeCode[kGroupRlFile],
+ sizeof(header->file_type))) {
+ *file_type = kGroupRlFile;
+ } else if (0 == memcmp((void*)&header->file_type,
+ &kEpidFileTypeCode[kPrivRlRequestFile],
+ sizeof(header->file_type))) {
+ *file_type = kPrivRlRequestFile;
+ } else if (0 == memcmp((void*)&header->file_type,
+ &kEpidFileTypeCode[kSigRlRequestFile],
+ sizeof(header->file_type))) {
+ *file_type = kSigRlRequestFile;
+ } else if (0 == memcmp((void*)&header->file_type,
+ &kEpidFileTypeCode[kGroupRlRequestFile],
+ sizeof(header->file_type))) {
+ *file_type = kGroupRlRequestFile;
+ } else {
+ // set default value
+ *file_type = kNumFileTypes;
+ }
+ }
+ return kEpidNoErr;
+}
+
/// Parse a file with a revocation list of any type
static EpidStatus EpidParseRlFile(void const* buf, size_t len,
EpidCaCertificate const* cert, void* rl,
@@ -164,7 +229,7 @@ static EpidStatus EpidParseRlFile(void const* buf, size_t len,
// Verify that Intel(R) EPID file header in the buffer is correct
if (0 !=
- memcmp(&file_header->epid_version, &epid_version, sizeof(epid_version))) {
+ memcmp(&file_header->epid_version, &kEpidVersion, sizeof(kEpidVersion))) {
return kEpidBadArgErr;
}
if (0 != memcmp(&file_header->file_type, &kEpidFileTypeCode[file_type],
@@ -201,6 +266,7 @@ static EpidStatus EpidParseRlFile(void const* buf, size_t len,
*rl_len = buf_rl_len;
// Copy revocation list from file buffer to output
+ // Memory copy is used to copy a revocation list of variable length
if (0 != memcpy_S(rl, *rl_len, buf_rl, buf_rl_len)) return kEpidBadArgErr;
return kEpidNoErr;
@@ -221,8 +287,8 @@ EpidStatus EpidParseGroupPubKeyFile(void const* buf, size_t len,
}
// Verify that Intel(R) EPID file header in the buffer is correct
- if (0 != memcmp(&buf_pubkey->header.epid_version, &epid_version,
- sizeof(epid_version))) {
+ if (0 != memcmp(&buf_pubkey->header.epid_version, &kEpidVersion,
+ sizeof(kEpidVersion))) {
return kEpidBadArgErr;
}
if (0 != memcmp(&buf_pubkey->header.file_type,
@@ -236,9 +302,9 @@ EpidStatus EpidParseGroupPubKeyFile(void const* buf, size_t len,
if (kEpidNoErr != result) return result;
// Authenticate signature for buffer
- result =
- EcdsaVerifyBuffer(buf, len - sizeof(EcdsaSignature),
- (EcdsaPublicKey*)&cert->pubkey, &buf_pubkey->signature);
+ result = EcdsaVerifyBuffer(
+ buf_pubkey, sizeof(EpidGroupPubKeyCertificate) - sizeof(EcdsaSignature),
+ (EcdsaPublicKey*)&cert->pubkey, &buf_pubkey->signature);
if (kEpidSigValid != result) return result;
// Copy public from the buffer to output
diff --git a/epid/common/grouppubkey.c b/epid/common/src/grouppubkey.c
index e25abec..8a2752f 100644
--- a/epid/common/grouppubkey.c
+++ b/epid/common/src/grouppubkey.c
@@ -18,8 +18,8 @@
* \file
* \brief Group public key implementation.
*/
-#include "epid/common/grouppubkey.h"
-#include "epid/common/memory.h"
+#include "epid/common/src/grouppubkey.h"
+#include "epid/common/src/memory.h"
EpidStatus CreateGroupPubKey(GroupPubKey const* pub_key_str, EcGroup* G1,
EcGroup* G2, GroupPubKey_** pub_key) {
diff --git a/epid/common/grouppubkey.h b/epid/common/src/grouppubkey.h
index 43f1172..a47ebcb 100644
--- a/epid/common/grouppubkey.h
+++ b/epid/common/src/grouppubkey.h
@@ -13,8 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################*/
-#ifndef EPID_COMMON_GROUPPUBKEY_H_
-#define EPID_COMMON_GROUPPUBKEY_H_
+#ifndef EPID_COMMON_SRC_GROUPPUBKEY_H_
+#define EPID_COMMON_SRC_GROUPPUBKEY_H_
/*!
* \file
* \brief Group public key interface.
@@ -64,4 +64,4 @@ EpidStatus CreateGroupPubKey(GroupPubKey const* pub_key_str, EcGroup* G1,
*/
void DeleteGroupPubKey(GroupPubKey_** pub_key);
/*! @} */
-#endif // EPID_COMMON_GROUPPUBKEY_H_
+#endif // EPID_COMMON_SRC_GROUPPUBKEY_H_
diff --git a/epid/common/memory.c b/epid/common/src/memory.c
index b425c9d..b37180f 100644
--- a/epid/common/memory.c
+++ b/epid/common/src/memory.c
@@ -19,7 +19,7 @@
* \brief Memory access implementation.
*/
-#include "epid/common/memory.h"
+#include "epid/common/src/memory.h"
#include <string.h>
#include <stdint.h>
@@ -96,6 +96,7 @@ void* EpidRealloc(void* ptr, size_t new_size) {
void* new_ptr = EpidAlloc(new_size);
if (!new_ptr) return NULL;
if (ptr) {
+ // Memory copy is used to copy a buffer of variable length
if (0 != memcpy_S(new_ptr, ((EpidAllocHeader*)new_ptr)[-1].length, ptr,
MIN(((EpidAllocHeader*)ptr)[-1].length,
((EpidAllocHeader*)new_ptr)[-1].length))) {
diff --git a/epid/common/memory.h b/epid/common/src/memory.h
index 9fa57e0..8c2fd7f 100644
--- a/epid/common/memory.h
+++ b/epid/common/src/memory.h
@@ -13,8 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################*/
-#ifndef EPID_COMMON_MEMORY_H_
-#define EPID_COMMON_MEMORY_H_
+#ifndef EPID_COMMON_SRC_MEMORY_H_
+#define EPID_COMMON_SRC_MEMORY_H_
#include <stdlib.h>
#include <string.h>
@@ -120,4 +120,4 @@ void EpidFree(void* ptr);
int memcpy_S(void* dest, size_t destsz, void const* src, size_t count);
/*! @} */
-#endif // EPID_COMMON_MEMORY_H_
+#endif // EPID_COMMON_SRC_MEMORY_H_
diff --git a/epid/common/sigrlvalid.c b/epid/common/src/sigrlvalid.c
index b67b1f8..9287648 100644
--- a/epid/common/sigrlvalid.c
+++ b/epid/common/src/sigrlvalid.c
@@ -21,16 +21,13 @@
#include <string.h>
-#include "epid/common/endian_convert.h"
-#include "epid/common/sigrlvalid.h"
+#include "epid/common/src/endian_convert.h"
+#include "epid/common/src/sigrlvalid.h"
bool IsSigRlValid(GroupId const* gid, SigRl const* sig_rl, size_t sig_rl_size) {
const size_t kMinSigRlSize = sizeof(SigRl) - sizeof(SigRlEntry);
size_t input_sig_rl_size = 0;
- if (!gid || !sig_rl) {
- return false;
- }
- if (kMinSigRlSize > sig_rl_size) {
+ if (!gid || !sig_rl || kMinSigRlSize > sig_rl_size) {
return false;
}
if (ntohl(sig_rl->n2) > (SIZE_MAX - kMinSigRlSize) / sizeof(sig_rl->bk[0])) {
diff --git a/epid/common/sigrlvalid.h b/epid/common/src/sigrlvalid.h
index c510ea8..610abaa 100644
--- a/epid/common/sigrlvalid.h
+++ b/epid/common/src/sigrlvalid.h
@@ -13,8 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################*/
-#ifndef EPID_COMMON_SIGRLVALID_H_
-#define EPID_COMMON_SIGRLVALID_H_
+#ifndef EPID_COMMON_SRC_SIGRLVALID_H_
+#define EPID_COMMON_SRC_SIGRLVALID_H_
/*!
* \file
* \brief SigRl validity checking interface.
@@ -43,4 +43,4 @@
bool IsSigRlValid(GroupId const* gid, SigRl const* sig_rl, size_t sig_rl_size);
/*! @} */
-#endif // EPID_COMMON_SIGRLVALID_H_
+#endif // EPID_COMMON_SRC_SIGRLVALID_H_
diff --git a/epid/common/stack.c b/epid/common/src/stack.c
index 8af5a9d..39911ae 100644
--- a/epid/common/stack.c
+++ b/epid/common/src/stack.c
@@ -18,8 +18,8 @@
* \brief Stack container implementation.
*/
#include <limits.h>
-#include "epid/common/stack.h"
-#include "epid/common/memory.h"
+#include "epid/common/src/stack.h"
+#include "epid/common/src/memory.h"
/// Internal representation of a Stack
struct Stack {
@@ -51,6 +51,7 @@ void* StackPushN(Stack* stack, size_t n, void* elements) {
stack->max_size = max_size_required;
}
if (elements) {
+ // Memory copy is used to copy variable number of elements to stack
if (0 != memcpy_S((uint8_t*)stack->buf + stack->top * stack->element_size,
(stack->max_size - stack->top) * stack->element_size,
elements, n * stack->element_size)) {
@@ -67,6 +68,7 @@ bool StackPopN(Stack* stack, size_t n, void* elements) {
if (n > 0) {
if (n > stack->top) return false;
if (elements) {
+ // Memory copy is used to copy variable number of elements from stack
if (0 != memcpy_S(elements, n * stack->element_size,
(uint8_t*)stack->buf +
(stack->top - n) * stack->element_size,
diff --git a/epid/common/stack.h b/epid/common/src/stack.h
index fbb05ae..7b13832 100644
--- a/epid/common/stack.h
+++ b/epid/common/src/stack.h
@@ -13,8 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################*/
-#ifndef EPID_COMMON_STACK_H_
-#define EPID_COMMON_STACK_H_
+#ifndef EPID_COMMON_SRC_STACK_H_
+#define EPID_COMMON_SRC_STACK_H_
/*!
* \file
* \brief Stack container interface.
@@ -92,4 +92,4 @@ size_t StackGetSize(Stack const* stack);
void DeleteStack(Stack** stack);
/*! @} */
-#endif // EPID_COMMON_STACK_H_
+#endif // EPID_COMMON_SRC_STACK_H_
diff --git a/epid/common/stdtypes.h b/epid/common/stdtypes.h
index 8d15f3d..3bc05e3 100644
--- a/epid/common/stdtypes.h
+++ b/epid/common/stdtypes.h
@@ -25,6 +25,8 @@
#ifndef __cplusplus
#ifndef _Bool
+/// C99 standard name for bool
+#define _Bool char
/// Boolean type
typedef char bool;
/// integer constant 1
diff --git a/epid/common/types.h b/epid/common/types.h
index 680227e..38b13e9 100644
--- a/epid/common/types.h
+++ b/epid/common/types.h
@@ -29,7 +29,8 @@
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 EPID APIs.
+ 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
@@ -41,6 +42,8 @@
/// Recognized hash algorithms
typedef enum {
+ /// Invalid
+ kInvalidHashAlg = -1,
/// SHA-256
kSha256 = 0,
/// SHA-384
@@ -336,4 +339,5 @@ typedef struct EcdsaPrivateKey {
#pragma pack()
/*! @} */
+
#endif // EPID_COMMON_TYPES_H_
diff --git a/epid/common/math/unittests/file_parser-test.cc b/epid/common/unittests/file_parser-test.cc
index 2291412..77cccfa 100644
--- a/epid/common/math/unittests/file_parser-test.cc
+++ b/epid/common/unittests/file_parser-test.cc
@@ -36,6 +36,8 @@ class EpidFileParser : public ::testing::Test {
/// A file with short GroupPublicKey signed with kCert
static const std::vector<uint8_t> kGroupPublicKeyFile;
+ /// A file with two Epid11GroupPublicKey signed with kCert
+ static const std::vector<uint8_t> kGroupMultiPublicKeyFile;
/// Expected short GroupPublicKey
static const std::vector<uint8_t> kGroupPublicKey;
@@ -285,6 +287,67 @@ const std::vector<uint8_t> EpidFileParser::kGroupPublicKey = {
0x69, 0x6f, 0x9c, 0x33, 0xd3, 0xdb, 0xc6, 0xce, 0x42, 0xe3, 0x46, 0x87,
0xd6, 0x65, 0xac, 0xc9, 0x71, 0xf1, 0xa9, 0x8f, 0x78, 0x45, 0x9a, 0xef,
0x1c, 0xe4, 0x45, 0x84, 0x3d, 0x8a, 0x27, 0x51};
+const std::vector<uint8_t> EpidFileParser::kGroupMultiPublicKeyFile = {
+ // Public key1
+ 0x02, 0x00, 0x00, 0x0c, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
+ 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x89, 0x33, 0xa7, 0x86,
+ 0xd7, 0x71, 0xcc, 0x80, 0x46, 0x4b, 0x42, 0xc3, 0xe7, 0xba, 0x1a, 0x54,
+ 0x85, 0x8a, 0x21, 0x8e, 0x29, 0x91, 0xa9, 0x60, 0x41, 0xf9, 0xa5, 0xd9,
+ 0x7b, 0x5f, 0x54, 0x49, 0x2a, 0x89, 0x8c, 0x10, 0x0e, 0x26, 0x0d, 0xe8,
+ 0x36, 0x6a, 0x9e, 0x6f, 0x79, 0xff, 0xf1, 0xcd, 0xa7, 0xcd, 0xac, 0x1f,
+ 0x92, 0x33, 0x3a, 0xd9, 0x7c, 0xf5, 0xcd, 0x38, 0x48, 0x01, 0x4f, 0xc5,
+ 0x6f, 0xea, 0x50, 0x60, 0x59, 0x09, 0xda, 0x44, 0x21, 0xc2, 0xd0, 0x86,
+ 0xe6, 0x00, 0x63, 0x59, 0xa9, 0xfb, 0x35, 0x13, 0x4e, 0x13, 0xb1, 0x47,
+ 0x36, 0xd7, 0xbd, 0xf6, 0x0a, 0x35, 0x74, 0x7d, 0x36, 0xc5, 0x67, 0xa2,
+ 0x03, 0xb7, 0x38, 0x31, 0x16, 0xa8, 0x5d, 0x64, 0x3f, 0xe6, 0xf1, 0x94,
+ 0x37, 0x09, 0x8c, 0x20, 0x17, 0xac, 0x2f, 0x55, 0x9e, 0xed, 0xb3, 0xc7,
+ 0x73, 0xc0, 0x1c, 0xbb, 0xbf, 0xf7, 0x18, 0xce, 0x4f, 0xd4, 0xe3, 0x67,
+ 0x75, 0xe4, 0xd9, 0x51, 0xfb, 0x1b, 0x22, 0xf9, 0x72, 0x2e, 0xc1, 0x76,
+ 0x2a, 0xe1, 0x4a, 0x6e, 0x88, 0xd6, 0x2d, 0x71, 0xf4, 0xc4, 0x6d, 0xac,
+ 0x8c, 0xbd, 0xe7, 0x2b, 0xb1, 0x40, 0x15, 0x93, 0xbd, 0x97, 0xd4, 0x84,
+ 0x90, 0xef, 0x4e, 0xfd, 0x78, 0x25, 0xab, 0xdf, 0x16, 0xf3, 0x46, 0x52,
+ 0x16, 0x96, 0xae, 0x50, 0x88, 0x96, 0x18, 0x73, 0xc1, 0xd1, 0x73, 0xf0,
+ 0x67, 0xc8, 0x8d, 0xbb, 0x4e, 0xbc, 0x6a, 0x40, 0xe6, 0x1e, 0x7d, 0x36,
+ 0x8c, 0xf4, 0xb1, 0xf1, 0x5f, 0x26, 0x4f, 0x43, 0x0a, 0x36, 0xd4, 0x67,
+ 0xd4, 0x79, 0x3f, 0xb8, 0x69, 0x6f, 0x9c, 0x33, 0xd3, 0xdb, 0xc6, 0xce,
+ 0x42, 0xe3, 0x46, 0x87, 0xd6, 0x65, 0xac, 0xc9, 0x71, 0xf1, 0xa9, 0x8f,
+ 0x78, 0x45, 0x9a, 0xef, 0x1c, 0xe4, 0x45, 0x84, 0x3d, 0x8a, 0x27, 0x51,
+ 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71, 0xed, 0x2a,
+ 0x9b, 0x88, 0x99, 0x5b, 0x85, 0x3b, 0xdf, 0xf9, 0x70, 0x2a, 0x6c, 0x06,
+ 0x3b, 0x72, 0x02, 0x32, 0xb9, 0x3a, 0x76, 0xe7, 0x58, 0x2a, 0xf6, 0x06,
+ 0xed, 0x55, 0xd6, 0x86, 0x4f, 0x99, 0x57, 0x9e, 0x8c, 0xfc, 0xea, 0x5e,
+ 0x7d, 0xc3, 0x41, 0xa2, 0x51, 0x19, 0x47, 0x4b, 0x56, 0x4e, 0x46, 0x3e,
+ 0xca, 0xd3, 0xb5, 0x89,
+ // Public key 2
+ 0x02, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x78, 0x8a, 0xb6, 0x0f,
+ 0x9a, 0xf5, 0xe4, 0xd1, 0xe7, 0x39, 0x6a, 0x79, 0x6c, 0xb5, 0xd1, 0xa1,
+ 0x83, 0xec, 0xa1, 0x01, 0xfe, 0xe8, 0x72, 0xce, 0xce, 0x05, 0x9a, 0x4f,
+ 0xa5, 0x17, 0x1b, 0xed, 0x30, 0xc5, 0x00, 0xc0, 0xb4, 0xdb, 0x5e, 0xa6,
+ 0xe2, 0x24, 0x23, 0xab, 0xf5, 0x09, 0xf2, 0x4a, 0x7e, 0x72, 0xfa, 0xc3,
+ 0xbf, 0x33, 0x93, 0x23, 0x48, 0x89, 0xd2, 0x98, 0x08, 0xe1, 0x01, 0xba,
+ 0x9d, 0xa9, 0xe5, 0x41, 0x46, 0x2e, 0xbb, 0x9e, 0x6a, 0xfd, 0x28, 0x85,
+ 0x94, 0xd5, 0x6e, 0x5a, 0xfa, 0x42, 0x71, 0x6e, 0xdc, 0x7e, 0xdb, 0xd1,
+ 0xf2, 0x84, 0x11, 0x08, 0x4f, 0x0f, 0x22, 0x1f, 0x32, 0xbe, 0xd7, 0x6f,
+ 0x55, 0x17, 0x17, 0x4a, 0xa7, 0x46, 0xeb, 0xca, 0x02, 0x65, 0x53, 0xca,
+ 0xd7, 0x93, 0x03, 0x01, 0xe1, 0x54, 0xfc, 0xdd, 0xb4, 0x95, 0x5a, 0x5c,
+ 0x0c, 0x8c, 0x13, 0x65, 0x02, 0x16, 0xf0, 0xfc, 0xbb, 0x02, 0x5f, 0x87,
+ 0x83, 0x8c, 0xd0, 0x3e, 0x69, 0xc8, 0xf5, 0x7c, 0x09, 0xdd, 0x48, 0x65,
+ 0x82, 0x48, 0x6f, 0xb5, 0x35, 0x0c, 0xc4, 0x04, 0x2d, 0x83, 0x0a, 0x3e,
+ 0xa0, 0x0f, 0x5f, 0x8e, 0x61, 0xf7, 0xc3, 0xb5, 0x5c, 0x66, 0xf8, 0xf8,
+ 0xa3, 0x0a, 0xc1, 0x50, 0xcd, 0xb0, 0x44, 0x19, 0x14, 0x07, 0xf1, 0xad,
+ 0x7a, 0xec, 0x73, 0xac, 0x55, 0x01, 0x8a, 0xa6, 0x62, 0x9b, 0x30, 0xf3,
+ 0xf9, 0xc5, 0xd1, 0x3d, 0xf2, 0x36, 0x13, 0x28, 0x4d, 0xbf, 0x95, 0x88,
+ 0x76, 0x6b, 0xb0, 0x18, 0xd8, 0x3f, 0xa6, 0x22, 0x69, 0x13, 0x06, 0xa4,
+ 0x04, 0xbf, 0x52, 0x8e, 0xf0, 0x11, 0x99, 0x65, 0xb9, 0xf8, 0x57, 0x0b,
+ 0xf6, 0xc2, 0xe8, 0xaf, 0xee, 0xd4, 0x6e, 0xa7, 0x49, 0x7b, 0xeb, 0x8f,
+ 0x92, 0x66, 0x45, 0xda, 0xb4, 0x01, 0xa8, 0xee, 0x7c, 0xdf, 0x8e, 0x08,
+ 0xdf, 0x69, 0x19, 0x8c, 0xfa, 0x23, 0x52, 0x71, 0x12, 0x10, 0xfb, 0x13,
+ 0x2f, 0x17, 0x16, 0x9c, 0x7e, 0xc0, 0xe5, 0x22, 0x74, 0x81, 0x38, 0xed,
+ 0x3f, 0xe1, 0x72, 0xc9, 0x46, 0x4c, 0x03, 0x7a, 0x79, 0xe0, 0x84, 0x32,
+ 0x34, 0x59, 0x46, 0x98, 0xe7, 0xc6, 0x5f, 0xd8, 0x5f, 0xf0, 0xee, 0x1b,
+ 0x53, 0x4c, 0xce, 0x61, 0xb7, 0x91, 0xbf, 0x71, 0xb3, 0xeb, 0x73, 0x66,
+ 0x47, 0x28, 0x1d, 0x20};
const std::vector<uint8_t> EpidFileParser::kEmptyGroupRlFile = {
0x02, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xfb, 0x57, 0x6f, 0x15, 0x3e, 0xf8, 0x41, 0x47, 0x51, 0x71,
@@ -430,6 +493,15 @@ TEST_F(EpidFileParser, ParsesValidPubKeyFile) {
EXPECT_EQ(this->kGroupPublicKey, pubkey);
}
+TEST_F(EpidFileParser, ParsesValidMultiPubKeyFile) {
+ std::vector<uint8_t> pubkey(sizeof(GroupPubKey), 0);
+ EXPECT_EQ(kEpidNoErr, EpidParseGroupPubKeyFile(
+ (void*)this->kGroupMultiPublicKeyFile.data(),
+ this->kGroupMultiPublicKeyFile.size(), &this->kCert,
+ (GroupPubKey*)pubkey.data()));
+ EXPECT_EQ(this->kGroupPublicKey, pubkey);
+}
+
TEST_F(EpidFileParser, RejectsGroupPubKeyFileWithInvalidSignature) {
GroupPubKey pubkey;
std::vector<uint8_t> pubkey_inv_sign(this->kGroupPublicKeyFile);
@@ -470,6 +542,11 @@ TEST_F(EpidFileParser, PrivRlParseFailsGivenNullParameters) {
EpidParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
this->kShortPrivRlFile.size(), &this->kCert,
(PrivRl*)rl.data(), nullptr));
+ // null rl_length with null dest
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidParsePrivRlFile((void*)this->kShortPrivRlFile.data(),
+ this->kShortPrivRlFile.size(), &this->kCert,
+ nullptr, nullptr));
}
TEST_F(EpidFileParser, PrivRlParseFailsGivenUnsupportedCurve) {
@@ -1196,4 +1273,86 @@ TEST_F(EpidFileParser, ReturnsProperSizeGivenOversizedGroupRlBuf) {
EXPECT_EQ(this->kShortGroupRl.size(), rl_len);
}
+//////////////////////////////////////////////////////////////////////////
+// EpidParseFileHeader Tests
+TEST_F(EpidFileParser, ParseFileHeaderFailsGivenNullInParameters) {
+ EpidVersion epid_version = kNumEpidVersions;
+ EpidFileType file_type = kNumFileTypes;
+ EXPECT_EQ(kEpidBadArgErr, EpidParseFileHeader(nullptr, sizeof(EpidFileHeader),
+ &epid_version, &file_type));
+}
+
+TEST_F(EpidFileParser, ParseFileHeaderFailsGivenInvalidSize) {
+ EpidVersion epid_version = kNumEpidVersions;
+ EpidFileType file_type = kNumFileTypes;
+ EpidFileHeader epid_header = this->kCert.header;
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidParseFileHeader((void*)&epid_header, sizeof(epid_header) - 1,
+ &epid_version, &file_type));
+}
+
+TEST_F(EpidFileParser, ParseFileHeaderReportsUnknownEpidVersion) {
+ // Since this variable must contain kNumEpidVersions after the function call,
+ // assign something different from kNumEpidVersions
+ EpidVersion epid_version = kEpid1x;
+ EpidFileType file_type = kNumFileTypes;
+ EpidFileHeader epid_header = this->kCert.header;
+ epid_header.epid_version.data[0] = 0x00;
+ EXPECT_EQ(kEpidNoErr,
+ EpidParseFileHeader((void*)&epid_header, sizeof(epid_header),
+ &epid_version, &file_type));
+ EXPECT_EQ(kNumEpidVersions, epid_version);
+ EXPECT_EQ(kIssuingCaPubKeyFile, file_type);
+}
+
+TEST_F(EpidFileParser, ParseFileHeaderReportsUnknownFileType) {
+ EpidVersion epid_version = kNumEpidVersions;
+ // Since this variable must contain kNumFileTypes after the function call,
+ // assign something not kNumFileTypes
+ EpidFileType file_type = kIssuingCaPubKeyFile;
+ EpidFileHeader epid_header = this->kCert.header;
+ epid_header.file_type.data[1] = 0x00;
+ EXPECT_EQ(kEpidNoErr,
+ EpidParseFileHeader((void*)&epid_header, sizeof(epid_header),
+ &epid_version, &file_type));
+ EXPECT_EQ(kEpid2x, epid_version);
+ EXPECT_EQ(kNumFileTypes, file_type);
+}
+
+TEST_F(EpidFileParser, ParseFileHeaderCanSkipExtractingSomeValues) {
+ EpidVersion epid_version = kNumEpidVersions;
+ EpidFileType file_type = kNumFileTypes;
+ EpidFileHeader epid_header = this->kCert.header;
+ EXPECT_EQ(kEpidNoErr,
+ EpidParseFileHeader((void*)&epid_header, sizeof(epid_header),
+ nullptr, &file_type));
+ EXPECT_EQ(kIssuingCaPubKeyFile, file_type);
+
+ EXPECT_EQ(kEpidNoErr,
+ EpidParseFileHeader((void*)&epid_header, sizeof(epid_header),
+ &epid_version, nullptr));
+ EXPECT_EQ(kEpid2x, epid_version);
+
+ EXPECT_EQ(kEpidNoErr,
+ EpidParseFileHeader((void*)&epid_header, sizeof(epid_header),
+ nullptr, nullptr));
+}
+
+TEST_F(EpidFileParser, ParseFileHeaderParsesCorrectly) {
+ EpidVersion epid_version = kNumEpidVersions;
+ EpidFileType file_type = kNumFileTypes;
+ EpidFileHeader epid_header = this->kCert.header;
+ EXPECT_EQ(kEpidNoErr,
+ EpidParseFileHeader((void*)&epid_header, sizeof(epid_header),
+ &epid_version, &file_type));
+ EXPECT_EQ(kEpid2x, epid_version);
+ EXPECT_EQ(kIssuingCaPubKeyFile, file_type);
+
+ EpidFileHeader epid_header2 = {0x01, 0x00, 0x00, 0x0B};
+ EXPECT_EQ(kEpidNoErr,
+ EpidParseFileHeader((void*)&epid_header2, sizeof(epid_header2),
+ &epid_version, &file_type));
+ EXPECT_EQ(kEpid1x, epid_version);
+ EXPECT_EQ(kSigRlRequestFile, file_type);
+}
} // namespace
diff --git a/epid/member/Makefile b/epid/member/Makefile
new file mode 100644
index 0000000..9312916
--- /dev/null
+++ b/epid/member/Makefile
@@ -0,0 +1,76 @@
+#!/usr/bin/make -f
+
+#define path variables
+IPP_SRC_INCLUDE_DIR = ../../ext/ipp/sources/ippcp/src/
+IPP_INCLUDE_DIR = ../../ext/ipp/sources/include/
+GTEST_INCLUDE_DIR = ../../ext/
+
+LIB_INSTALL_DIR = $(epidinstalldir)/lib/posix-$(ARCH)/
+TEST_INSTALL_DIR = $(epidinstalldir)/test/
+HEADERS_INSTALL_DIR := $(epidinstalldir)/include/epid/member/
+
+API_HEADERS_INSTALL = ./api.h
+
+MEMBER_INCLUDE_DIR = ../../
+
+MEMBER_SRC = $(wildcard ./src/*.c)
+MEMBER_OBJ = $(MEMBER_SRC:.c=.o)
+MEMBER_LIB = ./libmember.a
+
+MEMBER_UTEST_EXE = ./member-utest
+MEMBER_UTEST_SRC = $(wildcard ./unittests/*.cc)
+MEMBER_UTEST_OBJ = $(MEMBER_UTEST_SRC:.cc=.o)
+LIB_MEMBER_DIR = .
+LIB_VERIFIER_DIR = ../verifier
+LIB_COMMON_TESTHELPER_DIR = ../common-testhelper
+LIB_COMMON_DIR = ../common
+LIB_IPPCP_DIR = ../../ext/ipp/sources/ippcp/src
+LIB_IPPCPEPID_DIR = ../../ext/ipp/sources/ippcpepid/src
+
+#set flags for linker
+LDFLAGS += -L$(GTEST_INCLUDE_DIR)/gtest -L$(LIB_COMMON_TESTHELPER_DIR) \
+ -L$(LIB_MEMBER_DIR) -L$(LIB_VERIFIER_DIR) -L$(LIB_COMMON_DIR) \
+ -L$(LIB_IPPCPEPID_DIR) -L$(LIB_IPPCP_DIR) -lgtest -lcommon-testhelper \
+ -lmember -lverifier -lcommon -lippcpepid -lippcp
+
+$(MEMBER_OBJ): %.o: %.c
+ $(CC) $(CFLAGS) -I$(IPP_INCLUDE_DIR) -I$(IPP_SRC_INCLUDE_DIR) \
+ -I$(MEMBER_INCLUDE_DIR) -c $^ -o $@
+
+$(MEMBER_LIB): $(MEMBER_OBJ)
+ $(AR) rc $(MEMBER_LIB) $(MEMBER_OBJ)
+ ranlib $(MEMBER_LIB)
+
+$(MEMBER_UTEST_EXE): $(MEMBER_UTEST_OBJ)
+ $(CXX) -o $@ $^ $(CXXFLAGS) $(LDFLAGS)
+
+$(MEMBER_UTEST_OBJ): %.o: %.cc
+ $(CXX) -o $@ $(CXXFLAGS) -I$(MEMBER_INCLUDE_DIR) \
+ -I$(GTEST_INCLUDE_DIR) -c $^
+
+build: all
+
+all: $(MEMBER_LIB)
+
+install:
+ mkdir -p '$(LIB_INSTALL_DIR)'
+ mkdir -p '$(HEADERS_INSTALL_DIR)'
+ cp $(MEMBER_LIB) '$(LIB_INSTALL_DIR)'
+ cp $(API_HEADERS_INSTALL) '$(HEADERS_INSTALL_DIR)'
+#install tests if they exist
+ifneq (,$(wildcard $(MEMBER_UTEST_EXE)))
+ mkdir -p '$(TEST_INSTALL_DIR)'
+ cp $(MEMBER_UTEST_EXE) '$(TEST_INSTALL_DIR)'
+endif
+
+check: $(MEMBER_UTEST_EXE) run
+
+run:
+ $(MEMBER_UTEST_EXE) $(GTEST_FLAGS)
+
+clean:
+ rm -f $(MEMBER_OBJ) \
+ $(MEMBER_LIB) \
+ $(MEMBER_UTEST_OBJ) \
+ $(MEMBER_UTEST_EXE) \
+ *.xml
diff --git a/epid/member/api.h b/epid/member/api.h
index b1b689d..f888d92 100644
--- a/epid/member/api.h
+++ b/epid/member/api.h
@@ -163,7 +163,7 @@ EpidStatus EpidMemberWritePrecomp(MemberCtx const* ctx, MemberPrecomp* precomp);
*/
EpidStatus EpidMemberSetHashAlg(MemberCtx* ctx, HashAlg hash_alg);
-/// Computes the size in bytes required for a Intel(R) EPID signature.
+/// Computes the size in bytes required for an Intel(R) EPID signature.
/*!
\param[in] sig_rl
The signature based revocation list that is used. NULL is treated as
@@ -177,7 +177,7 @@ EpidStatus EpidMemberSetHashAlg(MemberCtx* ctx, HashAlg hash_alg);
*/
size_t EpidGetSigSize(SigRl const* sig_rl);
-/// Writes a Intel(R) EPID signature.
+/// Writes an Intel(R) EPID signature.
/*!
\param[in] ctx
The member context.
diff --git a/epid/member/member.parts b/epid/member/member.parts
index aa0766d..ee56010 100644
--- a/epid/member/member.parts
+++ b/epid/member/member.parts
@@ -16,53 +16,38 @@
Import('*')
env.PartName('member')
-
-
api_headers = Pattern(src_dir='.',
includes=['api.h'],
- excludes=[''],
recursive=False).files()
-
-
-member_headers = Pattern(src_dir='.',
- includes=['*.h'],
- excludes=['api.h'],
- recursive=False).files()
-
-
-src_files = Pattern(src_dir='.',
+src_files = Pattern(src_dir='src',
includes=['*.c'],
- excludes=['*-test.cc'],
- recursive=True).files()
-
+ recursive=False).files()
+internal_headers = Pattern(src_dir='src',
+ includes=['*.h'],
+ recursive=False).files()
-#unit tests
-utest_files = Pattern(src_dir='.',
+utest_files = Pattern(src_dir='unittests',
includes=['*-test.cc',
'*-testhelper.cc',],
- excludes=[],
- recursive=True).files()
-
-utest_header_files = Pattern(src_dir='.',
- includes=['*-testhelper.h',],
- excludes=[],
- recursive=True).files()
-
-parts_file = Pattern(src_dir='.',
- includes=['member.parts'],
- excludes=[],
- recursive=False).files()
+ recursive=False).files()
+utest_headers = Pattern(src_dir='unittests',
+ includes=['*-testhelper.h',],
+ recursive=False).files()
+build_files = Pattern(src_dir='.',
+ includes=['*.parts', 'Makefile'],
+ recursive=False).files()
if 'install_package' in env['MODE']:
- env.InstallTopLevel(api_headers + member_headers,
+ env.InstallTopLevel(api_headers,
sub_dir='epid/${PART_SHORT_NAME}')
- env.InstallTopLevel(src_files, sub_dir='epid/${PART_SHORT_NAME}')
- env.InstallTopLevel(utest_files,
+ env.InstallTopLevel(src_files + internal_headers,
+ sub_dir='epid/${PART_SHORT_NAME}/src')
+ env.InstallTopLevel(utest_files + utest_headers,
sub_dir='epid/${PART_SHORT_NAME}/unittests')
- env.InstallTopLevel(utest_header_files,
- sub_dir='epid/${PART_SHORT_NAME}/unittests')
- env.InstallTopLevel(parts_file, sub_dir='epid/${PART_SHORT_NAME}')
+
+ env.InstallTopLevel(build_files, sub_dir='epid/${PART_SHORT_NAME}')
+
else:
env.DependsOn([
Component('common'),
diff --git a/epid/member/context.c b/epid/member/src/context.c
index fa76af2..227bf12 100644
--- a/epid/member/context.c
+++ b/epid/member/src/context.c
@@ -22,9 +22,9 @@
#include <string.h>
#include "epid/member/api.h"
-#include "epid/member/context.h"
-#include "epid/member/privkey.h"
-#include "epid/common/memory.h"
+#include "epid/member/src/context.h"
+#include "epid/member/src/privkey.h"
+#include "epid/common/src/memory.h"
/// Perform pre-computation and store in context
static EpidStatus DoPrecomputation(MemberCtx* ctx);
@@ -253,6 +253,7 @@ EpidStatus AddBasename(AllowedBasename** rootnode, void const* basename,
}
newnode->next = NULL;
newnode->length = length;
+ // Memory copy is used to copy a flexible array
if (0 != memcpy_S(newnode->name, length, basename, length)) {
SAFE_FREE(newnode);
return kEpidBadArgErr;
diff --git a/epid/member/context.h b/epid/member/src/context.h
index 8fa65f2..73adb2e 100644
--- a/epid/member/context.h
+++ b/epid/member/src/context.h
@@ -13,8 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################*/
-#ifndef EPID_MEMBER_CONTEXT_H_
-#define EPID_MEMBER_CONTEXT_H_
+#ifndef EPID_MEMBER_SRC_CONTEXT_H_
+#define EPID_MEMBER_SRC_CONTEXT_H_
/*!
* \file
* \brief Member context interface.
@@ -23,11 +23,11 @@
#include <stddef.h>
#include "epid/member/api.h"
#include "epid/common/errors.h"
-#include "epid/common/epid2params.h"
-#include "epid/common/grouppubkey.h"
-#include "epid/common/stack.h"
-#include "epid/common/commitment.h"
-#include "epid/member/privkey.h"
+#include "epid/common/src/epid2params.h"
+#include "epid/common/src/grouppubkey.h"
+#include "epid/common/src/stack.h"
+#include "epid/common/src/commitment.h"
+#include "epid/member/src/privkey.h"
/// Internal implementation of base name
typedef struct AllowedBasename {
@@ -82,4 +82,4 @@ bool ContainsBasename(AllowedBasename const* rootnode, void const* basename,
EpidStatus EpidComputePreSig(MemberCtx const* ctx,
PreComputedSignature* precompsig);
-#endif // EPID_MEMBER_CONTEXT_H_
+#endif // EPID_MEMBER_SRC_CONTEXT_H_
diff --git a/epid/member/decompress_privkey.c b/epid/member/src/decompress_privkey.c
index 17e400a..acba773 100644
--- a/epid/member/decompress_privkey.c
+++ b/epid/member/src/decompress_privkey.c
@@ -21,11 +21,11 @@
#include "epid/member/api.h"
-#include "epid/common/memory.h"
-#include "epid/common/epid2params.h"
-#include "epid/common/math/bignum-internal.h"
+#include "epid/common/src/memory.h"
+#include "epid/common/src/epid2params.h"
+#include "epid/common/math/src/bignum-internal.h"
#include "epid/common/math/hash.h"
-#include "epid/member/privkey.h"
+#include "epid/member/src/privkey.h"
/// Handle Intel(R) EPID Error with Break
#define BREAK_ON_EPID_ERROR(ret) \
@@ -180,8 +180,7 @@ EpidStatus EpidDecompressPrivKey(GroupPubKey const* pub_key,
}
// 4. The decompressed Intel(R) EPID private key is (gid, A, x, f).
// x, f already filled in.
- memcpy_S(&priv_key->gid, sizeof(priv_key->gid), &pub_key->gid,
- sizeof(pub_key->gid));
+ priv_key->gid = pub_key->gid;
result = WriteEcPoint(G1, priv_key_.A, &priv_key->A, sizeof(priv_key->A));
BREAK_ON_EPID_ERROR(result);
@@ -205,6 +204,12 @@ EpidStatus EpidDecompressPrivKey(GroupPubKey const* pub_key,
return result;
}
+/// Hash message buffer
+typedef struct HashMsg {
+ /// Message to be hashed
+ char data[11];
+} HashMsg;
+
static EpidStatus DeriveXF(FpElemStr* x, FpElemStr* f, Seed const* seed,
FpElemStr const* p) {
EpidStatus result = kEpidErr;
@@ -214,13 +219,13 @@ static EpidStatus DeriveXF(FpElemStr* x, FpElemStr* f, Seed const* seed,
BigNum* bn_p = 0;
do {
- char msgstr[] = {
+ HashMsg msgstr = {{
0x00, 0x45, 0x43, 0x43, 0x2d, 0x53, 0x61, 0x66, 0x65, 0x49, 0x44,
- };
+ }};
#pragma pack(1)
struct {
Seed seed;
- char msg[11];
+ HashMsg msg;
} hashbuf;
#pragma pack()
@@ -238,12 +243,12 @@ static EpidStatus DeriveXF(FpElemStr* x, FpElemStr* f, Seed const* seed,
BREAK_ON_EPID_ERROR(result);
// compute x
- memcpy_S(&hashbuf.seed, sizeof(hashbuf.seed), seed, sizeof(*seed));
- memcpy_S(&hashbuf.msg[0], sizeof(hashbuf.msg), msgstr, sizeof(msgstr));
- hashbuf.msg[0] = 0x06;
+ hashbuf.seed = *seed;
+ hashbuf.msg = msgstr;
+ hashbuf.msg.data[0] = 0x06;
result = Sha256MessageDigest(&hashbuf, sizeof(hashbuf), &digest[0]);
BREAK_ON_EPID_ERROR(result);
- hashbuf.msg[0] = 0x07;
+ hashbuf.msg.data[0] = 0x07;
result = Sha256MessageDigest(&hashbuf, sizeof(hashbuf), &digest[1]);
BREAK_ON_EPID_ERROR(result);
@@ -256,15 +261,15 @@ static EpidStatus DeriveXF(FpElemStr* x, FpElemStr* f, Seed const* seed,
result = WriteBigNum(bn_x, sizeof(str512), str512);
BREAK_ON_EPID_ERROR(result);
- memcpy_S(x, sizeof(*x), &str512[sizeof(str512) / 2], sizeof(*x));
+ *x = *(FpElemStr*)&str512[sizeof(str512) / 2];
// compute f
- memcpy_S(&hashbuf.seed, sizeof(hashbuf.seed), seed, sizeof(*seed));
- memcpy_S(&hashbuf.msg[0], sizeof(hashbuf.msg), msgstr, sizeof(msgstr));
- hashbuf.msg[0] = 0x08;
+ hashbuf.seed = *seed;
+ hashbuf.msg = msgstr;
+ hashbuf.msg.data[0] = 0x08;
result = Sha256MessageDigest(&hashbuf, sizeof(hashbuf), &digest[0]);
BREAK_ON_EPID_ERROR(result);
- hashbuf.msg[0] = 0x09;
+ hashbuf.msg.data[0] = 0x09;
result = Sha256MessageDigest(&hashbuf, sizeof(hashbuf), &digest[1]);
BREAK_ON_EPID_ERROR(result);
@@ -277,7 +282,7 @@ static EpidStatus DeriveXF(FpElemStr* x, FpElemStr* f, Seed const* seed,
result = WriteBigNum(bn_f, sizeof(str512), str512);
BREAK_ON_EPID_ERROR(result);
- memcpy_S(f, sizeof(*f), &str512[sizeof(str512) / 2], sizeof(*f));
+ *f = *(FpElemStr*)&str512[sizeof(str512) / 2];
result = kEpidNoErr;
} while (0);
diff --git a/epid/member/get_sigsize.c b/epid/member/src/get_sigsize.c
index c92a21c..08c8964 100644
--- a/epid/member/get_sigsize.c
+++ b/epid/member/src/get_sigsize.c
@@ -19,7 +19,7 @@
* \brief EpidGetSigSize implementation.
*/
#include "epid/member/api.h"
-#include "epid/common/endian_convert.h"
+#include "epid/common/src/endian_convert.h"
size_t EpidGetSigSize(SigRl const* sig_rl) {
const size_t kMinSigSize = sizeof(EpidSignature) - sizeof(NrProof);
diff --git a/epid/member/nr_prove.c b/epid/member/src/nr_prove.c
index ed67b9c..6fc7613 100644
--- a/epid/member/nr_prove.c
+++ b/epid/member/src/nr_prove.c
@@ -18,9 +18,9 @@
* \file
* \brief EpidNrProve implementation.
*/
-#include "epid/common/memory.h"
+#include "epid/common/src/memory.h"
#include "epid/member/api.h"
-#include "epid/member/context.h"
+#include "epid/member/src/context.h"
/// Handle SDK Error with Break
#define BREAK_ON_EPID_ERROR(ret) \
@@ -201,21 +201,14 @@ EpidStatus EpidNrProve(MemberCtx const* ctx, void const* msg, size_t msg_len,
// commit_values is allocated such that there are msg_len bytes available
// starting at commit_values->msg
if (msg) {
+ // Memory copy is used to copy a message of variable length
if (0 != memcpy_S(&commit_values->msg[0], msg_len, msg, msg_len)) {
res = kEpidBadArgErr;
break;
}
}
- if (0 != memcpy_S(&commit_values->p, sizeof(commit_values->p),
- &ctx->commit_values.p, sizeof(ctx->commit_values.p))) {
- res = kEpidBadArgErr;
- break;
- }
- if (0 != memcpy_S(&commit_values->g1, sizeof(commit_values->g1),
- &ctx->commit_values.g1, sizeof(ctx->commit_values.g1))) {
- res = kEpidBadArgErr;
- break;
- }
+ commit_values->p = ctx->commit_values.p;
+ commit_values->g1 = ctx->commit_values.g1;
commit_values->b = sig->B;
commit_values->k = sig->K;
commit_values->bp = sigrl_entry->b;
@@ -246,11 +239,7 @@ EpidStatus EpidNrProve(MemberCtx const* ctx, void const* msg, size_t msg_len,
// proof. If G1.is_identity(T) = true, the member also outputs
// "failed".
- if (0 != memcpy_S(&proof->T, sizeof(proof->T), &commit_values->t,
- sizeof(commit_values->t))) {
- res = kEpidBadArgErr;
- break;
- }
+ proof->T = commit_values->t;
res = WriteFfElement(Fp, c, (uint8_t*)&proof->c, sizeof(proof->c));
BREAK_ON_EPID_ERROR(res);
res = WriteFfElement(Fp, smu, (uint8_t*)&proof->smu, sizeof(proof->smu));
@@ -261,7 +250,7 @@ EpidStatus EpidNrProve(MemberCtx const* ctx, void const* msg, size_t msg_len,
res = EcIsIdentity(G1, T, &is_identity);
BREAK_ON_EPID_ERROR(res);
if (is_identity) {
- res = kEpidSigRevokedinSigRl;
+ res = kEpidSigRevokedInSigRl;
BREAK_ON_EPID_ERROR(res);
}
res = kEpidNoErr;
diff --git a/epid/member/presig.c b/epid/member/src/presig.c
index 8f1279b..9f057f8 100644
--- a/epid/member/presig.c
+++ b/epid/member/src/presig.c
@@ -19,7 +19,7 @@
* \brief EpidComputePreSig implementation.
*/
-#include "epid/member/context.h"
+#include "epid/member/src/context.h"
/// Handle SDK Error with Break
#define BREAK_ON_EPID_ERROR(ret) \
diff --git a/epid/member/privkey.c b/epid/member/src/privkey.c
index bb24046..a34d896 100644
--- a/epid/member/privkey.c
+++ b/epid/member/src/privkey.c
@@ -19,8 +19,8 @@
* \brief Private key implementation.
*/
-#include "epid/common/memory.h"
-#include "epid/member/privkey.h"
+#include "epid/common/src/memory.h"
+#include "epid/member/src/privkey.h"
EpidStatus CreatePrivKey(PrivKey const* priv_key_str, EcGroup* G1,
FiniteField* Fp, PrivKey_** priv_key) {
@@ -47,11 +47,7 @@ EpidStatus CreatePrivKey(PrivKey const* priv_key_str, EcGroup* G1,
result = NewFfElement(Fp, &priv_key_->f);
if (kEpidNoErr != result) break;
- if (0 != memcpy_S(&priv_key_->gid, sizeof(priv_key_->gid),
- &priv_key_str->gid, sizeof(priv_key_str->gid))) {
- result = kEpidBadArgErr;
- break;
- }
+ priv_key_->gid = priv_key_str->gid;
result = ReadEcPoint(G1, &priv_key_str->A, sizeof(priv_key_str->A),
priv_key_->A);
diff --git a/epid/member/privkey.h b/epid/member/src/privkey.h
index b75185d..1981a67 100644
--- a/epid/member/privkey.h
+++ b/epid/member/src/privkey.h
@@ -13,8 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################*/
-#ifndef EPID_MEMBER_PRIVKEY_H_
-#define EPID_MEMBER_PRIVKEY_H_
+#ifndef EPID_MEMBER_SRC_PRIVKEY_H_
+#define EPID_MEMBER_SRC_PRIVKEY_H_
/*!
* \file
* \brief Private key private interface.
@@ -64,4 +64,4 @@ EpidStatus CreatePrivKey(PrivKey const* priv_key_str, EcGroup* G1,
void DeletePrivKey(PrivKey_** priv_key);
/*! @} */
-#endif // EPID_MEMBER_PRIVKEY_H_
+#endif // EPID_MEMBER_SRC_PRIVKEY_H_
diff --git a/epid/member/request_join.c b/epid/member/src/request_join.c
index 0e825e9..981bfff 100644
--- a/epid/member/request_join.c
+++ b/epid/member/src/request_join.c
@@ -21,7 +21,7 @@
#include <epid/member/api.h>
#include <string.h>
-#include "epid/common/epid2params.h"
+#include "epid/common/src/epid2params.h"
#include "epid/common/math/finitefield.h"
#include "epid/common/math/ecgroup.h"
diff --git a/epid/member/sign.c b/epid/member/src/sign.c
index 8dd2170..976271f 100644
--- a/epid/member/sign.c
+++ b/epid/member/src/sign.c
@@ -20,11 +20,11 @@
*/
#include <string.h>
-#include "epid/common/endian_convert.h"
-#include "epid/common/memory.h"
-#include "epid/common/sigrlvalid.h"
+#include "epid/common/src/endian_convert.h"
+#include "epid/common/src/memory.h"
+#include "epid/common/src/sigrlvalid.h"
#include "epid/member/api.h"
-#include "epid/member/context.h"
+#include "epid/member/src/context.h"
EpidStatus EpidSign(MemberCtx const* ctx, void const* msg, size_t msg_len,
void const* basename, size_t basename_len,
@@ -80,12 +80,8 @@ EpidStatus EpidSign(MemberCtx const* ctx, void const* msg, size_t msg_len,
}
// b. The member copies RLver and n2 values in SigRL to the
// signature.
- if (0 != memcpy_S(&sig->rl_ver, sizeof(sig->rl_ver), &sig_rl->version,
- sizeof(sig_rl->version)))
- return kEpidBadArgErr;
- if (0 !=
- memcpy_S(&sig->n2, sizeof(sig->n2), &sig_rl->n2, sizeof(sig_rl->n2)))
- return kEpidBadArgErr;
+ sig->rl_ver = sig_rl->version;
+ sig->n2 = sig_rl->n2;
// c. For i = 0, ..., n2-1, the member computes sigma[i] =
// nrProve(f, B, K, B[i], K[i]). The details of nrProve()
// will be given in the next subsection.
diff --git a/epid/member/signbasic.c b/epid/member/src/signbasic.c
index dc3227d..a8dccb3 100644
--- a/epid/member/signbasic.c
+++ b/epid/member/src/signbasic.c
@@ -21,9 +21,9 @@
#include <string.h> // memset
-#include "epid/common/stack.h"
+#include "epid/common/src/stack.h"
#include "epid/member/api.h"
-#include "epid/member/context.h"
+#include "epid/member/src/context.h"
/// Handle SDK Error with Break
#define BREAK_ON_EPID_ERROR(ret) \
diff --git a/epid/member/unittests/compute_presig-test.cc b/epid/member/unittests/compute_presig-test.cc
index 74dc1c9..87b524b 100644
--- a/epid/member/unittests/compute_presig-test.cc
+++ b/epid/member/unittests/compute_presig-test.cc
@@ -23,7 +23,7 @@
extern "C" {
#include "epid/member/api.h"
-#include "epid/member/context.h"
+#include "epid/member/src/context.h"
}
#include "epid/member/unittests/member-testhelper.h"
@@ -37,8 +37,8 @@ namespace {
TEST_F(EpidMemberTest, ComputePreSigFailsGivenNullPointer) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
PreComputedSignature presig;
EXPECT_EQ(kEpidBadArgErr, EpidComputePreSig(nullptr, &presig));
@@ -53,8 +53,8 @@ TEST_F(EpidMemberTest,
0xF6, 0x2D, 0x53, 0x6C, 0xD1, 0x0B, 0x50, 0x0D}}};
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
PreComputedSignature presig;
EXPECT_EQ(kEpidNoErr, EpidComputePreSig(member, &presig));
diff --git a/epid/member/unittests/context-test.cc b/epid/member/unittests/context-test.cc
index 84a58e2..de4d27f 100644
--- a/epid/member/unittests/context-test.cc
+++ b/epid/member/unittests/context-test.cc
@@ -27,7 +27,7 @@
extern "C" {
#include "epid/member/api.h"
-#include "epid/member/context.h"
+#include "epid/member/src/context.h"
}
bool operator==(MemberPrecomp const& lhs, MemberPrecomp const& rhs) {
return 0 == std::memcmp(&lhs, &rhs, sizeof(lhs));
@@ -43,7 +43,7 @@ TEST_F(EpidMemberTest, DeleteWorksGivenNullMemberCtx) {
TEST_F(EpidMemberTest, DeleteNullsMemberCtx) {
MemberCtx* ctx = nullptr;
Prng my_prng;
- EpidMemberCreate(nullptr, &this->member_private_key, &this->member_precomp,
+ EpidMemberCreate(nullptr, &this->kMemberPrivateKey, &this->kMemberPrecomp,
&Prng::Generate, &my_prng, &ctx);
EpidMemberDelete(&ctx);
EXPECT_EQ(nullptr, ctx);
@@ -54,27 +54,27 @@ TEST_F(EpidMemberTest, DeleteNullsMemberCtx) {
TEST_F(EpidMemberTest, CreateFailsGivenNullParameters) {
MemberCtx* member_ctx = nullptr;
Prng my_prng;
- EXPECT_EQ(kEpidBadArgErr,
- EpidMemberCreate(nullptr, &this->member_private_key,
- &this->member_precomp, &Prng::Generate, &my_prng,
- &member_ctx));
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ EpidMemberCreate(nullptr, &this->kMemberPrivateKey, &this->kMemberPrecomp,
+ &Prng::Generate, &my_prng, &member_ctx));
EpidMemberDelete(&member_ctx);
EXPECT_EQ(
kEpidBadArgErr,
- EpidMemberCreate(&this->group_public_key, nullptr, &this->member_precomp,
+ EpidMemberCreate(&this->kGroupPublicKey, nullptr, &this->kMemberPrecomp,
&Prng::Generate, &my_prng, &member_ctx));
EpidMemberDelete(&member_ctx);
EXPECT_EQ(
kEpidBadArgErr,
- EpidMemberCreate(&this->group_public_key, &this->member_private_key,
- &this->member_precomp, nullptr, &my_prng, &member_ctx));
+ EpidMemberCreate(&this->kGroupPublicKey, &this->kMemberPrivateKey,
+ &this->kMemberPrecomp, nullptr, &my_prng, &member_ctx));
EpidMemberDelete(&member_ctx);
EXPECT_EQ(kEpidBadArgErr,
- EpidMemberCreate(&this->group_public_key, &this->member_private_key,
- &this->member_precomp, &Prng::Generate, &my_prng,
+ EpidMemberCreate(&this->kGroupPublicKey, &this->kMemberPrivateKey,
+ &this->kMemberPrecomp, &Prng::Generate, &my_prng,
nullptr));
EpidMemberDelete(nullptr);
}
@@ -86,28 +86,28 @@ TEST_F(EpidMemberTest, CreateSucceedsGivenValidParameters) {
// pass the whole list of parameters
EXPECT_EQ(kEpidNoErr,
- EpidMemberCreate(&this->group_public_key, &this->member_private_key,
- &this->member_precomp, &Prng::Generate, &my_prng,
+ EpidMemberCreate(&this->kGroupPublicKey, &this->kMemberPrivateKey,
+ &this->kMemberPrecomp, &Prng::Generate, &my_prng,
&member_ctx));
EpidMemberDelete(&member_ctx);
// pass the whole list of parameters but member_precomp
EXPECT_EQ(kEpidNoErr,
- EpidMemberCreate(&this->group_public_key, &this->member_private_key,
+ EpidMemberCreate(&this->kGroupPublicKey, &this->kMemberPrivateKey,
nullptr, &Prng::Generate, &my_prng, &member_ctx));
EpidMemberDelete(&member_ctx);
}
// test that create succeeds with valid IKGF given parameters
TEST_F(EpidMemberTest, CreateSucceedsGivenValidParametersUsingIKGFData) {
const GroupPubKey grp_public_key = {
-#include "epid/common/testdata/ikgf/groupa/pubkey.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/pubkey.inc"
};
const PrivKey mbr_private_key = {
-#include "epid/common/testdata/ikgf/groupa/member0/mprivkey.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/member0/mprivkey.inc"
};
const MemberPrecomp mbr_precomp = {
-#include "epid/common/testdata/ikgf/groupa/member0/mprecomp.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/member0/mprecomp.inc"
};
MemberCtx* member_ctx = nullptr;
@@ -129,36 +129,36 @@ TEST_F(EpidMemberTest, CreateSucceedsGivenValidParametersUsingIKGFData) {
TEST_F(EpidMemberTest, CreateFailsForInvalidGroupPubKey) {
MemberCtx* member_ctx = nullptr;
Prng my_prng;
- GroupPubKey gpk_h1 = this->group_public_key;
+ GroupPubKey gpk_h1 = this->kGroupPublicKey;
gpk_h1.h1.x.data.data[0]++;
- EXPECT_EQ(kEpidBadArgErr,
- EpidMemberCreate(&gpk_h1, &this->member_private_key,
- &this->member_precomp, &Prng::Generate, &my_prng,
- &member_ctx));
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ EpidMemberCreate(&gpk_h1, &this->kMemberPrivateKey, &this->kMemberPrecomp,
+ &Prng::Generate, &my_prng, &member_ctx));
EpidMemberDelete(&member_ctx);
- GroupPubKey gpk_h2 = this->group_public_key;
+ GroupPubKey gpk_h2 = this->kGroupPublicKey;
gpk_h2.h2.x.data.data[0]++;
- EXPECT_EQ(kEpidBadArgErr,
- EpidMemberCreate(&gpk_h2, &this->member_private_key,
- &this->member_precomp, &Prng::Generate, &my_prng,
- &member_ctx));
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ EpidMemberCreate(&gpk_h2, &this->kMemberPrivateKey, &this->kMemberPrecomp,
+ &Prng::Generate, &my_prng, &member_ctx));
EpidMemberDelete(&member_ctx);
- GroupPubKey gpk_w = this->group_public_key;
+ GroupPubKey gpk_w = this->kGroupPublicKey;
gpk_w.w.x[0].data.data[0]++;
EXPECT_EQ(
kEpidBadArgErr,
- EpidMemberCreate(&gpk_w, &this->member_private_key, &this->member_precomp,
+ EpidMemberCreate(&gpk_w, &this->kMemberPrivateKey, &this->kMemberPrecomp,
&Prng::Generate, &my_prng, &member_ctx));
EpidMemberDelete(&member_ctx);
}
TEST_F(EpidMemberTest, CreateFailsForInvalidPrivateKey) {
MemberCtx* member_ctx = nullptr;
Prng my_prng;
- PrivKey pk_A = this->member_private_key;
+ PrivKey pk_A = this->kMemberPrivateKey;
pk_A.A.x.data.data[0]++;
EXPECT_EQ(
kEpidBadArgErr,
- EpidMemberCreate(&this->group_public_key, &pk_A, &this->member_precomp,
+ EpidMemberCreate(&this->kGroupPublicKey, &pk_A, &this->kMemberPrecomp,
&Prng::Generate, &my_prng, &member_ctx));
EpidMemberDelete(&member_ctx);
}
@@ -170,7 +170,7 @@ TEST_F(EpidMemberTest, SetHashAlgFailsGivenNullPtr) {
}
TEST_F(EpidMemberTest, SetHashAlgCanSetValidAlgorithm) {
Prng my_prng;
- MemberCtxObj member_ctx(this->group_public_key, this->member_private_key,
+ MemberCtxObj member_ctx(this->kGroupPublicKey, this->kMemberPrivateKey,
&Prng::Generate, &my_prng);
EXPECT_EQ(kEpidNoErr, EpidMemberSetHashAlg(member_ctx, kSha256));
EXPECT_EQ(kEpidNoErr, EpidMemberSetHashAlg(member_ctx, kSha384));
@@ -178,7 +178,7 @@ TEST_F(EpidMemberTest, SetHashAlgCanSetValidAlgorithm) {
}
TEST_F(EpidMemberTest, SetHashAlgFailsForNonSupportedAlgorithm) {
Prng my_prng;
- MemberCtxObj member_ctx(this->group_public_key, this->member_private_key,
+ MemberCtxObj member_ctx(this->kGroupPublicKey, this->kMemberPrivateKey,
&Prng::Generate, &my_prng);
EXPECT_EQ(kEpidBadArgErr, EpidMemberSetHashAlg(member_ctx, kSha512_256));
EXPECT_EQ(kEpidBadArgErr, EpidMemberSetHashAlg(member_ctx, kSha3_256));
@@ -190,8 +190,8 @@ TEST_F(EpidMemberTest, SetHashAlgFailsForNonSupportedAlgorithm) {
// EpidRegisterBaseName
TEST_F(EpidMemberTest, RegisterBaseNameFailsGivenNullPtr) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
std::vector<uint8_t> basename = {'_', 'b', 'a', 's', 'e', 'n', 'a', 'm', 'e'};
EXPECT_EQ(kEpidBadArgErr,
EpidRegisterBaseName(member, nullptr, basename.size()));
@@ -200,8 +200,8 @@ TEST_F(EpidMemberTest, RegisterBaseNameFailsGivenNullPtr) {
}
TEST_F(EpidMemberTest, RegisterBaseNameFailsGivenDuplicateBaseName) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
std::vector<uint8_t> basename = {'d', 'b', 'a', 's', 'e', 'n', 'a', 'm', 'e'};
EXPECT_EQ(kEpidNoErr,
EpidRegisterBaseName(member, basename.data(), basename.size()));
@@ -210,8 +210,8 @@ TEST_F(EpidMemberTest, RegisterBaseNameFailsGivenDuplicateBaseName) {
}
TEST_F(EpidMemberTest, RegisterBaseNameFailsGivenInvalidBaseName) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
std::vector<uint8_t> basename = {};
std::vector<uint8_t> basename2 = {'b', 's', 'n'};
EXPECT_EQ(kEpidBadArgErr,
@@ -220,8 +220,8 @@ TEST_F(EpidMemberTest, RegisterBaseNameFailsGivenInvalidBaseName) {
}
TEST_F(EpidMemberTest, RegisterBaseNameSucceedsGivenUniqueBaseName) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
std::vector<uint8_t> basename = {'b', 's', 'n', '0', '1'};
EXPECT_EQ(kEpidNoErr,
EpidRegisterBaseName(member, basename.data(), basename.size()));
@@ -231,8 +231,8 @@ TEST_F(EpidMemberTest, RegisterBaseNameSucceedsGivenUniqueBaseName) {
TEST_F(EpidMemberTest, MemberWritePrecompFailsGivenNullPointer) {
MemberPrecomp precomp;
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
MemberCtx* ctx = member;
EXPECT_EQ(kEpidBadArgErr, EpidMemberWritePrecomp(nullptr, &precomp));
EXPECT_EQ(kEpidBadArgErr, EpidMemberWritePrecomp(ctx, nullptr));
@@ -240,14 +240,14 @@ TEST_F(EpidMemberTest, MemberWritePrecompFailsGivenNullPointer) {
TEST_F(EpidMemberTest, MemberWritePrecompSucceedGivenValidArgument) {
MemberPrecomp precomp;
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
MemberCtx* ctx = member;
EXPECT_EQ(kEpidNoErr, EpidMemberWritePrecomp(ctx, &precomp));
- MemberPrecomp expected_precomp = this->member_precomp;
+ MemberPrecomp expected_precomp = this->kMemberPrecomp;
EXPECT_EQ(expected_precomp, precomp);
- MemberCtxObj member2(this->group_public_key, this->member_private_key,
+ MemberCtxObj member2(this->kGroupPublicKey, this->kMemberPrivateKey,
&Prng::Generate, &my_prng);
MemberCtx* ctx2 = member2;
EXPECT_EQ(kEpidNoErr, EpidMemberWritePrecomp(ctx2, &precomp));
@@ -255,8 +255,8 @@ TEST_F(EpidMemberTest, MemberWritePrecompSucceedGivenValidArgument) {
}
TEST_F(EpidMemberTest, DefaultHashAlgIsSha512) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
MemberCtx* ctx = member;
EXPECT_EQ(kSha512, ctx->hash_alg);
}
diff --git a/epid/member/unittests/get_sigsize-test.cc b/epid/member/unittests/get_sigsize-test.cc
index 043de17..b5202da 100644
--- a/epid/member/unittests/get_sigsize-test.cc
+++ b/epid/member/unittests/get_sigsize-test.cc
@@ -83,7 +83,7 @@ TEST_F(EpidMemberTest, GetSigSizeReturnsCorrectValueGivenValidSigRl) {
TEST_F(EpidMemberTest,
GetSigSizeReturnsCorrectValueGivenValidSigRlUsingIKGFData) {
const std::vector<uint8_t> sigrl_bin = {
-#include "epid/common/testdata/ikgf/groupa/sigrl.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/sigrl.inc"
};
SigRl const* sig_rl = reinterpret_cast<const SigRl*>(sigrl_bin.data());
diff --git a/epid/member/unittests/member-testhelper.cc b/epid/member/unittests/member-testhelper.cc
index 64d1f2e..c06b9cb 100644
--- a/epid/member/unittests/member-testhelper.cc
+++ b/epid/member/unittests/member-testhelper.cc
@@ -58,7 +58,7 @@ MemberCtxObj::operator MemberCtx*() const { return ctx_; }
MemberCtxObj::operator const MemberCtx*() const { return ctx_; }
/// Arbitrary test data were generated based on Intel(R) EPID 2.0 parameters
-const GroupPubKey EpidMemberTest::group_public_key = {
+const GroupPubKey EpidMemberTest::kGroupPublicKey = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01}, // group id
{{{{0xb3, 0x6f, 0xff, 0x81, 0xe2, 0x1b, 0x17, 0xeb, 0x3d, 0x75, 0x3d, 0x61,
@@ -87,7 +87,7 @@ const GroupPubKey EpidMemberTest::group_public_key = {
0x83, 0x7d, 0x3e, 0x31, 0xee, 0x11, 0x40, 0xa9}}}}} // w
};
-const PrivKey EpidMemberTest::member_private_key = {
+const PrivKey EpidMemberTest::kMemberPrivateKey = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01}, // group id
{{{{0x46, 0xc9, 0x69, 0xee, 0xf4, 0x68, 0xe1, 0x5f, 0xac, 0xbf, 0xdd, 0x77,
@@ -104,7 +104,7 @@ const PrivKey EpidMemberTest::member_private_key = {
0x36, 0x2d, 0x41, 0x35, 0x63, 0x61, 0x31, 0xc7} // f
};
-const MemberPrecomp EpidMemberTest::member_precomp = {
+const MemberPrecomp EpidMemberTest::kMemberPrecomp = {
{0xd8, 0x14, 0xba, 0x4b, 0x44, 0x03, 0x55, 0x6c, 0xf6, 0x42, 0xe8, 0xf0,
0x4c, 0xb5, 0xe7, 0xd4, 0xa2, 0xa3, 0x69, 0x47, 0xf5, 0xd4, 0xc8, 0xe9,
0xc5, 0x5a, 0x39, 0xb5, 0x55, 0xa5, 0xd3, 0xfb, 0xf3, 0x85, 0x5a, 0x0d,
@@ -241,7 +241,7 @@ const MemberPrecomp EpidMemberTest::member_precomp = {
0xb3, 0xde, 0x52, 0x3e, 0xc0, 0xd0, 0xb8, 0x19, 0x85, 0x1b, 0x7b, 0xe3,
} // ea2
};
-const PreComputedSignature EpidMemberTest::precomputed_signatures[2] = {
+const PreComputedSignature EpidMemberTest::kPrecomputedSignatures[2] = {
{
{{{{0x5c, 0x1b, 0x75, 0x1c, 0xc7, 0x2c, 0xf7, 0x4a, 0x97, 0x43, 0xf2,
0x1a, 0x70, 0x80, 0x90, 0x61, 0xf5, 0x9e, 0x9b, 0x43, 0x92, 0x2f,
@@ -409,28 +409,28 @@ const PreComputedSignature EpidMemberTest::precomputed_signatures[2] = {
0xe8, 0x26, 0x11, 0x56, 0x5c, 0xcb, 0x04, 0x65, 0x36, 0xfd, 0xd9, 0x39,
0x35, 0xfa, 0x78, 0xa5, 0xc2, 0x3c, 0x2e, 0x17} // rb
}};
-const std::vector<uint8_t> EpidMemberTest::group_public_key_data_ikgf = {
-#include "epid/common/testdata/ikgf/groupa/pubkey.inc"
+const std::vector<uint8_t> EpidMemberTest::kGroupPublicKeyDataIkgf = {
+#include "epid/common-testhelper/testdata/ikgf/groupa/pubkey.inc"
};
-const std::vector<uint8_t> EpidMemberTest::member_private_key_data_ikgf = {
-#include "epid/common/testdata/ikgf/groupa/member0/mprivkey.inc"
+const std::vector<uint8_t> EpidMemberTest::kMemberPrivateKeyDataIkgf = {
+#include "epid/common-testhelper/testdata/ikgf/groupa/member0/mprivkey.inc"
};
-const std::vector<uint8_t> EpidMemberTest::grp01_member0_sig_test1_sha256 = {
-#include "epid/common/testdata/grp01/member0/sig_test1_sha256.inc"
+const std::vector<uint8_t> EpidMemberTest::kGrp01Member0SigTest1Sha256 = {
+#include "epid/common-testhelper/testdata/grp01/member0/sig_test1_sha256.inc"
};
-const std::vector<uint8_t> EpidMemberTest::grp01_member0_sig_test1_sha384 = {
-#include "epid/common/testdata/grp01/member0/sig_test1_sha384.inc"
+const std::vector<uint8_t> EpidMemberTest::kGrp01Member0SigTest1Sha384 = {
+#include "epid/common-testhelper/testdata/grp01/member0/sig_test1_sha384.inc"
};
-const std::vector<uint8_t> EpidMemberTest::grp01_member0_sig_test1_sha512 = {
-#include "epid/common/testdata/grp01/member0/sig_test1_sha512.inc"
+const std::vector<uint8_t> EpidMemberTest::kGrp01Member0SigTest1Sha512 = {
+#include "epid/common-testhelper/testdata/grp01/member0/sig_test1_sha512.inc"
};
-const std::vector<uint8_t> EpidMemberTest::test1_msg = {'t', 'e', 's', 't',
+const std::vector<uint8_t> EpidMemberTest::kTest1Msg = {'t', 'e', 's', 't',
'1'};
-std::vector<uint8_t> EpidMemberTest::sig_rl_data = {
-#include "epid/common/testdata/grp01/sigrl.inc"
+std::vector<uint8_t> EpidMemberTest::kSigRlData = {
+#include "epid/common-testhelper/testdata/grp01/sigrl.inc"
};
-std::vector<uint8_t> EpidMemberTest::sig_rl_5_entry_data = {
+std::vector<uint8_t> EpidMemberTest::kSigRl5EntryData = {
// gid
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01,
@@ -503,20 +503,20 @@ const std::vector<uint8_t> EpidMemberTest::kMsg1 = {'m', 's', 'g', '1'};
const std::vector<uint8_t> EpidMemberTest::kBsn1 = {'b', 's', 'n', '1'};
const GroupPubKey EpidMemberTest::kGrpXKey = {
-#include "epid/common/testdata/grp_x/pubkey.inc"
+#include "epid/common-testhelper/testdata/grp_x/pubkey.inc"
};
const CompressedPrivKey EpidMemberTest::kGrpXMember9CompressedKey = {
-#include "epid/common/testdata/grp_x/cmember9/cmpprivkey.inc"
+#include "epid/common-testhelper/testdata/grp_x/cmember9/cmpprivkey.inc"
};
const PrivKey EpidMemberTest::kGrpXMember9PrivKey = {
-#include "epid/common/testdata/grp_x/cmember9/mprivkey.inc"
+#include "epid/common-testhelper/testdata/grp_x/cmember9/mprivkey.inc"
};
const GroupPubKey EpidMemberTest::kGrpYKey = {
-#include "epid/common/testdata/grp_y/pubkey.inc"
+#include "epid/common-testhelper/testdata/grp_y/pubkey.inc"
};
const CompressedPrivKey EpidMemberTest::kGrpYMember9CompressedKey = {
-#include "epid/common/testdata/grp_y/cmember9/cmpprivkey.inc"
+#include "epid/common-testhelper/testdata/grp_y/cmember9/cmpprivkey.inc"
};
diff --git a/epid/member/unittests/member-testhelper.h b/epid/member/unittests/member-testhelper.h
index 92be0b1..5d720d2 100644
--- a/epid/member/unittests/member-testhelper.h
+++ b/epid/member/unittests/member-testhelper.h
@@ -63,29 +63,29 @@ class MemberCtxObj {
class EpidMemberTest : public ::testing::Test {
public:
/// test data
- static const GroupPubKey group_public_key;
+ static const GroupPubKey kGroupPublicKey;
/// test data
- static const PrivKey member_private_key;
+ static const PrivKey kMemberPrivateKey;
/// test data
- static const std::vector<uint8_t> group_public_key_data_ikgf;
+ static const std::vector<uint8_t> kGroupPublicKeyDataIkgf;
/// test data
- static const std::vector<uint8_t> member_private_key_data_ikgf;
+ static const std::vector<uint8_t> kMemberPrivateKeyDataIkgf;
/// test data
- static const MemberPrecomp member_precomp;
+ static const MemberPrecomp kMemberPrecomp;
/// test data
- static const PreComputedSignature precomputed_signatures[2];
+ static const PreComputedSignature kPrecomputedSignatures[2];
/// test data
- static const std::vector<uint8_t> grp01_member0_sig_test1_sha256;
+ static const std::vector<uint8_t> kGrp01Member0SigTest1Sha256;
/// test data
- static const std::vector<uint8_t> grp01_member0_sig_test1_sha384;
+ static const std::vector<uint8_t> kGrp01Member0SigTest1Sha384;
/// test data
- static const std::vector<uint8_t> grp01_member0_sig_test1_sha512;
+ static const std::vector<uint8_t> kGrp01Member0SigTest1Sha512;
/// test data
- static const std::vector<uint8_t> test1_msg;
+ static const std::vector<uint8_t> kTest1Msg;
/// signature based revocation list with 50 entries
- static std::vector<uint8_t> sig_rl_data;
+ static std::vector<uint8_t> kSigRlData;
/// signature based revocation list with 5 entries
- static std::vector<uint8_t> sig_rl_5_entry_data;
+ static std::vector<uint8_t> kSigRl5EntryData;
/// a message
static const std::vector<uint8_t> kMsg0;
/// a message
diff --git a/epid/member/unittests/nr_prove-test.cc b/epid/member/unittests/nr_prove-test.cc
index 388ca5e..ebc4a59 100644
--- a/epid/member/unittests/nr_prove-test.cc
+++ b/epid/member/unittests/nr_prove-test.cc
@@ -35,16 +35,15 @@ namespace {
TEST_F(EpidMemberTest, NrProveFailsGivenNullParameters) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
BasicSignature const* basic_sig =
&reinterpret_cast<EpidSignature const*>(
- this->grp01_member0_sig_test1_sha256.data())
+ this->kGrp01Member0SigTest1Sha256.data())
->sigma0;
- auto msg = this->test1_msg;
- SigRl const* sig_rl =
- reinterpret_cast<const SigRl*>(this->sig_rl_data.data());
+ auto msg = this->kTest1Msg;
+ SigRl const* sig_rl = reinterpret_cast<const SigRl*>(this->kSigRlData.data());
NrProof proof;
@@ -62,16 +61,15 @@ TEST_F(EpidMemberTest, NrProveFailsGivenNullParameters) {
TEST_F(EpidMemberTest, NrProveFailsGivenInvalidSigRlEntry) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
BasicSignature const* basic_sig =
&reinterpret_cast<EpidSignature const*>(
- this->grp01_member0_sig_test1_sha256.data())
+ this->kGrp01Member0SigTest1Sha256.data())
->sigma0;
- auto msg = this->test1_msg;
- SigRl const* sig_rl =
- reinterpret_cast<const SigRl*>(this->sig_rl_data.data());
+ auto msg = this->kTest1Msg;
+ SigRl const* sig_rl = reinterpret_cast<const SigRl*>(this->kSigRlData.data());
NrProof proof;
@@ -90,16 +88,15 @@ TEST_F(EpidMemberTest, NrProveFailsGivenInvalidSigRlEntry) {
TEST_F(EpidMemberTest, NrProveFailsGivenInvalidBasicSig) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
BasicSignature const* basic_sig =
&reinterpret_cast<EpidSignature const*>(
- this->grp01_member0_sig_test1_sha256.data())
+ this->kGrp01Member0SigTest1Sha256.data())
->sigma0;
- auto msg = this->test1_msg;
- SigRl const* sig_rl =
- reinterpret_cast<const SigRl*>(this->sig_rl_data.data());
+ auto msg = this->kTest1Msg;
+ SigRl const* sig_rl = reinterpret_cast<const SigRl*>(this->kSigRlData.data());
NrProof proof;
@@ -119,12 +116,11 @@ TEST_F(EpidMemberTest, NrProveFailsGivenInvalidBasicSig) {
TEST_F(EpidMemberTest, GeneratesNrProofForEmptyMessage) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
BasicSignature basic_sig;
- SigRl const* sig_rl =
- reinterpret_cast<const SigRl*>(this->sig_rl_data.data());
+ SigRl const* sig_rl = reinterpret_cast<const SigRl*>(this->kSigRlData.data());
NrProof proof;
@@ -135,7 +131,7 @@ TEST_F(EpidMemberTest, GeneratesNrProofForEmptyMessage) {
&sig_rl->bk[0], &proof));
// Check proof by doing an NrVerify
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha256));
EXPECT_EQ(kEpidNoErr,
EpidNrVerify(ctx, &basic_sig, nullptr, 0, &sig_rl->bk[0], &proof));
@@ -143,13 +139,12 @@ TEST_F(EpidMemberTest, GeneratesNrProofForEmptyMessage) {
TEST_F(EpidMemberTest, GeneratesNrProofUsingDefaultHashAlg) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
BasicSignature basic_sig;
- auto msg = this->test1_msg;
- SigRl const* sig_rl =
- reinterpret_cast<const SigRl*>(this->sig_rl_data.data());
+ auto msg = this->kTest1Msg;
+ SigRl const* sig_rl = reinterpret_cast<const SigRl*>(this->kSigRlData.data());
NrProof proof;
@@ -159,7 +154,7 @@ TEST_F(EpidMemberTest, GeneratesNrProofUsingDefaultHashAlg) {
&sig_rl->bk[0], &proof));
// Check proof by doing an NrVerify
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
EXPECT_EQ(kEpidNoErr, EpidNrVerify(ctx, &basic_sig, msg.data(), msg.size(),
&sig_rl->bk[0], &proof));
@@ -168,18 +163,18 @@ TEST_F(EpidMemberTest, GeneratesNrProofUsingDefaultHashAlg) {
TEST_F(EpidMemberTest, GeneratesNrProofUsingDefaultHashAlgUsingIKGFData) {
Prng my_prng;
GroupPubKey grp_public_key = *reinterpret_cast<const GroupPubKey*>(
- this->group_public_key_data_ikgf.data());
- PrivKey mbr_private_key = *reinterpret_cast<const PrivKey*>(
- this->member_private_key_data_ikgf.data());
+ this->kGroupPublicKeyDataIkgf.data());
+ PrivKey mbr_private_key =
+ *reinterpret_cast<const PrivKey*>(this->kMemberPrivateKeyDataIkgf.data());
const std::vector<uint8_t> sigrl_bin = {
-#include "epid/common/testdata/ikgf/groupa/sigrl.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/sigrl.inc"
};
MemberCtxObj member(grp_public_key, mbr_private_key, &Prng::Generate,
&my_prng);
BasicSignature basic_sig;
- auto msg = this->test1_msg;
+ auto msg = this->kTest1Msg;
SigRl const* sig_rl = reinterpret_cast<const SigRl*>(sigrl_bin.data());
NrProof proof;
@@ -198,13 +193,12 @@ TEST_F(EpidMemberTest, GeneratesNrProofUsingDefaultHashAlgUsingIKGFData) {
TEST_F(EpidMemberTest, GeneratesNrProofUsingSha256HashAlg) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
BasicSignature basic_sig;
- auto msg = this->test1_msg;
- SigRl const* sig_rl =
- reinterpret_cast<const SigRl*>(this->sig_rl_data.data());
+ auto msg = this->kTest1Msg;
+ SigRl const* sig_rl = reinterpret_cast<const SigRl*>(this->kSigRlData.data());
NrProof proof;
@@ -215,7 +209,7 @@ TEST_F(EpidMemberTest, GeneratesNrProofUsingSha256HashAlg) {
&sig_rl->bk[0], &proof));
// Check proof by doing an NrVerify
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha256));
EXPECT_EQ(kEpidNoErr, EpidNrVerify(ctx, &basic_sig, msg.data(), msg.size(),
&sig_rl->bk[0], &proof));
@@ -223,13 +217,12 @@ TEST_F(EpidMemberTest, GeneratesNrProofUsingSha256HashAlg) {
TEST_F(EpidMemberTest, GeneratesNrProofUsingSha384HashAlg) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
BasicSignature basic_sig;
- auto msg = this->test1_msg;
- SigRl const* sig_rl =
- reinterpret_cast<const SigRl*>(this->sig_rl_data.data());
+ auto msg = this->kTest1Msg;
+ SigRl const* sig_rl = reinterpret_cast<const SigRl*>(this->kSigRlData.data());
NrProof proof;
@@ -240,7 +233,7 @@ TEST_F(EpidMemberTest, GeneratesNrProofUsingSha384HashAlg) {
&sig_rl->bk[0], &proof));
// Check proof by doing an NrVerify
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha384));
EXPECT_EQ(kEpidNoErr, EpidNrVerify(ctx, &basic_sig, msg.data(), msg.size(),
&sig_rl->bk[0], &proof));
@@ -248,13 +241,12 @@ TEST_F(EpidMemberTest, GeneratesNrProofUsingSha384HashAlg) {
TEST_F(EpidMemberTest, GeneratesNrProofUsingSha512HashAlg) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
BasicSignature basic_sig;
- auto msg = this->test1_msg;
- SigRl const* sig_rl =
- reinterpret_cast<const SigRl*>(this->sig_rl_data.data());
+ auto msg = this->kTest1Msg;
+ SigRl const* sig_rl = reinterpret_cast<const SigRl*>(this->kSigRlData.data());
NrProof proof;
@@ -265,7 +257,7 @@ TEST_F(EpidMemberTest, GeneratesNrProofUsingSha512HashAlg) {
&sig_rl->bk[0], &proof));
// Check proof by doing an NrVerify
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha512));
EXPECT_EQ(kEpidNoErr, EpidNrVerify(ctx, &basic_sig, msg.data(), msg.size(),
&sig_rl->bk[0], &proof));
@@ -273,13 +265,12 @@ TEST_F(EpidMemberTest, GeneratesNrProofUsingSha512HashAlg) {
TEST_F(EpidMemberTest, DISABLED_GeneratesNrProofUsingSha512256HashAlg) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
BasicSignature basic_sig;
- auto msg = this->test1_msg;
- SigRl const* sig_rl =
- reinterpret_cast<const SigRl*>(this->sig_rl_data.data());
+ auto msg = this->kTest1Msg;
+ SigRl const* sig_rl = reinterpret_cast<const SigRl*>(this->kSigRlData.data());
NrProof proof;
@@ -290,7 +281,7 @@ TEST_F(EpidMemberTest, DISABLED_GeneratesNrProofUsingSha512256HashAlg) {
&sig_rl->bk[0], &proof));
// Check proof by doing an NrVerify
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha512_256));
EXPECT_EQ(kEpidNoErr, EpidNrVerify(ctx, &basic_sig, msg.data(), msg.size(),
&sig_rl->bk[0], &proof));
diff --git a/epid/member/unittests/presig-test.cc b/epid/member/unittests/presig-test.cc
index 06c5ead..95538ac 100644
--- a/epid/member/unittests/presig-test.cc
+++ b/epid/member/unittests/presig-test.cc
@@ -52,20 +52,20 @@ namespace {
// EpidAddPreSigs
TEST_F(EpidMemberTest, AddPreSigsFailsGivenNullPointer) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
- PreComputedSignature presig = this->precomputed_signatures[0];
+ PreComputedSignature presig = this->kPrecomputedSignatures[0];
EXPECT_EQ(kEpidBadArgErr, EpidAddPreSigs(nullptr, 1, &presig));
}
TEST_F(EpidMemberTest, AddPreSigsFailsGivenHugeNumberOfPreSigs) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
- PreComputedSignature presig = this->precomputed_signatures[0];
+ PreComputedSignature presig = this->kPrecomputedSignatures[0];
// number_presigs = 0x80..01 of size equal to sizeof(size_t)
EXPECT_EQ(kEpidBadArgErr,
@@ -75,8 +75,8 @@ TEST_F(EpidMemberTest, AddPreSigsFailsGivenHugeNumberOfPreSigs) {
TEST_F(EpidMemberTest,
AddPreSigsComputesSpecifiedNumberOfPresigsIfInputPresigsNull) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
ASSERT_EQ(kEpidNoErr, EpidAddPreSigs(member, 2, nullptr));
ASSERT_EQ(kEpidNoErr, EpidAddPreSigs(member, 1, nullptr));
@@ -87,13 +87,13 @@ TEST_F(EpidMemberTest,
TEST_F(EpidMemberTest, AddPreSigsClearsInputPresigBuffer) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
// For a test purposes allocate an array of precomputed signatures with
// all elements initialized to the same precomputed signature.
// Warning: Do not use precomputed signatures twice in production code!
- std::vector<PreComputedSignature> presigs(2, this->precomputed_signatures[0]);
+ std::vector<PreComputedSignature> presigs(2, this->kPrecomputedSignatures[0]);
ASSERT_EQ(kEpidNoErr, EpidAddPreSigs(member, presigs.size(), presigs.data()));
EXPECT_TRUE(std::all_of((uint8_t*)presigs.data(),
@@ -103,14 +103,14 @@ TEST_F(EpidMemberTest, AddPreSigsClearsInputPresigBuffer) {
TEST_F(EpidMemberTest, AddPreSigsAddsCorrectNumberOfPresigsGivenValidInput) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
// For a test purposes allocate an arrays of precomputed signatures with
// all elements initialized to the same precomputed signature.
// Warning: Do not use precomputed signatures twice in production code!
std::vector<PreComputedSignature> presigs1(2,
- this->precomputed_signatures[0]);
+ this->kPrecomputedSignatures[0]);
std::vector<PreComputedSignature> presigs2 = presigs1;
// add
@@ -132,21 +132,21 @@ TEST_F(EpidMemberTest, GetNumPreSigsReturnsZeroGivenNullptr) {
TEST_F(EpidMemberTest, NumPreSigsForNewleyCreatedContextIsZero) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
EXPECT_EQ((size_t)0, EpidGetNumPreSigs(member));
}
TEST_F(EpidMemberTest, GetNumPreSigsReturnsNumberOfAddedPresigs) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
// For a test purposes allocate an array of precomputed signatures with
// all elements initialized to the same precomputed signature.
// Warning: Do not use precomputed signatures twice in production code!
- std::vector<PreComputedSignature> presigs(5, this->precomputed_signatures[0]);
+ std::vector<PreComputedSignature> presigs(5, this->kPrecomputedSignatures[0]);
THROW_ON_EPIDERR(EpidAddPreSigs(member, presigs.size(), presigs.data()));
EXPECT_EQ(presigs.size(), EpidGetNumPreSigs(member));
@@ -155,8 +155,8 @@ TEST_F(EpidMemberTest, GetNumPreSigsReturnsNumberOfAddedPresigs) {
// EpidWritePreSigs
TEST_F(EpidMemberTest, WritePreSigsFailsGivenNullPointer) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
PreComputedSignature presig;
EXPECT_EQ(kEpidBadArgErr, EpidWritePreSigs(nullptr, &presig, 0));
@@ -164,10 +164,10 @@ TEST_F(EpidMemberTest, WritePreSigsFailsGivenNullPointer) {
TEST_F(EpidMemberTest, WritePreSigsFailsGivenWrongNumberOfPresigs) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
- PreComputedSignature presig = this->precomputed_signatures[0];
+ PreComputedSignature presig = this->kPrecomputedSignatures[0];
// add one pre-computed signature
THROW_ON_EPIDERR(EpidAddPreSigs(member, 1, &presig));
@@ -177,13 +177,13 @@ TEST_F(EpidMemberTest, WritePreSigsFailsGivenWrongNumberOfPresigs) {
TEST_F(EpidMemberTest, WritePreSigsClearsPresigsOnSuccess) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
std::vector<PreComputedSignature> presigs(
- COUNT_OF(this->precomputed_signatures));
- presigs.assign(std::begin(this->precomputed_signatures),
- std::end(this->precomputed_signatures));
+ COUNT_OF(this->kPrecomputedSignatures));
+ presigs.assign(std::begin(this->kPrecomputedSignatures),
+ std::end(this->kPrecomputedSignatures));
THROW_ON_EPIDERR(EpidAddPreSigs(member, presigs.size(), presigs.data()));
@@ -201,11 +201,11 @@ TEST_F(EpidMemberTest, WritePreSigsClearsPresigsOnSuccess) {
TEST_F(EpidMemberTest, CanWriteAddedPresigs) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
- PreComputedSignature presig0 = this->precomputed_signatures[0];
- PreComputedSignature presig1 = this->precomputed_signatures[1];
+ PreComputedSignature presig0 = this->kPrecomputedSignatures[0];
+ PreComputedSignature presig1 = this->kPrecomputedSignatures[1];
PreComputedSignature presigs[2] = {presig0, presig1};
THROW_ON_EPIDERR(EpidAddPreSigs(member, COUNT_OF(presigs), presigs));
@@ -218,8 +218,8 @@ TEST_F(EpidMemberTest, CanWriteAddedPresigs) {
TEST_F(EpidMemberTest, CanWriteGeneratedPresigs) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
PreComputedSignature zero_buffer;
memset(&zero_buffer, 0, sizeof(zero_buffer));
@@ -235,8 +235,8 @@ TEST_F(EpidMemberTest, CanWriteGeneratedPresigs) {
TEST_F(EpidMemberTest, WritePreSigsCanWriteZeroPresigs) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
PreComputedSignature presig;
diff --git a/epid/member/unittests/request_join-test.cc b/epid/member/unittests/request_join-test.cc
index 61760a2..d444974 100644
--- a/epid/member/unittests/request_join-test.cc
+++ b/epid/member/unittests/request_join-test.cc
@@ -26,7 +26,7 @@ extern "C" {
#include "epid/member/api.h"
#include "epid/common/math/ecgroup.h"
#include "epid/common/math/finitefield.h"
-#include "epid/common/epid2params.h"
+#include "epid/common/src/epid2params.h"
}
#include "epid/member/unittests/member-testhelper.h"
@@ -42,7 +42,7 @@ namespace {
// local constant for RequestJoin tests. This can be hoisted later if needed
// avoids cpplint warning about multiple includes.
const GroupPubKey kPubKey = {
-#include "epid/common/testdata/grp01/gpubkey.inc"
+#include "epid/common-testhelper/testdata/grp01/gpubkey.inc"
};
TEST_F(EpidMemberTest, RequestJoinFailsGivenNullParameters) {
@@ -135,7 +135,7 @@ TEST_F(EpidMemberTest,
0x00, 0x00, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01,
};
const GroupPubKey* grp_public_key = reinterpret_cast<const GroupPubKey*>(
- this->group_public_key_data_ikgf.data());
+ this->kGroupPublicKeyDataIkgf.data());
EXPECT_EQ(kEpidNoErr, EpidRequestJoin(grp_public_key, &ni, &f, rnd_func,
rnd_param, kSha256, &join_request));
}
@@ -297,9 +297,9 @@ TEST_F(EpidMemberTest, PrivateKeyValidationRejectsKeyNotInGroup) {
TEST_F(EpidMemberTest, PrivateKeyValidationRejectsKeyNotInGroupUsingIKGFData) {
const GroupPubKey* grp_public_key = reinterpret_cast<const GroupPubKey*>(
- this->group_public_key_data_ikgf.data());
+ this->kGroupPublicKeyDataIkgf.data());
const PrivKey mbr_private_key = {
-#include "epid/common/testdata/ikgf/groupb/member0/mprivkey.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupb/member0/mprivkey.inc"
};
EXPECT_FALSE(EpidIsPrivKeyInGroup(grp_public_key, &mbr_private_key));
}
@@ -311,9 +311,9 @@ TEST_F(EpidMemberTest, PrivateKeyValidationAcceptsKeyInGroup) {
TEST_F(EpidMemberTest, PrivateKeyValidationAcceptsKeyInGroupUsingIKGFData) {
const GroupPubKey* grp_public_key = reinterpret_cast<const GroupPubKey*>(
- this->group_public_key_data_ikgf.data());
- const PrivKey* mbr_private_key = reinterpret_cast<const PrivKey*>(
- this->member_private_key_data_ikgf.data());
+ this->kGroupPublicKeyDataIkgf.data());
+ const PrivKey* mbr_private_key =
+ reinterpret_cast<const PrivKey*>(this->kMemberPrivateKeyDataIkgf.data());
EXPECT_TRUE(EpidIsPrivKeyInGroup(grp_public_key, mbr_private_key));
}
diff --git a/epid/member/unittests/sign-test.cc b/epid/member/unittests/sign-test.cc
index b9c5360..ce24b8a 100644
--- a/epid/member/unittests/sign-test.cc
+++ b/epid/member/unittests/sign-test.cc
@@ -23,7 +23,7 @@
extern "C" {
#include "epid/member/api.h"
-#include "epid/member/context.h"
+#include "epid/member/src/context.h"
#include "epid/verifier/api.h"
}
@@ -41,12 +41,12 @@ namespace {
TEST_F(EpidMemberTest, SignFailsGivenNullParameters) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
SigRl srl = {{{0}}, {{0}}, {{0}}, {{{{0}, {0}}, {{0}, {0}}}}};
- srl.gid = this->group_public_key.gid;
+ srl.gid = this->kGroupPublicKey.gid;
std::vector<uint8_t> sig(EpidGetSigSize(&srl));
EXPECT_EQ(kEpidBadArgErr, EpidSign(nullptr, msg.data(), msg.size(),
bsn.data(), bsn.size(), &srl, sizeof(srl),
@@ -64,12 +64,12 @@ TEST_F(EpidMemberTest, SignFailsGivenNullParameters) {
TEST_F(EpidMemberTest, SignFailsGivenWrongSigLen) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
SigRl srl = {{{0}}, {{0}}, {{0}}, {{{{0}, {0}}, {{0}, {0}}}}};
- srl.gid = this->group_public_key.gid;
+ srl.gid = this->kGroupPublicKey.gid;
// signature buffer one byte less than needed
std::vector<uint8_t> sig_small(EpidGetSigSize(&srl) - 1);
@@ -88,12 +88,12 @@ TEST_F(EpidMemberTest, SignFailsGivenWrongSigLen) {
TEST_F(EpidMemberTest, SignFailsGivenWrongSigRlLen) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
SigRl srl = {{{0}}, {{0}}, {{0}}, {{{{0}, {0}}, {{0}, {0}}}}};
- srl.gid = this->group_public_key.gid;
+ srl.gid = this->kGroupPublicKey.gid;
std::vector<uint8_t> sig(EpidGetSigSize(&srl));
std::vector<uint8_t> srl_reduced(1);
@@ -105,13 +105,13 @@ TEST_F(EpidMemberTest, SignFailsGivenWrongSigRlLen) {
TEST_F(EpidMemberTest, SignFailsGivenUnregisteredBasename) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
auto& bsn1 = this->kBsn1;
SigRl srl = {{{0}}, {{0}}, {{0}}, {{{{0}, {0}}, {{0}, {0}}}}};
- srl.gid = this->group_public_key.gid;
+ srl.gid = this->kGroupPublicKey.gid;
std::vector<uint8_t> sig(EpidGetSigSize(&srl));
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
EXPECT_EQ(
@@ -125,8 +125,8 @@ TEST_F(EpidMemberTest, SignFailsGivenUnregisteredBasename) {
TEST_F(EpidMemberTest, SignaturesOfSameMessageAreDifferent) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
std::vector<uint8_t> sig1(EpidGetSigSize(nullptr));
std::vector<uint8_t> sig2(EpidGetSigSize(nullptr));
@@ -175,8 +175,8 @@ TEST_F(EpidMemberTest, SignaturesOfSameMessageAreDifferent) {
}
TEST_F(EpidMemberTest, SignaturesOfSameMessageWithSameBasenameAreDifferent) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
std::vector<uint8_t> sig1(EpidGetSigSize(nullptr));
@@ -232,8 +232,8 @@ TEST_F(EpidMemberTest, SignaturesOfSameMessageWithSameBasenameAreDifferent) {
TEST_F(EpidMemberTest, SignsMessageUsingRandomBaseNoSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
@@ -242,33 +242,33 @@ TEST_F(EpidMemberTest, SignsMessageUsingRandomBaseNoSigRl) {
size_t sig_len = sig_data.size() * sizeof(uint8_t);
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
nullptr, 0, sig, sig_len));
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsMessageUsingRandomBaseWithSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
SigRl const* srl =
- reinterpret_cast<SigRl const*>(this->sig_rl_5_entry_data.data());
- size_t srl_size = this->sig_rl_5_entry_data.size() * sizeof(uint8_t);
+ reinterpret_cast<SigRl const*>(this->kSigRl5EntryData.data());
+ size_t srl_size = this->kSigRl5EntryData.size() * sizeof(uint8_t);
std::vector<uint8_t> sig_data(EpidGetSigSize(srl));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
srl, srl_size, sig, sig_len));
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx, srl, srl_size));
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsMessageUsingBasenameNoSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
@@ -278,36 +278,38 @@ TEST_F(EpidMemberTest, SignsMessageUsingBasenameNoSigRl) {
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), bsn.data(),
bsn.size(), nullptr, 0, sig, sig_len));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
- EXPECT_EQ(kEpidSigValid, EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(),
- bsn.data(), bsn.size()));
+ VerifierCtxObj ctx(this->kGroupPublicKey);
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigValid,
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsMessageUsingBasenameWithSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
SigRl const* srl =
- reinterpret_cast<SigRl const*>(this->sig_rl_5_entry_data.data());
- size_t srl_size = this->sig_rl_5_entry_data.size() * sizeof(uint8_t);
+ reinterpret_cast<SigRl const*>(this->kSigRl5EntryData.data());
+ size_t srl_size = this->kSigRl5EntryData.size() * sizeof(uint8_t);
std::vector<uint8_t> sig_data(EpidGetSigSize(srl));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), bsn.data(),
bsn.size(), srl, srl_size, sig, sig_len));
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx, srl, srl_size));
- EXPECT_EQ(kEpidSigValid, EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(),
- bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigValid,
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsUsingRandomBaseWithRegisteredBasenamesNoSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
@@ -316,63 +318,63 @@ TEST_F(EpidMemberTest, SignsUsingRandomBaseWithRegisteredBasenamesNoSigRl) {
size_t sig_len = sig_data.size() * sizeof(uint8_t);
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
nullptr, 0, sig, sig_len));
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsUsingRandomBaseWithRegisteredBasenamesWithSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
SigRl const* srl =
- reinterpret_cast<SigRl const*>(this->sig_rl_5_entry_data.data());
- size_t srl_size = this->sig_rl_5_entry_data.size() * sizeof(uint8_t);
+ reinterpret_cast<SigRl const*>(this->kSigRl5EntryData.data());
+ size_t srl_size = this->kSigRl5EntryData.size() * sizeof(uint8_t);
std::vector<uint8_t> sig_data(EpidGetSigSize(srl));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
srl, srl_size, sig, sig_len));
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx, srl, srl_size));
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsUsingRandomBaseWithoutRegisteredBasenamesNoSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
std::vector<uint8_t> sig_data(EpidGetSigSize(nullptr));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
nullptr, 0, sig, sig_len));
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest,
SignsUsingRandomBaseWithoutRegisteredBasenamesWithSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
SigRl const* srl =
- reinterpret_cast<SigRl const*>(this->sig_rl_5_entry_data.data());
- size_t srl_size = this->sig_rl_5_entry_data.size() * sizeof(uint8_t);
+ reinterpret_cast<SigRl const*>(this->kSigRl5EntryData.data());
+ size_t srl_size = this->kSigRl5EntryData.size() * sizeof(uint8_t);
std::vector<uint8_t> sig_data(EpidGetSigSize(srl));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
srl, srl_size, sig, sig_len));
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx, srl, srl_size));
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
/////////////////////////////////////////////////////////////////////////
@@ -380,8 +382,8 @@ TEST_F(EpidMemberTest,
TEST_F(EpidMemberTest, SignFailsGivenInvalidSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
// sign fail with mismatch gid
@@ -447,8 +449,8 @@ TEST_F(EpidMemberTest, SignFailsGivenInvalidSigRl) {
TEST_F(EpidMemberTest, SignsMessageGivenNoSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
size_t sig_len = EpidGetSigSize(nullptr);
@@ -458,15 +460,15 @@ TEST_F(EpidMemberTest, SignsMessageGivenNoSigRl) {
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
nullptr, 0, sig, sig_len));
// verify signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsMessageGivenNoSigRlUsingIKGFData) {
GroupPubKey grp_public_key = *reinterpret_cast<const GroupPubKey*>(
- this->group_public_key_data_ikgf.data());
- PrivKey mbr_private_key = *reinterpret_cast<const PrivKey*>(
- this->member_private_key_data_ikgf.data());
+ this->kGroupPublicKeyDataIkgf.data());
+ PrivKey mbr_private_key =
+ *reinterpret_cast<const PrivKey*>(this->kMemberPrivateKeyDataIkgf.data());
Prng my_prng;
auto& msg = this->kMsg0;
@@ -481,13 +483,13 @@ TEST_F(EpidMemberTest, SignsMessageGivenNoSigRlUsingIKGFData) {
// verify signature
VerifierCtxObj ctx(grp_public_key);
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsMessageGivenSigRlWithNoEntries) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
uint8_t sig_rl_data_n2_zero[] = {
@@ -507,16 +509,43 @@ TEST_F(EpidMemberTest, SignsMessageGivenSigRlWithNoEntries) {
size_t sig_len = sig_data.size() * sizeof(uint8_t);
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
srl, srl_size, sig, sig_len));
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx, srl, srl_size));
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
+}
+
+TEST_F(EpidMemberTest, SignsMessageGivenSigRlWithNoEntriesUsingIkgfData) {
+ GroupPubKey grp_public_key = *reinterpret_cast<const GroupPubKey*>(
+ this->kGroupPublicKeyDataIkgf.data());
+ PrivKey mbr_private_key =
+ *reinterpret_cast<const PrivKey*>(this->kMemberPrivateKeyDataIkgf.data());
+ Prng my_prng;
+ auto& msg = this->kMsg0;
+ // using ikgf keys
+ MemberCtxObj member_ikgf(grp_public_key, mbr_private_key, &Prng::Generate,
+ &my_prng);
+ uint8_t sig_rl_data_n2_one_gid0[] = {
+#include "epid/common-testhelper/testdata/ikgf/groupa/sigrl_empty.inc"
+ };
+ SigRl* srl_ikgf = reinterpret_cast<SigRl*>(sig_rl_data_n2_one_gid0);
+ size_t srl_size = sizeof(sig_rl_data_n2_one_gid0);
+ std::vector<uint8_t> sig_data_ikgf(EpidGetSigSize(srl_ikgf));
+ EpidSignature* sig_ikgf =
+ reinterpret_cast<EpidSignature*>(sig_data_ikgf.data());
+ size_t sig_len = sig_data_ikgf.size() * sizeof(uint8_t);
+ EXPECT_EQ(kEpidNoErr, EpidSign(member_ikgf, msg.data(), msg.size(), nullptr,
+ 0, srl_ikgf, srl_size, sig_ikgf, sig_len));
+ VerifierCtxObj ctx_ikgf(grp_public_key);
+ THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx_ikgf, srl_ikgf, srl_size));
+ EXPECT_EQ(kEpidSigValid,
+ EpidVerify(ctx_ikgf, sig_ikgf, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsMessageGivenSigRlWithEntries) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
uint8_t sig_rl_data_n2_one[] = {
// gid
@@ -557,17 +586,17 @@ TEST_F(EpidMemberTest, SignsMessageGivenSigRlWithEntries) {
size_t sig_len = sig_data.size() * sizeof(uint8_t);
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
srl, srl_size, sig, sig_len));
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx, srl, srl_size));
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsMessageGivenSigRlWithEntriesUsingIKGFData) {
GroupPubKey grp_public_key = *reinterpret_cast<const GroupPubKey*>(
- this->group_public_key_data_ikgf.data());
- PrivKey mbr_private_key = *reinterpret_cast<const PrivKey*>(
- this->member_private_key_data_ikgf.data());
+ this->kGroupPublicKeyDataIkgf.data());
+ PrivKey mbr_private_key =
+ *reinterpret_cast<const PrivKey*>(this->kMemberPrivateKeyDataIkgf.data());
Prng my_prng;
auto& msg = this->kMsg0;
// using ikgf keys
@@ -615,26 +644,26 @@ TEST_F(EpidMemberTest, SignsMessageGivenSigRlWithEntriesUsingIKGFData) {
0, srl_ikgf, srl_size, sig_ikgf, sig_len));
VerifierCtxObj ctx_ikgf(grp_public_key);
THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx_ikgf, srl_ikgf, srl_size));
- EXPECT_EQ(kEpidSigValid, EpidVerify(ctx_ikgf, sig_ikgf, sig_len, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigValid,
+ EpidVerify(ctx_ikgf, sig_ikgf, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignMessageReportsIfMemberRevoked) {
// note: a complete sig + nr proof should still be returned!!
const GroupPubKey pub_key = {
-#include "epid/common/testdata/grp_x/pubkey.inc"
+#include "epid/common-testhelper/testdata/grp_x/pubkey.inc"
};
const PrivKey priv_key = {
-#include "epid/common/testdata/grp_x/member0/mprivkey.inc"
+#include "epid/common-testhelper/testdata/grp_x/member0/mprivkey.inc"
};
Prng my_prng;
- MemberCtxObj member(pub_key, priv_key, this->member_precomp, &Prng::Generate,
+ MemberCtxObj member(pub_key, priv_key, this->kMemberPrecomp, &Prng::Generate,
&my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
const std::vector<uint8_t> kGrpXSigRlMember0Sha256Bsn0Msg0FirstEntry = {
-#include "epid/common/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_middle_entry.inc"
+#include "epid/common-testhelper/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_middle_entry.inc"
};
auto srl = reinterpret_cast<SigRl const*>(
kGrpXSigRlMember0Sha256Bsn0Msg0FirstEntry.data());
@@ -647,18 +676,19 @@ TEST_F(EpidMemberTest, SignMessageReportsIfMemberRevoked) {
srl, srl_size, sig, sig_len));
VerifierCtxObj ctx(pub_key);
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx, srl, srl_size));
- EXPECT_EQ(kEpidSigInvalid, EpidVerify(ctx, sig, sig_len, msg.data(),
- msg.size(), bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignMessageReportsIfMemberRevokedUsingIKGFData) {
// note: a complete sig + nr proof should still be returned!!
GroupPubKey grp_public_key = *reinterpret_cast<const GroupPubKey*>(
- this->group_public_key_data_ikgf.data());
+ this->kGroupPublicKeyDataIkgf.data());
const PrivKey member_private_key_revoked_by_sig = {
-#include "epid/common/testdata/ikgf/groupa/sigrevokedmember0/mprivkey.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/sigrevokedmember0/mprivkey.inc"
};
Prng my_prng;
MemberCtxObj member(grp_public_key, member_private_key_revoked_by_sig,
@@ -667,7 +697,7 @@ TEST_F(EpidMemberTest, SignMessageReportsIfMemberRevokedUsingIKGFData) {
auto& bsn = this->kBsn0;
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
const std::vector<uint8_t> sig_Rl = {
-#include "epid/common/testdata/ikgf/groupa/sigrl.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/sigrl.inc"
};
auto srl = reinterpret_cast<SigRl const*>(sig_Rl.data());
size_t srl_size = sig_Rl.size();
@@ -675,23 +705,24 @@ TEST_F(EpidMemberTest, SignMessageReportsIfMemberRevokedUsingIKGFData) {
std::vector<uint8_t> sig_data(EpidGetSigSize(srl));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
- EXPECT_EQ(kEpidSigRevokedinSigRl,
+ EXPECT_EQ(kEpidSigRevokedInSigRl,
EpidSign(member, msg.data(), msg.size(), nullptr, 0, srl, srl_size,
sig, sig_len));
VerifierCtxObj ctx(grp_public_key);
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx, srl, srl_size));
- EXPECT_EQ(kEpidSigInvalid, EpidVerify(ctx, sig, sig_len, msg.data(),
- msg.size(), bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
/////////////////////////////////////////////////////////////////////////
// Variable hash alg
TEST_F(EpidMemberTest, SignsMessageUsingSha256HashAlg) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
std::vector<uint8_t> sig_data(EpidGetSigSize(nullptr));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
@@ -700,16 +731,16 @@ TEST_F(EpidMemberTest, SignsMessageUsingSha256HashAlg) {
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
nullptr, 0, sig, sig_len));
// verify signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha256));
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsMessageUsingSha384HashAlg) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
std::vector<uint8_t> sig_data(EpidGetSigSize(nullptr));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
@@ -718,16 +749,16 @@ TEST_F(EpidMemberTest, SignsMessageUsingSha384HashAlg) {
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
nullptr, 0, sig, sig_len));
// verify signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha384));
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsMessageUsingSha512HashAlg) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
std::vector<uint8_t> sig_data(EpidGetSigSize(nullptr));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
@@ -736,16 +767,16 @@ TEST_F(EpidMemberTest, SignsMessageUsingSha512HashAlg) {
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
nullptr, 0, sig, sig_len));
// verify signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha512));
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, DISABLED_SignsMessageUsingSha512256HashAlg) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
std::vector<uint8_t> sig_data(EpidGetSigSize(nullptr));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
@@ -754,10 +785,10 @@ TEST_F(EpidMemberTest, DISABLED_SignsMessageUsingSha512256HashAlg) {
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
nullptr, 0, sig, sig_len));
// verify signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha512_256));
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
/////////////////////////////////////////////////////////////////////////
@@ -765,8 +796,8 @@ TEST_F(EpidMemberTest, DISABLED_SignsMessageUsingSha512256HashAlg) {
TEST_F(EpidMemberTest, SignConsumesPrecomputedSignaturesNoSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
THROW_ON_EPIDERR(EpidAddPreSigs(member, 3, nullptr));
auto& msg = this->kMsg0;
std::vector<uint8_t> sig_data(EpidGetSigSize(nullptr));
@@ -779,13 +810,13 @@ TEST_F(EpidMemberTest, SignConsumesPrecomputedSignaturesNoSigRl) {
TEST_F(EpidMemberTest, SignConsumesPrecomputedSignaturesWithSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
THROW_ON_EPIDERR(EpidAddPreSigs(member, 3, nullptr));
auto& msg = this->kMsg0;
SigRl const* srl =
- reinterpret_cast<SigRl const*>(this->sig_rl_5_entry_data.data());
- size_t srl_size = this->sig_rl_5_entry_data.size() * sizeof(uint8_t);
+ reinterpret_cast<SigRl const*>(this->kSigRl5EntryData.data());
+ size_t srl_size = this->kSigRl5EntryData.size() * sizeof(uint8_t);
std::vector<uint8_t> sig_data(EpidGetSigSize(srl));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
@@ -796,8 +827,8 @@ TEST_F(EpidMemberTest, SignConsumesPrecomputedSignaturesWithSigRl) {
TEST_F(EpidMemberTest, SignsMessageWithPrecomputedSignaturesNoSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
THROW_ON_EPIDERR(EpidAddPreSigs(member, 1, nullptr));
auto& msg = this->kMsg0;
std::vector<uint8_t> sig_data(EpidGetSigSize(nullptr));
@@ -806,36 +837,36 @@ TEST_F(EpidMemberTest, SignsMessageWithPrecomputedSignaturesNoSigRl) {
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
nullptr, 0, sig, sig_len));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsMessageWithPrecomputedSignaturesWithSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
THROW_ON_EPIDERR(EpidAddPreSigs(member, 1, nullptr));
auto& msg = this->kMsg0;
SigRl const* srl =
- reinterpret_cast<SigRl const*>(this->sig_rl_5_entry_data.data());
- size_t srl_size = this->sig_rl_5_entry_data.size() * sizeof(uint8_t);
+ reinterpret_cast<SigRl const*>(this->kSigRl5EntryData.data());
+ size_t srl_size = this->kSigRl5EntryData.size() * sizeof(uint8_t);
std::vector<uint8_t> sig_data(EpidGetSigSize(srl));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
srl, srl_size, sig, sig_len));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx, srl, srl_size));
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsMessageWithoutPrecomputedSignaturesNoSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
std::vector<uint8_t> sig_data(EpidGetSigSize(nullptr));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
@@ -844,19 +875,19 @@ TEST_F(EpidMemberTest, SignsMessageWithoutPrecomputedSignaturesNoSigRl) {
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
nullptr, 0, sig, sig_len));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignsMessageWithoutPrecomputedSignaturesWithSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
SigRl const* srl =
- reinterpret_cast<SigRl const*>(this->sig_rl_5_entry_data.data());
- size_t srl_size = this->sig_rl_5_entry_data.size() * sizeof(uint8_t);
+ reinterpret_cast<SigRl const*>(this->kSigRl5EntryData.data());
+ size_t srl_size = this->kSigRl5EntryData.size() * sizeof(uint8_t);
std::vector<uint8_t> sig_data(EpidGetSigSize(srl));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
@@ -864,18 +895,18 @@ TEST_F(EpidMemberTest, SignsMessageWithoutPrecomputedSignaturesWithSigRl) {
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), msg.size(), nullptr, 0,
srl, srl_size, sig, sig_len));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx, srl, srl_size));
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0));
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignFailsOnBadPrecomputedSignaturesNoSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
PreComputedSignature precompsig;
- precompsig = this->precomputed_signatures[0];
+ precompsig = this->kPrecomputedSignatures[0];
precompsig.B.x.data.data[0]++;
THROW_ON_EPIDERR(EpidAddPreSigs(member, 1, &precompsig));
auto& msg = this->kMsg0;
@@ -888,16 +919,16 @@ TEST_F(EpidMemberTest, SignFailsOnBadPrecomputedSignaturesNoSigRl) {
TEST_F(EpidMemberTest, SignFailsOnBadPrecomputedSignaturesWithSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
PreComputedSignature precompsig;
- precompsig = this->precomputed_signatures[0];
+ precompsig = this->kPrecomputedSignatures[0];
precompsig.B.x.data.data[0]++;
THROW_ON_EPIDERR(EpidAddPreSigs(member, 1, &precompsig));
auto& msg = this->kMsg0;
SigRl const* srl =
- reinterpret_cast<SigRl const*>(this->sig_rl_5_entry_data.data());
- size_t srl_size = this->sig_rl_5_entry_data.size() * sizeof(uint8_t);
+ reinterpret_cast<SigRl const*>(this->kSigRl5EntryData.data());
+ size_t srl_size = this->kSigRl5EntryData.size() * sizeof(uint8_t);
std::vector<uint8_t> sig_data(EpidGetSigSize(srl));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
@@ -910,8 +941,8 @@ TEST_F(EpidMemberTest, SignFailsOnBadPrecomputedSignaturesWithSigRl) {
TEST_F(EpidMemberTest, SignsEmptyMessageNoSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
std::vector<uint8_t> sig_data(EpidGetSigSize(nullptr));
@@ -920,41 +951,40 @@ TEST_F(EpidMemberTest, SignsEmptyMessageNoSigRl) {
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), 0, bsn.data(), bsn.size(),
nullptr, 0, sig, sig_len));
- VerifierCtxObj ctx(this->group_public_key);
- EXPECT_EQ(kEpidSigValid, EpidVerify(ctx, sig, sig_len, msg.data(), 0,
- bsn.data(), bsn.size()));
+ VerifierCtxObj ctx(this->kGroupPublicKey);
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigValid, EpidVerify(ctx, sig, sig_len, msg.data(), 0));
}
TEST_F(EpidMemberTest, SignsEmptyMessageWithSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
SigRl const* srl =
- reinterpret_cast<SigRl const*>(this->sig_rl_5_entry_data.data());
- size_t srl_size = this->sig_rl_5_entry_data.size() * sizeof(uint8_t);
+ reinterpret_cast<SigRl const*>(this->kSigRl5EntryData.data());
+ size_t srl_size = this->kSigRl5EntryData.size() * sizeof(uint8_t);
std::vector<uint8_t> sig_data(EpidGetSigSize(srl));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), 0, nullptr, 0, srl,
srl_size, sig, sig_len));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx, srl, srl_size));
- EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), 0, nullptr, 0));
+ EXPECT_EQ(kEpidSigValid, EpidVerify(ctx, sig, sig_len, msg.data(), 0));
}
TEST_F(EpidMemberTest, SignsShortMessageNoSigRl) {
// check: 1, 13, 128, 256, 512, 1021, 1024 bytes
// 13 and 1021 are primes
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
std::vector<uint8_t> sig_data(EpidGetSigSize(nullptr));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
size_t lengths[] = {1, 13, 128, 256,
512, 1021, 1024}; // have desired lengths to loop over
std::vector<uint8_t> msg(
@@ -966,8 +996,7 @@ TEST_F(EpidMemberTest, SignsShortMessageNoSigRl) {
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), length, nullptr, 0,
nullptr, 0, sig, sig_len))
<< "EpidSign for message_len: " << length << " failed";
- EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), length, nullptr, 0))
+ EXPECT_EQ(kEpidSigValid, EpidVerify(ctx, sig, sig_len, msg.data(), length))
<< "EpidVerify for message_len: " << length << " failed";
}
}
@@ -976,16 +1005,16 @@ TEST_F(EpidMemberTest, SignsShortMessageWithSigRl) {
// check: 1, 13, 128, 256, 512, 1021, 1024 bytes
// 13 and 1021 are primes
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
SigRl const* srl =
- reinterpret_cast<SigRl const*>(this->sig_rl_5_entry_data.data());
- size_t srl_size = this->sig_rl_5_entry_data.size() * sizeof(uint8_t);
+ reinterpret_cast<SigRl const*>(this->kSigRl5EntryData.data());
+ size_t srl_size = this->kSigRl5EntryData.size() * sizeof(uint8_t);
std::vector<uint8_t> sig_data(EpidGetSigSize(srl));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
size_t message_len = 0;
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx, srl, srl_size));
size_t lengths[] = {1, 13, 128, 256,
512, 1021, 1024}; // have desired lengths to loop over
@@ -998,20 +1027,19 @@ TEST_F(EpidMemberTest, SignsShortMessageWithSigRl) {
EXPECT_EQ(kEpidNoErr, EpidSign(member, msg.data(), length, nullptr, 0, srl,
srl_size, sig, sig_len))
<< "EpidSign for message_len: " << message_len << " failed";
- EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), length, nullptr, 0))
+ EXPECT_EQ(kEpidSigValid, EpidVerify(ctx, sig, sig_len, msg.data(), length))
<< "EpidVerify for message_len: " << message_len << " failed";
}
}
TEST_F(EpidMemberTest, SignsLongMessageNoSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
std::vector<uint8_t> sig_data(EpidGetSigSize(nullptr));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
std::vector<uint8_t> msg(1000000); // allocate message for max size
for (size_t n = 0; n < msg.size(); n++) {
msg.at(n) = (uint8_t)n;
@@ -1020,21 +1048,21 @@ TEST_F(EpidMemberTest, SignsLongMessageNoSigRl) {
nullptr, 0, sig, sig_len))
<< "EpidSign for message_len: " << 1000000 << " failed";
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0))
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()))
<< "EpidVerify for message_len: " << 1000000 << " failed";
}
TEST_F(EpidMemberTest, SignsLongMessageWithSigRl) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
SigRl const* srl =
- reinterpret_cast<SigRl const*>(this->sig_rl_5_entry_data.data());
- size_t srl_size = this->sig_rl_5_entry_data.size() * sizeof(uint8_t);
+ reinterpret_cast<SigRl const*>(this->kSigRl5EntryData.data());
+ size_t srl_size = this->kSigRl5EntryData.size() * sizeof(uint8_t);
std::vector<uint8_t> sig_data(EpidGetSigSize(srl));
EpidSignature* sig = reinterpret_cast<EpidSignature*>(sig_data.data());
size_t sig_len = sig_data.size() * sizeof(uint8_t);
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetSigRl(ctx, srl, srl_size));
std::vector<uint8_t> msg(1000000); // allocate message for max size
for (size_t n = 0; n < msg.size(); n++) {
@@ -1044,7 +1072,7 @@ TEST_F(EpidMemberTest, SignsLongMessageWithSigRl) {
srl, srl_size, sig, sig_len))
<< "EpidSign for message_len: " << 1000000 << " failed";
EXPECT_EQ(kEpidSigValid,
- EpidVerify(ctx, sig, sig_len, msg.data(), msg.size(), nullptr, 0))
+ EpidVerify(ctx, sig, sig_len, msg.data(), msg.size()))
<< "EpidVerify for message_len: " << 1000000 << " failed";
}
diff --git a/epid/member/unittests/signbasic-test.cc b/epid/member/unittests/signbasic-test.cc
index 23ec1ca..d5f75c8 100644
--- a/epid/member/unittests/signbasic-test.cc
+++ b/epid/member/unittests/signbasic-test.cc
@@ -40,8 +40,8 @@ namespace {
// Simple error cases
TEST_F(EpidMemberTest, SignBasicFailsGivenNullParameters) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
BasicSignature basic_sig;
@@ -56,8 +56,8 @@ TEST_F(EpidMemberTest, SignBasicFailsGivenNullParameters) {
}
TEST_F(EpidMemberTest, SignBasicFailsForBasenameWithoutRegisteredBasenames) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
BasicSignature basic_sig;
@@ -66,8 +66,8 @@ TEST_F(EpidMemberTest, SignBasicFailsForBasenameWithoutRegisteredBasenames) {
}
TEST_F(EpidMemberTest, SignBasicFailsIfGivenUnregisteredBasename) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn0 = this->kBsn0;
auto& bsn1 = this->kBsn1;
@@ -81,8 +81,8 @@ TEST_F(EpidMemberTest, SignBasicFailsIfGivenUnregisteredBasename) {
// Anonymity
TEST_F(EpidMemberTest, BasicSignaturesOfSameMessageAreDifferent) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
BasicSignature basic_sig1;
BasicSignature basic_sig2;
@@ -95,8 +95,8 @@ TEST_F(EpidMemberTest, BasicSignaturesOfSameMessageAreDifferent) {
TEST_F(EpidMemberTest,
BasicSignaturesOfSameMessageWithSameBasenameAreDifferent) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
BasicSignature basic_sig1;
@@ -112,21 +112,21 @@ TEST_F(EpidMemberTest,
// Variable basename
TEST_F(EpidMemberTest, SignBasicSucceedsUsingRandomBase) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
BasicSignature basic_sig;
EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(), nullptr,
0, &basic_sig));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
- EXPECT_EQ(kEpidSigValid, EpidVerifyBasicSig(ctx, &basic_sig, msg.data(),
- msg.size(), nullptr, 0));
+ VerifierCtxObj ctx(this->kGroupPublicKey);
+ EXPECT_EQ(kEpidSigValid,
+ EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignBasicSucceedsUsingBasename) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
BasicSignature basic_sig;
@@ -134,17 +134,17 @@ TEST_F(EpidMemberTest, SignBasicSucceedsUsingBasename) {
EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
bsn.data(), bsn.size(), &basic_sig));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
EXPECT_EQ(kEpidSigValid,
- EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size(),
- bsn.data(), bsn.size()));
+ EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignBasicSucceedsUsingBasenameUsingIKGFData) {
Prng my_prng;
GroupPubKey grp_public_key = *reinterpret_cast<const GroupPubKey*>(
- this->group_public_key_data_ikgf.data());
- PrivKey mbr_private_key = *reinterpret_cast<const PrivKey*>(
- this->member_private_key_data_ikgf.data());
+ this->kGroupPublicKeyDataIkgf.data());
+ PrivKey mbr_private_key =
+ *reinterpret_cast<const PrivKey*>(this->kMemberPrivateKeyDataIkgf.data());
MemberCtxObj member(grp_public_key, mbr_private_key, &Prng::Generate,
&my_prng);
auto& msg = this->kMsg0;
@@ -155,15 +155,15 @@ TEST_F(EpidMemberTest, SignBasicSucceedsUsingBasenameUsingIKGFData) {
bsn.data(), bsn.size(), &basic_sig));
// verify basic signature
VerifierCtxObj ctx(grp_public_key);
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
EXPECT_EQ(kEpidSigValid,
- EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size(),
- bsn.data(), bsn.size()));
+ EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest,
SignBasicSucceedsUsingRandomBaseWithRegisteredBasenames) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
@@ -171,31 +171,31 @@ TEST_F(EpidMemberTest,
EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
bsn.data(), bsn.size(), &basic_sig));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
EXPECT_EQ(kEpidSigValid,
- EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size(),
- bsn.data(), bsn.size()));
+ EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest,
SignBasicSucceedsUsingRandomBaseWithoutRegisteredBasenames) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
BasicSignature basic_sig;
EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(), nullptr,
0, &basic_sig));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
- EXPECT_EQ(kEpidSigValid, EpidVerifyBasicSig(ctx, &basic_sig, msg.data(),
- msg.size(), nullptr, 0));
+ VerifierCtxObj ctx(this->kGroupPublicKey);
+ EXPECT_EQ(kEpidSigValid,
+ EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
}
/////////////////////////////////////////////////////////////////////////
// Variable hash alg
TEST_F(EpidMemberTest, SignBasicSucceedsUsingSha256HashAlg) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
@@ -204,15 +204,15 @@ TEST_F(EpidMemberTest, SignBasicSucceedsUsingSha256HashAlg) {
EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
bsn.data(), bsn.size(), &basic_sig));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha256));
- EXPECT_EQ(kEpidSigValid, EpidVerifyBasicSig(ctx, &basic_sig, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigValid,
+ EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignBasicSucceedsUsingSha384HashAlg) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
@@ -221,15 +221,15 @@ TEST_F(EpidMemberTest, SignBasicSucceedsUsingSha384HashAlg) {
EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
bsn.data(), bsn.size(), &basic_sig));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha384));
- EXPECT_EQ(kEpidSigValid, EpidVerifyBasicSig(ctx, &basic_sig, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigValid,
+ EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignBasicSucceedsUsingSha512HashAlg) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
@@ -238,15 +238,15 @@ TEST_F(EpidMemberTest, SignBasicSucceedsUsingSha512HashAlg) {
EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
bsn.data(), bsn.size(), &basic_sig));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha512));
- EXPECT_EQ(kEpidSigValid, EpidVerifyBasicSig(ctx, &basic_sig, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigValid,
+ EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, DISABLED_SignBasicSucceedsUsingSha512256HashAlg) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
@@ -255,17 +255,17 @@ TEST_F(EpidMemberTest, DISABLED_SignBasicSucceedsUsingSha512256HashAlg) {
EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
bsn.data(), bsn.size(), &basic_sig));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha512_256));
- EXPECT_EQ(kEpidSigValid, EpidVerifyBasicSig(ctx, &basic_sig, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigValid,
+ EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
}
/////////////////////////////////////////////////////////////////////////
TEST_F(EpidMemberTest, SignBasicFailsForInvalidMemberPrecomp) {
Prng my_prng;
- MemberPrecomp mbr_precomp = this->member_precomp;
+ MemberPrecomp mbr_precomp = this->kMemberPrecomp;
mbr_precomp.e12.x[0].data.data[0]++;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
mbr_precomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
BasicSignature basic_sig;
@@ -276,9 +276,9 @@ TEST_F(EpidMemberTest, SignBasicFailsForInvalidMemberPrecomp) {
// Variable precomputed signatures
TEST_F(EpidMemberTest, SignBasicFailsForInvalidPrecomputedSignature) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
- PreComputedSignature precompsig = this->precomputed_signatures[0];
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
+ PreComputedSignature precompsig = this->kPrecomputedSignatures[0];
precompsig.B.x.data.data[0]++;
THROW_ON_EPIDERR(EpidAddPreSigs(member, 1, &precompsig));
auto& msg = this->kMsg0;
@@ -289,8 +289,8 @@ TEST_F(EpidMemberTest, SignBasicFailsForInvalidPrecomputedSignature) {
}
TEST_F(EpidMemberTest, SignBasicConsumesPrecomputedSignatures) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
THROW_ON_EPIDERR(EpidAddPreSigs(member, 3, nullptr));
auto& msg = this->kMsg0;
BasicSignature basic_sig;
@@ -303,8 +303,8 @@ TEST_F(EpidMemberTest, SignBasicConsumesPrecomputedSignatures) {
}
TEST_F(EpidMemberTest, SignBasicSucceedsWithPrecomputedSignatures) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
THROW_ON_EPIDERR(EpidAddPreSigs(member, 1, nullptr));
auto& msg = this->kMsg0;
BasicSignature basic_sig;
@@ -313,15 +313,15 @@ TEST_F(EpidMemberTest, SignBasicSucceedsWithPrecomputedSignatures) {
EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
bsn.data(), bsn.size(), &basic_sig));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
EXPECT_EQ(kEpidSigValid,
- EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size(),
- bsn.data(), bsn.size()));
+ EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
}
TEST_F(EpidMemberTest, SignBasicSucceedsWithoutPrecomputedSignatures) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
THROW_ON_EPIDERR(EpidAddPreSigs(member, 1, nullptr));
auto& msg = this->kMsg0;
BasicSignature basic_sig;
@@ -333,35 +333,35 @@ TEST_F(EpidMemberTest, SignBasicSucceedsWithoutPrecomputedSignatures) {
EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(),
bsn.data(), bsn.size(), &basic_sig));
// verify basic signature
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
EXPECT_EQ(kEpidSigValid,
- EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size(),
- bsn.data(), bsn.size()));
+ EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()));
}
/////////////////////////////////////////////////////////////////////////
// Variable messages
TEST_F(EpidMemberTest, SignBasicSucceedsGivenEmptyMessage) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
THROW_ON_EPIDERR(EpidRegisterBaseName(member, bsn.data(), bsn.size()));
BasicSignature basic_sig;
EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), 0, bsn.data(),
bsn.size(), &basic_sig));
- VerifierCtxObj ctx(this->group_public_key);
- EXPECT_EQ(kEpidSigValid, EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), 0,
- bsn.data(), bsn.size()));
+ VerifierCtxObj ctx(this->kGroupPublicKey);
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigValid, EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), 0));
}
TEST_F(EpidMemberTest, SignBasicSucceedsWithShortMessage) {
// check: 1, 13, 128, 256, 512, 1021, 1024 bytes
// 13 and 1021 are primes
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
BasicSignature basic_sig;
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
size_t lengths[] = {1, 13, 128, 256,
512, 1021, 1024}; // have desired lengths to loop over
std::vector<uint8_t> msg(
@@ -373,17 +373,17 @@ TEST_F(EpidMemberTest, SignBasicSucceedsWithShortMessage) {
EXPECT_EQ(kEpidNoErr,
EpidSignBasic(member, msg.data(), length, nullptr, 0, &basic_sig))
<< "EpidSignBasic for message_len: " << length << " failed";
- EXPECT_EQ(kEpidNoErr, EpidVerifyBasicSig(ctx, &basic_sig, msg.data(),
- length, nullptr, 0))
+ EXPECT_EQ(kEpidNoErr,
+ EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), length))
<< "EpidVerifyBasicSig for message_len: " << length << " failed";
}
}
TEST_F(EpidMemberTest, SignBasicSucceedsWithLongMessage) {
Prng my_prng;
- MemberCtxObj member(this->group_public_key, this->member_private_key,
- this->member_precomp, &Prng::Generate, &my_prng);
+ MemberCtxObj member(this->kGroupPublicKey, this->kMemberPrivateKey,
+ this->kMemberPrecomp, &Prng::Generate, &my_prng);
BasicSignature basic_sig;
- VerifierCtxObj ctx(this->group_public_key);
+ VerifierCtxObj ctx(this->kGroupPublicKey);
{ // 1000000
std::vector<uint8_t> msg(1000000); // allocate message for max size
for (size_t n = 0; n < msg.size(); n++) {
@@ -392,8 +392,8 @@ TEST_F(EpidMemberTest, SignBasicSucceedsWithLongMessage) {
EXPECT_EQ(kEpidNoErr, EpidSignBasic(member, msg.data(), msg.size(), nullptr,
0, &basic_sig))
<< "EpidSignBasic for message_len: " << 1000000 << " failed";
- EXPECT_EQ(kEpidNoErr, EpidVerifyBasicSig(ctx, &basic_sig, msg.data(),
- msg.size(), nullptr, 0))
+ EXPECT_EQ(kEpidNoErr,
+ EpidVerifyBasicSig(ctx, &basic_sig, msg.data(), msg.size()))
<< "EpidVerifyBasicSig for message_len: " << 1000000 << " failed";
}
}
diff --git a/epid/verifier/1.1/api.h b/epid/verifier/1.1/api.h
new file mode 100644
index 0000000..610f930
--- /dev/null
+++ b/epid/verifier/1.1/api.h
@@ -0,0 +1,493 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+#ifndef EPID_VERIFIER_1_1_API_H_
+#define EPID_VERIFIER_1_1_API_H_
+
+#include <stddef.h>
+#include "epid/common/stdtypes.h"
+#include "epid/common/1.1/types.h"
+#include "epid/common/errors.h"
+#include "epid/verifier/api.h"
+
+/*!
+ * \file
+ * \brief Intel(R) EPID SDK verifier Intel(R) EPID 1.1 API.
+ */
+
+/// Intel(R) EPID 1.1 Verifier functionality
+/*!
+ \defgroup Epid11VerifierModule EPID 1.1 support
+
+ To verify signatures coming from member devices that belong to an
+ Intel&reg; EPID 1.1 group, you need to use Intel&reg; EPID 1.1
+ verifier APIs.
+
+ If you are acting as a verifier for both Intel&reg; EPID 1.1 and 2.0
+ members, you can determine if you need version 1.1 or 2.0
+ verification by checking the Intel&reg; 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&reg; 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&reg; EPID 1.1 API headers in the 1.1
+ directories, for example, `epid/verifier/1.1/api.h`.
+
+ Intel&reg; EPID 1.1 APIs and data structures are indicated with the
+ "Epid11" prefix. For example, the Intel&reg; EPID 1.1 version of
+ ::EpidParseGroupPubKeyFile is called ::Epid11ParseGroupPubKeyFile,
+ and the Intel&reg; EPID 1.1 version of `GroupRl` is `Epid11GroupRl`.
+
+ \ingroup EpidVerifierModule
+ @{
+*/
+
+/// Internal context of Intel(R) EPID 1.1 verifier.
+typedef struct Epid11VerifierCtx Epid11VerifierCtx;
+
+/// Intel(R) EPID 1.1 Pre-computed verifier settings.
+/*!
+ Serialized form of the information about a verifier that remains stable for
+ a given set of keys.
+
+ This API supports Intel(R) EPID 1.1 verification.
+
+ \note e12 = 0 implies that this data is not valid
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+support</b></a>
+ */
+#pragma pack(1)
+typedef struct Epid11VerifierPrecomp {
+ Epid11GroupId gid; ///< group ID
+ Epid11GtElemStr e12; ///< an element in GT
+ Epid11GtElemStr e22; ///< an element in GT
+ Epid11GtElemStr e2w; ///< an element in GT
+} Epid11VerifierPrecomp;
+#pragma pack()
+
+/// 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.
+
+ \param[in] pub_key
+ The group certificate.
+ \param[in] precomp
+ Optional pre-computed data. If NULL the value is computed internally and is
+ readable using Epid11VerifierWritePrecomp().
+ \param[out] ctx
+ Newly constructed verifier context.
+
+ \returns ::EpidStatus
+
+ \note
+ If the result is not ::kEpidNoErr the content of ctx is undefined.
+
+ \see Epid11VerifierDelete
+ \see Epid11VerifierWritePrecomp
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+support</b></a>
+ */
+EpidStatus Epid11VerifierCreate(Epid11GroupPubKey const* pub_key,
+ Epid11VerifierPrecomp const* precomp,
+ 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.
+
+ \param[in,out] ctx
+ The verifier context. Can be NULL.
+
+ \see Epid11VerifierCreate
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+support</b></a>
+ */
+void Epid11VerifierDelete(Epid11VerifierCtx** ctx);
+
+/// Serializes the pre-computed Intel(R) EPID 1.1 verifier settings.
+/*!
+
+ \param[in] ctx
+ The verifier context.
+ \param[out] precomp
+ The Serialized pre-computed verifier settings.
+
+ \returns ::EpidStatus
+
+ \note
+ If the result is not ::kEpidNoErr the content of precomp is undefined.
+
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+support</b></a>
+ */
+EpidStatus Epid11VerifierWritePrecomp(Epid11VerifierCtx const* ctx,
+ Epid11VerifierPrecomp* precomp);
+
+/// 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.
+
+ \attention
+ It is the responsibility of the caller to free the memory pointed to by priv_rl
+ after the verifier is no longer using it.
+
+ \param[in,out] ctx
+ The verifier context.
+ \param[in] priv_rl
+ The private key based revocation list.
+ \param[in] priv_rl_size
+ The 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 Epid11VerifierCreate
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+support</b></a>
+ */
+EpidStatus Epid11VerifierSetPrivRl(Epid11VerifierCtx* ctx,
+ Epid11PrivRl const* priv_rl,
+ size_t priv_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.
+
+ \attention
+ It is the responsibility of the caller to free the memory pointed to by sig_rl
+ after the verifier is no longer using it.
+
+ \param[in,out] ctx
+ The verifier context.
+ \param[in] sig_rl
+ The signature based revocation list.
+ \param[in] sig_rl_size
+ The 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 Epid11VerifierCreate
+ \see SdkOverview_11Verifier \see <a
+ href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+ support</b></a>
+ */
+EpidStatus Epid11VerifierSetSigRl(Epid11VerifierCtx* ctx,
+ Epid11SigRl const* sig_rl,
+ size_t sig_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.
+
+ \attention
+ It is the responsibility of the caller to free the memory pointed to by grp_rl
+ after the verifier is no longer using it.
+
+ \param[in,out] ctx
+ The verifier context.
+ \param[in] grp_rl
+ The group based revocation list.
+ \param[in] grp_rl_size
+ The 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 Epid11VerifierCreate
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+support</b></a>
+ */
+EpidStatus Epid11VerifierSetGroupRl(Epid11VerifierCtx* ctx,
+ Epid11GroupRl const* grp_rl,
+ size_t grp_rl_size);
+
+/// 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.
+
+ \param[in, out] ctx
+ The verifier context.
+ \param[in] basename
+ The basename. Pass NULL for random base.
+ \param[in] basename_len
+ Number of bytes in basename buffer. Must be 0 if basename is NULL.
+
+ \returns ::EpidStatus
+
+ \see Epid11VerifierCreate
+
+*/
+EpidStatus Epid11VerifierSetBasename(Epid11VerifierCtx* ctx,
+ void const* basename, size_t basename_len);
+
+/// Verifies an Intel(R) EPID 1.1 signature and checks revocation status.
+/*!
+
+ \param[in] ctx
+ The verifier context.
+ \param[in] sig
+ The signature.
+ \param[in] sig_len
+ The size of sig in bytes.
+ \param[in] msg
+ The message that was signed.
+ \param[in] msg_len
+ The size of msg in bytes.
+
+ \returns ::EpidStatus
+
+ \retval ::kEpidSigValid
+ Signature validated successfully
+ \retval ::kEpidSigInvalid
+ Signature is invalid
+ \retval ::kEpidSigRevokedInGroupRl
+ Signature revoked in GroupRl
+ \retval ::kEpidSigRevokedInPrivRl
+ Signature revoked in PrivRl
+ \retval ::kEpidSigRevokedInSigRl
+ Signature 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 Epid11VerifierCreate
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+support</b></a>
+ */
+EpidStatus Epid11Verify(Epid11VerifierCtx const* ctx,
+ Epid11Signature const* sig, size_t sig_len,
+ void const* msg, size_t msg_len);
+
+/// 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.
+
+ \param[in] sig1
+ A basic signature.
+ \param[in] sig2
+ A basic signature.
+
+ \result bool
+
+ \retval true
+ if the signatures were generated by the same member
+ \retval false
+ if 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 Epid11VerifyBasicSig
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+support</b></a>
+ */
+bool Epid11AreSigsLinked(Epid11BasicSignature const* sig1,
+ Epid11BasicSignature const* sig2);
+
+/// 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.
+
+ \param[in] ctx
+ The verifier context.
+ \param[in] sig
+ The basic signature.
+ \param[in] msg
+ The message that was signed.
+ \param[in] msg_len
+ The size of msg in bytes.
+
+ \returns ::EpidStatus
+
+ \note
+ This function should be used in conjunction with Epid11NrVerify() and
+ Epid11CheckPrivRlEntry().
+
+ \note
+ If the result is not ::kEpidNoErr the verify should be considered to have
+ failed.
+
+ \see Epid11VerifierCreate
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+support</b></a>
+ */
+EpidStatus Epid11VerifyBasicSig(Epid11VerifierCtx const* ctx,
+ Epid11BasicSignature const* sig,
+ void const* msg, size_t msg_len);
+
+/// 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.
+
+ \param[in] ctx
+ The verifier context.
+ \param[in] sig
+ The basic signature.
+ \param[in] msg
+ The message that was signed.
+ \param[in] msg_len
+ The size of msg in bytes.
+ \param[in] sigrl_entry
+ The signature based revocation list entry.
+ \param[in] proof
+ The non-revoked proof.
+
+ \returns ::EpidStatus
+
+ \note
+ Sig should be verified using Epid11VerifyBasicSig() before invocation. Behavior
+ is undefined if sig cannot be verified.
+
+ \note
+ This function should be used in conjunction with Epid11VerifyBasicSig() and
+ Epid11CheckPrivRlEntry().
+
+ \note
+ If the result is not ::kEpidNoErr the verify should de considered to have
+ failed.
+
+ \see Epid11VerifierCreate
+ \see Epid11VerifyBasicSig
+ \see Epid11CheckPrivRlEntry
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+support</b></a>
+ */
+EpidStatus Epid11NrVerify(Epid11VerifierCtx const* ctx,
+ Epid11BasicSignature const* sig, void const* msg,
+ size_t msg_len, Epid11SigRlEntry const* sigrl_entry,
+ Epid11NrProof const* proof);
+
+/// 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.
+
+ \param[in] ctx
+ The verifier context.
+ \param[in] sig
+ The basic signature.
+ \param[in] f
+ The private key based revocation list entry.
+
+ \note
+ Sig should be verified using Epid11VerifyBasicSig() before invocation. Behavior
+ is undefined if sig cannot be verified.
+
+ \note
+ This function should be used in conjunction with Epid11NrVerify() and
+ Epid11VerifyBasicSig().
+
+ \note
+ If the result is not ::kEpidNoErr the verify should de considered to have
+ failed.
+
+ \returns ::EpidStatus
+ \see Epid11VerifierCreate
+ \see Epid11NrVerify
+ \see Epid11VerifyBasicSig
+ \see <a href="group___epid11_verifier_module.html#details"><b>EPID 1.1
+support</b></a>
+ */
+EpidStatus Epid11CheckPrivRlEntry(Epid11VerifierCtx const* ctx,
+ Epid11BasicSignature const* sig,
+ FpElemStr const* f);
+
+/*! @} */
+#endif // EPID_VERIFIER_1_1_API_H_
diff --git a/epid/verifier/1.1/src/check_privrl_entry.c b/epid/verifier/1.1/src/check_privrl_entry.c
new file mode 100644
index 0000000..1b56ca7
--- /dev/null
+++ b/epid/verifier/1.1/src/check_privrl_entry.c
@@ -0,0 +1,90 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+
+/*!
+* \file
+* \brief Epid11CheckPrivRlEntry implementation.
+*/
+
+#include "epid/verifier/1.1/api.h"
+#include "epid/verifier/1.1/src/context.h"
+EpidStatus Epid11CheckPrivRlEntry(Epid11VerifierCtx const* ctx,
+ Epid11BasicSignature const* sig,
+ FpElemStr const* f) {
+ EpidStatus result = kEpidErr;
+ EcPoint* b = NULL;
+ EcPoint* k = NULL;
+ EcPoint* t5 = NULL;
+ EcGroup* G3 = NULL;
+ if (!ctx || !sig || !f) {
+ return kEpidBadArgErr;
+ }
+ if (!ctx->epid11_params || !ctx->epid11_params->G3) {
+ return kEpidBadArgErr;
+ }
+ do {
+ // Section 4.1.2 Step 31. The verifier computes t5 = G3.exp(B, f)
+ // and verifies that G3.isEqual(t5, K) = false
+ bool compare_result = false;
+ G3 = ctx->epid11_params->G3;
+ result = NewEcPoint(G3, &b);
+ if (kEpidNoErr != result) {
+ result = kEpidMathErr;
+ break;
+ }
+ result = NewEcPoint(G3, &k);
+ if (kEpidNoErr != result) {
+ result = kEpidMathErr;
+ break;
+ }
+ result = NewEcPoint(G3, &t5);
+ if (kEpidNoErr != result) {
+ result = kEpidMathErr;
+ break;
+ }
+ result = ReadEcPoint(G3, &sig->B, sizeof(sig->B), b);
+ if (kEpidNoErr != result) {
+ result = kEpidMathErr;
+ break;
+ }
+ result = ReadEcPoint(G3, &sig->K, sizeof(sig->K), k);
+ if (kEpidNoErr != result) {
+ result = kEpidMathErr;
+ break;
+ }
+ result = EcExp(G3, b, (BigNumStr const*)f, t5);
+ if (kEpidNoErr != result) {
+ result = kEpidMathErr;
+ break;
+ }
+ result = EcIsEqual(G3, t5, k, &compare_result);
+ if (kEpidNoErr != result) {
+ result = kEpidMathErr;
+ break;
+ }
+ // if t5 == k, sig revoked in PrivRl
+ if (compare_result) {
+ result = kEpidSigRevokedInPrivRl;
+ } else {
+ result = kEpidNoErr;
+ }
+ } while (0);
+
+ DeleteEcPoint(&t5);
+ DeleteEcPoint(&k);
+ DeleteEcPoint(&b);
+ return result;
+}
diff --git a/epid/verifier/1.1/src/context.c b/epid/verifier/1.1/src/context.c
new file mode 100644
index 0000000..2ecae20
--- /dev/null
+++ b/epid/verifier/1.1/src/context.c
@@ -0,0 +1,450 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+
+/*!
+* \file
+* \brief Intel EPID 1.1 Verifier context implementation.
+*/
+
+#include "epid/verifier/1.1/api.h"
+#include "epid/verifier/1.1/src/context.h"
+#include "epid/common/src/memory.h"
+#include "epid/common/src/endian_convert.h"
+
+/// Handle SDK Error with Break
+#define BREAK_ON_EPID_ERROR(ret) \
+ \
+ if (kEpidNoErr != (ret)) { \
+ break; \
+ }
+
+/// create Verifier precomp of the Epid11VerifierCtx
+static EpidStatus DoPrecomputation(Epid11VerifierCtx* ctx);
+
+/// Read Verifier precomp
+static EpidStatus ReadPrecomputation(Epid11VerifierPrecomp const* precomp_str,
+ Epid11VerifierCtx* ctx);
+
+/// Internal function to prove if group based revocation list is valid
+static bool Epid11IsGroupRlValid(Epid11GroupRl const* group_rl,
+ size_t grp_rl_size) {
+ const size_t kMinGroupRlSize = sizeof(Epid11GroupRl) - sizeof(Epid11GroupId);
+ size_t input_grp_rl_size = 0;
+
+ if (!group_rl) {
+ return false;
+ }
+ if (grp_rl_size < kMinGroupRlSize) {
+ return false;
+ }
+ if (ntohl(group_rl->n3) >
+ (SIZE_MAX - kMinGroupRlSize) / sizeof(Epid11GroupId)) {
+ return false;
+ }
+ input_grp_rl_size =
+ kMinGroupRlSize + (ntohl(group_rl->n3) * sizeof(Epid11GroupId));
+ if (input_grp_rl_size != grp_rl_size) {
+ return false;
+ }
+ return true;
+}
+/// Internal function to prove if signature based revocation list is valid
+bool Epid11IsSigRlValid(Epid11GroupId const* gid, Epid11SigRl const* sig_rl,
+ size_t sig_rl_size) {
+ const size_t kMinSigRlSize = sizeof(Epid11SigRl) - sizeof(Epid11SigRlEntry);
+ size_t input_sig_rl_size = 0;
+ if (!gid || !sig_rl || kMinSigRlSize > sig_rl_size) {
+ return false;
+ }
+ if (ntohl(sig_rl->n2) > (SIZE_MAX - kMinSigRlSize) / sizeof(sig_rl->bk[0])) {
+ return false;
+ }
+ // sanity check of intput SigRl size
+ input_sig_rl_size = kMinSigRlSize + ntohl(sig_rl->n2) * sizeof(sig_rl->bk[0]);
+ if (input_sig_rl_size != sig_rl_size) {
+ return false;
+ }
+ // verify that gid given and gid in SigRl match
+ if (0 != memcmp(gid, &sig_rl->gid, sizeof(*gid))) {
+ return false;
+ }
+ return true;
+}
+/// Internal function to verify if Intel(R) EPID 1.1 private key based
+/// revocation list is valid
+static bool IsEpid11PrivRlValid(Epid11GroupId const* gid,
+ Epid11PrivRl const* priv_rl,
+ size_t priv_rl_size) {
+ const size_t kMinPrivRlSize = sizeof(Epid11PrivRl) - sizeof(FpElemStr);
+ size_t input_priv_rl_size = 0;
+
+ if (!gid || !priv_rl || kMinPrivRlSize > priv_rl_size) {
+ return false;
+ }
+ if (ntohl(priv_rl->n1) >
+ (SIZE_MAX - kMinPrivRlSize) / sizeof(priv_rl->f[0])) {
+ return false;
+ }
+ // sanity check of input Epid11PrivRl size
+ input_priv_rl_size =
+ kMinPrivRlSize + ntohl(priv_rl->n1) * sizeof(priv_rl->f[0]);
+ if (input_priv_rl_size != priv_rl_size) {
+ return false;
+ }
+ // verify that gid given and gid in Epid11PrivRl match
+ if (0 != memcmp(gid, &priv_rl->gid, sizeof(*gid))) {
+ return false;
+ }
+ return true;
+}
+
+EpidStatus Epid11VerifierCreate(Epid11GroupPubKey const* pub_key,
+ Epid11VerifierPrecomp const* precomp,
+ Epid11VerifierCtx** ctx) {
+ EpidStatus result = kEpidErr;
+ Epid11VerifierCtx* verifier_ctx = NULL;
+ if (!pub_key || !ctx) {
+ return kEpidBadArgErr;
+ }
+ do {
+ // Allocate memory for VerifierCtx
+ verifier_ctx = SAFE_ALLOC(sizeof(Epid11VerifierCtx));
+ if (!verifier_ctx) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+
+ // Internal representation of Epid11Params
+ result = CreateEpid11Params(&verifier_ctx->epid11_params);
+ BREAK_ON_EPID_ERROR(result);
+ // Internal representation of Group Pub Key
+ result = CreateEpid11GroupPubKey(pub_key, verifier_ctx->epid11_params->G1,
+ verifier_ctx->epid11_params->G2,
+ &verifier_ctx->pub_key);
+ BREAK_ON_EPID_ERROR(result);
+ // Store group public key strings for later use
+ result =
+ SetKeySpecificEpid11CommitValues(pub_key, &verifier_ctx->commit_values);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ // Allocate verifier_ctx->e12
+ result = NewFfElement(verifier_ctx->epid11_params->GT, &verifier_ctx->e12);
+ BREAK_ON_EPID_ERROR(result);
+ // Allocate verifier_ctx->e22
+ result = NewFfElement(verifier_ctx->epid11_params->GT, &verifier_ctx->e22);
+ BREAK_ON_EPID_ERROR(result);
+ // Allocate verifier_ctx->e2w
+ result = NewFfElement(verifier_ctx->epid11_params->GT, &verifier_ctx->e2w);
+ BREAK_ON_EPID_ERROR(result);
+ // precomputation
+ if (precomp != NULL) {
+ result = ReadPrecomputation(precomp, verifier_ctx);
+ } else {
+ result = DoPrecomputation(verifier_ctx);
+ }
+ BREAK_ON_EPID_ERROR(result);
+ verifier_ctx->sig_rl = NULL;
+ verifier_ctx->group_rl = NULL;
+ verifier_ctx->priv_rl = NULL;
+ *ctx = verifier_ctx;
+ result = kEpidNoErr;
+ } while (0);
+
+ if (kEpidNoErr != result && verifier_ctx) {
+ DeleteFfElement(&verifier_ctx->e2w);
+ DeleteFfElement(&verifier_ctx->e22);
+ DeleteFfElement(&verifier_ctx->e12);
+ DeleteEpid11GroupPubKey(&verifier_ctx->pub_key);
+ DeleteEpid11Params(&verifier_ctx->epid11_params);
+ SAFE_FREE(verifier_ctx);
+ }
+ return result;
+}
+
+void Epid11VerifierDelete(Epid11VerifierCtx** ctx) {
+ if (ctx && *ctx) {
+ DeleteFfElement(&(*ctx)->e2w);
+ DeleteFfElement(&(*ctx)->e22);
+ DeleteFfElement(&(*ctx)->e12);
+ DeleteEpid11GroupPubKey(&(*ctx)->pub_key);
+ DeleteEpid11Params(&(*ctx)->epid11_params);
+ (*ctx)->priv_rl = NULL;
+ (*ctx)->sig_rl = NULL;
+ (*ctx)->group_rl = NULL;
+ DeleteEcPoint(&(*ctx)->basename_hash);
+ SAFE_FREE((*ctx)->basename);
+ (*ctx)->basename_len = 0;
+ SAFE_FREE(*ctx);
+ }
+}
+
+EpidStatus Epid11VerifierWritePrecomp(Epid11VerifierCtx const* ctx,
+ Epid11VerifierPrecomp* precomp) {
+ EpidStatus result = kEpidErr;
+ FfElement* e12 = NULL; // an element in GT
+ FfElement* e22 = NULL; // an element in GT
+ FfElement* e2w = NULL; // an element in GT
+ FiniteField* GT = NULL; // Finite field GT(Fq6)
+ if (!ctx || !ctx->e12 || !ctx->e22 || !ctx->e2w || !ctx->epid11_params ||
+ !(ctx->epid11_params->GT) || !ctx->pub_key || !precomp) {
+ return kEpidBadArgErr;
+ }
+ e12 = ctx->e12;
+ e22 = ctx->e22;
+ e2w = ctx->e2w;
+ GT = ctx->epid11_params->GT;
+
+ precomp->gid = ctx->pub_key->gid;
+ result = WriteFfElement(GT, e12, &(precomp->e12), sizeof(precomp->e12));
+ if (kEpidNoErr != result) {
+ return result;
+ }
+ result = WriteFfElement(GT, e22, &(precomp->e22), sizeof(precomp->e22));
+ if (kEpidNoErr != result) {
+ return result;
+ }
+ result = WriteFfElement(GT, e2w, &(precomp->e2w), sizeof(precomp->e2w));
+ if (kEpidNoErr != result) {
+ return result;
+ }
+ return result;
+}
+
+EpidStatus Epid11VerifierSetPrivRl(Epid11VerifierCtx* ctx,
+ Epid11PrivRl const* priv_rl,
+ size_t priv_rl_size) {
+ if (!ctx || !priv_rl || !ctx->pub_key) {
+ return kEpidBadArgErr;
+ }
+ if (!IsEpid11PrivRlValid(&ctx->pub_key->gid, priv_rl, priv_rl_size)) {
+ return kEpidBadArgErr;
+ }
+ // Do not set an older version of Epid11PrivRl
+ if (ctx->priv_rl) {
+ unsigned int current_ver = 0;
+ unsigned int incoming_ver = 0;
+ current_ver = ntohl(ctx->priv_rl->version);
+ incoming_ver = ntohl(priv_rl->version);
+ if (current_ver >= incoming_ver) {
+ return kEpidBadArgErr;
+ }
+ }
+ ctx->priv_rl = priv_rl;
+ return kEpidNoErr;
+}
+
+EpidStatus Epid11VerifierSetSigRl(Epid11VerifierCtx* ctx,
+ Epid11SigRl const* sig_rl,
+ size_t sig_rl_size) {
+ if (!ctx || !sig_rl || !ctx->pub_key) {
+ return kEpidBadArgErr;
+ }
+ // Do not set an older version of sig rl
+ if (ctx->sig_rl) {
+ unsigned int current_ver = 0;
+ unsigned int incoming_ver = 0;
+ current_ver = ntohl(ctx->sig_rl->version);
+ incoming_ver = ntohl(sig_rl->version);
+ if (current_ver >= incoming_ver) {
+ return kEpidBadArgErr;
+ }
+ }
+ if (!Epid11IsSigRlValid(&ctx->pub_key->gid, sig_rl, sig_rl_size)) {
+ return kEpidBadArgErr;
+ }
+ ctx->sig_rl = sig_rl;
+
+ return kEpidNoErr;
+}
+
+EpidStatus Epid11VerifierSetGroupRl(Epid11VerifierCtx* ctx,
+ Epid11GroupRl const* grp_rl,
+ size_t grp_rl_size) {
+ if (!ctx || !grp_rl || !ctx->pub_key) {
+ return kEpidBadArgErr;
+ }
+ if (!Epid11IsGroupRlValid(grp_rl, grp_rl_size)) {
+ return kEpidBadArgErr;
+ }
+ // Do not set an older version of group rl
+ if (ctx->group_rl) {
+ unsigned int current_ver = 0;
+ unsigned int incoming_ver = 0;
+ current_ver = ntohl(ctx->group_rl->version);
+ incoming_ver = ntohl(grp_rl->version);
+ if (current_ver >= incoming_ver) {
+ return kEpidBadArgErr;
+ }
+ }
+ ctx->group_rl = grp_rl;
+
+ return kEpidNoErr;
+}
+
+EpidStatus Epid11VerifierSetBasename(Epid11VerifierCtx* ctx,
+ void const* basename,
+ size_t basename_len) {
+ EpidStatus result = kEpidErr;
+ EcPoint* basename_hash = NULL;
+ uint8_t* basename_buffer = NULL;
+
+ if (!ctx || !ctx->epid11_params || !ctx->epid11_params->G3) {
+ return kEpidBadArgErr;
+ }
+ if (!basename && basename_len > 0) {
+ return kEpidBadArgErr;
+ }
+
+ if (!basename) {
+ ctx->basename_len = 0;
+ DeleteEcPoint(&ctx->basename_hash);
+ SAFE_FREE(ctx->basename);
+ return kEpidNoErr;
+ }
+
+ do {
+ EcGroup* G3 = ctx->epid11_params->G3;
+ result = NewEcPoint(G3, &basename_hash);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ result = Epid11EcHash(G3, basename, basename_len, basename_hash);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ if (basename_len > 0) {
+ basename_buffer = SAFE_ALLOC(basename_len);
+ if (!basename_buffer) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+ }
+
+ ctx->basename_len = basename_len;
+
+ if (basename_len > 0) {
+ // memcpy is used to copy variable length basename
+ if (0 != memcpy_S(basename_buffer, ctx->basename_len, basename,
+ basename_len)) {
+ result = kEpidErr;
+ break;
+ }
+ }
+ DeleteEcPoint(&ctx->basename_hash);
+ SAFE_FREE(ctx->basename);
+ ctx->basename = basename_buffer;
+ ctx->basename_hash = basename_hash;
+
+ result = kEpidNoErr;
+ } while (0);
+
+ if (kEpidNoErr != result) {
+ DeleteEcPoint(&basename_hash);
+ SAFE_FREE(basename_buffer);
+ }
+ return result;
+}
+
+static EpidStatus DoPrecomputation(Epid11VerifierCtx* ctx) {
+ EpidStatus result = kEpidErr;
+ FfElement* e12 = NULL;
+ FfElement* e22 = NULL;
+ FfElement* e2w = NULL;
+ Epid11Params_* params = NULL;
+ Epid11GroupPubKey_* pub_key = NULL;
+ Epid11PairingState* ps_ctx = NULL;
+ if (!ctx) {
+ return kEpidBadArgErr;
+ }
+ if (!ctx->epid11_params || !ctx->epid11_params->GT ||
+ !ctx->epid11_params->pairing_state || !ctx->pub_key || !ctx->e12 ||
+ !ctx->e22 || !ctx->e2w) {
+ return kEpidBadArgErr;
+ }
+ pub_key = ctx->pub_key;
+ params = ctx->epid11_params;
+ e12 = ctx->e12;
+ e22 = ctx->e22;
+ e2w = ctx->e2w;
+ ps_ctx = params->pairing_state;
+ // do precomputation
+ // 1. The verifier computes e12 = pairing(h1, g2).
+ result = Epid11Pairing(ps_ctx, pub_key->h1, params->g2, e12);
+ if (kEpidNoErr != result) {
+ return result;
+ }
+ // 2. The verifier computes e22 = pairing(h2, g2).
+ result = Epid11Pairing(ps_ctx, pub_key->h2, params->g2, e22);
+ if (kEpidNoErr != result) {
+ return result;
+ }
+ // 3. The verifier computes e2w = pairing(h2, w).
+ result = Epid11Pairing(ps_ctx, pub_key->h2, pub_key->w, e2w);
+ if (kEpidNoErr != result) {
+ return result;
+ }
+ return kEpidNoErr;
+}
+static EpidStatus ReadPrecomputation(Epid11VerifierPrecomp const* precomp_str,
+ Epid11VerifierCtx* ctx) {
+ EpidStatus result = kEpidErr;
+ FfElement* e12 = NULL;
+ FfElement* e22 = NULL;
+ FfElement* e2w = NULL;
+ FiniteField* GT = NULL;
+ Epid11Params_* params = NULL;
+ unsigned int current_gid = 0;
+ unsigned int incoming_gid = 0;
+ if (!ctx) {
+ return kEpidBadArgErr;
+ }
+ if (!ctx->epid11_params || !ctx->epid11_params->GT || !ctx->e12 ||
+ !ctx->e22 || !ctx->e2w) {
+ return kEpidBadArgErr;
+ }
+
+ if (!ctx->pub_key || !precomp_str) return kEpidBadArgErr;
+
+ current_gid = ntohl(ctx->pub_key->gid);
+ incoming_gid = ntohl(precomp_str->gid);
+
+ if (current_gid != incoming_gid) {
+ return kEpidBadArgErr;
+ }
+
+ params = ctx->epid11_params;
+ GT = params->GT;
+ e12 = ctx->e12;
+ e22 = ctx->e22;
+ e2w = ctx->e2w;
+
+ result = ReadFfElement(GT, &precomp_str->e12, sizeof(precomp_str->e12), e12);
+ if (kEpidNoErr != result) {
+ return result;
+ }
+ result = ReadFfElement(GT, &precomp_str->e22, sizeof(precomp_str->e22), e22);
+ if (kEpidNoErr != result) {
+ return result;
+ }
+ result = ReadFfElement(GT, &precomp_str->e2w, sizeof(precomp_str->e2w), e2w);
+ if (kEpidNoErr != result) {
+ return result;
+ }
+ return kEpidNoErr;
+}
diff --git a/epid/verifier/1.1/src/context.h b/epid/verifier/1.1/src/context.h
new file mode 100644
index 0000000..62663cb
--- /dev/null
+++ b/epid/verifier/1.1/src/context.h
@@ -0,0 +1,47 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+#ifndef EPID_VERIFIER_1_1_SRC_CONTEXT_H_
+#define EPID_VERIFIER_1_1_SRC_CONTEXT_H_
+/*!
+ * \file
+ * \brief Intel(R) EPID 1.1 Verifier context interface.
+ */
+#include "epid/common/1.1/src/grouppubkey.h"
+#include "epid/common/math/ecgroup.h"
+#include "epid/common/math/finitefield.h"
+#include "epid/common/1.1/src/epid11params.h"
+#include "epid/common/1.1/src/commitment.h"
+
+/// Verifier context definition
+struct Epid11VerifierCtx {
+ Epid11GroupPubKey_* pub_key; ///< Group public key
+ /// Verifier pre-computation
+ FfElement* e12; ///< an element in GT
+ FfElement* e22; ///< an element in GT
+ FfElement* e2w; ///< an element in GT
+ /// Revocation lists
+ Epid11PrivRl const* priv_rl; ///< Private key based RL - not owned
+ Epid11SigRl const* sig_rl; ///< Signature based RL - not owned
+ Epid11GroupRl const* group_rl; ///< Group RL - not owned
+
+ Epid11Params_* epid11_params; ///< Intel(R) EPID 1.1 params
+ Epid11CommitValues commit_values; ///< Hashed values to create commitment
+ uint8_t* basename; ///< Basename to use - NULL for random base
+ size_t basename_len; ///< Number of bytes in basename
+ EcPoint* basename_hash; ///< Epid11EcHash of the basename
+};
+
+#endif // EPID_VERIFIER_1_1_SRC_CONTEXT_H_
diff --git a/epid/verifier/1.1/src/nrverify.c b/epid/verifier/1.1/src/nrverify.c
new file mode 100644
index 0000000..a52e5f4
--- /dev/null
+++ b/epid/verifier/1.1/src/nrverify.c
@@ -0,0 +1,253 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+
+/*!
+* \file
+* \brief Epid11NrVerify implementation.
+*/
+#include "ext/ipp/include/ippcp.h"
+#include "epid/common/src/memory.h"
+#include "epid/verifier/1.1/api.h"
+#include "epid/verifier/1.1/src/context.h"
+#include "epid/common/src/endian_convert.h"
+#include "epid/common/math/hash.h"
+/// Handle SDK Error with Break
+#define BREAK_ON_EPID_ERROR(ret) \
+ if (kEpidNoErr != (ret)) { \
+ break; \
+ }
+/// Count of elements in array
+#define COUNT_OF(A) (sizeof(A) / sizeof((A)[0]))
+#pragma pack(1)
+/// Storage for values to create commitment in NrVerify algorithm
+typedef struct Epid11NrVerifyCommitValues {
+ BigNumStr p_tick; //!< A large prime (256-bit)
+ Epid11G3ElemStr g3; //!< Generator of G3 (512-bit)
+ Epid11G3ElemStr B; //!< (element of G3): part of basic signature Sigma0
+ Epid11G3ElemStr K; //!< (element of G3): part of basic signature Sigma0
+ Epid11G3ElemStr B_tick; //!< (element of G3): one entry in SigRL
+ Epid11G3ElemStr K_tick; //!< (element of G3): one entry in SigRL
+ Epid11G3ElemStr T; //!< element of G3
+ Epid11G3ElemStr R1; //!< element of G3
+ Epid11G3ElemStr R2; //!< element of G3
+ uint32_t msg_len; //!< length of the message
+ uint8_t msg[1]; //!< message
+} Epid11NrVerifyCommitValues;
+#pragma pack()
+
+EpidStatus Epid11NrVerify(Epid11VerifierCtx const* ctx,
+ Epid11BasicSignature const* sig, void const* msg,
+ size_t msg_len, Epid11SigRlEntry const* sigrl_entry,
+ Epid11NrProof const* proof) {
+ size_t const cv_header_len =
+ sizeof(Epid11NrVerifyCommitValues) - sizeof(uint8_t);
+ Epid11NrVerifyCommitValues* commit_values = NULL;
+ size_t const commit_len = sizeof(Epid11NrVerifyCommitValues) + msg_len - 1;
+ EpidStatus res = kEpidErr;
+ // Epid11 G3 elements
+ EcPoint* T = NULL;
+ EcPoint* R1 = NULL;
+ EcPoint* R2 = NULL;
+
+ EcPoint* K = NULL;
+ EcPoint* B = NULL;
+ EcPoint* K_tick = NULL;
+ EcPoint* B_tick = NULL;
+
+ // Big integers
+ BigNum* smu = NULL;
+ BigNum* snu = NULL;
+ BigNum* nc_tick_bn = NULL;
+ Sha256Digest commit_hash;
+
+ if (!ctx || !sig || !proof || !sigrl_entry) {
+ return kEpidBadArgErr;
+ }
+ if (!msg && (0 != msg_len)) {
+ return kEpidBadArgErr;
+ }
+ if (msg_len > (UINT_MAX - cv_header_len)) {
+ return kEpidBadArgErr;
+ }
+ if (!ctx->epid11_params) {
+ return kEpidBadArgErr;
+ }
+ do {
+ bool cmp_result = false;
+ // handy shorthands:
+ EcGroup* G3 = ctx->epid11_params->G3;
+ BigNum* p_tick_bn = ctx->epid11_params->p_tick;
+
+ if (!G3 || !p_tick_bn) {
+ res = kEpidBadArgErr;
+ BREAK_ON_EPID_ERROR(res);
+ }
+
+ commit_values = SAFE_ALLOC(commit_len);
+ if (commit_values == NULL) {
+ res = kEpidMemAllocErr;
+ break;
+ }
+ // 1. We use the following variables T, R1, R2 (elements of G3), and c, smu,
+ // snu, nc (big integers).
+ res = NewEcPoint(G3, &T);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewEcPoint(G3, &R1);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewEcPoint(G3, &R2);
+ BREAK_ON_EPID_ERROR(res);
+
+ res = NewEcPoint(G3, &K);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewEcPoint(G3, &B);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewEcPoint(G3, &K_tick);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewEcPoint(G3, &B_tick);
+ BREAK_ON_EPID_ERROR(res);
+
+ res = NewBigNum(sizeof(proof->smu), &smu);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewBigNum(sizeof(proof->smu), &snu);
+ BREAK_ON_EPID_ERROR(res);
+
+ res = NewBigNum(sizeof(FpElemStr), &nc_tick_bn);
+ BREAK_ON_EPID_ERROR(res);
+
+ // 2. The verifier verifies that G3.inGroup(T) = true.
+ res = ReadEcPoint(G3, &(proof->T), sizeof(proof->T), T);
+ if (kEpidNoErr != res) {
+ res = kEpidBadArgErr;
+ break;
+ }
+
+ // 3. The verifier verifies that G3.isIdentity(T) = false.
+ res = EcIsIdentity(G3, T, &(cmp_result));
+ BREAK_ON_EPID_ERROR(res);
+ if (cmp_result) {
+ res = kEpidBadArgErr;
+ break;
+ }
+
+ // 4. The verifier verifies that smu, snu in [0, p'-1].
+ res = WriteBigNum(ctx->epid11_params->p_tick, sizeof(commit_values->p_tick),
+ &commit_values->p_tick);
+ BREAK_ON_EPID_ERROR(res);
+ if (memcmp(&proof->smu, &commit_values->p_tick, sizeof(FpElemStr)) >= 0 ||
+ memcmp(&proof->snu, &commit_values->p_tick, sizeof(FpElemStr)) >= 0) {
+ res = kEpidBadArgErr;
+ break;
+ }
+ // 5. The verifier computes nc = (- c) mod p'.
+ res = ReadBigNum(&(proof->c), sizeof(proof->c), nc_tick_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = BigNumMod(nc_tick_bn, p_tick_bn, nc_tick_bn);
+ BREAK_ON_EPID_ERROR(res);
+ // (-c) mod p' == p' - (c mod p')
+ res = BigNumSub(p_tick_bn, nc_tick_bn, nc_tick_bn);
+ BREAK_ON_EPID_ERROR(res);
+
+ // 6. The verifier computes R1 = G3.multiExp(K, smu, B, snu).
+ res = ReadEcPoint(G3, &(sig->K), sizeof(sig->K), K);
+ if (kEpidNoErr != res) {
+ res = kEpidBadArgErr;
+ break;
+ }
+ res = ReadEcPoint(G3, &(sig->B), sizeof(sig->B), B);
+ if (kEpidNoErr != res) {
+ res = kEpidBadArgErr;
+ break;
+ }
+ res = ReadBigNum(&(proof->smu), sizeof(proof->smu), smu);
+ BREAK_ON_EPID_ERROR(res);
+ res = ReadBigNum(&(proof->snu), sizeof(proof->snu), snu);
+ BREAK_ON_EPID_ERROR(res);
+ {
+ EcPoint const* points[2];
+ BigNum const* exponents[2];
+ points[0] = K;
+ points[1] = B;
+ exponents[0] = smu;
+ exponents[1] = snu;
+ res = EcMultiExpBn(G3, points, exponents, COUNT_OF(points), R1);
+ BREAK_ON_EPID_ERROR(res);
+ }
+ // 7. The verifier computes R2 = G3.multiExp(K', smu, B', snu, T, nc).
+ res = ReadEcPoint(G3, &(sigrl_entry->k), sizeof(sigrl_entry->k), K_tick);
+ if (kEpidNoErr != res) {
+ res = kEpidBadArgErr;
+ break;
+ }
+ res = ReadEcPoint(G3, &(sigrl_entry->b), sizeof(sigrl_entry->b), B_tick);
+ if (kEpidNoErr != res) {
+ res = kEpidBadArgErr;
+ break;
+ }
+ {
+ EcPoint const* points[3];
+ BigNum const* exponents[3];
+ points[0] = K_tick;
+ points[1] = B_tick;
+ points[2] = T;
+ exponents[0] = smu;
+ exponents[1] = snu;
+ exponents[2] = nc_tick_bn;
+ res = EcMultiExpBn(G3, points, exponents, COUNT_OF(points), R2);
+ BREAK_ON_EPID_ERROR(res);
+ }
+ // 8. The verifier verifies c = Hash(p' || g3 || B || K || B' || K' || T ||
+ // R1 || R2 || mSize || m).
+ if (msg) {
+ // Memory copy is used to copy a message of variable length
+ if (0 != memcpy_S(&commit_values->msg[0], msg_len, msg, msg_len)) {
+ res = kEpidBadArgErr;
+ break;
+ }
+ }
+ commit_values->g3 = ctx->commit_values.g3;
+ commit_values->B = sig->B;
+ commit_values->K = sig->K;
+ commit_values->B_tick = sigrl_entry->b;
+ commit_values->K_tick = sigrl_entry->k;
+ commit_values->T = proof->T;
+ commit_values->msg_len = ntohl(msg_len);
+ res = WriteEcPoint(G3, R1, &commit_values->R1, sizeof(commit_values->R1));
+ BREAK_ON_EPID_ERROR(res);
+ res = WriteEcPoint(G3, R2, &commit_values->R2, sizeof(commit_values->R2));
+ BREAK_ON_EPID_ERROR(res);
+ res = Sha256MessageDigest(commit_values, commit_len, &commit_hash);
+ if (0 != memcmp(&proof->c, &commit_hash, sizeof(proof->c))) {
+ res = kEpidBadArgErr;
+ break;
+ }
+ } while (0);
+ SAFE_FREE(commit_values);
+ DeleteEcPoint(&T);
+ DeleteEcPoint(&R1);
+ DeleteEcPoint(&R2);
+
+ DeleteEcPoint(&K);
+ DeleteEcPoint(&B);
+ DeleteEcPoint(&K_tick);
+ DeleteEcPoint(&B_tick);
+
+ DeleteBigNum(&smu);
+ DeleteBigNum(&snu);
+
+ DeleteBigNum(&nc_tick_bn);
+
+ return res;
+}
diff --git a/epid/verifier/1.1/src/sigs_linked.c b/epid/verifier/1.1/src/sigs_linked.c
new file mode 100644
index 0000000..96863f6
--- /dev/null
+++ b/epid/verifier/1.1/src/sigs_linked.c
@@ -0,0 +1,29 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+
+/*!
+* \file
+* \brief Epid11AreSigsLinked implementation.
+*/
+
+#include <string.h>
+#include "epid/verifier/1.1/api.h"
+
+bool Epid11AreSigsLinked(Epid11BasicSignature const* sig1,
+ Epid11BasicSignature const* sig2) {
+ return (sig1 && sig2 && 0 == memcmp(&sig1->B, &sig2->B, sizeof(sig2->B)) &&
+ 0 == memcmp(&sig1->K, &sig2->K, sizeof(sig2->K)));
+}
diff --git a/epid/verifier/1.1/src/verify.c b/epid/verifier/1.1/src/verify.c
new file mode 100644
index 0000000..aff1da4
--- /dev/null
+++ b/epid/verifier/1.1/src/verify.c
@@ -0,0 +1,240 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+
+/*!
+* \file
+* \brief Epid11Verify implementation.
+*/
+
+#include <string.h>
+#include "epid/verifier/1.1/api.h"
+#include "epid/verifier/1.1/src/context.h"
+#include "epid/common/src/endian_convert.h"
+
+static size_t Epid11GetSignatureRlCount(Epid11Signature const* sig) {
+ return (!sig) ? 0 : ntohl(sig->n2);
+}
+
+static size_t Epid11GetGroupRlCount(Epid11GroupRl const* rl) {
+ return (!rl) ? 0 : ntohl(rl->n3);
+}
+
+static size_t Epid11GetSigRlCount(Epid11SigRl const* rl) {
+ return (!rl) ? 0 : ntohl(rl->n2);
+}
+
+static size_t Epid11GetPrivRlCount(Epid11PrivRl const* rl) {
+ return (!rl) ? 0 : ntohl(rl->n1);
+}
+
+/// Check PrivRL status of a signature for one PrivRl entry
+/*!
+computes t5 =G3.exp(B, f[i]) and verifies that G3.isEqual(t5, K) = false.
+
+ \param[in] ctx
+ The verifier context.
+ \param[in] sig
+ The basic signature.
+ \param[in] f_str
+ priv_rl entry to check.
+
+ \returns ::EpidStatus
+
+ \retval ::kEpidNoErr
+ Signature was not revoked
+ \retval ::kEpidSigRevokedInPrivRl
+ Signature revoked in PrivRl
+*/
+EpidStatus Epid11PrVerify(Epid11VerifierCtx const* ctx,
+ Epid11BasicSignature const* sig, BigNumStr* f_str) {
+ EpidStatus sts = kEpidErr;
+ EcPoint* B = NULL;
+ EcPoint* K = NULL;
+ EcPoint* t5 = NULL;
+ FfElement* f = NULL;
+ EcGroup* G3 = ctx->epid11_params->G3;
+ FiniteField* Fp = ctx->epid11_params->Fp;
+ bool eq = false;
+ do {
+ sts = NewEcPoint(G3, &B);
+ if (kEpidNoErr != sts) {
+ sts = kEpidMathErr;
+ break;
+ }
+ sts = NewEcPoint(G3, &K);
+ if (kEpidNoErr != sts) {
+ sts = kEpidMathErr;
+ break;
+ }
+ sts = NewEcPoint(G3, &t5);
+ if (kEpidNoErr != sts) {
+ sts = kEpidMathErr;
+ break;
+ }
+ sts = NewFfElement(Fp, &f);
+ if (kEpidNoErr != sts) {
+ sts = kEpidMathErr;
+ break;
+ }
+ sts = ReadEcPoint(G3, &sig->B, sizeof(sig->B), B);
+ if (kEpidNoErr != sts) {
+ sts = kEpidMathErr;
+ break;
+ }
+ sts = ReadEcPoint(G3, &sig->K, sizeof(sig->K), K);
+ if (kEpidNoErr != sts) {
+ sts = kEpidMathErr;
+ break;
+ }
+ sts = EcExp(G3, B, f_str, t5);
+ if (kEpidNoErr != sts) {
+ sts = kEpidMathErr;
+ break;
+ }
+ sts = EcIsEqual(G3, t5, K, &eq);
+ if (kEpidNoErr != sts) {
+ sts = kEpidMathErr;
+ break;
+ }
+ if (eq) {
+ sts = kEpidSigRevokedInPrivRl;
+ } else {
+ sts = kEpidNoErr;
+ }
+ } while (0);
+ DeleteFfElement(&f);
+ DeleteEcPoint(&t5);
+ DeleteEcPoint(&K);
+ DeleteEcPoint(&B);
+ return sts;
+}
+
+EpidStatus Epid11Verify(Epid11VerifierCtx const* ctx,
+ Epid11Signature const* sig, size_t sig_len,
+ void const* msg, size_t msg_len) {
+ // Step 1. Setup
+ size_t const sig_header_len =
+ (sizeof(Epid11Signature) - sizeof(Epid11NrProof));
+ EpidStatus sts = kEpidErr;
+ size_t rl_count = 0;
+ size_t i;
+ if (!sig || !ctx || !ctx->epid11_params || !ctx->pub_key) {
+ return kEpidBadArgErr;
+ }
+ if (!msg && (0 != msg_len)) {
+ // if message is non-empty it must have both length and content
+ return kEpidBadArgErr;
+ }
+ if (sig_len < sig_header_len) {
+ return kEpidBadArgErr;
+ }
+ rl_count = Epid11GetSignatureRlCount(sig);
+ if (rl_count > (SIZE_MAX - sig_header_len) / sizeof(sig->sigma[0]) ||
+ (rl_count * sizeof(sig->sigma[0])) + sig_header_len != sig_len) {
+ return kEpidBadArgErr;
+ }
+ // Check if signature has NrPoofs but SigRl is not set
+ if (0 < rl_count && !ctx->sig_rl) {
+ return kEpidBadArgErr;
+ }
+
+ // Step 3. The verifier verifies gid in the public key, PRIV-RL, and
+ // SIG-RL (if provided) and the verifier pre-computation blob all match.
+ if (ctx->priv_rl) {
+ if (0 != memcmp(&ctx->pub_key->gid, &ctx->priv_rl->gid,
+ sizeof(ctx->pub_key->gid))) {
+ return kEpidBadArgErr;
+ }
+ }
+
+ if (ctx->sig_rl) {
+ if (0 != memcmp(&ctx->pub_key->gid, &ctx->sig_rl->gid,
+ sizeof(ctx->pub_key->gid))) {
+ return kEpidBadArgErr;
+ }
+ }
+ // Verification of gid value in precomputation blob
+ // and public key is done in ReadPrecomp
+
+ // Step 4. The verifier verifies the signatures of PRIV-RL,
+ // SIG-RL (if provided), and Group-RL (if provided) using IVK.
+ // Data is already verified.
+
+ // Step 5. If GroupRL is provided as input,...
+ if (ctx->group_rl) {
+ // ...the verifier verifies that gid has not been revoked, i.e.,
+ // gid does not match any entry in Group-RL.
+ size_t grouprl_count = Epid11GetGroupRlCount(ctx->group_rl);
+ for (i = 0; i < grouprl_count; ++i) {
+ if (0 == memcmp(&ctx->pub_key->gid, &ctx->group_rl->gid[i],
+ sizeof(ctx->pub_key->gid))) {
+ return kEpidSigRevokedInGroupRl;
+ }
+ }
+ }
+
+ // Step 6. If SIG-RL is provided as input,...
+ if (ctx->sig_rl) {
+ size_t sigrl_count = Epid11GetSigRlCount(ctx->sig_rl);
+
+ // ...the verifier verifies that RLver and n2
+ // values in s match with the values in SIG-RL....
+ if (0 != memcmp(&ctx->sig_rl->version, &sig->rl_ver,
+ sizeof(ctx->sig_rl->version))) {
+ return kEpidBadArgErr;
+ }
+
+ if (sigrl_count != rl_count) {
+ return kEpidBadArgErr;
+ }
+ }
+
+ // Step 7-30. The verifier verifies the basic signature.
+ sts = Epid11VerifyBasicSig(ctx, &sig->sigma0, msg, msg_len);
+ if (sts != kEpidNoErr) {
+ return kEpidSigInvalid;
+ }
+
+ // Step 31. For i = 0, ..., n1-1, the verifier computes t5 =G3.exp(B, f[i])
+ // and verifies that G3.isEqual(t5, K) = false.
+ if (ctx->priv_rl) {
+ size_t privrl_count = Epid11GetPrivRlCount(ctx->priv_rl);
+ for (i = 0; i < privrl_count; ++i) {
+ sts = Epid11PrVerify(ctx, &sig->sigma0, (BigNumStr*)&ctx->priv_rl->f[i]);
+ if (sts != kEpidNoErr) {
+ return kEpidSigRevokedInPrivRl;
+ }
+ }
+ }
+
+ // Step 32. For i = 0, ..., n2-1, the verifier verifies nrVerify(B, K, B[i],
+ // K[i], Sigma[i]) = true. The details of nrVerify() will be given in the
+ // next subsection.
+ if (ctx->sig_rl) {
+ size_t sigrl_count = Epid11GetSigRlCount(ctx->sig_rl);
+
+ for (i = 0; i < sigrl_count; ++i) {
+ sts = Epid11NrVerify(ctx, &sig->sigma0, msg, msg_len, &ctx->sig_rl->bk[i],
+ &sig->sigma[i]);
+ if (sts != kEpidNoErr) {
+ return kEpidSigRevokedInSigRl;
+ }
+ }
+ }
+
+ // Step 33. If all the above verifications succeed, the verifier outputs true.
+ return kEpidSigValid;
+}
diff --git a/epid/verifier/1.1/src/verifybasic.c b/epid/verifier/1.1/src/verifybasic.c
new file mode 100644
index 0000000..d5a1480
--- /dev/null
+++ b/epid/verifier/1.1/src/verifybasic.c
@@ -0,0 +1,412 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Epid11VerifyBasicSig implementation.
+ */
+#include <stdio.h>
+#include <string.h>
+#include "epid/verifier/1.1/api.h"
+#include "epid/verifier/1.1/src/context.h"
+#include "epid/common/math/src/bignum-internal.h"
+#include "epid/common/src/memory.h"
+/// Handle SDK Error with Break
+#define BREAK_ON_EPID_ERROR(ret) \
+ if (kEpidNoErr != (ret)) { \
+ break; \
+ }
+
+/// Count of elements in array
+#define COUNT_OF(A) (sizeof(A) / sizeof((A)[0]))
+
+/// Convert bit size into 32-bit words
+#ifndef BITS2BYTES
+#define BITS2BYTES(n) ((((n) + 7) / 8))
+#endif
+
+/// The EPID11 "sf" value must never be larger than 2**593
+#define EPID11_SF_MAX_SIZE_BITS (593)
+
+EpidStatus Epid11VerifyBasicSig(Epid11VerifierCtx const* ctx,
+ Epid11BasicSignature const* sig,
+ void const* msg, size_t msg_len) {
+ EpidStatus res = kEpidNoErr;
+
+ // Epid11 G1 elements
+ EcPoint* T1 = NULL;
+ EcPoint* T2 = NULL;
+ EcPoint* R1 = NULL;
+ EcPoint* R2 = NULL;
+ EcPoint* t1 = NULL;
+ EcPoint* t2 = NULL;
+
+ // Epid11 GT elements
+ FfElement* R4 = NULL;
+ FfElement* t3 = NULL;
+
+ // Epid11 G3 elements
+ EcPoint* B = NULL;
+ EcPoint* K = NULL;
+ EcPoint* R3 = NULL;
+ EcPoint* t5 = NULL;
+
+ BigNum* c_bn = NULL;
+ BigNum* sa_bn = NULL;
+ BigNum* sb_bn = NULL;
+ BigNum* nc_bn = NULL;
+ BigNum* salpha_bn = NULL;
+ BigNum* sbeta_bn = NULL;
+ BigNum* nsx_bn = NULL;
+ BigNum* sf_bn = NULL;
+ BigNum* sf_tick_bn = NULL;
+ BigNum* nc_tick_bn = NULL;
+ BigNum* syalpha_bn = NULL;
+
+ Sha256Digest c_hash = {0};
+
+ if (!ctx || !sig) return kEpidBadArgErr;
+ if (!msg && (0 != msg_len)) {
+ // if message is non-empty it must have both length and content
+ return kEpidBadArgErr;
+ }
+ if (msg_len > UINT_MAX) return kEpidBadArgErr;
+ if (!ctx->epid11_params || !ctx->pub_key) return kEpidBadArgErr;
+
+ do {
+ bool cmp_result = false;
+ BigNumStr nc_str = {0};
+ // handy shorthands:
+ EcGroup* G1 = ctx->epid11_params->G1;
+ EcGroup* G3 = ctx->epid11_params->G3;
+ FiniteField* GT = ctx->epid11_params->GT;
+ BigNum* p_bn = ctx->epid11_params->p;
+ BigNum* p_tick_bn = ctx->epid11_params->p_tick;
+ EcPoint* g1 = ctx->epid11_params->g1;
+ EcPoint* g2 = ctx->epid11_params->g2;
+ EcPoint* w = ctx->pub_key->w;
+ Epid11CommitValues commit_values = ctx->commit_values;
+ EcPoint* basename_hash = ctx->basename_hash;
+
+ if (!G1 || !G3 || !GT || !p_bn || !p_tick_bn || !g1 || !g2 || !w) {
+ res = kEpidBadArgErr;
+ BREAK_ON_EPID_ERROR(res);
+ }
+
+ // 1. We use the following variables T1, T2, R1, R2, t1,
+ // t2 (elements of G1), R4, t3 (elements of GT), B, K, R3,
+ // t5 (elements of G3), c, sx, sy, sa, sb, salpha, sbeta,
+ // nc, nc_tick, nsx, syalpha, t4 (256-bit big integers),
+ // nd (80-bit big integer), and sf (600-bit big integer).
+ res = NewEcPoint(G1, &T1);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewEcPoint(G1, &T2);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewEcPoint(G1, &R1);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewEcPoint(G1, &R2);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewEcPoint(G1, &t1);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewEcPoint(G1, &t2);
+ BREAK_ON_EPID_ERROR(res);
+
+ res = NewFfElement(GT, &R4);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewFfElement(GT, &t3);
+ BREAK_ON_EPID_ERROR(res);
+
+ res = NewEcPoint(G3, &B);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewEcPoint(G3, &K);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewEcPoint(G3, &R3);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewEcPoint(G3, &t5);
+ BREAK_ON_EPID_ERROR(res);
+
+ res = NewBigNum(sizeof(FpElemStr), &c_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewBigNum(sizeof(FpElemStr), &sa_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewBigNum(sizeof(FpElemStr), &sb_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewBigNum(sizeof(FpElemStr), &nc_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewBigNum(sizeof(FpElemStr), &salpha_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewBigNum(sizeof(FpElemStr), &sbeta_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewBigNum(sizeof(FpElemStr), &nsx_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewBigNum(sizeof(OctStr600), &sf_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewBigNum(sizeof(OctStr600), &sf_tick_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewBigNum(sizeof(FpElemStr), &nc_tick_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = NewBigNum(sizeof(FpElemStr) * 2, &syalpha_bn);
+ BREAK_ON_EPID_ERROR(res);
+
+ // Steps 2-6 done in Epid11Create
+
+ // 8. If bsnSize = 0, the verifier verifies G3.inGroup(B) = true.
+ res = ReadEcPoint(G3, &(sig->B), sizeof(sig->B), B);
+ if (kEpidNoErr != res) {
+ if (ctx->basename_len == 0 && kEpidBadArgErr == res) {
+ res = kEpidSigInvalid;
+ }
+ break;
+ }
+
+ // 7. The verifier verifies that G3.isIdentity(B) is false
+ res = EcIsIdentity(G3, B, &cmp_result);
+ BREAK_ON_EPID_ERROR(res);
+ if (cmp_result != false) {
+ res = kEpidSigInvalid;
+ break;
+ }
+
+ // 9. If bsnSize > 0, the verifier verifies B = G3.hash(bsn).
+ if (basename_hash) {
+ res = EcIsEqual(G3, basename_hash, B, &cmp_result);
+ BREAK_ON_EPID_ERROR(res);
+ if (cmp_result != true) {
+ res = kEpidSigInvalid;
+ break;
+ }
+ }
+ // 10. The verifier verifies G3.inGroup(K) = true.
+ res = ReadEcPoint(G3, &(sig->K), sizeof(sig->K), K);
+ if (kEpidNoErr != res) {
+ if (kEpidBadArgErr == res) {
+ res = kEpidSigInvalid;
+ }
+ break;
+ }
+
+ // 11. The verifier verifies G1.inGroup(T1) = true.
+ res = ReadEcPoint(G1, &(sig->T1), sizeof(sig->T1), T1);
+ if (kEpidNoErr != res) {
+ if (kEpidBadArgErr == res) {
+ res = kEpidSigInvalid;
+ }
+ break;
+ }
+
+ // 12. The verifier verifies G1.inGroup(T2) = true.
+ res = ReadEcPoint(G1, &(sig->T2), sizeof(sig->T2), T2);
+ if (kEpidNoErr != res) {
+ if (kEpidBadArgErr == res) {
+ res = kEpidSigInvalid;
+ }
+ break;
+ }
+
+ // 13. The verifier verifies sx, sy, sa, sb, salpha, sbeta in [0, p-1].
+ if (memcmp(&sig->sx, &ctx->commit_values.p, sizeof(FpElemStr)) >= 0 ||
+ memcmp(&sig->sy, &ctx->commit_values.p, sizeof(FpElemStr)) >= 0 ||
+ memcmp(&sig->sa, &ctx->commit_values.p, sizeof(FpElemStr)) >= 0 ||
+ memcmp(&sig->sb, &ctx->commit_values.p, sizeof(FpElemStr)) >= 0 ||
+ memcmp(&sig->salpha, &ctx->commit_values.p, sizeof(FpElemStr)) >= 0 ||
+ memcmp(&sig->sbeta, &ctx->commit_values.p, sizeof(FpElemStr)) >= 0) {
+ res = kEpidSigInvalid;
+ break;
+ }
+
+ // 14. The verifier verifies that sf is an (at-most) 593-bit unsigned
+ // integer, in other words, sf < 2**593.
+
+ if (EPID11_SF_MAX_SIZE_BITS <=
+ OctStrBitSize(sig->sf.data, sizeof(sig->sf.data))) {
+ res = kEpidSigInvalid;
+ break;
+ }
+
+ // 15. The verifier computes nc = (-c) mod p.
+ res = ReadBigNum(&(sig->c), sizeof(sig->c), c_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = BigNumMod(c_bn, p_bn, nc_bn);
+ BREAK_ON_EPID_ERROR(res);
+ // (-c) mod p == p - (c mod p)
+ res = BigNumSub(p_bn, nc_bn, nc_bn);
+ BREAK_ON_EPID_ERROR(res);
+
+ // 16. The verifier computes nc_tick = (-c) mod p_tick.
+ res = BigNumMod(c_bn, p_tick_bn, nc_tick_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = BigNumSub(p_tick_bn, nc_tick_bn, nc_tick_bn);
+ BREAK_ON_EPID_ERROR(res);
+
+ // 17. The verifier computes nsx = (-sx) mod p.
+ res = ReadBigNum(&(sig->sx), sizeof(sig->sx), nsx_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = BigNumSub(p_bn, nsx_bn, nsx_bn);
+ BREAK_ON_EPID_ERROR(res);
+
+ // 18. The verifier computes syalpha = (sy + salpha) mod p.
+ res = ReadBigNum(&(sig->salpha), sizeof(sig->salpha), salpha_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = ReadBigNum(&(sig->sy), sizeof(sig->sy), syalpha_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = BigNumAdd(salpha_bn, syalpha_bn, syalpha_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = BigNumMod(syalpha_bn, p_bn, syalpha_bn);
+ BREAK_ON_EPID_ERROR(res);
+
+ // 19. The verifier computes R1 = G1.multiexp(h1, sa, h2, sb, T2, nc).
+ res = ReadBigNum(&sig->sa, sizeof(sig->sa), sa_bn);
+ BREAK_ON_EPID_ERROR(res);
+ res = ReadBigNum(&sig->sb, sizeof(sig->sb), sb_bn);
+ BREAK_ON_EPID_ERROR(res);
+ {
+ EcPoint const* points[3];
+ BigNum const* exponents[3];
+ points[0] = ctx->pub_key->h1;
+ points[1] = ctx->pub_key->h2;
+ points[2] = T2;
+ exponents[0] = sa_bn;
+ exponents[1] = sb_bn;
+ exponents[2] = nc_bn;
+ res = EcMultiExpBn(G1, points, exponents, COUNT_OF(points), R1);
+ BREAK_ON_EPID_ERROR(res);
+ }
+ // 20. The verifier computes
+ // R2 = G1.multiexp(h1, salpha, h2, sbeta, T2, nsx).
+ res = ReadBigNum(&sig->sbeta, sizeof(sig->sbeta), sbeta_bn);
+ BREAK_ON_EPID_ERROR(res);
+ {
+ EcPoint const* points[3];
+ BigNum const* exponents[3];
+ points[0] = ctx->pub_key->h1;
+ points[1] = ctx->pub_key->h2;
+ points[2] = T2;
+ exponents[0] = salpha_bn;
+ exponents[1] = sbeta_bn;
+ exponents[2] = nsx_bn;
+ res = EcMultiExpBn(G1, points, exponents, COUNT_OF(points), R2);
+ BREAK_ON_EPID_ERROR(res);
+ }
+ // 21. The verifier computes R3 = G3.multiexp(B, sf, K, nc_tick).
+ res = ReadBigNum(&sig->sf, sizeof(sig->sf), sf_tick_bn);
+ BREAK_ON_EPID_ERROR(res);
+ // G3.exp(B, sf) = G3(B, sf mod G3.order)
+ res = BigNumMod(sf_tick_bn, p_tick_bn, sf_tick_bn);
+ BREAK_ON_EPID_ERROR(res);
+ {
+ EcPoint const* points[2];
+ BigNum const* exponents[2];
+ points[0] = B;
+ points[1] = K;
+ exponents[0] = sf_tick_bn;
+ exponents[1] = nc_tick_bn;
+ res = EcMultiExpBn(G3, points, exponents, COUNT_OF(points), R3);
+ BREAK_ON_EPID_ERROR(res);
+ }
+
+ // 22. The verifier computes t1 = G1.multiexp(T1, nsx, g1, c).
+ res = BigNumMod(c_bn, p_bn, c_bn);
+ BREAK_ON_EPID_ERROR(res);
+ {
+ EcPoint const* points[2];
+ BigNum const* exponents[2];
+ points[0] = T1;
+ points[1] = g1;
+ exponents[0] = nsx_bn;
+ exponents[1] = c_bn;
+ res = EcMultiExpBn(G1, points, exponents, COUNT_OF(points), t1);
+ BREAK_ON_EPID_ERROR(res);
+ }
+ // 23. The verifier computes t2 = G1.exp(T1, nc).
+ res = WriteBigNum(nc_bn, sizeof(nc_str), &nc_str);
+ BREAK_ON_EPID_ERROR(res);
+ res = EcExp(G1, T1, &nc_str, t2);
+ BREAK_ON_EPID_ERROR(res);
+ // 24. The verifier computes R4 = pairing(t1, g2).
+ res = Epid11Pairing(ctx->epid11_params->pairing_state, t1, g2, R4);
+ BREAK_ON_EPID_ERROR(res);
+ // 25. The verifier computes t3 = pairing(t2, w).
+ res = Epid11Pairing(ctx->epid11_params->pairing_state, t2, w, t3);
+ BREAK_ON_EPID_ERROR(res);
+ // 26. The verifier computes R4 = GT.mul(R4, t3).
+ res = FfMul(GT, R4, t3, R4);
+ BREAK_ON_EPID_ERROR(res);
+ // 27. The verifier compute
+ // t3 = GT.multiexp(e12, sf, e22, syalpha, e2w, sa).
+ res = ReadBigNum(&sig->sf, sizeof(sig->sf), sf_bn);
+ BREAK_ON_EPID_ERROR(res);
+ {
+ FfElement const* points[3];
+ BigNum const* exponents[3];
+ points[0] = ctx->e12;
+ points[1] = ctx->e22;
+ points[2] = ctx->e2w;
+ exponents[0] = sf_bn;
+ exponents[1] = syalpha_bn;
+ exponents[2] = sa_bn;
+ res = FfMultiExpBn(GT, points, exponents, COUNT_OF(points), t3);
+ BREAK_ON_EPID_ERROR(res);
+ }
+ // 28. The verifier compute R4 = GT.mul(R4, t3).
+ res = FfMul(GT, R4, t3, R4);
+ BREAK_ON_EPID_ERROR(res);
+ // 29. The verifier compute t4 = Hash(p || g1 || g2 || g3 || h1 || h2 || w
+ // || B || K || T1 || T2 || R1 || R2 || R3 || R4).
+ // 30. The verifier verifies c = H(t4 || nd || mSize || m).
+ res = SetCalculatedEpid11CommitValues(&sig->B, &sig->K, &sig->T1, &sig->T2,
+ R1, R2, R3, R4, G1, G3, GT,
+ &commit_values);
+ BREAK_ON_EPID_ERROR(res);
+ res = CalculateEpid11CommitmentHash(&commit_values, msg, (uint32_t)msg_len,
+ &sig->nd, &c_hash);
+ BREAK_ON_EPID_ERROR(res);
+ if (0 != memcmp(&sig->c, &c_hash, sizeof(sig->c))) {
+ res = kEpidSigInvalid;
+ break;
+ }
+ res = kEpidNoErr;
+ } while (0);
+ EpidZeroMemory(&c_hash, sizeof(c_hash));
+
+ DeleteEcPoint(&T1);
+ DeleteEcPoint(&T2);
+ DeleteEcPoint(&R1);
+ DeleteEcPoint(&R2);
+ DeleteEcPoint(&t1);
+ DeleteEcPoint(&t2);
+
+ DeleteFfElement(&R4);
+ DeleteFfElement(&t3);
+
+ DeleteEcPoint(&B);
+ DeleteEcPoint(&K);
+ DeleteEcPoint(&R3);
+ DeleteEcPoint(&t5);
+
+ DeleteBigNum(&c_bn);
+ DeleteBigNum(&sa_bn);
+ DeleteBigNum(&sb_bn);
+ DeleteBigNum(&nc_bn);
+ DeleteBigNum(&salpha_bn);
+ DeleteBigNum(&sbeta_bn);
+ DeleteBigNum(&nsx_bn);
+ DeleteBigNum(&sf_bn);
+ DeleteBigNum(&sf_tick_bn);
+ DeleteBigNum(&nc_tick_bn);
+ DeleteBigNum(&syalpha_bn);
+
+ return (res);
+}
diff --git a/epid/verifier/1.1/unittests/check_privrl_entry-test.cc b/epid/verifier/1.1/unittests/check_privrl_entry-test.cc
new file mode 100644
index 0000000..ba0f6ea
--- /dev/null
+++ b/epid/verifier/1.1/unittests/check_privrl_entry-test.cc
@@ -0,0 +1,83 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Epid11CheckPrivRlEntry unit tests.
+ */
+
+#include "gtest/gtest.h"
+
+extern "C" {
+#include "epid/verifier/1.1/api.h"
+}
+
+#include "epid/verifier/1.1/unittests/verifier-testhelper.h"
+#include "epid/common-testhelper/1.1/verifier_wrapper-testhelper.h"
+
+namespace {
+
+TEST_F(Epid11VerifierTest, CheckPrivRlEntryFailsGivenNullPtr) {
+ // check ctx, sig, f for NULL
+ auto& pub_key = this->kPubKeyStr;
+ auto& priv_rl = this->kGrpXPrivRl;
+ auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ FpElemStr fp_str = ((Epid11PrivRl const*)priv_rl.data())->f[0];
+ Epid11BasicSignature basic_signature =
+ ((Epid11Signature const*)sig.data())->sigma0;
+
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11CheckPrivRlEntry(nullptr, &basic_signature, &fp_str));
+ EXPECT_EQ(kEpidBadArgErr, Epid11CheckPrivRlEntry(verifier, nullptr, &fp_str));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11CheckPrivRlEntry(verifier, &basic_signature, nullptr));
+}
+
+TEST_F(Epid11VerifierTest, CheckPrivRlEntryFailsGivenRevokedPrivKey) {
+ // test a revoked priv key
+ // check ctx, sig, f for NULL
+ auto& pub_key = this->kPubKeyStr;
+ auto& priv_rl = this->kGrpXPrivRl;
+ // signed using revoked key
+ auto& sig = this->kSigGrpXRevokedPrivKey000Sha256Bsn0Msg0;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ FpElemStr fp_str = ((Epid11PrivRl const*)priv_rl.data())->f[0];
+ Epid11BasicSignature basic_signature =
+ ((Epid11Signature const*)sig.data())->sigma0;
+
+ EXPECT_EQ(kEpidSigRevokedInPrivRl,
+ Epid11CheckPrivRlEntry(verifier, &basic_signature, &fp_str));
+}
+
+TEST_F(Epid11VerifierTest, CheckPrivRlEntrySucceedsGivenUnRevokedPrivKey) {
+ // test a non revoked priv key
+ auto& pub_key = this->kPubKeyStr;
+ auto& priv_rl = this->kGrpXPrivRl;
+ // signed using un revoked key
+ auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ FpElemStr fp_str = ((Epid11PrivRl const*)priv_rl.data())->f[0];
+ Epid11BasicSignature basic_signature =
+ ((Epid11Signature const*)sig.data())->sigma0;
+
+ EXPECT_EQ(kEpidNoErr,
+ Epid11CheckPrivRlEntry(verifier, &basic_signature, &fp_str));
+}
+} // namespace
diff --git a/epid/verifier/1.1/unittests/context-test.cc b/epid/verifier/1.1/unittests/context-test.cc
new file mode 100644
index 0000000..798f636
--- /dev/null
+++ b/epid/verifier/1.1/unittests/context-test.cc
@@ -0,0 +1,477 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Epid11VerifierCreate unit tests.
+ */
+
+#include <cstring>
+
+#include "gtest/gtest.h"
+
+extern "C" {
+#include "epid/verifier/1.1/api.h"
+#include "epid/verifier/1.1/src/context.h"
+}
+
+#include "epid/verifier/1.1/unittests/verifier-testhelper.h"
+#include "epid/common-testhelper/errors-testhelper.h"
+#include "epid/common-testhelper/1.1/verifier_wrapper-testhelper.h"
+bool operator==(Epid11VerifierPrecomp const& lhs,
+ Epid11VerifierPrecomp const& rhs) {
+ return 0 == std::memcmp(&lhs, &rhs, sizeof(lhs));
+}
+namespace {
+//////////////////////////////////////////////////////////////////////////
+// Epid11VerifierCreate Tests
+TEST_F(Epid11VerifierTest, CreateFailsGivenNullPointer) {
+ Epid11VerifierCtx* ctx = nullptr;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierCreate(&this->kPubKeyStr, &this->kVerifierPrecompStr,
+ nullptr));
+ Epid11VerifierDelete(&ctx);
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierCreate(nullptr, &this->kVerifierPrecompStr, &ctx));
+ Epid11VerifierDelete(&ctx);
+}
+TEST_F(Epid11VerifierTest, CreateSucceedsGivenNullPrecomp) {
+ Epid11VerifierCtx* ctx = nullptr;
+ EXPECT_EQ(kEpidNoErr, Epid11VerifierCreate(&this->kPubKeyStr, nullptr, &ctx));
+ Epid11VerifierDelete(&ctx);
+}
+TEST_F(Epid11VerifierTest, CreateSucceedsGivenValidPrecomp) {
+ Epid11VerifierCtx* ctx = nullptr;
+ EXPECT_EQ(kEpidNoErr, Epid11VerifierCreate(&this->kPubKeyStr,
+ &this->kVerifierPrecompStr, &ctx));
+ Epid11VerifierDelete(&ctx);
+}
+TEST_F(Epid11VerifierTest, CreateFailsGivenInvalidPubkey) {
+ Epid11VerifierCtx* ctx = nullptr;
+ Epid11GroupPubKey pubkey_with_bad_h1 = this->kPubKeyStr;
+ pubkey_with_bad_h1.h1.x.data.data[31]++; // munge h1 so not in G1
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierCreate(&pubkey_with_bad_h1, nullptr, &ctx));
+ Epid11VerifierDelete(&ctx);
+ Epid11GroupPubKey pubkey_with_bad_h2 = this->kPubKeyStr;
+ pubkey_with_bad_h2.h2.x.data.data[31]++; // munge h2 so not in G1
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierCreate(&pubkey_with_bad_h2, nullptr, &ctx));
+ Epid11VerifierDelete(&ctx);
+ Epid11GroupPubKey pubkey_with_bad_w = this->kPubKeyStr;
+ pubkey_with_bad_w.w.x[0].data.data[31]++; // munge w so not in G2
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierCreate(&pubkey_with_bad_w, nullptr, &ctx));
+ Epid11VerifierDelete(&ctx);
+}
+TEST_F(Epid11VerifierTest, CreateFailsGivenBadGroupIdInPrecomp) {
+ Epid11VerifierCtx* ctx = nullptr;
+ // tweak GID
+ auto verifier_precomp = this->kVerifierPrecompStr;
+ verifier_precomp.gid.data[0] = ~verifier_precomp.gid.data[0];
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierCreate(&this->kPubKeyStr, &verifier_precomp, &ctx));
+}
+//////////////////////////////////////////////////////////////////////////
+// Epid11VerifierDelete Tests
+TEST_F(Epid11VerifierTest, DeleteNullsVerifierCtx) {
+ Epid11VerifierCtx* ctx = nullptr;
+ THROW_ON_EPIDERR(Epid11VerifierCreate(&this->kPubKeyStr, nullptr, &ctx));
+ Epid11VerifierDelete(&ctx);
+ EXPECT_EQ(nullptr, ctx);
+}
+TEST_F(Epid11VerifierTest, DeleteWorksGivenNullVerifierCtx) {
+ Epid11VerifierDelete(nullptr);
+ Epid11VerifierCtx* ctx = nullptr;
+ Epid11VerifierDelete(&ctx);
+}
+
+//////////////////////////////////////////////////////////////////////////
+// Epid11VerifierWritePrecomp
+TEST_F(Epid11VerifierTest, WritePrecompFailsGivenNullPointer) {
+ Epid11VerifierPrecomp precomp;
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11VerifierCtx* ctx = verifier;
+ EXPECT_EQ(kEpidBadArgErr, Epid11VerifierWritePrecomp(nullptr, &precomp));
+ EXPECT_EQ(kEpidBadArgErr, Epid11VerifierWritePrecomp(ctx, nullptr));
+}
+TEST_F(Epid11VerifierTest, WritePrecompSucceedGivenValidArgument) {
+ Epid11VerifierPrecomp precomp;
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11VerifierCtx* ctx = verifier;
+ EXPECT_EQ(kEpidNoErr, Epid11VerifierWritePrecomp(ctx, &precomp));
+ Epid11VerifierPrecomp expected_precomp = this->kVerifierPrecompStr;
+ EXPECT_EQ(expected_precomp, precomp);
+
+ Epid11VerifierCtxObj verifier2(this->kPubKeyStr);
+ Epid11VerifierCtx* ctx2 = verifier2;
+ EXPECT_EQ(kEpidNoErr, Epid11VerifierWritePrecomp(ctx2, &precomp));
+ EXPECT_EQ(expected_precomp, precomp);
+}
+
+//////////////////////////////////////////////////////////////////////////
+// Epid11VerifierSetPrivRl
+TEST_F(Epid11VerifierTest, SetPrivRlFailsGivenNullPointer) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11PrivRl prl = {0};
+ prl.gid = this->kPubKeyStr.gid;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetPrivRl(nullptr, &prl, sizeof(prl)));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetPrivRl(verifier, nullptr, sizeof(prl)));
+}
+
+TEST_F(Epid11VerifierTest, SetPrivRlFailsGivenZeroSize) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11PrivRl prl = {0};
+ prl.gid = this->kPubKeyStr.gid;
+ EXPECT_EQ(kEpidBadArgErr, Epid11VerifierSetPrivRl(verifier, &prl, 0));
+}
+
+// Size parameter must be at least big enough for n1 == 0 case
+TEST_F(Epid11VerifierTest, SetPrivRlFailsGivenTooSmallSize) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11PrivRl prl = {0};
+ prl.gid = this->kPubKeyStr.gid;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetPrivRl(verifier, &prl,
+ (sizeof(prl) - sizeof(prl.f)) - 1));
+ prl.n1 = this->kOctStr32_1;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetPrivRl(verifier, &prl,
+ (sizeof(prl) - sizeof(prl.f)) - 1));
+}
+
+// Size parameter must be cross-checked with n1 value in priv_rl
+TEST_F(Epid11VerifierTest, SetPrivRlFailsGivenN1TooBigForSize) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11PrivRl prl = {0};
+ prl.gid = this->kPubKeyStr.gid;
+ prl.n1 = this->kOctStr32_1;
+ EXPECT_EQ(kEpidBadArgErr, Epid11VerifierSetPrivRl(
+ verifier, &prl, sizeof(prl) - sizeof(prl.f)));
+}
+
+TEST_F(Epid11VerifierTest, SetPrivRlFailsGivenN1TooSmallForSize) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11PrivRl prl = {0};
+ prl.gid = this->kPubKeyStr.gid;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetPrivRl(verifier, &prl, sizeof(prl)));
+}
+
+TEST_F(Epid11VerifierTest, SetPrivRlPassesGivenDefaultPrivRl) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11PrivRl prl = {0};
+ prl.gid = this->kPubKeyStr.gid;
+ EXPECT_EQ(kEpidNoErr, Epid11VerifierSetPrivRl(verifier, &prl,
+ sizeof(prl) - sizeof(prl.f)));
+}
+
+TEST_F(Epid11VerifierTest, SetPrivRlPassesGivenPrivRlWithSingleElement) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11PrivRl prl = {0};
+ prl.gid = this->kPubKeyStr.gid;
+ prl.n1 = this->kOctStr32_1;
+ EXPECT_EQ(kEpidNoErr, Epid11VerifierSetPrivRl(verifier, &prl, sizeof(prl)));
+}
+
+TEST_F(Epid11VerifierTest, SetPrivRlFailsGivenBadGroupId) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11PrivRl prl = {0};
+ prl.gid = this->kPubKeyStr.gid;
+ prl.gid.data[0] = ~prl.gid.data[0];
+ prl.n1 = this->kOctStr32_1;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetPrivRl(verifier, &prl, sizeof(prl)));
+}
+
+TEST_F(Epid11VerifierTest, SetPrivRlFailsGivenOldVersion) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11PrivRl prl = {0};
+ prl.gid = this->kPubKeyStr.gid;
+ prl.version = this->kOctStr32_1;
+ EXPECT_EQ(kEpidNoErr, Epid11VerifierSetPrivRl(verifier, &prl,
+ sizeof(prl) - sizeof(prl.f)));
+ OctStr32 octstr32_0 = {0x00, 0x00, 0x00, 0x00};
+ prl.version = octstr32_0;
+ EXPECT_EQ(kEpidBadArgErr, Epid11VerifierSetPrivRl(
+ verifier, &prl, sizeof(prl) - sizeof(prl.f)));
+}
+
+//////////////////////////////////////////////////////////////////////////
+// Epid11VerifierSetSigRl
+TEST_F(Epid11VerifierTest, SetSigRlFailsGivenNullPointer) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11SigRl* empty_sig_rl = (Epid11SigRl*)this->kEmptySigRl.data();
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetSigRl(nullptr, empty_sig_rl, sizeof(Epid11SigRl)));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetSigRl(verifier, nullptr, sizeof(Epid11SigRl)));
+}
+
+TEST_F(Epid11VerifierTest, SetSigRlFailsGivenZeroSize) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11SigRl* empty_sig_rl = (Epid11SigRl*)this->kEmptySigRl.data();
+ EXPECT_EQ(kEpidBadArgErr, Epid11VerifierSetSigRl(verifier, empty_sig_rl, 0));
+}
+
+// Size parameter must be at least big enough for n2 == 0 case
+TEST_F(Epid11VerifierTest, SetSigRlFailsGivenTooSmallSize) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ std::vector<uint8_t> empty_sig_rl_buf(this->kEmptySigRl);
+ Epid11SigRl* empty_sig_rl = (Epid11SigRl*)empty_sig_rl_buf.data();
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetSigRl(
+ verifier, empty_sig_rl,
+ (sizeof(*empty_sig_rl) - sizeof(empty_sig_rl->bk)) - 1));
+ empty_sig_rl->n2 = this->kOctStr32_1;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetSigRl(
+ verifier, empty_sig_rl,
+ (sizeof(*empty_sig_rl) - sizeof(empty_sig_rl->bk)) - 1));
+}
+
+TEST_F(Epid11VerifierTest, SetSigRlFailsGivenN2TooBigForSize) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ std::vector<uint8_t> empty_sig_rl_buf(this->kEmptySigRl);
+ Epid11SigRl* empty_sig_rl = (Epid11SigRl*)empty_sig_rl_buf.data();
+ empty_sig_rl->n2 = this->kOctStr32_1;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11VerifierSetSigRl(verifier, empty_sig_rl,
+ sizeof(*empty_sig_rl) - sizeof(empty_sig_rl->bk)));
+}
+
+TEST_F(Epid11VerifierTest, SetSigRlFailsGivenN2TooSmallForSize) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ std::vector<uint8_t> empty_sig_rl_buf(this->kEmptySigRl);
+ Epid11SigRl* empty_sig_rl = (Epid11SigRl*)empty_sig_rl_buf.data();
+ EXPECT_EQ(kEpidBadArgErr, Epid11VerifierSetSigRl(verifier, empty_sig_rl,
+ sizeof(*empty_sig_rl)));
+}
+
+TEST_F(Epid11VerifierTest, SetSigRlWorksGivenSigRlWithNoElements) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ std::vector<uint8_t> empty_sig_rl_buf(this->kEmptySigRl);
+ Epid11SigRl* empty_sig_rl = (Epid11SigRl*)empty_sig_rl_buf.data();
+ size_t sig_rl_size = empty_sig_rl_buf.size() * sizeof(uint8_t);
+ EXPECT_EQ(kEpidNoErr,
+ Epid11VerifierSetSigRl(verifier, empty_sig_rl, sig_rl_size));
+}
+
+TEST_F(Epid11VerifierTest, SetSigRlWorksGivenSigRlWithOneElement) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+
+ uint8_t sig_rl_data_n2_one[] = {
+ // gid
+ 0x00, 0x00, 0x00, 0x7b,
+ // rev
+ 0x00, 0x00, 0x00, 0x7b,
+ // n2
+ 0x00, 0x00, 0x00, 0x01,
+ // bks
+ // bk1
+ 0x67, 0x58, 0xb2, 0x9c, 0xad, 0x61, 0x1f, 0xfb, 0x74, 0x23, 0xea, 0x40,
+ 0xe9, 0x66, 0x26, 0xb0, 0x43, 0xdc, 0x7e, 0xc7, 0x48, 0x88, 0x56, 0x59,
+ 0xf3, 0x35, 0x9f, 0xdb, 0xfa, 0xa2, 0x49, 0x51, 0x85, 0x35, 0x42, 0x50,
+ 0x8e, 0x79, 0x79, 0xc0, 0x6c, 0xcc, 0x39, 0x0b, 0xad, 0x3b, 0x39, 0x33,
+ 0xae, 0xb2, 0xa1, 0xc5, 0x28, 0x6f, 0x48, 0x3a, 0xd2, 0x63, 0x5d, 0xfb,
+ 0x1b, 0x1f, 0x8a, 0x63, 0x84, 0xdc, 0x2d, 0xad, 0x3b, 0x98, 0x3f, 0xc3,
+ 0x8e, 0x18, 0xd7, 0xea, 0x18, 0x50, 0x0c, 0x50, 0x42, 0x77, 0xb2, 0x59,
+ 0xf5, 0xd5, 0x38, 0xc3, 0x8d, 0x57, 0xf4, 0xe7, 0xb8, 0x74, 0x5a, 0x9e,
+ 0x32, 0x75, 0xd1, 0xb4, 0xb3, 0x64, 0xbc, 0x23, 0xcd, 0x98, 0x29, 0x7a,
+ 0x77, 0x51, 0xfc, 0x26, 0x81, 0x41, 0x9b, 0xf6, 0x21, 0xad, 0xc1, 0xd9,
+ 0xab, 0x30, 0x25, 0x8d, 0x0c, 0x3b, 0x62, 0xe2};
+ Epid11SigRl* sig_rl = reinterpret_cast<Epid11SigRl*>(sig_rl_data_n2_one);
+ EXPECT_EQ(kEpidNoErr,
+ Epid11VerifierSetSigRl(verifier, sig_rl, sizeof(*sig_rl)));
+}
+
+TEST_F(Epid11VerifierTest, SetSigRlWorksGivenSigRlWithTwoElement) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11VerifierCtx* ctx = verifier;
+ Epid11SigRl const* sig_rl =
+ reinterpret_cast<Epid11SigRl const*>(this->kSigRl.data());
+ size_t sig_rl_size = this->kSigRl.size() * sizeof(uint8_t);
+ EXPECT_EQ(kEpidNoErr, Epid11VerifierSetSigRl(ctx, sig_rl, sig_rl_size));
+}
+
+TEST_F(Epid11VerifierTest, SetSigRlFailsGivenBadGroupId) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ std::vector<uint8_t> empty_sig_rl_buf(this->kEmptySigRl);
+ Epid11SigRl* empty_sig_rl = (Epid11SigRl*)empty_sig_rl_buf.data();
+ empty_sig_rl->gid.data[0] = ~empty_sig_rl->gid.data[0];
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11VerifierSetSigRl(verifier, empty_sig_rl,
+ sizeof(*empty_sig_rl) - sizeof(empty_sig_rl->bk)));
+}
+
+TEST_F(Epid11VerifierTest, SetSigRlFailsGivenOldVersion) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ std::vector<uint8_t> empty_sig_rl_buf(this->kEmptySigRl);
+ Epid11SigRl* empty_sig_rl = (Epid11SigRl*)empty_sig_rl_buf.data();
+ empty_sig_rl->version = this->kOctStr32_1;
+ EXPECT_EQ(kEpidNoErr, Epid11VerifierSetSigRl(
+ verifier, empty_sig_rl,
+ sizeof(*empty_sig_rl) - sizeof(empty_sig_rl->bk)));
+ OctStr32 octstr32_0 = {0x00, 0x00, 0x00, 0x00};
+ empty_sig_rl->version = octstr32_0;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11VerifierSetSigRl(verifier, empty_sig_rl,
+ sizeof(*empty_sig_rl) - sizeof(empty_sig_rl->bk)));
+}
+
+//////////////////////////////////////////////////////////////////////////
+// Epid11VerifierSetGroupRl
+TEST_F(Epid11VerifierTest, SetGroupRlFailsGivenNullPointer) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ std::vector<uint8_t> group_rl(this->kGroupRl3GidBuf);
+ Epid11GroupRl* grl = (Epid11GroupRl*)group_rl.data();
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetGroupRl(nullptr, grl, group_rl.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetGroupRl(verifier, nullptr, group_rl.size()));
+}
+
+TEST_F(Epid11VerifierTest, SetGroupRlFailsGivenSizeZero) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ std::vector<uint8_t> group_rl(this->kGroupRl3GidBuf);
+ Epid11GroupRl* grl = (Epid11GroupRl*)group_rl.data();
+ EXPECT_EQ(kEpidBadArgErr, Epid11VerifierSetGroupRl(verifier, grl, 0));
+}
+
+TEST_F(Epid11VerifierTest, SetGroupRlFailsGivenSizeTooSmall) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ std::vector<uint8_t> group_rl(this->kGroupRl3GidBuf);
+ Epid11GroupRl* grl = (Epid11GroupRl*)group_rl.data();
+ size_t grl_size = group_rl.size() - sizeof(grl->gid[0]);
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetGroupRl(verifier, grl, grl_size - 1));
+}
+
+TEST_F(Epid11VerifierTest, SetGroupRlFailsGivenSizeTooLarge) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ std::vector<uint8_t> group_rl(this->kGroupRl3GidBuf);
+ Epid11GroupRl* grl = (Epid11GroupRl*)group_rl.data();
+ size_t grl_size = group_rl.size() - sizeof(grl->gid[0]);
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetGroupRl(verifier, grl, grl_size + 1));
+}
+
+TEST_F(Epid11VerifierTest, SetGroupRlFailsGivenN3ZeroAndGroupRLSizeTooBig) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ std::vector<uint8_t> group_rl_3gid_n0_buf(this->kGroupRl3GidBuf);
+ group_rl_3gid_n0_buf[7] = 0x00;
+ Epid11GroupRl* group_rl = (Epid11GroupRl*)group_rl_3gid_n0_buf.data();
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetGroupRl(verifier, group_rl,
+ group_rl_3gid_n0_buf.size()));
+}
+
+TEST_F(Epid11VerifierTest, SetGroupRlFailsGivenN3TooSmall) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ std::vector<uint8_t> group_rl_3gid_n2_buf(this->kGroupRl3GidBuf);
+ group_rl_3gid_n2_buf[7] = 0x02;
+ Epid11GroupRl* group_rl = (Epid11GroupRl*)group_rl_3gid_n2_buf.data();
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetGroupRl(verifier, group_rl,
+ group_rl_3gid_n2_buf.size()));
+}
+
+TEST_F(Epid11VerifierTest, SetGroupRlFailsGivenN3TooLarge) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ std::vector<uint8_t> group_rl_3gid_n4_buf(this->kGroupRl3GidBuf);
+ group_rl_3gid_n4_buf[7] = 0x04;
+ Epid11GroupRl* group_rl = (Epid11GroupRl*)group_rl_3gid_n4_buf.data();
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetGroupRl(verifier, group_rl,
+ group_rl_3gid_n4_buf.size()));
+}
+
+TEST_F(Epid11VerifierTest, SetGroupRlSucceedsGivenEmptyRL) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11GroupRl* empty_grl = (Epid11GroupRl*)this->kGroupRlEmptyBuf.data();
+ size_t grl_size = this->kGroupRlEmptyBuf.size();
+ EXPECT_EQ(kEpidNoErr,
+ Epid11VerifierSetGroupRl(verifier, empty_grl, grl_size));
+}
+TEST_F(Epid11VerifierTest, SetGroupRlSucceedsGivenRLWith3gid) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11GroupRl* group_rl = (Epid11GroupRl*)this->kGroupRl3GidBuf.data();
+ EXPECT_EQ(kEpidNoErr, Epid11VerifierSetGroupRl(verifier, group_rl,
+ this->kGroupRl3GidBuf.size()));
+}
+
+TEST_F(Epid11VerifierTest, SetGroupRlFailsGivenOldVersion) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11GroupRl* group_rl = (Epid11GroupRl*)this->kGroupRl3GidBuf.data();
+ EXPECT_EQ(kEpidNoErr, Epid11VerifierSetGroupRl(verifier, group_rl,
+ this->kGroupRl3GidBuf.size()));
+ Epid11GroupRl* empty_grl = (Epid11GroupRl*)this->kGroupRlEmptyBuf.data();
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetGroupRl(verifier, empty_grl,
+ this->kGroupRlEmptyBuf.size()));
+}
+
+//////////////////////////////////////////////////////////////////////////
+// Epid11VerifierSetBasename
+TEST_F(Epid11VerifierTest, DefaultBasenameIsNull) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11VerifierCtx* ctx = verifier;
+ EXPECT_EQ(nullptr, ctx->basename);
+}
+TEST_F(Epid11VerifierTest, SetBasenameFailsGivenNullContext) {
+ auto& basename = this->kBsn0;
+ EXPECT_EQ(kEpidBadArgErr, Epid11VerifierSetBasename(nullptr, basename.data(),
+ basename.size()));
+}
+TEST_F(Epid11VerifierTest, SetBasenameFailsGivenNullBasenameAndNonzeroLength) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11VerifierCtx* ctx = verifier;
+ auto& basename = this->kBsn0;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifierSetBasename(ctx, nullptr, basename.size()));
+}
+TEST_F(Epid11VerifierTest, SetBasenameSucceedsGivenValidParameters) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11VerifierCtx* ctx = verifier;
+ auto& basename = this->kBsn0;
+ EXPECT_EQ(kEpidNoErr,
+ Epid11VerifierSetBasename(ctx, basename.data(), basename.size()));
+ EXPECT_EQ(basename.size(), ctx->basename_len);
+ EXPECT_EQ(0, memcmp(basename.data(), ctx->basename, ctx->basename_len));
+ EXPECT_NE(nullptr, ctx->basename_hash);
+}
+TEST_F(Epid11VerifierTest, SetBasenameAcceptsZeroLengthBasename) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11VerifierCtx* ctx = verifier;
+ EXPECT_EQ(kEpidNoErr, Epid11VerifierSetBasename(ctx, "", 0));
+ EXPECT_EQ((size_t)0, ctx->basename_len);
+ EXPECT_NE(nullptr, ctx->basename_hash);
+}
+TEST_F(Epid11VerifierTest, SetBasenameResetsBasenameGivenNullBasename) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ Epid11VerifierCtx* ctx = verifier;
+ auto& basename = this->kBsn0;
+ THROW_ON_EPIDERR(
+ Epid11VerifierSetBasename(ctx, basename.data(), basename.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(ctx, nullptr, 0));
+ EXPECT_EQ(nullptr, ctx->basename_hash);
+}
+} // namespace
diff --git a/epid/verifier/1.1/unittests/nrverify-test.cc b/epid/verifier/1.1/unittests/nrverify-test.cc
new file mode 100644
index 0000000..41d9851
--- /dev/null
+++ b/epid/verifier/1.1/unittests/nrverify-test.cc
@@ -0,0 +1,219 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+
+/*!
+* \file
+* \brief Epid11NrVerify unit tests.
+*/
+
+#include "gtest/gtest.h"
+
+extern "C" {
+#include "epid/verifier/1.1/api.h"
+#include "epid/verifier/1.1/src/context.h"
+#include "epid/common/1.1/types.h"
+}
+
+#include "epid/verifier/1.1/unittests/verifier-testhelper.h"
+#include "epid/common-testhelper/errors-testhelper.h"
+#include "epid/common-testhelper/1.1/verifier_wrapper-testhelper.h"
+
+namespace {
+
+/////////////////////////////////////////////////////////////////////////
+// Simple Errors
+
+TEST_F(Epid11VerifierTest, NrVerifyFailsGivenNullParameters) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ Epid11Signature const* epid_signature =
+ reinterpret_cast<Epid11Signature const*>(
+ this->kSigGrpXMember0Sha256RandbaseMsg0N2One.data());
+ Epid11SigRl const* sig_rl =
+ reinterpret_cast<Epid11SigRl const*>(this->kSigRl.data());
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11NrVerify(nullptr, &epid_signature->sigma0, this->kMsg0.data(),
+ this->kMsg0.size(), &sig_rl->bk[0],
+ &epid_signature->sigma[0]));
+
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11NrVerify(verifier, nullptr, this->kMsg0.data(), this->kMsg0.size(),
+ &sig_rl->bk[0], &epid_signature->sigma[0]));
+
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11NrVerify(verifier, &epid_signature->sigma0, nullptr,
+ this->kMsg0.size(), &sig_rl->bk[0],
+ &epid_signature->sigma[0]));
+
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11NrVerify(verifier, &epid_signature->sigma0, this->kMsg0.data(),
+ this->kMsg0.size(), nullptr, &epid_signature->sigma[0]));
+
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11NrVerify(verifier, &epid_signature->sigma0, this->kMsg0.data(),
+ this->kMsg0.size(), &sig_rl->bk[0], nullptr));
+}
+
+/////////////////////////////////////////////////////////////////////
+// Reject
+TEST_F(Epid11VerifierTest, NrVerifyRejectsTotalMsgSizeOutOfRangeOfInt) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ Epid11Signature const* epid_signature =
+ reinterpret_cast<Epid11Signature const*>(
+ this->kSigGrpXMember0Sha256RandbaseMsg0N2One.data());
+ Epid11SigRl const* sig_rl =
+ reinterpret_cast<Epid11SigRl const*>(this->kSigRl.data());
+ // Since before hashing some other data will be concatenated to commit
+ // message, passing msg with size==UINT_MAX is causes out of range for
+ // this concatenated msg
+ Epid11NrProof nr_proof = epid_signature->sigma[0];
+ EXPECT_EQ(kEpidBadArgErr, Epid11NrVerify(verifier, &epid_signature->sigma0,
+ this->kMsg0.data(), 0xffffffff,
+ &sig_rl->bk[0], &nr_proof));
+#if (SIZE_MAX >= 0x100000001) // When size_t value allowed to be 0x100000001
+ EXPECT_EQ(kEpidBadArgErr, Epid11NrVerify(verifier, &epid_signature->sigma0,
+ this->kMsg0.data(), 0x100000001,
+ &sig_rl->bk[0], &nr_proof));
+#endif
+}
+TEST_F(Epid11VerifierTest, NrVerifyRejectsSigWithTNotInG3) {
+ // 4.2.2 step 2 - The verifier verifies that G3.inGroup(T) = true.
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ Epid11Signature const* epid_signature =
+ reinterpret_cast<Epid11Signature const*>(
+ this->kSigGrpXMember0Sha256RandbaseMsg0N2One.data());
+ Epid11SigRl const* sig_rl =
+ reinterpret_cast<Epid11SigRl const*>(this->kSigRl.data());
+ Epid11NrProof nr_proof = epid_signature->sigma[0];
+ nr_proof.T.x.data.data[0]++;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11NrVerify(verifier, &epid_signature->sigma0, this->kMsg0.data(),
+ this->kMsg0.size(), &sig_rl->bk[0], &nr_proof));
+}
+
+TEST_F(Epid11VerifierTest, NrVerifyRejectsSigWithTIdentityOfG3) {
+ // 4.2.2 step 3 - The verifier verifies that G3.isIdentity(T) = false.
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ Epid11Signature const* epid_signature =
+ reinterpret_cast<Epid11Signature const*>(
+ this->kSigGrpXMember0Sha256RandbaseMsg0N2One.data());
+ Epid11SigRl const* sig_rl =
+ reinterpret_cast<Epid11SigRl const*>(this->kSigRl.data());
+ Epid11NrProof nr_proof = epid_signature->sigma[0];
+ nr_proof.T = this->kG3IdentityStr;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11NrVerify(verifier, &epid_signature->sigma0, this->kMsg0.data(),
+ this->kMsg0.size(), &sig_rl->bk[0], &nr_proof));
+}
+
+TEST_F(Epid11VerifierTest, NrVerifyRejectsSigWithSmuNotInRange) {
+ // 4.2.2 step 4 - The verifier verifies that smu, snu in [0, p'-1].
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ Epid11Signature const* epid_signature =
+ reinterpret_cast<Epid11Signature const*>(
+ this->kSigGrpXMember0Sha256RandbaseMsg0N2One.data());
+ Epid11SigRl const* sig_rl =
+ reinterpret_cast<Epid11SigRl const*>(this->kSigRl.data());
+ Epid11NrProof nr_proof = epid_signature->sigma[0];
+ nr_proof.smu.data = this->kParamsStr.p.data;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11NrVerify(verifier, &epid_signature->sigma0, this->kMsg0.data(),
+ this->kMsg0.size(), &sig_rl->bk[0], &nr_proof));
+}
+
+TEST_F(Epid11VerifierTest, NrVerifyRejectsSigWithSnuNotInRange) {
+ // 4.2.2 step 4 - The verifier verifies that smu, snu in [0, p'-1].
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ Epid11Signature const* epid_signature =
+ reinterpret_cast<Epid11Signature const*>(
+ this->kSigGrpXMember0Sha256RandbaseMsg0N2One.data());
+ Epid11SigRl const* sig_rl =
+ reinterpret_cast<Epid11SigRl const*>(this->kSigRl.data());
+ Epid11NrProof nr_proof = epid_signature->sigma[0];
+ nr_proof.snu.data = this->kParamsStr.p.data;
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ Epid11NrVerify(verifier, &epid_signature->sigma0, this->kMsg0.data(),
+ this->kMsg0.size(), &sig_rl->bk[0], &nr_proof));
+}
+
+// 4.2.2 step 5 - The verifier computes nc = (- c) mod p'.
+// This Step is not testable
+
+// 4.2.2 step 6 - The verifier computes R1 = G3.multiExp(K, smu, B, snu).
+// This Step is not testable
+
+// 4.2.2 step 7 - The verifier computes R2 = G3.multiExp(K', smu, B', snu,
+// T, nc).
+// This Step is not testable
+
+TEST_F(Epid11VerifierTest, NrVerifyRejectsSigWithInvalidCommitment) {
+ // 4.2.2 step 8 - The verifier verifies c = Hash(p' || g3 || B || K || B' ||
+ // K' || T || R1 || R2 || mSize || m).
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ Epid11Signature const* epid_signature =
+ reinterpret_cast<Epid11Signature const*>(
+ this->kSigGrpXMember0Sha256RandbaseMsg0N2One.data());
+ Epid11SigRl const* sig_rl =
+ reinterpret_cast<Epid11SigRl const*>(this->kSigRl.data());
+ std::vector<uint8_t> test_msg = this->kMsg0;
+ test_msg[0]++;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11NrVerify(verifier, &epid_signature->sigma0, test_msg.data(),
+ test_msg.size(), &sig_rl->bk[0],
+ &epid_signature->sigma[0]));
+}
+
+TEST_F(Epid11VerifierTest, NrVerifyRejectsSigWithMismatchCommitmentSize) {
+ // 4.2.2 step 8 - The verifier verifies c = Hash(p' || g3 || B || K || B' ||
+ // K' || T || R1 || R2 || mSize || m).
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ Epid11Signature const* epid_signature =
+ reinterpret_cast<Epid11Signature const*>(
+ this->kSigGrpXMember0Sha256RandbaseMsg0N2One.data());
+ Epid11SigRl const* sig_rl =
+ reinterpret_cast<Epid11SigRl const*>(this->kSigRl.data());
+ std::vector<uint8_t> test_msg = this->kMsg0;
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11NrVerify(verifier, &epid_signature->sigma0, test_msg.data(),
+ test_msg.size() - 1, &sig_rl->bk[0],
+ &epid_signature->sigma[0]));
+}
+/////////////////////////////////////////////////////////////////////
+// Accept
+// 4.2.2 step 9 - If all the above verifications succeed, the verifier
+// outputs true. If any of the above verifications fails,
+// the verifier aborts and outputs false
+
+TEST_F(Epid11VerifierTest, NrVerifyAcceptsSigWithRandomBaseName) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ Epid11Signature const* epid_signature =
+ reinterpret_cast<Epid11Signature const*>(
+ this->kSigGrpXMember0Sha256RandbaseMsg0N2One.data());
+ Epid11SigRl const* sig_rl =
+ reinterpret_cast<Epid11SigRl const*>(this->kSigRl.data());
+ EXPECT_EQ(kEpidSigValid,
+ Epid11NrVerify(verifier, &epid_signature->sigma0,
+ this->kMsg0.data(), this->kMsg0.size(),
+ &sig_rl->bk[0], &epid_signature->sigma[0]));
+}
+
+} // namespace
diff --git a/epid/verifier/1.1/unittests/sigs_linked-test.cc b/epid/verifier/1.1/unittests/sigs_linked-test.cc
new file mode 100644
index 0000000..a32a470
--- /dev/null
+++ b/epid/verifier/1.1/unittests/sigs_linked-test.cc
@@ -0,0 +1,71 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Epid11AreSigsLinkable unit tests.
+ */
+
+#include "gtest/gtest.h"
+
+extern "C" {
+#include "epid/verifier/1.1/api.h"
+}
+
+#include "epid/verifier/1.1/unittests/verifier-testhelper.h"
+
+namespace {
+
+TEST_F(Epid11VerifierTest, AreSigsLinkedReturnsFalseGivenNullParameters) {
+ auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+ EXPECT_FALSE(Epid11AreSigsLinked(nullptr, nullptr));
+ EXPECT_FALSE(
+ Epid11AreSigsLinked((Epid11BasicSignature const*)sig.data(), nullptr));
+ EXPECT_FALSE(
+ Epid11AreSigsLinked(nullptr, (Epid11BasicSignature const*)sig.data()));
+}
+
+TEST_F(Epid11VerifierTest, SigsBySameMemberWithRandomBaseAreNotLinkable) {
+ auto& sig1 = this->kSigGrpXMember0Sha256RandbaseMsg0;
+ auto& sig2 = this->kSigGrpXMember0Sha256RandbaseMsg1;
+ EXPECT_FALSE(Epid11AreSigsLinked((Epid11BasicSignature const*)sig1.data(),
+ (Epid11BasicSignature const*)sig2.data()));
+}
+
+TEST_F(Epid11VerifierTest, SigsBySameMemberWithSameBasenameAreLinkable) {
+ auto& sig1 = this->kSigGrpXMember0Sha256Bsn0Msg0;
+ auto& sig2 = this->kSigGrpXMember0Sha256Bsn0Msg1;
+ EXPECT_TRUE(Epid11AreSigsLinked((Epid11BasicSignature const*)sig1.data(),
+ (Epid11BasicSignature const*)sig2.data()));
+}
+
+TEST_F(Epid11VerifierTest,
+ SigsBySameMemberWithDifferentBasenameAreNotLinkable) {
+ auto& sig1 = this->kSigGrpXMember0Sha256Bsn0Msg0;
+ auto& sig2 = this->kSigGrpXMember0Sha256Bsn1Msg0;
+ EXPECT_FALSE(Epid11AreSigsLinked((Epid11BasicSignature const*)sig1.data(),
+ (Epid11BasicSignature const*)sig2.data()));
+}
+
+TEST_F(Epid11VerifierTest,
+ SigsByDifferentMembersWithSameBasenameAreNotLinkable) {
+ auto& sig1 = this->kSigGrpXMember0Sha256Bsn0Msg0;
+ auto& sig2 = this->kSigGrpXMember1Sha256Bsn0Msg0;
+ EXPECT_FALSE(Epid11AreSigsLinked((Epid11BasicSignature const*)sig1.data(),
+ (Epid11BasicSignature const*)sig2.data()));
+}
+
+} // namespace
diff --git a/epid/verifier/1.1/unittests/testdata/verifier_precmp.inc b/epid/verifier/1.1/unittests/testdata/verifier_precmp.inc
new file mode 100644
index 0000000..76a8908
--- /dev/null
+++ b/epid/verifier/1.1/unittests/testdata/verifier_precmp.inc
@@ -0,0 +1,73 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+/*!
+ * \file
+ * \brief Test data.
+ *
+ * Type : Intel(R) EPID 1.1 verifier precomp data
+ */
+// unsigned char epid_v_precmp_dat[] = {
+0x00, 0x00, 0x00, 0x7b,
+0x02, 0x7c, 0xac, 0xe1, 0x58, 0x08, 0x6a, 0x83, 0x50, 0xd8, 0xba, 0xba,
+0x4b, 0x60, 0x6c, 0xeb, 0x51, 0xce, 0x7e, 0x6d, 0x8e, 0xa8, 0x56, 0x41,
+0x33, 0xf3, 0xb0, 0xa6, 0xfc, 0xcd, 0xc8, 0x41, 0x05, 0x9e, 0xcc, 0x4f,
+0x51, 0x77, 0xd9, 0xec, 0x57, 0x34, 0x48, 0x47, 0x22, 0x7a, 0x7c, 0xa1,
+0x14, 0xb8, 0x2a, 0xc9, 0x16, 0x0a, 0xb4, 0xb3, 0x5d, 0x44, 0x28, 0x23,
+0x80, 0x7a, 0x3e, 0xda, 0x02, 0x6d, 0x03, 0x47, 0xcd, 0x2a, 0xab, 0xa4,
+0xce, 0x63, 0x0b, 0x5e, 0x3a, 0xf2, 0x96, 0x86, 0xa9, 0x9f, 0x2a, 0x9a,
+0xff, 0x8f, 0x94, 0x91, 0xc8, 0x3c, 0xf2, 0x5a, 0xaa, 0xda, 0x6b, 0x8e,
+0x02, 0xfc, 0x42, 0x4b, 0xfe, 0xf3, 0x23, 0x0a, 0xf8, 0x1a, 0x5c, 0x9a,
+0x5c, 0x0d, 0x71, 0xef, 0x85, 0x64, 0xa6, 0x4d, 0x6a, 0x8b, 0x82, 0x58,
+0x2e, 0xbc, 0xfb, 0xb9, 0xdf, 0xb8, 0xce, 0x3d, 0x03, 0xf3, 0x07, 0x18,
+0x4a, 0x13, 0x82, 0x8a, 0xea, 0x24, 0x57, 0x72, 0xe2, 0x33, 0x9d, 0xb3,
+0x0c, 0x57, 0xcf, 0xab, 0xdd, 0xee, 0xf8, 0xd7, 0x2a, 0x75, 0xf5, 0xd7,
+0x28, 0xed, 0x0f, 0xb7, 0x02, 0xec, 0x5f, 0xed, 0x50, 0xae, 0x6b, 0xf3,
+0x80, 0x29, 0x7b, 0xa2, 0x75, 0x61, 0xfd, 0x20, 0x01, 0x2b, 0xdf, 0x8b,
+0x3c, 0x2a, 0xb9, 0x1d, 0x92, 0xed, 0x0f, 0xad, 0x73, 0x74, 0x1e, 0xd8,
+0x06, 0xa6, 0x4a, 0x6b, 0x89, 0xd0, 0x07, 0x2a, 0xe6, 0x0b, 0x56, 0xd3,
+0x48, 0x17, 0xf6, 0x99, 0x31, 0x41, 0x21, 0x99, 0x51, 0xf6, 0xb1, 0x6c,
+0x02, 0xcd, 0x11, 0xe7, 0xcc, 0xd3, 0xc5, 0x6c, 0x06, 0xf4, 0x39, 0x62,
+0x37, 0x88, 0x37, 0xad, 0x1f, 0x36, 0x81, 0xfa, 0xd7, 0x4b, 0x9f, 0x57,
+0x0f, 0x5b, 0xc3, 0x53, 0x14, 0x53, 0x41, 0x3a, 0x2b, 0xab, 0x6e, 0xf4,
+0xd8, 0x7f, 0xc5, 0x67, 0x08, 0x70, 0xd7, 0x9b, 0x59, 0xe1, 0xe0, 0x57,
+0xe2, 0xf4, 0x04, 0x82, 0x06, 0x6a, 0xd5, 0xa2, 0x76, 0x64, 0x41, 0x7f,
+0x3b, 0xe6, 0x33, 0xb9, 0x39, 0x68, 0xda, 0x0d, 0x13, 0x03, 0x63, 0xc8,
+0x07, 0x94, 0x70, 0xf9, 0xfb, 0xd8, 0x99, 0x31, 0xa1, 0x53, 0x1c, 0x20,
+0x43, 0x12, 0xeb, 0xff, 0xa4, 0x5d, 0x64, 0x7c, 0x24, 0x9e, 0xe0, 0x03,
+0x80, 0x8e, 0xfb, 0xdc, 0xee, 0xfd, 0x1f, 0xef, 0x03, 0x43, 0x07, 0x44,
+0xef, 0xb3, 0x71, 0x39, 0x77, 0x61, 0x5c, 0xa9, 0x32, 0x54, 0x33, 0x98,
+0xa2, 0x14, 0x6a, 0x13, 0x53, 0x22, 0x94, 0xa2, 0xce, 0x15, 0xe7, 0xd0,
+0x30, 0xf2, 0x6b, 0x07, 0x02, 0x56, 0x28, 0xc3, 0xb1, 0x39, 0xf9, 0xc7,
+0xda, 0xe2, 0xfd, 0xd0, 0xa8, 0x1b, 0xe8, 0xb2, 0xe3, 0x75, 0x02, 0xb8,
+0x90, 0xa4, 0xa5, 0x8f, 0x23, 0xa1, 0xcd, 0x75, 0xe7, 0x51, 0x37, 0xe5,
+0x09, 0x27, 0x38, 0x30, 0x06, 0x44, 0x13, 0xef, 0xfe, 0x70, 0x5c, 0x4a,
+0x21, 0xff, 0xf8, 0xf5, 0xbb, 0xc9, 0x6e, 0xa8, 0x7e, 0x00, 0xb1, 0xd7,
+0x5e, 0x55, 0xcf, 0xc7, 0x34, 0x6b, 0x8d, 0xd5, 0x04, 0xce, 0x6e, 0xca,
+0x11, 0x5a, 0xb3, 0x0c, 0x33, 0x79, 0x5f, 0xde, 0xd9, 0xdb, 0x8c, 0xfa,
+0x73, 0x4e, 0x1e, 0xfa, 0xa1, 0x21, 0x6d, 0xa3, 0x6d, 0xe8, 0x69, 0x02,
+0x9e, 0xcc, 0x4d, 0x14, 0x09, 0xb5, 0x7c, 0xba, 0x98, 0xc2, 0xe3, 0xaa,
+0x82, 0x6a, 0x0f, 0x1e, 0x4c, 0x6c, 0x9e, 0xb8, 0xb6, 0xa3, 0x5d, 0x06,
+0xfe, 0x99, 0x5c, 0x62, 0xa9, 0x19, 0x4e, 0x84, 0x61, 0xc7, 0xf9, 0x78,
+0x04, 0x39, 0xda, 0xb4, 0x79, 0x32, 0x63, 0x60, 0xa6, 0x69, 0x86, 0x5c,
+0xff, 0xb0, 0x71, 0xd0, 0xf5, 0x5e, 0x3c, 0xb2, 0x5d, 0x81, 0x4f, 0x9f,
+0xe4, 0xf7, 0x3b, 0xc7, 0xc5, 0x80, 0x5e, 0x8e, 0x01, 0x23, 0xfa, 0xfc,
+0x09, 0xae, 0x12, 0x55, 0xf2, 0xd0, 0x50, 0x5c, 0xed, 0xc6, 0xd6, 0x81,
+0x9a, 0xa7, 0x93, 0xa3, 0xf4, 0xac, 0xe5, 0x3e, 0xdb, 0x5a, 0x05, 0xb7,
+0x0b, 0x80, 0xad, 0xa9, 0x08, 0xf1, 0x5a, 0xb5, 0x09, 0x23, 0x52, 0x65,
+0x46, 0x64, 0x79, 0xf2, 0x47, 0x04, 0x72, 0x48, 0x4e, 0x01, 0x55, 0x4a,
+0x67, 0x8d, 0x1e, 0x07, 0xc7, 0x46, 0x87, 0xf6, 0x50, 0xc3, 0xa6, 0x6b
+// };
+// unsigned int epid_v_precmp_dat_len = 576;
diff --git a/epid/verifier/1.1/unittests/verifier-testhelper.cc b/epid/verifier/1.1/unittests/verifier-testhelper.cc
new file mode 100644
index 0000000..8dd541d
--- /dev/null
+++ b/epid/verifier/1.1/unittests/verifier-testhelper.cc
@@ -0,0 +1,214 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+
+/*!
+* \file
+* \brief Test fixture class for EpidVerifier.
+*/
+#include <vector>
+#include "epid/verifier/1.1/unittests/verifier-testhelper.h"
+const Epid11G3ElemStr Epid11VerifierTest::kG3IdentityStr = {0};
+const Epid11GroupPubKey Epid11VerifierTest::kPubKeyStr = {
+ // gid
+ {
+ 0x00, 0x00, 0x00, 0x7b,
+ },
+ // h1
+ {{0x08, 0x4a, 0x9d, 0x2e, 0xf9, 0x4f, 0x78, 0x02, 0xd7, 0x89, 0x75, 0xb4,
+ 0xe7, 0x25, 0x26, 0x9f, 0x00, 0x57, 0xad, 0x33, 0x30, 0xea, 0xa9, 0x6c,
+ 0x00, 0x9e, 0x8b, 0xc8, 0x13, 0x23, 0xcb, 0x06},
+ {0x04, 0xbe, 0x42, 0x74, 0x11, 0x07, 0xb1, 0x06, 0xd7, 0xef, 0x5f, 0x66,
+ 0x87, 0xd9, 0xfa, 0xdd, 0x53, 0xae, 0xd7, 0xf4, 0x54, 0xf8, 0xd0, 0x21,
+ 0x75, 0xe0, 0x07, 0x44, 0xc9, 0xc3, 0x4e, 0xf7}},
+ // h2
+ {{0x06, 0xd8, 0xa9, 0x90, 0x02, 0x8f, 0xca, 0xa5, 0x73, 0x36, 0x24, 0x03,
+ 0xc9, 0xa8, 0x7e, 0x9d, 0x64, 0x12, 0xac, 0xa7, 0xbd, 0x17, 0x7f, 0x7c,
+ 0x96, 0x8d, 0x2e, 0x13, 0xd9, 0xb2, 0x69, 0x47},
+ {0x09, 0xdb, 0xe3, 0xbf, 0xbc, 0xa1, 0x34, 0x0f, 0xc6, 0xe2, 0x00, 0x3d,
+ 0x98, 0xa3, 0x7d, 0xab, 0xd4, 0x0e, 0xec, 0xde, 0x4f, 0x97, 0xa9, 0xbb,
+ 0xdd, 0x60, 0x94, 0x24, 0x7b, 0xb3, 0xf5, 0x94}},
+ // w
+ {{{0x02, 0x43, 0x78, 0x9f, 0x54, 0xc1, 0x21, 0x3a, 0x2b, 0x4d, 0x12, 0x65,
+ 0x2f, 0x51, 0x94, 0xc6, 0x34, 0x24, 0xd9, 0x7b, 0x06, 0x3a, 0xc4, 0xf5,
+ 0x56, 0xeb, 0x32, 0xe3, 0xee, 0x7b, 0xad, 0x6b},
+ {0x04, 0x90, 0x86, 0x31, 0x18, 0x2a, 0xa4, 0xcf, 0xa3, 0x90, 0xa5, 0x80,
+ 0x7b, 0xae, 0x3b, 0xb1, 0x77, 0x03, 0xe7, 0x7e, 0xf2, 0xfc, 0x6d, 0x3a,
+ 0xab, 0x8f, 0xbf, 0x95, 0x40, 0xed, 0x08, 0x03},
+ {0x01, 0x05, 0x86, 0xf5, 0x42, 0xea, 0x4d, 0xf7, 0x4f, 0xef, 0x46, 0xdf,
+ 0x8f, 0xe8, 0x2d, 0xbb, 0x5d, 0x0d, 0x2f, 0x4f, 0xf4, 0xd8, 0x31, 0xc6,
+ 0x5a, 0x97, 0x98, 0x44, 0xcf, 0x42, 0x5a, 0xf3}},
+ {{0x03, 0x5f, 0xb6, 0x38, 0x45, 0x5a, 0x15, 0x1e, 0xb9, 0x54, 0xfa, 0x2c,
+ 0x3f, 0x68, 0x7b, 0x4e, 0x85, 0x35, 0xf3, 0x5b, 0xe5, 0xdc, 0x96, 0x2b,
+ 0x18, 0x84, 0x5e, 0x1e, 0x53, 0xdc, 0x22, 0x23},
+ {0x06, 0x08, 0x91, 0x5a, 0x2d, 0x27, 0xe2, 0x12, 0x69, 0xfa, 0xab, 0x19,
+ 0x7c, 0x47, 0x6b, 0xec, 0xde, 0xc6, 0x25, 0xd4, 0x43, 0xb4, 0x65, 0x23,
+ 0x61, 0x0f, 0x1f, 0x2d, 0xfd, 0xb1, 0x18, 0xb0},
+ {0x04, 0x8e, 0x1a, 0xc5, 0x95, 0x9a, 0x0e, 0x37, 0x7c, 0x5e, 0x95, 0x38,
+ 0xc2, 0xcf, 0xfa, 0x1f, 0xe3, 0x3a, 0x2b, 0x85, 0xa5, 0xfd, 0x6b, 0xc4,
+ 0x1d, 0xfb, 0x47, 0x27, 0xaf, 0xc1, 0x94, 0xcd}}}};
+const Epid11Params Epid11VerifierTest::kParamsStr = {
+#include "epid/common/1.1/src/epid11params_tate.inc"
+};
+const std::vector<uint8_t> Epid11VerifierTest::kGrpXPrivRl = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/privrl.inc"
+};
+const std::vector<uint8_t> Epid11VerifierTest::kGrpXPrivRlSingleEntry = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/privrl_single_entry.inc"
+};
+
+const Epid11VerifierPrecomp Epid11VerifierTest::kVerifierPrecompStr = {
+#include "epid/verifier/1.1/unittests/testdata/verifier_precmp.inc"
+};
+const std::vector<uint8_t> Epid11VerifierTest::kSigRl = {
+ // gid
+ 0x00, 0x00, 0x00, 0x7b,
+ // rev
+ 0x00, 0x00, 0x00, 0x02,
+ // n2
+ 0x00, 0x00, 0x00, 0x02,
+ // bks
+ // bk1
+ 0x09, 0x0d, 0x6f, 0x82, 0x77, 0x88, 0x49, 0x53, 0xba, 0x1e, 0x1b, 0x0e,
+ 0x5e, 0xae, 0xc0, 0x27, 0xad, 0xe3, 0xb1, 0x09, 0x4f, 0xcd, 0xb6, 0xe6,
+ 0x6f, 0x7f, 0xa3, 0x1a, 0x1e, 0xfb, 0x52, 0x72, 0xfa, 0x85, 0x0f, 0x5c,
+ 0x97, 0x61, 0xbf, 0x46, 0x7e, 0xec, 0xd6, 0x64, 0xda, 0xa9, 0x8e, 0xf5,
+ 0xd3, 0xdf, 0xfa, 0x13, 0x5a, 0xb2, 0x3e, 0xeb, 0x0a, 0x9d, 0x02, 0xc0,
+ 0x33, 0xec, 0x2a, 0x70, 0x41, 0xb7, 0xa4, 0xc8, 0x43, 0x3f, 0x0b, 0xc2,
+ 0x80, 0x31, 0xbe, 0x75, 0x65, 0xe9, 0xbb, 0x81, 0x73, 0x5b, 0x91, 0x4f,
+ 0x3f, 0xd7, 0xbe, 0xb5, 0x19, 0x56, 0x3f, 0x18, 0x95, 0xea, 0xc1, 0xd7,
+ 0xa4, 0x5e, 0xb9, 0x86, 0xfc, 0xe5, 0xc4, 0x0f, 0x54, 0x37, 0xab, 0xed,
+ 0x59, 0x20, 0xce, 0x67, 0x68, 0x3c, 0x25, 0x4d, 0xbc, 0x5f, 0x6a, 0x4d,
+ 0x5a, 0xa7, 0x93, 0xce, 0x90, 0x2d, 0x3e, 0x5a,
+ // bk2
+ 0x67, 0x58, 0xb2, 0x9c, 0xad, 0x61, 0x1f, 0xfb, 0x74, 0x23, 0xea, 0x40,
+ 0xe9, 0x66, 0x26, 0xb0, 0x43, 0xdc, 0x7e, 0xc7, 0x48, 0x88, 0x56, 0x59,
+ 0xf3, 0x35, 0x9f, 0xdb, 0xfa, 0xa2, 0x49, 0x51, 0x85, 0x35, 0x42, 0x50,
+ 0x8e, 0x79, 0x79, 0xc0, 0x6c, 0xcc, 0x39, 0x0b, 0xad, 0x3b, 0x39, 0x33,
+ 0xae, 0xb2, 0xa1, 0xc5, 0x28, 0x6f, 0x48, 0x3a, 0xd2, 0x63, 0x5d, 0xfb,
+ 0x1b, 0x1f, 0x8a, 0x63, 0x5b, 0x9f, 0xe7, 0x93, 0x5f, 0xc6, 0x1e, 0xe5,
+ 0x9b, 0x52, 0x04, 0x03, 0x85, 0x28, 0x5c, 0x24, 0x96, 0xaa, 0xbb, 0xe1,
+ 0xdd, 0x03, 0x90, 0x68, 0xe0, 0x13, 0xe8, 0x90, 0x9e, 0x68, 0x8e, 0xa0,
+ 0xec, 0x7b, 0xf5, 0xe9, 0x29, 0x4a, 0x3e, 0x78, 0xbd, 0xb6, 0x3c, 0x10,
+ 0xf8, 0xec, 0xc6, 0x2c, 0x4b, 0x4d, 0x8a, 0xc1, 0x3d, 0x65, 0xf5, 0x93,
+ 0x8d, 0x5b, 0x07, 0x3f, 0x78, 0x92, 0x1c, 0xfa};
+const std::vector<uint8_t> Epid11VerifierTest::kEmptySigRl = {
+ // gid
+ 0x00, 0x00, 0x00, 0x7b,
+ // rev
+ 0x00, 0x00, 0x00, 0x00,
+ // n2
+ 0x00, 0x00, 0x00, 0x00,
+ // not bk's
+};
+
+const OctStr32 Epid11VerifierTest::kOctStr32_1 = {0x00, 0x00, 0x00, 0x01};
+
+const std::vector<uint8_t> Epid11VerifierTest::kGroupRlEmptyBuf = {
+ // RLVer
+ 0x00, 0x00, 0x00, 0x00,
+ // n3
+ 0x00, 0x00, 0x00, 0x00};
+
+const std::vector<uint8_t> Epid11VerifierTest::kGroupRl3GidBuf = {
+ // RLVer
+ 0x00, 0x00, 0x00, 0x03,
+ // n3
+ 0x00, 0x00, 0x00, 0x03,
+ // gid[0]
+ 0x00, 0x00, 0x00, 0x01,
+ // gid[1]
+ 0x00, 0x00, 0x00, 0x02,
+ // gid[2]
+ 0x00, 0x00, 0x00, 0x03,
+};
+
+const std::vector<uint8_t> Epid11VerifierTest::kMsg0 = {
+ 't', 'e', 's', 't', ' ', 'm', 'e', 's', 's', 'a', 'g', 'e'};
+const std::vector<uint8_t> Epid11VerifierTest::kBsn0 = {'b', 'a', 's', 'e', 'n',
+ 'a', 'm', 'e', '1'};
+
+const std::vector<uint8_t> Epid11VerifierTest::kSigGrpXMember0Sha256Bsn0Msg0 = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0.inc"
+};
+const std::vector<uint8_t>
+ Epid11VerifierTest::kSigGrpXMember0Sha256Bsn0Msg0SingleEntry = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0_single_entry.inc"
+};
+const std::vector<uint8_t>
+ Epid11VerifierTest::kSigGrpXMember0Sha256Bsn0Msg0ThreeEntry = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg0_three_entry.inc"
+};
+const std::vector<uint8_t> Epid11VerifierTest::kSigGrpXMember0Sha256Bsn0Msg1 = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn0_msg1.inc"
+};
+const std::vector<uint8_t> Epid11VerifierTest::kSigGrpXMember0Sha256Bsn1Msg0 = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_bsn1_msg0.inc"
+};
+const std::vector<uint8_t>
+ Epid11VerifierTest::kSigGrpXMember0Sha256RandbaseMsg0 = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_rndbase_msg0.inc"
+};
+const std::vector<uint8_t>
+ Epid11VerifierTest::kSigGrpXMember0Sha256RandbaseMsg0N2One = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/sig_sha256_bsnrnd_msg0.inc"
+};
+const std::vector<uint8_t>
+ Epid11VerifierTest::kSigGrpXMember0Sha256RandbaseMsg1 = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/member0/sig_sha256_rndbase_msg1.inc"
+};
+const std::vector<uint8_t> Epid11VerifierTest::kSigGrpXMember1Sha256Bsn0Msg0 = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/member1/sig_sha256_bsn0_msg0.inc"
+};
+const std::vector<uint8_t>
+ Epid11VerifierTest::kSigGrpXRevokedPrivKey000Sha256Bsn0Msg0 = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey000.inc"
+};
+const std::vector<uint8_t>
+ Epid11VerifierTest::kSigGrpXRevokedPrivKey001Sha256Bsn0Msg0 = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey001.inc"
+};
+const std::vector<uint8_t>
+ Epid11VerifierTest::kSigGrpXRevokedPrivKey002Sha256Bsn0Msg0 = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey002.inc"
+};
+const std::vector<uint8_t> Epid11VerifierTest::kGrpRlRevokedGrpXSingleEntry = {
+#include "epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_single_entry.inc"
+};
+const std::vector<uint8_t> Epid11VerifierTest::kGrpRlRevokedGrpXFirstEntry = {
+#include "epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_first_entry.inc"
+};
+const std::vector<uint8_t> Epid11VerifierTest::kGrpRlRevokedGrpXMiddleEntry = {
+#include "epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_middle_entry.inc"
+};
+const std::vector<uint8_t> Epid11VerifierTest::kGrpRlRevokedGrpXLastEntry = {
+#include "epid/common-testhelper/1.1/testdata/grprl_revoked_grp_x_last_entry.inc"
+};
+const std::vector<uint8_t>
+ Epid11VerifierTest::kGrpXSigRlMember0Bsn0Msg0SingleEntry = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_single_entry.inc"
+};
+const std::vector<uint8_t>
+ Epid11VerifierTest::kGrpXSigRlMember0Bsn0Msg0FirstEntry = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_first_entry.inc"
+};
+const std::vector<uint8_t>
+ Epid11VerifierTest::kGrpXSigRlMember0Bsn0Msg0MiddleEntry = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_middle_entry.inc"
+};
+const std::vector<uint8_t>
+ Epid11VerifierTest::kGrpXSigRlMember0Bsn0Msg0LastEntry = {
+#include "epid/common-testhelper/1.1/testdata/grp_x/sigrl_member0_sig_bsn0_msg0_revoked_last_entry.inc"
+};
diff --git a/epid/verifier/1.1/unittests/verifier-testhelper.h b/epid/verifier/1.1/unittests/verifier-testhelper.h
new file mode 100644
index 0000000..9f44fd4
--- /dev/null
+++ b/epid/verifier/1.1/unittests/verifier-testhelper.h
@@ -0,0 +1,117 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Test fixture class for Epid11Verifier.
+ */
+#ifndef EPID_VERIFIER_1_1_UNITTESTS_VERIFIER_TESTHELPER_H_
+#define EPID_VERIFIER_1_1_UNITTESTS_VERIFIER_TESTHELPER_H_
+
+#include <vector>
+
+#include "gtest/gtest.h"
+
+extern "C" {
+#include "epid/verifier/1.1/api.h"
+}
+
+/// Test fixture class for Epid11Verifier
+class Epid11VerifierTest : public ::testing::Test {
+ public:
+ /// Serialized identity element in G3
+ static const Epid11G3ElemStr kG3IdentityStr;
+ /// test public key
+ static const Epid11GroupPubKey kPubKeyStr;
+ /// the message "test message"
+ static const std::vector<uint8_t> kMsg0;
+ /// the basename "basename1"
+ static const std::vector<uint8_t> kBsn0;
+ /// the privrl of group X
+ static const std::vector<uint8_t> kGrpXPrivRl;
+ /// a single entry privrl for group X
+ static const std::vector<uint8_t> kGrpXPrivRlSingleEntry;
+ /// verifier pre-computation data associated with pub_key_str
+ static const Epid11VerifierPrecomp kVerifierPrecompStr;
+ /// Intel(R) EPID 1.1 parameters
+ static const Epid11Params kParamsStr;
+ /// signature of msg0 by member0 of groupX with Sha256 bsn0
+ static const std::vector<uint8_t> kSigGrpXMember0Sha256Bsn0Msg0;
+ /// signature of msg0 by member0 of groupX with Sha256 bsn0 with one NrProof
+ static const std::vector<uint8_t> kSigGrpXMember0Sha256Bsn0Msg0SingleEntry;
+ /// signature of msg0 by member0 of groupX with Sha256 bsn0 with three NrProof
+ static const std::vector<uint8_t> kSigGrpXMember0Sha256Bsn0Msg0ThreeEntry;
+ /// signature of msg1 by member0 of groupX with Sha256 bsn0
+ static const std::vector<uint8_t> kSigGrpXMember0Sha256Bsn0Msg1;
+ /// signature of msg0 by member0 of groupX with Sha256 bsn1
+ static const std::vector<uint8_t> kSigGrpXMember0Sha256Bsn1Msg0;
+ /// signature of msg0 by member0 of groupX with Sha256 rnd base
+ static const std::vector<uint8_t> kSigGrpXMember0Sha256RandbaseMsg0;
+ /// signature of msg0 by member0 of groupX with Sha256 rnd base with n2==1
+ static const std::vector<uint8_t> kSigGrpXMember0Sha256RandbaseMsg0N2One;
+ /// signature of msg1 by member0 of groupX with Sha256 rnd base
+ static const std::vector<uint8_t> kSigGrpXMember0Sha256RandbaseMsg1;
+ /// signature of msg0 by member1 of groupX with Sha256 bsn0
+ static const std::vector<uint8_t> kSigGrpXMember1Sha256Bsn0Msg0;
+ /// signature of msg0 by priv revoked member 0 of groupX with Sha256 bsn0
+ static const std::vector<uint8_t> kSigGrpXRevokedPrivKey000Sha256Bsn0Msg0;
+ /// signature of msg0 by priv revoked member 1 of groupX with Sha256 bsn0
+ static const std::vector<uint8_t> kSigGrpXRevokedPrivKey001Sha256Bsn0Msg0;
+ /// signature of msg0 by priv revoked member 2 of groupX with Sha256 bsn0
+ static const std::vector<uint8_t> kSigGrpXRevokedPrivKey002Sha256Bsn0Msg0;
+
+ /// group based rl test data (empty rl)
+ static const std::vector<uint8_t> kGroupRlEmptyBuf;
+ /// group based rl test data (v=3, n=3, 3 revoked gid)
+ static const std::vector<uint8_t> kGroupRl3GidBuf;
+
+ /// a group revocation list with single group revoked
+ static const std::vector<uint8_t> kGrpRlRevokedGrpXSingleEntry;
+ /// a group revocation list with multiple entries
+ static const std::vector<uint8_t> kGrpRlRevokedGrpXFirstEntry;
+ /// a group revocation list with multiple entries
+ static const std::vector<uint8_t> kGrpRlRevokedGrpXMiddleEntry;
+ /// a group revocation list with multiple entries
+ static const std::vector<uint8_t> kGrpRlRevokedGrpXLastEntry;
+
+ /// signature based revocation list
+ static const std::vector<uint8_t> kSigRl;
+ /// signature based revocation list (empty rl)
+ static const std::vector<uint8_t> kEmptySigRl;
+
+ /// setup called before each TEST_F starts
+ virtual void SetUp() {}
+ /// teardown called after each TEST_F finishes
+ virtual void TearDown() {}
+
+ /// value "1" represented as an octstr constant
+ /*!
+ this value is used frequently to set 32 bit fields. describing as a constant
+ here
+ to reduce replication in code.
+ */
+ static const OctStr32 kOctStr32_1;
+ /// the sigrl of group X
+ static const std::vector<uint8_t> kGrpXSigRlMember0Bsn0Msg0SingleEntry;
+ /// the sigrl of group X
+ static const std::vector<uint8_t> kGrpXSigRlMember0Bsn0Msg0FirstEntry;
+ /// the sigrl of group X
+ static const std::vector<uint8_t> kGrpXSigRlMember0Bsn0Msg0MiddleEntry;
+ /// the sigrl of group X
+ static const std::vector<uint8_t> kGrpXSigRlMember0Bsn0Msg0LastEntry;
+};
+
+#endif // EPID_VERIFIER_1_1_UNITTESTS_VERIFIER_TESTHELPER_H_
diff --git a/epid/verifier/1.1/unittests/verify-test.cc b/epid/verifier/1.1/unittests/verify-test.cc
new file mode 100644
index 0000000..e755b15
--- /dev/null
+++ b/epid/verifier/1.1/unittests/verify-test.cc
@@ -0,0 +1,720 @@
+/*############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+
+/*!
+* \file
+* \brief Epid11Verify unit tests.
+*/
+
+#include "gtest/gtest.h"
+
+extern "C" {
+#include "epid/verifier/1.1/api.h"
+#include "epid/common/src/endian_convert.h"
+}
+
+#include "epid/verifier/1.1/unittests/verifier-testhelper.h"
+#include "epid/common-testhelper/1.1/verifier_wrapper-testhelper.h"
+#include "epid/common-testhelper/errors-testhelper.h"
+
+namespace {
+
+TEST_F(Epid11VerifierTest, VerifyFailsGivenNullParameters) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ auto sig = this->kSigGrpXMember0Sha256RandbaseMsg0;
+ auto msg = this->kMsg0;
+
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11Verify(nullptr, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+ EXPECT_EQ(kEpidBadArgErr, Epid11Verify(verifier, nullptr, sig.size(),
+ msg.data(), msg.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), nullptr, msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyFailsGivenSigLenTooShortForRlCount) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ Epid11VerifierSetSigRl(verifier, (Epid11SigRl const*)this->kSigRl.data(),
+ this->kSigRl.size());
+ auto sig = this->kSigGrpXMember0Sha256RandbaseMsg0;
+ auto n2 = ntohl(((Epid11SigRl const*)this->kSigRl.data())->n2.data);
+ sig.resize(sizeof(Epid11Signature) +
+ (n2 - 2) * sizeof(((Epid11Signature*)0)->sigma));
+ auto msg = this->kMsg0;
+
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyFailsGivenSigLenTooLongForRlCount) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ Epid11VerifierSetSigRl(verifier, (Epid11SigRl const*)this->kSigRl.data(),
+ this->kSigRl.size());
+ auto sig = this->kSigGrpXMember0Sha256RandbaseMsg0;
+ auto n2 = ntohl(((Epid11SigRl const*)this->kSigRl.data())->n2.data);
+ sig.resize(sizeof(Epid11Signature) +
+ n2 * sizeof(((Epid11Signature*)0)->sigma));
+ auto msg = this->kMsg0;
+
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+#if (SIZE_MAX <= 0xFFFFFFFF) // When size_t value is 32 bit or lower
+TEST_F(Epid11VerifierTest, VerifyFailsGivenRlCountTooBig) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ Epid11VerifierSetSigRl(verifier, (Epid11SigRl const*)this->kSigRl.data(),
+ this->kSigRl.size());
+ auto sig = this->kSigGrpXMember0Sha256RandbaseMsg0;
+ uint32_t n2 = SIZE_MAX / sizeof(Epid11NrProof) + 1;
+ uint32_t n2_ = ntohl(n2);
+ Epid11Signature* sig_struct = (Epid11Signature*)sig.data();
+ sig_struct->n2 = *(OctStr32*)&n2_;
+ sig.resize(sizeof(Epid11Signature) + (n2 - 1) * sizeof(Epid11NrProof));
+ auto msg = this->kMsg0;
+
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+#endif
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 1 - We use the following variables T1, T2, R1, R2,
+// t1, t2 (elements of G1), R4, t3 (elements of GT),
+// B, K, R3, t5 (elements of G3), c, sx, sy, sa, sb,
+// salpha, sbeta, nc, nc', nsx, syalpha,
+// t4 (256-bit big integers), nd (80-bit big integer),
+// and sf (600-bit big integer).
+// This Step is not testable
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 2 - The verifier reads the verifier pre-computation
+// blob (gid, e12, e22, e2w) from its storage.
+// Refer to Section 3.4 for the computation of
+// these values.
+// This Step is not testable
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 3 - The verifier verifies gid in the public key,
+// PRIV-RL, and SIG-RL (if provided) and the verifier
+// pre-computation blob all match.
+// This step tested with SetPrivRl, SetSigRl and ReadPrecomp functions tests
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 4 - The verifier verifies the signatures of PRIV-RL,
+// SIG-RL (if provided), and Group-RL (if provided)
+// using IVK.
+// This Step is not testable
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 5 - If Group-RL is provided as input, the verifier
+// verifies that gid has not been revoked, i.e.,
+// gid does not match any entry in Group-RL.
+
+TEST_F(Epid11VerifierTest, VerifyRejectsFromGroupRlSingleEntry) {
+ auto& pub_key = this->kPubKeyStr;
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& grp_rl = this->kGrpRlRevokedGrpXSingleEntry;
+ auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(Epid11VerifierSetGroupRl(
+ verifier, (Epid11GroupRl const*)grp_rl.data(), grp_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigRevokedInGroupRl,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyRejectsFromGroupRlFirstEntry) {
+ auto& pub_key = this->kPubKeyStr;
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& grp_rl = this->kGrpRlRevokedGrpXFirstEntry;
+ auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(Epid11VerifierSetGroupRl(
+ verifier, (Epid11GroupRl const*)grp_rl.data(), grp_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigRevokedInGroupRl,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyRejectsFromGroupRlMiddleEntry) {
+ auto& pub_key = this->kPubKeyStr;
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& grp_rl = this->kGrpRlRevokedGrpXMiddleEntry;
+ auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(Epid11VerifierSetGroupRl(
+ verifier, (Epid11GroupRl const*)grp_rl.data(), grp_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigRevokedInGroupRl,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyRejectsFromGroupRlLastEntry) {
+ auto& pub_key = this->kPubKeyStr;
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& grp_rl = this->kGrpRlRevokedGrpXLastEntry;
+ auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(Epid11VerifierSetGroupRl(
+ verifier, (Epid11GroupRl const*)grp_rl.data(), grp_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigRevokedInGroupRl,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 6 - If SIG-RL is provided as input, the verifier
+// verifies that RLver and n2 values in s match with
+// the values in SIG-RL. If SIG-RL is not provided
+// as input, but the input signature is a not basic
+// signature, the verifier aborts and outputs false.
+
+TEST_F(Epid11VerifierTest, VerifyFailsOnSigRlverNotMatchSigRlRlver) {
+ // The verifier verifies that RLver in Sigma and in SigRL
+ // match. If mismatch, abort and output "operation failed".
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ auto msg = this->kMsg0;
+ auto bsn = this->kBsn0;
+ auto sig_rl = this->kGrpXSigRlMember0Bsn0Msg0SingleEntry;
+ auto sig_rl_size = sig_rl.size();
+ auto sig = this->kGrpXSigRlMember0Bsn0Msg0FirstEntry;
+ Epid11SigRl sig_rl_wrong_ver = *(Epid11SigRl const*)sig_rl.data();
+ sig_rl_wrong_ver.version.data[0]++;
+ THROW_ON_EPIDERR(
+ Epid11VerifierSetSigRl(verifier, &sig_rl_wrong_ver, sig_rl_size));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyFailsOnSigN2NotMatchSigRlN2) {
+ // The verifier verifies that n2 in Sigma and in SigRL
+ // match. If mismatch, abort and output "operation failed".
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ auto msg = this->kMsg0;
+ auto bsn = this->kBsn0;
+ auto sig_rl = this->kGrpXSigRlMember0Bsn0Msg0MiddleEntry;
+ auto sig = this->kSigGrpXMember0Sha256Bsn0Msg0SingleEntry;
+ THROW_ON_EPIDERR(Epid11VerifierSetSigRl(
+ verifier, (Epid11SigRl const*)sig_rl.data(), sig_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyFailsSigIsNotBasicAndSigRlIsNotProvided) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ auto msg = this->kMsg0;
+ auto bsn = this->kBsn0;
+ auto sig = this->kSigGrpXMember0Sha256Bsn0Msg0ThreeEntry;
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 7 - The verifier verifies that G3.isIdentity(B) is false.
+//
+TEST_F(Epid11VerifierTest, VerifyRejectsIdentityB) {
+ auto& pub_key = this->kPubKeyStr;
+ Epid11Signature sig = {0};
+ sig.sigma0 =
+ *(Epid11BasicSignature*)(this->kSigGrpXMember0Sha256Bsn0Msg0.data());
+ size_t sig_len = this->kSigGrpXMember0Sha256Bsn0Msg0.size();
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ memset(&sig.sigma0.B, 0, sizeof(sig.sigma0.B));
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11Verify(verifier, &sig, sig_len, msg.data(), msg.size()));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 8 - If bsnSize = 0, the verifier verifies G3.inGroup(B) = true.
+//
+TEST_F(Epid11VerifierTest, VerifyRejectsBNotInG3) {
+ auto& pub_key = this->kPubKeyStr;
+ Epid11Signature sig = {0};
+ sig.sigma0 =
+ *(Epid11BasicSignature*)(this->kSigGrpXMember0Sha256RandbaseMsg0.data());
+ size_t sig_len = this->kSigGrpXMember0Sha256RandbaseMsg0.size();
+ auto& msg = this->kMsg0;
+ sig.sigma0.B.x.data.data[0] = 0xEE;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11Verify(verifier, &sig, sig_len, msg.data(), msg.size()));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 9 - If bsnSize > 0, the verifier verifies B = G3.hash(bsn).
+//
+TEST_F(Epid11VerifierTest, VerifyRejectsBNotMatchingBasename) {
+ auto& pub_key = this->kPubKeyStr;
+ Epid11Signature sig = {0};
+ sig.sigma0 =
+ *(Epid11BasicSignature*)(this->kSigGrpXMember0Sha256Bsn0Msg0.data());
+ size_t sig_len = this->kSigGrpXMember0Sha256Bsn0Msg0.size();
+ auto msg = this->kMsg0;
+ auto bsn = this->kBsn0;
+ bsn.push_back('x');
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11Verify(verifier, &sig, sig_len, msg.data(), msg.size()));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 10 - The verifier verifies G3.inGroup(K) = true.
+//
+TEST_F(Epid11VerifierTest, VerifyRejectsKNotInG3) {
+ auto& pub_key = this->kPubKeyStr;
+ Epid11Signature sig = {0};
+ sig.sigma0 =
+ *(Epid11BasicSignature*)(this->kSigGrpXMember0Sha256RandbaseMsg0.data());
+ size_t sig_len = this->kSigGrpXMember0Sha256RandbaseMsg0.size();
+ auto& msg = this->kMsg0;
+ sig.sigma0.K.x.data.data[0] = 0xEE;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11Verify(verifier, &sig, sig_len, msg.data(), msg.size()));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 11 - The verifier verifies G1.inGroup(T1) = true.
+//
+TEST_F(Epid11VerifierTest, VerifyRejectsT1NotInG1) {
+ auto& pub_key = this->kPubKeyStr;
+ Epid11Signature sig = {0};
+ sig.sigma0 =
+ *(Epid11BasicSignature*)(this->kSigGrpXMember0Sha256RandbaseMsg0.data());
+ size_t sig_len = this->kSigGrpXMember0Sha256RandbaseMsg0.size();
+ auto& msg = this->kMsg0;
+ sig.sigma0.T1.x.data.data[0] = 0xEE;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11Verify(verifier, &sig, sig_len, msg.data(), msg.size()));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 12 - The verifier verifies G1.inGroup(T2) = true.
+//
+TEST_F(Epid11VerifierTest, VerifyRejectsT2NotInG1) {
+ auto& pub_key = this->kPubKeyStr;
+ Epid11Signature sig = {0};
+ sig.sigma0 =
+ *(Epid11BasicSignature*)(this->kSigGrpXMember0Sha256RandbaseMsg0.data());
+ size_t sig_len = this->kSigGrpXMember0Sha256RandbaseMsg0.size();
+ auto& msg = this->kMsg0;
+ sig.sigma0.T2.x.data.data[0] = 0xEE;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11Verify(verifier, &sig, sig_len, msg.data(), msg.size()));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 13 - The verifier verifies sx, sy, sa, sb, salpha, sbeta
+// in [0, p-1].
+//
+TEST_F(Epid11VerifierTest, VerifyRejectsSxNotInFp) {
+ auto& pub_key = this->kPubKeyStr;
+ Epid11Signature sig = {0};
+ sig.sigma0 =
+ *(Epid11BasicSignature*)(this->kSigGrpXMember0Sha256RandbaseMsg0.data());
+ size_t sig_len = this->kSigGrpXMember0Sha256RandbaseMsg0.size();
+ auto& msg = this->kMsg0;
+ sig.sigma0.sx.data.data[0] = 0xEE;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11Verify(verifier, &sig, sig_len, msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyRejectsSyNotInFp) {
+ auto& pub_key = this->kPubKeyStr;
+ Epid11Signature sig = {0};
+ sig.sigma0 =
+ *(Epid11BasicSignature*)(this->kSigGrpXMember0Sha256RandbaseMsg0.data());
+ size_t sig_len = this->kSigGrpXMember0Sha256RandbaseMsg0.size();
+ auto& msg = this->kMsg0;
+ sig.sigma0.sy.data.data[0] = 0xEE;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11Verify(verifier, &sig, sig_len, msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyRejectsSaNotInFp) {
+ auto& pub_key = this->kPubKeyStr;
+ Epid11Signature sig = {0};
+ sig.sigma0 =
+ *(Epid11BasicSignature*)(this->kSigGrpXMember0Sha256RandbaseMsg0.data());
+ size_t sig_len = this->kSigGrpXMember0Sha256RandbaseMsg0.size();
+ auto& msg = this->kMsg0;
+ sig.sigma0.sa.data.data[0] = 0xEE;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11Verify(verifier, &sig, sig_len, msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyRejectsSbNotInFp) {
+ auto& pub_key = this->kPubKeyStr;
+ Epid11Signature sig = {0};
+ sig.sigma0 =
+ *(Epid11BasicSignature*)(this->kSigGrpXMember0Sha256RandbaseMsg0.data());
+ size_t sig_len = this->kSigGrpXMember0Sha256RandbaseMsg0.size();
+ auto& msg = this->kMsg0;
+ sig.sigma0.sb.data.data[0] = 0xEE;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11Verify(verifier, &sig, sig_len, msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyRejectsSalphaNotInFp) {
+ auto& pub_key = this->kPubKeyStr;
+ Epid11Signature sig = {0};
+ sig.sigma0 =
+ *(Epid11BasicSignature*)(this->kSigGrpXMember0Sha256RandbaseMsg0.data());
+ size_t sig_len = this->kSigGrpXMember0Sha256RandbaseMsg0.size();
+ auto& msg = this->kMsg0;
+ sig.sigma0.salpha.data.data[0] = 0xEE;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11Verify(verifier, &sig, sig_len, msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyRejectsSbetaNotInFp) {
+ auto& pub_key = this->kPubKeyStr;
+ Epid11Signature sig = {0};
+ sig.sigma0 =
+ *(Epid11BasicSignature*)(this->kSigGrpXMember0Sha256RandbaseMsg0.data());
+ size_t sig_len = this->kSigGrpXMember0Sha256RandbaseMsg0.size();
+ auto& msg = this->kMsg0;
+ sig.sigma0.sbeta.data.data[0] = 0xEE;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11Verify(verifier, &sig, sig_len, msg.data(), msg.size()));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 14 - The verifier verifies that sf is an (at-most) 593-bit
+// unsigned integer, in other words, sf < 2^593.
+//
+TEST_F(Epid11VerifierTest, VerifyRejectsSfMoreThan592Bits) {
+ auto& pub_key = this->kPubKeyStr;
+ Epid11Signature sig = {0};
+ sig.sigma0 =
+ *(Epid11BasicSignature*)(this->kSigGrpXMember0Sha256RandbaseMsg0.data());
+ size_t sig_len = this->kSigGrpXMember0Sha256RandbaseMsg0.size();
+ auto& msg = this->kMsg0;
+ memset(&sig.sigma0.sf, 0, sizeof(sig.sigma0.sf));
+ sig.sigma0.sf.data[593 / CHAR_BIT] = 1 << ((593 % CHAR_BIT) - 1);
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11Verify(verifier, &sig, sig_len, msg.data(), msg.size()));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 15 - The verifier computes nc = (-c) mod p.
+// 4.1.2 step 16 - The verifier computes nc' = (-c) mod p'.
+// 4.1.2 step 17 - The verifier computes nsx = (-sx) mod p.
+// 4.1.2 step 18 - The verifier computes syalpha = (sy + salpha) mod p.
+// 4.1.2 step 19 - The verifier computes R1 = G1.multiexp(h1, sa, h2, sb, T2,
+// nc).
+// 4.1.2 step 20 - The verifier computes R2 = G1.multiexp(h1, salpha, h2,
+// sbeta, T2, nsx).
+// 4.1.2 step 21 - The verifier computes R3 = G3.multiexp(B, sf, K, nc').
+// 4.1.2 step 22 - The verifier computes t1 = G1.multiexp(T1, nsx, g1, c).
+// 4.1.2 step 23 - The verifier computes t2 = G1.exp(T1, nc).
+// 4.1.2 step 24 - The verifier computes R4 = pairing(t1, g2).
+// 4.1.2 step 25 - The verifier computes t3 = pairing(t2, w).
+// 4.1.2 step 26 - The verifier computes R4 = GT.mul(R4, t3).
+// 4.1.2 step 27 - The verifier compute t3 = GT.multiexp(e12, sf, e22,
+// syalpha, e2w, sa).
+// 4.1.2 step 28 - The verifier compute R4 = GT.mul(R4, t3).
+// 4.1.2 step 29 - The verifier compute t4 = Hash(p || g1 || g2 || g3
+// || h1 || h2 || w || B || K
+// || T1 || T2 || R1 || R2
+// || R3 || R4).
+// These steps are not testable
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 30 - The verifier verifies c = H(t4 || nd || mSize || m).
+// It is not practical to test all inputs to this hash
+TEST_F(Epid11VerifierTest, VerifyRejectsSigWithMismatchedMsg) {
+ auto& pub_key = this->kPubKeyStr;
+ auto& sig = this->kSigGrpXMember0Sha256RandbaseMsg0;
+ size_t sig_len = this->kSigGrpXMember0Sha256RandbaseMsg0.size();
+ auto msg = this->kMsg0;
+ msg.push_back('x');
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(), sig_len,
+ msg.data(), msg.size()));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 31 - For i = 0, ..., n1-1, the verifier computes
+// t5 = G3.exp(B, f[i]) and verifies that
+// G3.isEqual(t5, K) = false.
+//
+TEST_F(Epid11VerifierTest, VerifyRejectsSigFromPrivRlSingleEntry) {
+ auto& pub_key = this->kPubKeyStr;
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& priv_rl = this->kGrpXPrivRlSingleEntry;
+ auto& sig = this->kSigGrpXRevokedPrivKey000Sha256Bsn0Msg0;
+ Epid11VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(Epid11VerifierSetPrivRl(
+ verifier, (Epid11PrivRl const*)priv_rl.data(), priv_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigRevokedInPrivRl,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyRejectsSigFromPrivRlFirstEntry) {
+ auto& pub_key = this->kPubKeyStr;
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& priv_rl = this->kGrpXPrivRl;
+ auto& sig = this->kSigGrpXRevokedPrivKey000Sha256Bsn0Msg0;
+ Epid11VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(Epid11VerifierSetPrivRl(
+ verifier, (Epid11PrivRl const*)priv_rl.data(), priv_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigRevokedInPrivRl,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyRejectsSigFromPrivRlMiddleEntry) {
+ auto& pub_key = this->kPubKeyStr;
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& priv_rl = this->kGrpXPrivRl;
+ auto& sig = this->kSigGrpXRevokedPrivKey001Sha256Bsn0Msg0;
+ Epid11VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(Epid11VerifierSetPrivRl(
+ verifier, (Epid11PrivRl const*)priv_rl.data(), priv_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigRevokedInPrivRl,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyRejectsSigFromPrivRlLastEntry) {
+ auto& pub_key = this->kPubKeyStr;
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& priv_rl = this->kGrpXPrivRl;
+ auto& sig = this->kSigGrpXRevokedPrivKey002Sha256Bsn0Msg0;
+ Epid11VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(Epid11VerifierSetPrivRl(
+ verifier, (Epid11PrivRl const*)priv_rl.data(), priv_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigRevokedInPrivRl,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 32 - For i = 0, ..., n2-1, the verifier verifies
+// nr-verify(B, K, B[i], K[i], s[i]) = true.
+// The details of nr-verify will be given in the
+// next subsection.
+
+TEST_F(Epid11VerifierTest, VerifyRejectsSigFromSigRlSingleEntry) {
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& sig_rl = this->kGrpXSigRlMember0Bsn0Msg0SingleEntry;
+ auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0SingleEntry;
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ THROW_ON_EPIDERR(Epid11VerifierSetSigRl(
+ verifier, (Epid11SigRl const*)sig_rl.data(), sig_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigRevokedInSigRl,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyRejectsSigFromSigRlFirstEntry) {
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& sig_rl = this->kGrpXSigRlMember0Bsn0Msg0FirstEntry;
+ auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0ThreeEntry;
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ THROW_ON_EPIDERR(Epid11VerifierSetSigRl(
+ verifier, (Epid11SigRl const*)sig_rl.data(), sig_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigRevokedInSigRl,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyRejectsSigFromSigRlMiddleEntry) {
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& sig_rl = this->kGrpXSigRlMember0Bsn0Msg0MiddleEntry;
+ auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0ThreeEntry;
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ THROW_ON_EPIDERR(Epid11VerifierSetSigRl(
+ verifier, (Epid11SigRl const*)sig_rl.data(), sig_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigRevokedInSigRl,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyRejectsSigFromSigRlLastEntry) {
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& sig_rl = this->kGrpXSigRlMember0Bsn0Msg0LastEntry;
+ auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0ThreeEntry;
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ THROW_ON_EPIDERR(Epid11VerifierSetSigRl(
+ verifier, (Epid11SigRl const*)sig_rl.data(), sig_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigRevokedInSigRl,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+/////////////////////////////////////////////////////////////////////
+//
+// 4.1.2 step 33 - If all the above verifications succeed, the
+// verifier outputs true. If any of the above
+// verifications fails, the verifier immediately
+// aborts and outputs false.
+
+TEST_F(Epid11VerifierTest, VerifyAcceptsSigWithBaseNameNoRl) {
+ auto& pub_key = this->kPubKeyStr;
+ auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigValid,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyAcceptsSigWithBaseNameAllRl) {
+ auto& pub_key = this->kPubKeyStr;
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& grp_rl = this->kGroupRlEmptyBuf;
+ auto& priv_rl = this->kGrpXPrivRl;
+ auto& sig_rl = this->kEmptySigRl;
+ auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(Epid11VerifierSetGroupRl(
+ verifier, (Epid11GroupRl const*)grp_rl.data(), grp_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetPrivRl(
+ verifier, (Epid11PrivRl const*)priv_rl.data(), priv_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetSigRl(
+ verifier, (Epid11SigRl const*)sig_rl.data(), sig_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetBasename(verifier, bsn.data(), bsn.size()));
+
+ EXPECT_EQ(kEpidSigValid,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyAcceptsSigWithRandomBaseNameNoRl) {
+ auto& pub_key = this->kPubKeyStr;
+ auto& sig = this->kSigGrpXMember0Sha256RandbaseMsg0;
+ auto& msg = this->kMsg0;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ EXPECT_EQ(kEpidSigValid,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyAcceptsSigWithRandomBaseNameAllRl) {
+ auto& pub_key = this->kPubKeyStr;
+ auto& msg = this->kMsg0;
+ auto& grp_rl = this->kGroupRlEmptyBuf;
+ auto& priv_rl = this->kGrpXPrivRl;
+ auto& sig_rl = this->kEmptySigRl;
+ auto& sig = this->kSigGrpXMember0Sha256RandbaseMsg0;
+
+ Epid11VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(Epid11VerifierSetGroupRl(
+ verifier, (Epid11GroupRl const*)grp_rl.data(), grp_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetPrivRl(
+ verifier, (Epid11PrivRl const*)priv_rl.data(), priv_rl.size()));
+ THROW_ON_EPIDERR(Epid11VerifierSetSigRl(
+ verifier, (Epid11SigRl const*)sig_rl.data(), sig_rl.size()));
+ EXPECT_EQ(kEpidSigValid,
+ Epid11Verify(verifier, (Epid11Signature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+}
+
+} // namespace
diff --git a/epid/verifier/1.1/unittests/verifybasic-test.cc b/epid/verifier/1.1/unittests/verifybasic-test.cc
new file mode 100644
index 0000000..6f88206
--- /dev/null
+++ b/epid/verifier/1.1/unittests/verifybasic-test.cc
@@ -0,0 +1,99 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Epid11VerifyBasicSig unit tests.
+ */
+
+#include "gtest/gtest.h"
+
+extern "C" {
+#include "epid/verifier/1.1/api.h"
+}
+
+#include "epid/common-testhelper/errors-testhelper.h"
+#include "epid/verifier/1.1/unittests/verifier-testhelper.h"
+#include "epid/common-testhelper/1.1/verifier_wrapper-testhelper.h"
+
+namespace {
+
+TEST_F(Epid11VerifierTest, VerifyBasicSigFailsGivenNullPtr) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ auto const& sig =
+ (Epid11Signature const*)this->kSigGrpXMember0Sha256RandbaseMsg0.data();
+ const Epid11BasicSignature basic_sig = sig->sigma0;
+ auto& msg = this->kMsg0;
+
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifyBasicSig(nullptr, &basic_sig, msg.data(), msg.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifyBasicSig(verifier, nullptr, msg.data(), msg.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ Epid11VerifyBasicSig(verifier, &basic_sig, nullptr, msg.size()));
+}
+
+TEST_F(Epid11VerifierTest,
+ VerifyBasicSigCanVerifyValidSignatureWithSHA256AsDefault) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ auto const& sig =
+ (Epid11Signature const*)this->kSigGrpXMember0Sha256RandbaseMsg0.data();
+ const Epid11BasicSignature basic_sig = sig->sigma0;
+ auto& msg = this->kMsg0;
+
+ EXPECT_EQ(kEpidNoErr,
+ Epid11VerifyBasicSig(verifier, &basic_sig, msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest,
+ VerifyBasicSigDetectsInvalidSignatureGivenMatchingMessage) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ auto const& sig =
+ (Epid11Signature const*)this->kSigGrpXMember0Sha256RandbaseMsg0.data();
+ const Epid11BasicSignature basic_sig = sig->sigma0;
+ auto& msg = this->kMsg0;
+ Epid11BasicSignature corrupted_basic_sig = basic_sig;
+ corrupted_basic_sig.B.x.data.data[0]++;
+ EXPECT_NE(kEpidNoErr, Epid11VerifyBasicSig(verifier, &corrupted_basic_sig,
+ msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest,
+ VerifyBasicSigDetectsInvalidSignatureGivenMessageMismatch) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ auto const& sig =
+ (Epid11Signature const*)this->kSigGrpXMember0Sha256RandbaseMsg0.data();
+ const Epid11BasicSignature basic_sig = sig->sigma0;
+ auto msg = this->kMsg0;
+ msg[0]++; // change message for signature verification to fail
+ EXPECT_EQ(kEpidSigInvalid,
+ Epid11VerifyBasicSig(verifier, &basic_sig, msg.data(), msg.size()));
+}
+
+TEST_F(Epid11VerifierTest, VerifyBasicSigCanVerifyWithBasename) {
+ Epid11VerifierCtxObj verifier(this->kPubKeyStr);
+ auto const& sig =
+ (Epid11Signature const*)this->kSigGrpXMember0Sha256Bsn0Msg0.data();
+ const Epid11BasicSignature basic_sig = sig->sigma0;
+ auto& msg = this->kMsg0;
+ auto& basename = this->kBsn0;
+ THROW_ON_EPIDERR(
+ Epid11VerifierSetBasename(verifier, basename.data(), basename.size()));
+ EXPECT_EQ(kEpidNoErr,
+ Epid11VerifyBasicSig(verifier, &basic_sig, msg.data(), msg.size()));
+}
+
+} // namespace
diff --git a/epid/verifier/Makefile b/epid/verifier/Makefile
new file mode 100644
index 0000000..3be1e4d
--- /dev/null
+++ b/epid/verifier/Makefile
@@ -0,0 +1,85 @@
+#!/usr/bin/make -f
+
+#define variables
+IPP_SRC_INCLUDE_DIR = ../../ext/ipp/sources/ippcp/src/
+IPP_INCLUDE_DIR = ../../ext/ipp/sources/include/
+GTEST_INCLUDE_DIR = ../../ext/
+
+LIB_INSTALL_DIR = $(epidinstalldir)/lib/posix-$(ARCH)/
+TEST_INSTALL_DIR = $(epidinstalldir)/test/
+HEADERS_INSTALL_DIR = $(epidinstalldir)/include/epid/verifier/
+HEADERS_11_INSTALL_DIR = $(epidinstalldir)/include/epid/verifier/1.1/
+
+API_HEADERS_INSTALL = ./api.h
+
+API_11_HEADERS_INSTALL = ./1.1/api.h
+
+VERIFIER_INCLUDE_DIR = ../../
+VERIFIER_11_INCLUDE_DIR = ../../1.1
+
+VERIFIER_SRC = $(wildcard ./src/*.c)
+VERIFIER_SRC += $(wildcard ./1.1/src/*.c)
+VERIFIER_OBJ = $(VERIFIER_SRC:.c=.o)
+VERIFIER_LIB = ./libverifier.a
+
+VERIFIER_UTEST_EXE = ./verifier-utest
+VERIFIER_UTEST_SRC = $(wildcard ./unittests/*.cc)
+VERIFIER_UTEST_SRC += $(wildcard ./1.1/unittests/*.cc)
+VERIFIER_UTEST_OBJ = $(VERIFIER_UTEST_SRC:.cc=.o)
+LIB_VERIFIER_DIR = .
+LIB_COMMON_TESTHELPER_DIR = ../common-testhelper
+LIB_COMMON_DIR = ../common
+LIB_IPPCP_DIR = ../../ext/ipp/sources/ippcp/src
+LIB_IPPCPEPID_DIR = ../../ext/ipp/sources/ippcpepid/src
+
+#set flags for linker
+LDFLAGS += -L$(GTEST_INCLUDE_DIR)/gtest -L$(LIB_COMMON_TESTHELPER_DIR) \
+ -L$(LIB_VERIFIER_DIR) -L$(LIB_COMMON_DIR) -L$(LIB_IPPCPEPID_DIR) \
+ -L$(LIB_IPPCP_DIR) -lgtest -lcommon-testhelper -lverifier -lcommon \
+ -lippcpepid -lippcp
+
+#target part
+$(VERIFIER_OBJ): %.o: %.c
+ $(CC) $(CFLAGS) -I$(IPP_INCLUDE_DIR) -I$(IPP_SRC_INCLUDE_DIR) \
+ -I$(VERIFIER_INCLUDE_DIR) -I$(VERIFIER_11_INCLUDE_DIR) -c $^ -o $@
+
+$(VERIFIER_LIB): $(VERIFIER_OBJ)
+ $(AR) rc $(VERIFIER_LIB) $(VERIFIER_OBJ)
+ ranlib $(VERIFIER_LIB)
+
+$(VERIFIER_UTEST_EXE): $(VERIFIER_UTEST_OBJ)
+ $(CXX) -o $@ $^ $(CXXFLAGS) $(LDFLAGS)
+
+$(VERIFIER_UTEST_OBJ): %.o: %.cc
+ $(CXX) -o $@ $(CXXFLAGS) -I$(VERIFIER_INCLUDE_DIR) \
+ -I$(VERIFIER_11_INCLUDE_DIR) -I$(GTEST_INCLUDE_DIR) -c $^
+
+
+build: all
+
+all: $(VERIFIER_LIB)
+
+install:
+ mkdir -p '$(LIB_INSTALL_DIR)'
+ mkdir -p '$(HEADERS_INSTALL_DIR)'
+ mkdir -p '$(HEADERS_11_INSTALL_DIR)'
+ cp $(VERIFIER_LIB) '$(LIB_INSTALL_DIR)'
+ cp $(API_HEADERS_INSTALL) '$(HEADERS_INSTALL_DIR)'
+ cp $(API_11_HEADERS_INSTALL) '$(HEADERS_11_INSTALL_DIR)'
+#install tests if they exist
+ifneq (,$(wildcard $(VERIFIER_UTEST_EXE)))
+ mkdir -p '$(TEST_INSTALL_DIR)'
+ cp $(VERIFIER_UTEST_EXE) '$(TEST_INSTALL_DIR)'
+endif
+
+check: $(VERIFIER_UTEST_EXE) run
+
+run:
+ $(VERIFIER_UTEST_EXE) $(GTEST_FLAGS)
+
+clean:
+ rm -f $(VERIFIER_OBJ) \
+ $(VERIFIER_LIB) \
+ $(VERIFIER_UTEST_OBJ) \
+ $(VERIFIER_UTEST_EXE) \
+ *.xml
diff --git a/epid/verifier/api.h b/epid/verifier/api.h
index 3274c69..a0fcbc0 100644
--- a/epid/verifier/api.h
+++ b/epid/verifier/api.h
@@ -40,15 +40,16 @@
/// Internal context of verifier.
typedef struct VerifierCtx VerifierCtx;
-/// Pre-computed member settings.
+/// Pre-computed verifier settings.
/*!
- Serialized form of the information about a member that remains stable for
+ Serialized form of the information about a verifier that remains stable for
a given set of keys.
\note e12 = 0 implies that this data is not valid
*/
#pragma pack(1)
typedef struct VerifierPrecomp {
+ GroupId gid; ///< group ID
GtElemStr e12; ///< an element in GT
GtElemStr e22; ///< an element in GT
GtElemStr e2w; ///< an element in GT
@@ -117,7 +118,7 @@ EpidStatus EpidVerifierWritePrecomp(VerifierCtx const* ctx,
/// Sets the private key based revocation list.
/*!
- The caller is responsible for insuring the revocation list is authorized,
+ 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.
@@ -152,7 +153,7 @@ EpidStatus EpidVerifierSetPrivRl(VerifierCtx* ctx, PrivRl const* priv_rl,
/// Sets the signature based revocation list.
/*!
- The caller is responsible for insuring the revocation list is authorized,
+ 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.
@@ -187,7 +188,7 @@ EpidStatus EpidVerifierSetSigRl(VerifierCtx* ctx, SigRl const* sig_rl,
/// Sets the group based revocation list.
/*!
- The caller is responsible for insuring the revocation list is authorized,
+ 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.
@@ -222,20 +223,14 @@ EpidStatus EpidVerifierSetGroupRl(VerifierCtx* ctx, GroupRl const* grp_rl,
/// Sets the verifier revocation list.
/*!
- The caller is responsible for insuring 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 ver_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.
+ 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.
- \attention
- It is the responsibility of the caller to free the memory pointed to by ver_rl
- after the verifier is no longer using it.
+ Once ::EpidVerifierSetVerifierRl returns, callers are free to release
+ the memory pointed to by ver_rl.
\param[in,out] ctx
The verifier context.
@@ -251,6 +246,8 @@ EpidStatus EpidVerifierSetGroupRl(VerifierCtx* ctx, GroupRl const* grp_rl,
to by the verifier is undefined.
\see EpidVerifierCreate
+ \see EpidBlacklistSig
+ \see EpidWriteVerifierRl
*/
EpidStatus EpidVerifierSetVerifierRl(VerifierCtx* ctx, VerifierRl const* ver_rl,
size_t ver_rl_size);
@@ -273,6 +270,28 @@ EpidStatus EpidVerifierSetVerifierRl(VerifierCtx* ctx, VerifierRl const* ver_rl,
*/
EpidStatus EpidVerifierSetHashAlg(VerifierCtx* ctx, HashAlg hash_alg);
+/// Sets the basename to be used by a verifier.
+/*!
+
+ \note
+ A successful call to this function will clear the current verifier
+ blacklist.
+
+ \param[in, out] ctx
+ The verifier context.
+ \param[in] basename
+ The basename. Pass NULL for random base.
+ \param[in] basename_len
+ Number of bytes in basename buffer. Must be 0 if basename is NULL.
+
+ \returns ::EpidStatus
+
+ \see EpidVerifierCreate
+
+ */
+EpidStatus EpidVerifierSetBasename(VerifierCtx* ctx, void const* basename,
+ size_t basename_len);
+
/// Verifies a signature and checks revocation status.
/*!
\param[in] ctx
@@ -285,10 +304,6 @@ EpidStatus EpidVerifierSetHashAlg(VerifierCtx* ctx, HashAlg hash_alg);
The message that was signed.
\param[in] msg_len
The size of msg in bytes.
- \param[in] basename
- The basename. Pass NULL if not specified
- \param[in] basename_len
- Number of bytes in basename buffer. Must be 0 if basename is NULL.
\returns ::EpidStatus
@@ -296,13 +311,13 @@ EpidStatus EpidVerifierSetHashAlg(VerifierCtx* ctx, HashAlg hash_alg);
Signature validated successfully
\retval ::kEpidSigInvalid
Signature is invalid
- \retval ::kEpidSigRevokedinGroupRl
+ \retval ::kEpidSigRevokedInGroupRl
Signature revoked in GroupRl
- \retval ::kEpidSigRevokedinPrivRl
+ \retval ::kEpidSigRevokedInPrivRl
Signature revoked in PrivRl
- \retval ::kEpidSigRevokedinSigRl
+ \retval ::kEpidSigRevokedInSigRl
Signature revoked in SigRl
- \retval ::kEpidSigRevokedinVerifierRl
+ \retval ::kEpidSigRevokedInVerifierRl
Signature revoked in VerifierRl
\note
@@ -314,8 +329,7 @@ EpidStatus EpidVerifierSetHashAlg(VerifierCtx* ctx, HashAlg hash_alg);
\see EpidSign
*/
EpidStatus EpidVerify(VerifierCtx const* ctx, EpidSignature const* sig,
- size_t sig_len, void const* msg, size_t msg_len,
- void const* basename, size_t basename_len);
+ size_t sig_len, void const* msg, size_t msg_len);
/// Determines if two signatures are linked.
/*!
@@ -364,10 +378,6 @@ bool EpidAreSigsLinked(BasicSignature const* sig1, BasicSignature const* sig2);
The message that was signed.
\param[in] msg_len
The size of msg in bytes.
- \param[in] basename
- The basename. Pass NULL if not specified
- \param[in] basename_len
- Number of bytes in basename buffer. Must be 0 if basename is NULL.
\returns ::EpidStatus
@@ -384,8 +394,7 @@ bool EpidAreSigsLinked(BasicSignature const* sig1, BasicSignature const* sig2);
\see EpidSign
*/
EpidStatus EpidVerifyBasicSig(VerifierCtx const* ctx, BasicSignature const* sig,
- void const* msg, size_t msg_len,
- void const* basename, size_t basename_len);
+ void const* msg, size_t msg_len);
/// Verifies the non-revoked proof for a single signature based revocation list
/// entry.
@@ -463,5 +472,76 @@ EpidStatus EpidNrVerify(VerifierCtx const* ctx, BasicSignature const* sig,
EpidStatus EpidCheckPrivRlEntry(VerifierCtx const* ctx,
BasicSignature const* sig, FpElemStr const* f);
+/// Returns the number of bytes required to serialize the verifier blacklist
+/*!
+
+ Use this function to determine the buffer size required by
+ ::EpidWriteVerifierRl.
+
+ \param[in] ctx
+ The verifier context.
+
+ \returns
+ Size in bytes required to serialize the verifier blacklist
+
+ \see EpidVerifierCreate
+ \see EpidVerifierSetVerifierRl
+ \see EpidBlacklistSig
+ \see EpidWriteVerifierRl
+*/
+size_t EpidGetVerifierRlSize(VerifierCtx const* ctx);
+
+/// 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.
+
+ \param[in] ctx
+ The verifier context.
+ \param[out] ver_rl
+ An existing buffer in which to write the verifier revocation list.
+ \param[in] ver_rl_size
+ The size of the caller allocated output buffer in bytes.
+
+ \returns ::EpidStatus
+
+ \see EpidVerifierCreate
+ \see EpidVerifierSetVerifierRl
+ \see EpidBlacklistSig
+ \see EpidGetVerifierRlSize
+*/
+EpidStatus EpidWriteVerifierRl(VerifierCtx const* ctx, VerifierRl* ver_rl,
+ size_t ver_rl_size);
+
+/// Adds a valid name-based signature to the verifier blacklist.
+/*!
+
+ If the signature is not valid it will not be added to the blacklist.
+
+ \param[in] ctx
+ The verifier context.
+ \param[in] sig
+ The name-based signature to revoke.
+ \param[in] sig_len
+ The size of sig in bytes.
+ \param[in] msg
+ The message that was signed.
+ \param[in] msg_len
+ The size of msg in bytes.
+
+ \returns ::EpidStatus
+
+ \see EpidVerifierCreate
+ \see EpidVerifierSetVerifierRl
+ \see EpidWriteVerifierRl
+*/
+EpidStatus EpidBlacklistSig(VerifierCtx* ctx, EpidSignature const* sig,
+ size_t sig_len, void const* msg, size_t msg_len);
+
/*! @} */
+
#endif // EPID_VERIFIER_API_H_
diff --git a/epid/verifier/check_privrl_entry.c b/epid/verifier/src/check_privrl_entry.c
index 96e5792..631e19f 100644
--- a/epid/verifier/check_privrl_entry.c
+++ b/epid/verifier/src/check_privrl_entry.c
@@ -20,7 +20,7 @@
*/
#include "epid/verifier/api.h"
-#include "epid/verifier/context.h"
+#include "epid/verifier/src/context.h"
EpidStatus EpidCheckPrivRlEntry(VerifierCtx const* ctx,
BasicSignature const* sig, FpElemStr const* f) {
EpidStatus result = kEpidErr;
@@ -69,7 +69,7 @@ EpidStatus EpidCheckPrivRlEntry(VerifierCtx const* ctx,
}
// if t4 == k, sig revoked in PrivRl
if (compare_result) {
- result = kEpidSigRevokedinPrivRl;
+ result = kEpidSigRevokedInPrivRl;
} else {
result = kEpidNoErr;
}
diff --git a/epid/verifier/context.c b/epid/verifier/src/context.c
index c034c69..811dabb 100644
--- a/epid/verifier/context.c
+++ b/epid/verifier/src/context.c
@@ -20,13 +20,18 @@
*/
#include <string.h>
#include "epid/verifier/api.h"
-#include "epid/verifier/context.h"
-#include "epid/common/epid2params.h"
-#include "epid/common/memory.h"
+#include "epid/verifier/src/context.h"
+#include "epid/common/src/epid2params.h"
+#include "epid/common/src/memory.h"
#include "epid/common/math/pairing.h"
-#include "epid/common/endian_convert.h"
-#include "epid/common/sigrlvalid.h"
+#include "epid/common/src/endian_convert.h"
+#include "epid/common/src/sigrlvalid.h"
+/// Handle SDK Error with Break
+#define BREAK_ON_EPID_ERROR(ret) \
+ if (kEpidNoErr != (ret)) { \
+ break; \
+ }
/// create Verifier precomp of the VerifierCtx
static EpidStatus DoPrecomputation(VerifierCtx* ctx);
@@ -39,10 +44,7 @@ static bool IsGroupRlValid(GroupRl const* group_rl, size_t grp_rl_size) {
const size_t kMinGroupRlSize = sizeof(GroupRl) - sizeof(GroupId);
size_t input_grp_rl_size = 0;
- if (!group_rl) {
- return false;
- }
- if (grp_rl_size < kMinGroupRlSize) {
+ if (!group_rl || grp_rl_size < kMinGroupRlSize) {
return false;
}
if (ntohl(group_rl->n3) > (SIZE_MAX - kMinGroupRlSize) / sizeof(GroupId)) {
@@ -61,17 +63,14 @@ static bool IsPrivRlValid(GroupId const* gid, PrivRl const* priv_rl,
const size_t kMinPrivRlSize = sizeof(PrivRl) - sizeof(FpElemStr);
size_t input_priv_rl_size = 0;
- if (!gid || !priv_rl) {
- return false;
- }
- if (kMinPrivRlSize > priv_rl_size) {
+ if (!gid || !priv_rl || kMinPrivRlSize > priv_rl_size) {
return false;
}
if (ntohl(priv_rl->n1) >
(SIZE_MAX - kMinPrivRlSize) / sizeof(priv_rl->f[0])) {
return false;
}
- // sanity check of intput PrivRl size
+ // sanity check of input PrivRl size
input_priv_rl_size =
kMinPrivRlSize + ntohl(priv_rl->n1) * sizeof(priv_rl->f[0]);
if (input_priv_rl_size != priv_rl_size) {
@@ -181,6 +180,10 @@ EpidStatus EpidVerifierCreate(GroupPubKey const* pubkey,
verifier_ctx->group_rl = NULL;
verifier_ctx->priv_rl = NULL;
verifier_ctx->verifier_rl = NULL;
+ verifier_ctx->was_verifier_rl_updated = false;
+ verifier_ctx->basename_hash = NULL;
+ verifier_ctx->basename = NULL;
+ verifier_ctx->basename_len = 0;
*ctx = verifier_ctx;
result = kEpidNoErr;
} while (0);
@@ -208,7 +211,10 @@ void EpidVerifierDelete(VerifierCtx** ctx) {
(*ctx)->priv_rl = NULL;
(*ctx)->sig_rl = NULL;
(*ctx)->group_rl = NULL;
- (*ctx)->verifier_rl = NULL;
+ SAFE_FREE((*ctx)->verifier_rl);
+ DeleteEcPoint(&(*ctx)->basename_hash);
+ SAFE_FREE((*ctx)->basename);
+ (*ctx)->basename_len = 0;
SAFE_FREE(*ctx);
}
}
@@ -228,7 +234,7 @@ EpidStatus EpidVerifierWritePrecomp(VerifierCtx const* ctx,
return kEpidBadArgErr;
}
if (!ctx->e12 || !ctx->e22 || !ctx->e2w || !ctx->eg12 || !ctx->epid2_params ||
- !(ctx->epid2_params->GT)) {
+ !ctx->epid2_params->GT || !ctx->pub_key) {
return kEpidBadArgErr;
}
e12 = ctx->e12;
@@ -236,6 +242,7 @@ EpidStatus EpidVerifierWritePrecomp(VerifierCtx const* ctx,
e2w = ctx->e2w;
eg12 = ctx->eg12;
GT = ctx->epid2_params->GT;
+ precomp->gid = ctx->pub_key->gid;
result = WriteFfElement(GT, e12, &(precomp->e12), sizeof(precomp->e12));
if (kEpidNoErr != result) {
return result;
@@ -257,14 +264,10 @@ EpidStatus EpidVerifierWritePrecomp(VerifierCtx const* ctx,
EpidStatus EpidVerifierSetPrivRl(VerifierCtx* ctx, PrivRl const* priv_rl,
size_t priv_rl_size) {
- const size_t kMinPrivRlSize = sizeof(PrivRl) - sizeof(FpElemStr);
- if (!ctx || !priv_rl) {
- return kEpidBadArgErr;
- }
- if (kMinPrivRlSize > priv_rl_size) {
+ if (!ctx || !priv_rl || !ctx->pub_key) {
return kEpidBadArgErr;
}
- if (!ctx->pub_key) {
+ if (!IsPrivRlValid(&ctx->pub_key->gid, priv_rl, priv_rl_size)) {
return kEpidBadArgErr;
}
// Do not set an older version of priv rl
@@ -277,23 +280,16 @@ EpidStatus EpidVerifierSetPrivRl(VerifierCtx* ctx, PrivRl const* priv_rl,
return kEpidBadArgErr;
}
}
- if (!IsPrivRlValid(&ctx->pub_key->gid, priv_rl, priv_rl_size)) {
- return kEpidBadArgErr;
- }
ctx->priv_rl = priv_rl;
return kEpidNoErr;
}
EpidStatus EpidVerifierSetSigRl(VerifierCtx* ctx, SigRl const* sig_rl,
size_t sig_rl_size) {
- const size_t kMinSigRlSize = sizeof(SigRl) - sizeof(SigRlEntry);
- if (!ctx || !sig_rl) {
- return kEpidBadArgErr;
- }
- if (kMinSigRlSize > sig_rl_size) {
+ if (!ctx || !sig_rl || !ctx->pub_key) {
return kEpidBadArgErr;
}
- if (!ctx->pub_key) {
+ if (!IsSigRlValid(&ctx->pub_key->gid, sig_rl, sig_rl_size)) {
return kEpidBadArgErr;
}
// Do not set an older version of sig rl
@@ -306,9 +302,6 @@ EpidStatus EpidVerifierSetSigRl(VerifierCtx* ctx, SigRl const* sig_rl,
return kEpidBadArgErr;
}
}
- if (!IsSigRlValid(&ctx->pub_key->gid, sig_rl, sig_rl_size)) {
- return kEpidBadArgErr;
- }
ctx->sig_rl = sig_rl;
return kEpidNoErr;
@@ -316,10 +309,7 @@ EpidStatus EpidVerifierSetSigRl(VerifierCtx* ctx, SigRl const* sig_rl,
EpidStatus EpidVerifierSetGroupRl(VerifierCtx* ctx, GroupRl const* grp_rl,
size_t grp_rl_size) {
- if (!ctx || !grp_rl) {
- return kEpidBadArgErr;
- }
- if (!ctx->pub_key) {
+ if (!ctx || !grp_rl || !ctx->pub_key) {
return kEpidBadArgErr;
}
if (!IsGroupRlValid(grp_rl, grp_rl_size)) {
@@ -342,15 +332,22 @@ EpidStatus EpidVerifierSetGroupRl(VerifierCtx* ctx, GroupRl const* grp_rl,
EpidStatus EpidVerifierSetVerifierRl(VerifierCtx* ctx, VerifierRl const* ver_rl,
size_t ver_rl_size) {
- if (!ctx || !ver_rl) {
- return kEpidBadArgErr;
- }
- if (!ctx->pub_key) {
+ VerifierRl* verifier_rl = NULL;
+ EpidStatus res = kEpidErr;
+ EcPoint* B = NULL;
+ bool cmp_result = false;
+ EcGroup* G1 = NULL;
+ if (!ctx || !ver_rl || !ctx->pub_key || !ctx->epid2_params ||
+ !ctx->epid2_params->G1) {
return kEpidBadArgErr;
}
if (!IsVerifierRlValid(&ctx->pub_key->gid, ver_rl, ver_rl_size)) {
return kEpidBadArgErr;
}
+ // if random basename
+ if (!ctx->basename_hash) {
+ return kEpidInconsistentBasenameSetErr;
+ }
// Do not set an older version of verifier rl
if (ctx->verifier_rl) {
unsigned int current_ver = 0;
@@ -361,18 +358,233 @@ EpidStatus EpidVerifierSetVerifierRl(VerifierCtx* ctx, VerifierRl const* ver_rl,
return kEpidBadArgErr;
}
}
+ do {
+ G1 = ctx->epid2_params->G1;
+ res = NewEcPoint(G1, &B);
+ BREAK_ON_EPID_ERROR(res);
+ res = ReadEcPoint(G1, &(ver_rl->B), sizeof(ver_rl->B), B);
+ BREAK_ON_EPID_ERROR(res);
+ // verify B = G1.hash(bsn)
+ res = EcIsEqual(G1, ctx->basename_hash, B, &cmp_result);
+ BREAK_ON_EPID_ERROR(res);
+ if (true != cmp_result) {
+ res = kEpidBadArgErr;
+ break;
+ }
+ verifier_rl = SAFE_ALLOC(ver_rl_size);
+ if (!verifier_rl) {
+ res = kEpidMemAllocErr;
+ break;
+ }
+ if (0 != memcpy_S(verifier_rl, ver_rl_size, ver_rl, ver_rl_size)) {
+ res = kEpidBadArgErr;
+ break;
+ }
+ res = kEpidNoErr;
+ } while (0);
+ DeleteEcPoint(&B);
+ SAFE_FREE(ctx->verifier_rl);
+ if (kEpidNoErr == res) {
+ ctx->verifier_rl = verifier_rl;
+ ctx->was_verifier_rl_updated = false;
+ }
+ return res;
+}
- ctx->verifier_rl = ver_rl;
+size_t EpidGetVerifierRlSize(VerifierCtx const* ctx) {
+ size_t empty_size = 0;
+ if (!ctx || !ctx->basename_hash) return 0;
+ empty_size = sizeof(VerifierRl) - sizeof(((VerifierRl*)0)->K[0]);
+ if (!ctx->verifier_rl) return empty_size;
+ return empty_size +
+ ntohl(ctx->verifier_rl->n4) * sizeof(ctx->verifier_rl->K[0]);
+}
+EpidStatus EpidWriteVerifierRl(VerifierCtx const* ctx, VerifierRl* ver_rl,
+ size_t ver_rl_size) {
+ EpidStatus res = kEpidErr;
+ size_t real_ver_rl_size = 0;
+ if (!ctx || !ver_rl || !ctx->pub_key || !ctx->epid2_params ||
+ !ctx->epid2_params->G1) {
+ return kEpidBadArgErr;
+ }
+ real_ver_rl_size = EpidGetVerifierRlSize(ctx);
+ if (real_ver_rl_size == 0) {
+ return kEpidErr;
+ }
+ if (real_ver_rl_size != ver_rl_size) {
+ return kEpidBadArgErr;
+ }
+ if (ctx->verifier_rl) {
+ // serialize
+ if (0 !=
+ memcpy_S(ver_rl, ver_rl_size, ctx->verifier_rl, real_ver_rl_size)) {
+ return kEpidBadArgErr;
+ }
+ // update rl version if it has changed
+ if (ctx->was_verifier_rl_updated) {
+ uint32_t prior_rl_version = ntohl(ver_rl->version);
+ *((uint32_t*)(&ver_rl->version)) = htonl(prior_rl_version + 1);
+ ((VerifierCtx*)ctx)->was_verifier_rl_updated = false;
+ }
+ } else {
+ // write empty rl
+ res = WriteEcPoint(ctx->epid2_params->G1, ctx->basename_hash, &(ver_rl->B),
+ sizeof(ver_rl->B));
+ if (kEpidNoErr != res) {
+ return res;
+ }
+ ver_rl->gid = ctx->pub_key->gid;
+ memset(&ver_rl->version, 0, sizeof(ver_rl->version));
+ memset(&ver_rl->n4, 0, sizeof(ver_rl->n4));
+ }
return kEpidNoErr;
}
+EpidStatus EpidBlacklistSig(VerifierCtx* ctx, EpidSignature const* sig,
+ size_t sig_len, void const* msg, size_t msg_len) {
+ EpidStatus result = kEpidErr;
+ VerifierRl* ver_rl = NULL;
+ if (!ctx || !sig || (!msg && msg_len > 0) || !ctx->epid2_params ||
+ !ctx->epid2_params->G1) {
+ return kEpidBadArgErr;
+ }
+ if (sig_len < sizeof(EpidSignature) - sizeof(((EpidSignature*)0)->sigma[0])) {
+ return kEpidBadArgErr;
+ }
+ if (!ctx->basename_hash) {
+ return kEpidInconsistentBasenameSetErr;
+ }
+
+ do {
+ EcGroup* G1 = ctx->epid2_params->G1;
+ uint32_t n4 = 0;
+ result = EpidVerify(ctx, sig, sig_len, msg, msg_len);
+ BREAK_ON_EPID_ERROR(result);
+
+ if (!ctx->verifier_rl) {
+ ver_rl = SAFE_ALLOC(sizeof(VerifierRl));
+ if (!ver_rl) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+ // write empty rl
+ ver_rl->gid = ctx->pub_key->gid;
+ result =
+ WriteEcPoint(G1, ctx->basename_hash, &(ver_rl->B), sizeof(ver_rl->B));
+ BREAK_ON_EPID_ERROR(result);
+ } else {
+ uint32_t prior_rl_version = ntohl(ctx->verifier_rl->version);
+ n4 = ntohl(ctx->verifier_rl->n4);
+
+ if (prior_rl_version == UINT32_MAX || n4 == UINT32_MAX) {
+ result = kEpidBadArgErr;
+ break;
+ }
+ ver_rl =
+ SAFE_REALLOC(ctx->verifier_rl, EpidGetVerifierRlSize(ctx) +
+ sizeof(((VerifierRl*)0)->K[0]));
+ if (!ver_rl) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+ }
+
+ ctx->was_verifier_rl_updated = true;
+ ++n4;
+ ver_rl->K[n4 - 1] = sig->sigma0.K;
+
+ *((uint32_t*)(&ver_rl->n4)) = htonl(n4);
+ ctx->verifier_rl = ver_rl;
+ result = kEpidNoErr;
+ } while (0);
+ if (kEpidNoErr != result) SAFE_FREE(ver_rl);
+ return result;
+}
+
EpidStatus EpidVerifierSetHashAlg(VerifierCtx* ctx, HashAlg hash_alg) {
- if (!ctx) return kEpidBadArgErr;
+ EpidStatus result = kEpidErr;
+ if (!ctx) {
+ return kEpidBadArgErr;
+ }
if (kSha256 != hash_alg && kSha384 != hash_alg && kSha512 != hash_alg)
return kEpidBadArgErr;
- ctx->hash_alg = hash_alg;
- return kEpidNoErr;
+
+ if (ctx->hash_alg != hash_alg) {
+ HashAlg previous_hash_alg = ctx->hash_alg;
+ ctx->hash_alg = hash_alg;
+
+ result = EpidVerifierSetBasename(ctx, ctx->basename, ctx->basename_len);
+ if (kEpidNoErr != result) {
+ ctx->hash_alg = previous_hash_alg;
+ return result;
+ }
+ }
+ result = kEpidNoErr;
+ return result;
+}
+
+EpidStatus EpidVerifierSetBasename(VerifierCtx* ctx, void const* basename,
+ size_t basename_len) {
+ EpidStatus result = kEpidErr;
+ EcPoint* basename_hash = NULL;
+ uint8_t* basename_buffer = NULL;
+
+ if (!ctx || !ctx->epid2_params || !ctx->epid2_params->G1) {
+ return kEpidBadArgErr;
+ }
+ if (!basename && basename_len > 0) {
+ return kEpidBadArgErr;
+ }
+
+ if (!basename) {
+ DeleteEcPoint(&ctx->basename_hash);
+ ctx->basename_hash = NULL;
+ ctx->was_verifier_rl_updated = false;
+ SAFE_FREE(ctx->basename);
+ ctx->basename_len = 0;
+ return kEpidNoErr;
+ }
+
+ do {
+ size_t i = 0;
+ EcGroup* G1 = ctx->epid2_params->G1;
+ result = NewEcPoint(G1, &basename_hash);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ result = EcHash(G1, basename, basename_len, ctx->hash_alg, basename_hash);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ if (basename_len > 0) {
+ basename_buffer = SAFE_ALLOC(basename_len);
+ if (!basename_buffer) {
+ result = kEpidMemAllocErr;
+ break;
+ }
+ }
+
+ SAFE_FREE(ctx->verifier_rl);
+
+ DeleteEcPoint(&ctx->basename_hash);
+ ctx->basename_hash = basename_hash;
+ SAFE_FREE(ctx->basename);
+ ctx->basename = basename_buffer;
+ ctx->basename_len = basename_len;
+ for (i = 0; i < basename_len; i++) {
+ ctx->basename[i] = ((uint8_t*)basename)[i];
+ }
+ result = kEpidNoErr;
+ } while (0);
+
+ if (kEpidNoErr != result) {
+ DeleteEcPoint(&basename_hash);
+ SAFE_FREE(basename_buffer);
+ }
+ return result;
}
static EpidStatus DoPrecomputation(VerifierCtx* ctx) {
@@ -435,7 +647,11 @@ static EpidStatus ReadPrecomputation(VerifierPrecomp const* precomp_str,
return kEpidBadArgErr;
}
if (!ctx->epid2_params || !ctx->epid2_params->GT || !ctx->e12 || !ctx->e22 ||
- !ctx->e2w || !ctx->eg12) {
+ !ctx->e2w || !ctx->eg12 || !ctx->pub_key) {
+ return kEpidBadArgErr;
+ }
+ if (0 !=
+ memcmp(&precomp_str->gid, &ctx->pub_key->gid, sizeof(precomp_str->gid))) {
return kEpidBadArgErr;
}
params = ctx->epid2_params;
diff --git a/epid/verifier/context.h b/epid/verifier/src/context.h
index 049f5f7..705c55e 100644
--- a/epid/verifier/context.h
+++ b/epid/verifier/src/context.h
@@ -13,17 +13,17 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################*/
-#ifndef EPID_VERIFIER_CONTEXT_H_
-#define EPID_VERIFIER_CONTEXT_H_
+#ifndef EPID_VERIFIER_SRC_CONTEXT_H_
+#define EPID_VERIFIER_SRC_CONTEXT_H_
/*!
* \file
* \brief Verifier context interface.
*/
-#include "epid/common/grouppubkey.h"
+#include "epid/common/src/grouppubkey.h"
#include "epid/common/math/ecgroup.h"
#include "epid/common/math/finitefield.h"
-#include "epid/common/epid2params.h"
-#include "epid/common/commitment.h"
+#include "epid/common/src/epid2params.h"
+#include "epid/common/src/commitment.h"
/// Verifier context definition
struct VerifierCtx {
@@ -35,9 +35,13 @@ struct VerifierCtx {
PrivRl const* priv_rl; ///< Private key based revocation list - not owned
SigRl const* sig_rl; ///< Signature based revocation list - not owned
GroupRl const* group_rl; ///< Group revocation list - not owned
- VerifierRl const* verifier_rl; ///< Verifier revocation list - not owned
- Epid2Params_* epid2_params; ///< Intel(R) EPID 2.0 params
+ VerifierRl* verifier_rl; ///< Verifier revocation list
+ bool was_verifier_rl_updated; ///< Indicates if blacklist was updated
+ Epid2Params_* epid2_params; ///< Intel(R) EPID 2.0 params
CommitValues commit_values; ///< Values that are hashed to create commitment
HashAlg hash_alg; ///< Hash algorithm to use
+ EcPoint* basename_hash; ///< EcHash of the basename (NULL = random base)
+ uint8_t* basename; ///< Basename to use
+ size_t basename_len; ///< Number of bytes in basename
};
-#endif // EPID_VERIFIER_CONTEXT_H_
+#endif // EPID_VERIFIER_SRC_CONTEXT_H_
diff --git a/epid/verifier/nrverify.c b/epid/verifier/src/nrverify.c
index b139f11..d02d4a6 100644
--- a/epid/verifier/nrverify.c
+++ b/epid/verifier/src/nrverify.c
@@ -19,9 +19,9 @@
* \brief NrVerfy implementation.
*/
-#include "epid/common/memory.h"
+#include "epid/common/src/memory.h"
#include "epid/verifier/api.h"
-#include "epid/verifier/context.h"
+#include "epid/verifier/src/context.h"
/// Handle SDK Error with Break
#define BREAK_ON_EPID_ERROR(ret) \
@@ -198,6 +198,7 @@ EpidStatus EpidNrVerify(VerifierCtx const* ctx, BasicSignature const* sig,
// commit_values is allocated such that there are msg_len bytes available
// starting at commit_values->msg
if (msg) {
+ // Memory copy is used to copy a message of variable length
if (0 != memcpy_S(&commit_values->msg[0], msg_len, msg, msg_len)) {
sts = kEpidBadArgErr;
break;
diff --git a/epid/verifier/sigs_linked.c b/epid/verifier/src/sigs_linked.c
index 733233c..733233c 100644
--- a/epid/verifier/sigs_linked.c
+++ b/epid/verifier/src/sigs_linked.c
diff --git a/epid/verifier/verify.c b/epid/verifier/src/verify.c
index b566718..6fce3db 100644
--- a/epid/verifier/verify.c
+++ b/epid/verifier/src/verify.c
@@ -20,8 +20,8 @@
*/
#include <string.h>
#include "epid/verifier/api.h"
-#include "epid/verifier/context.h"
-#include "epid/common/endian_convert.h"
+#include "epid/verifier/src/context.h"
+#include "epid/common/src/endian_convert.h"
/// Handle SDK Error with Break
#define BREAK_ON_EPID_ERROR(ret) \
@@ -66,8 +66,7 @@ static size_t EpidGetVerifierRlCount(VerifierRl const* rl) {
// implements section 4.1.2 "Verify algorithm" from Intel(R) EPID 2.0 Spec
EpidStatus EpidVerify(VerifierCtx const* ctx, EpidSignature const* sig,
- size_t sig_len, void const* msg, size_t msg_len,
- void const* basename, size_t basename_len) {
+ size_t sig_len, void const* msg, size_t msg_len) {
// Step 1. Setup
size_t const sig_header_len = (sizeof(EpidSignature) - sizeof(NrProof));
EpidStatus sts = kEpidErr;
@@ -80,10 +79,6 @@ EpidStatus EpidVerify(VerifierCtx const* ctx, EpidSignature const* sig,
// if message is non-empty it must have both length and content
return kEpidBadArgErr;
}
- if (!basename && (0 != basename_len)) {
- // if basename is non-empty it must have both length and content
- return kEpidBadArgErr;
- }
if (!ctx->epid2_params || !ctx->pub_key) {
return kEpidBadArgErr;
}
@@ -96,8 +91,7 @@ EpidStatus EpidVerify(VerifierCtx const* ctx, EpidSignature const* sig,
return kEpidBadArgErr;
}
// Step 2. The verifier verifies the basic signature Sigma0 as follows:
- sts = EpidVerifyBasicSig(ctx, &sig->sigma0, msg, msg_len, basename,
- basename_len);
+ sts = EpidVerifyBasicSig(ctx, &sig->sigma0, msg, msg_len);
if (sts != kEpidNoErr) {
// p. If any of the above verifications fails, the verifier aborts and
// outputs 1
@@ -112,7 +106,7 @@ EpidStatus EpidVerify(VerifierCtx const* ctx, EpidSignature const* sig,
if (0 == memcmp(&ctx->pub_key->gid, &ctx->group_rl->gid[i],
sizeof(ctx->pub_key->gid))) {
// b. If gid matches an entry in GroupRL, aborts and returns 2.
- return kEpidSigRevokedinGroupRl;
+ return kEpidSigRevokedInGroupRl;
}
}
}
@@ -133,7 +127,7 @@ EpidStatus EpidVerify(VerifierCtx const* ctx, EpidSignature const* sig,
sts = EpidCheckPrivRlEntry(ctx, &sig->sigma0, &ctx->priv_rl->f[i]);
if (sts != kEpidNoErr) {
// c. If the above step fails, the verifier aborts and output 3.
- return kEpidSigRevokedinPrivRl;
+ return kEpidSigRevokedInPrivRl;
}
}
}
@@ -169,7 +163,7 @@ EpidStatus EpidVerify(VerifierCtx const* ctx, EpidSignature const* sig,
&sig->sigma[i]);
if (sts != kEpidNoErr) {
// e. If the above step fails, the verifier aborts and output 4.
- return kEpidSigRevokedinSigRl;
+ return kEpidSigRevokedInSigRl;
}
}
}
@@ -193,7 +187,7 @@ EpidStatus EpidVerify(VerifierCtx const* ctx, EpidSignature const* sig,
if (0 == memcmp(&ctx->verifier_rl->K[i], &sig->sigma0.K,
sizeof(sig->sigma0.K))) {
// d. If the above step fails, the verifier aborts and output 5.
- return kEpidSigRevokedinVerifierRl;
+ return kEpidSigRevokedInVerifierRl;
}
}
}
diff --git a/epid/verifier/verifybasic.c b/epid/verifier/src/verifybasic.c
index 7d0a00e..3e7b15b 100644
--- a/epid/verifier/verifybasic.c
+++ b/epid/verifier/src/verifybasic.c
@@ -20,8 +20,8 @@
*/
#include "epid/verifier/api.h"
-#include "epid/verifier/context.h"
-#include "epid/common/memory.h"
+#include "epid/verifier/src/context.h"
+#include "epid/common/src/memory.h"
/// Handle SDK Error with Break
#define BREAK_ON_EPID_ERROR(ret) \
@@ -33,8 +33,7 @@
#define COUNT_OF(A) (sizeof(A) / sizeof((A)[0]))
EpidStatus EpidVerifyBasicSig(VerifierCtx const* ctx, BasicSignature const* sig,
- void const* msg, size_t msg_len,
- void const* basename, size_t basename_len) {
+ void const* msg, size_t msg_len) {
EpidStatus res = kEpidNotImpl;
EcPoint* B = NULL;
@@ -55,7 +54,6 @@ EpidStatus EpidVerifyBasicSig(VerifierCtx const* ctx, BasicSignature const* sig,
FfElement* sb = NULL;
FfElement* nc = NULL;
FfElement* nsx = NULL;
- EcPoint* basename_hash = NULL;
FfElement* c_hash = NULL;
if (!ctx || !sig) return kEpidBadArgErr;
@@ -63,7 +61,6 @@ EpidStatus EpidVerifyBasicSig(VerifierCtx const* ctx, BasicSignature const* sig,
// if message is non-empty it must have both length and content
return kEpidBadArgErr;
}
- if (!basename && (0 != basename_len)) return kEpidBadArgErr;
if (!ctx->epid2_params || !ctx->pub_key) return kEpidBadArgErr;
do {
@@ -83,6 +80,7 @@ EpidStatus EpidVerifyBasicSig(VerifierCtx const* ctx, BasicSignature const* sig,
EcPoint* g2 = ctx->epid2_params->g2;
EcPoint* w = ctx->pub_key->w;
CommitValues commit_values = ctx->commit_values;
+ EcPoint* basename_hash = ctx->basename_hash;
if (!G1 || !G2 || !GT || !Fp || !g1 || !g2 || !w) {
res = kEpidBadArgErr;
@@ -125,8 +123,6 @@ EpidStatus EpidVerifyBasicSig(VerifierCtx const* ctx, BasicSignature const* sig,
BREAK_ON_EPID_ERROR(res);
res = NewFfElement(Fp, &nsx);
BREAK_ON_EPID_ERROR(res);
- res = NewEcPoint(G1, &basename_hash);
- BREAK_ON_EPID_ERROR(res);
res = NewFfElement(Fp, &c_hash);
BREAK_ON_EPID_ERROR(res);
@@ -152,9 +148,7 @@ EpidStatus EpidVerifyBasicSig(VerifierCtx const* ctx, BasicSignature const* sig,
}
// c. If bsn is provided, the verifier verifies B =
// G1.hash(bsn).
- if (basename && basename_len > 0) {
- res = EcHash(G1, basename, basename_len, ctx->hash_alg, basename_hash);
- BREAK_ON_EPID_ERROR(res);
+ if (basename_hash) {
res = EcIsEqual(G1, basename_hash, B, &cmp_result);
BREAK_ON_EPID_ERROR(res);
if (cmp_result != true) {
@@ -316,7 +310,6 @@ EpidStatus EpidVerifyBasicSig(VerifierCtx const* ctx, BasicSignature const* sig,
DeleteFfElement(&sb);
DeleteFfElement(&nc);
DeleteFfElement(&nsx);
- DeleteEcPoint(&basename_hash);
DeleteFfElement(&c_hash);
return (res);
diff --git a/epid/verifier/unittests/check_privrl_entry-test.cc b/epid/verifier/unittests/check_privrl_entry-test.cc
index 7ec5275..20ceb07 100644
--- a/epid/verifier/unittests/check_privrl_entry-test.cc
+++ b/epid/verifier/unittests/check_privrl_entry-test.cc
@@ -60,7 +60,7 @@ TEST_F(EpidVerifierTest, CheckPrivRlEntryFailsGivenRevokedPrivKey) {
FpElemStr fp_str = ((PrivRl const*)priv_rl.data())->f[0];
BasicSignature basic_signature = ((EpidSignature const*)sig.data())->sigma0;
- EXPECT_EQ(kEpidSigRevokedinPrivRl,
+ EXPECT_EQ(kEpidSigRevokedInPrivRl,
EpidCheckPrivRlEntry(verifier, &basic_signature, &fp_str));
}
@@ -68,7 +68,7 @@ TEST_F(EpidVerifierTest,
CheckPrivRlEntryFailsGivenRevokedPrivKeyUsingIkgfData) {
// test a revoked priv key
// check ctx, sig, f for NULL
- auto& pub_key = this->pub_key_ikgf_str;
+ auto& pub_key = this->kPubKeyIkgfStr;
auto& priv_rl = this->kPrivRlIkgf;
// signed using revoked key
auto& sig = this->kSigRevokedPrivKeySha256Bsn0Msg0Ikgf;
@@ -78,7 +78,7 @@ TEST_F(EpidVerifierTest,
FpElemStr fp_str = ((PrivRl const*)priv_rl.data())->f[2];
BasicSignature basic_signature = ((EpidSignature const*)sig.data())->sigma0;
- EXPECT_EQ(kEpidSigRevokedinPrivRl,
+ EXPECT_EQ(kEpidSigRevokedInPrivRl,
EpidCheckPrivRlEntry(verifier, &basic_signature, &fp_str));
}
@@ -100,7 +100,7 @@ TEST_F(EpidVerifierTest, CheckPrivRlEntrySucceedsGivenUnRevokedPrivKey) {
TEST_F(EpidVerifierTest,
CheckPrivRlEntrySucceedsGivenUnRevokedPrivKeyUsingIkgfData) {
// test a non revoked priv key
- auto& pub_key = this->pub_key_ikgf_str;
+ auto& pub_key = this->kPubKeyIkgfStr;
auto& priv_rl = this->kPrivRlIkgf;
// signed using un revoked key
auto& sig = this->kSigMember0Sha256Bsn0Msg0Ikgf;
diff --git a/epid/verifier/unittests/context-test.cc b/epid/verifier/unittests/context-test.cc
index a5941b1..119baea 100644
--- a/epid/verifier/unittests/context-test.cc
+++ b/epid/verifier/unittests/context-test.cc
@@ -26,7 +26,8 @@
extern "C" {
#include "epid/verifier/api.h"
-#include "epid/verifier/context.h"
+#include "epid/verifier/src/context.h"
+#include "epid/common/src/endian_convert.h"
}
#include "epid/verifier/unittests/verifier-testhelper.h"
@@ -35,53 +36,65 @@ extern "C" {
bool operator==(VerifierPrecomp const& lhs, VerifierPrecomp const& rhs) {
return 0 == std::memcmp(&lhs, &rhs, sizeof(lhs));
}
+
+bool operator==(OctStr32 const& lhs, OctStr32 const& rhs) {
+ return 0 == std::memcmp(&lhs, &rhs, sizeof(lhs));
+}
namespace {
//////////////////////////////////////////////////////////////////////////
// EpidVerifierCreate Tests
TEST_F(EpidVerifierTest, CreateFailsGivenNullPointer) {
VerifierCtx* ctx = nullptr;
EXPECT_EQ(kEpidBadArgErr,
- EpidVerifierCreate(&this->pub_key_str, &this->verifier_precomp_str,
+ EpidVerifierCreate(&this->kPubKeyStr, &this->kVerifierPrecompStr,
nullptr));
EpidVerifierDelete(&ctx);
EXPECT_EQ(kEpidBadArgErr,
- EpidVerifierCreate(nullptr, &this->verifier_precomp_str, &ctx));
+ EpidVerifierCreate(nullptr, &this->kVerifierPrecompStr, &ctx));
EpidVerifierDelete(&ctx);
}
TEST_F(EpidVerifierTest, CreateSucceedsGivenNullPrecomp) {
VerifierCtx* ctx = nullptr;
- EXPECT_EQ(kEpidNoErr, EpidVerifierCreate(&this->pub_key_str, nullptr, &ctx));
+ EXPECT_EQ(kEpidNoErr, EpidVerifierCreate(&this->kPubKeyStr, nullptr, &ctx));
EpidVerifierDelete(&ctx);
}
TEST_F(EpidVerifierTest, CreateSucceedsGivenNullPrecompUsingIkgfData) {
VerifierCtx* ctx = nullptr;
EXPECT_EQ(kEpidNoErr,
- EpidVerifierCreate(&this->pub_key_ikgf_str, nullptr, &ctx));
+ EpidVerifierCreate(&this->kPubKeyIkgfStr, nullptr, &ctx));
EpidVerifierDelete(&ctx);
}
TEST_F(EpidVerifierTest, CreateFailsGivenInvalidPubkey) {
VerifierCtx* ctx = nullptr;
- GroupPubKey pubkey_with_bad_h1 = this->pub_key_str;
+ GroupPubKey pubkey_with_bad_h1 = this->kPubKeyStr;
pubkey_with_bad_h1.h1.x.data.data[31]++; // munge h1 so not in G1
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierCreate(&pubkey_with_bad_h1, nullptr, &ctx));
EpidVerifierDelete(&ctx);
- GroupPubKey pubkey_with_bad_h2 = this->pub_key_str;
+ GroupPubKey pubkey_with_bad_h2 = this->kPubKeyStr;
pubkey_with_bad_h2.h2.x.data.data[31]++; // munge h2 so not in G1
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierCreate(&pubkey_with_bad_h2, nullptr, &ctx));
EpidVerifierDelete(&ctx);
- GroupPubKey pubkey_with_bad_w = this->pub_key_str;
+ GroupPubKey pubkey_with_bad_w = this->kPubKeyStr;
pubkey_with_bad_w.w.x[0].data.data[31]++; // munge w so not in G2
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierCreate(&pubkey_with_bad_w, nullptr, &ctx));
EpidVerifierDelete(&ctx);
}
+TEST_F(EpidVerifierTest, CreateFailsGivenBadGroupIdInPrecomp) {
+ VerifierCtx* ctx = nullptr;
+ // tweak GID
+ auto verifier_precomp = this->kVerifierPrecompStr;
+ verifier_precomp.gid.data[0] = ~verifier_precomp.gid.data[0];
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidVerifierCreate(&this->kPubKeyStr, &verifier_precomp, &ctx));
+}
//////////////////////////////////////////////////////////////////////////
// EpidVerifierDelete Tests
TEST_F(EpidVerifierTest, DeleteNullsVerifierCtx) {
VerifierCtx* ctx = nullptr;
- EpidVerifierCreate(&this->pub_key_str, nullptr, &ctx);
+ EpidVerifierCreate(&this->kPubKeyStr, nullptr, &ctx);
EpidVerifierDelete(&ctx);
EXPECT_EQ(nullptr, ctx);
}
@@ -95,20 +108,20 @@ TEST_F(EpidVerifierTest, DeleteWorksGivenNullVerifierCtx) {
// EpidVerifierWritePrecomp
TEST_F(EpidVerifierTest, WritePrecompFailsGivenNullPointer) {
VerifierPrecomp precomp;
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
VerifierCtx* ctx = verifier;
EXPECT_EQ(kEpidBadArgErr, EpidVerifierWritePrecomp(nullptr, &precomp));
EXPECT_EQ(kEpidBadArgErr, EpidVerifierWritePrecomp(ctx, nullptr));
}
TEST_F(EpidVerifierTest, WritePrecompSucceedGivenValidArgument) {
VerifierPrecomp precomp;
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
VerifierCtx* ctx = verifier;
EXPECT_EQ(kEpidNoErr, EpidVerifierWritePrecomp(ctx, &precomp));
- VerifierPrecomp expected_precomp = this->verifier_precomp_str;
+ VerifierPrecomp expected_precomp = this->kVerifierPrecompStr;
EXPECT_EQ(expected_precomp, precomp);
- VerifierCtxObj verifier2(this->pub_key_str);
+ VerifierCtxObj verifier2(this->kPubKeyStr);
VerifierCtx* ctx2 = verifier2;
EXPECT_EQ(kEpidNoErr, EpidVerifierWritePrecomp(ctx2, &precomp));
EXPECT_EQ(expected_precomp, precomp);
@@ -116,30 +129,30 @@ TEST_F(EpidVerifierTest, WritePrecompSucceedGivenValidArgument) {
//////////////////////////////////////////////////////////////////////////
// EpidVerifierSetPrivRl
TEST_F(EpidVerifierTest, SetPrivRlFailsGivenNullPointer) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
PrivRl prl = {{0}, {0}, {0}, {0}};
- prl.gid = this->pub_key_str.gid;
+ prl.gid = this->kPubKeyStr.gid;
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetPrivRl(nullptr, &prl, sizeof(prl)));
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetPrivRl(verifier, nullptr, sizeof(prl)));
}
TEST_F(EpidVerifierTest, SetPrivRlFailsGivenZeroSize) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
PrivRl prl = {{0}, {0}, {0}, {0}};
- prl.gid = this->pub_key_str.gid;
+ prl.gid = this->kPubKeyStr.gid;
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetPrivRl(verifier, &prl, 0));
}
// Size parameter must be at least big enough for n1 == 0 case
TEST_F(EpidVerifierTest, SetPrivRlFailsGivenTooSmallSize) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
PrivRl prl = {{0}, {0}, {0}, {0}};
- prl.gid = this->pub_key_str.gid;
+ prl.gid = this->kPubKeyStr.gid;
EXPECT_EQ(
kEpidBadArgErr,
EpidVerifierSetPrivRl(verifier, &prl, (sizeof(prl) - sizeof(prl.f)) - 1));
- prl.n1 = this->octstr32_1;
+ prl.n1 = this->kOctStr32_1;
EXPECT_EQ(
kEpidBadArgErr,
EpidVerifierSetPrivRl(verifier, &prl, (sizeof(prl) - sizeof(prl.f)) - 1));
@@ -147,59 +160,79 @@ TEST_F(EpidVerifierTest, SetPrivRlFailsGivenTooSmallSize) {
// Size parameter must be cross-checked with n1 value in priv_rl
TEST_F(EpidVerifierTest, SetPrivRlFailsGivenN1TooBigForSize) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
PrivRl prl = {{0}, {0}, {0}, {0}};
- prl.gid = this->pub_key_str.gid;
- prl.n1 = this->octstr32_1;
+ prl.gid = this->kPubKeyStr.gid;
+ prl.n1 = this->kOctStr32_1;
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetPrivRl(verifier, &prl, sizeof(prl) - sizeof(prl.f)));
}
TEST_F(EpidVerifierTest, SetPrivRlFailsGivenN1TooSmallForSize) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
PrivRl prl = {{0}, {0}, {0}, {0}};
- prl.gid = this->pub_key_str.gid;
+ prl.gid = this->kPubKeyStr.gid;
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetPrivRl(verifier, &prl, sizeof(prl)));
}
TEST_F(EpidVerifierTest, SetPrivRlPassesGivenDefaultPrivRl) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
PrivRl prl = {{0}, {0}, {0}, {0}};
- prl.gid = this->pub_key_str.gid;
+ prl.gid = this->kPubKeyStr.gid;
EXPECT_EQ(kEpidNoErr,
EpidVerifierSetPrivRl(verifier, &prl, sizeof(prl) - sizeof(prl.f)));
}
TEST_F(EpidVerifierTest, SetPrivRlPassesGivenDefaultPrivRlUsingIkgfData) {
- VerifierCtxObj verifier(this->pub_key_ikgf_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyIkgfStr, this->kVerifierPrecompIkgfStr);
PrivRl prl = {{0}, {0}, {0}, {0}};
- prl.gid = this->pub_key_ikgf_str.gid;
+ prl.gid = this->kPubKeyIkgfStr.gid;
EXPECT_EQ(kEpidNoErr,
EpidVerifierSetPrivRl(verifier, &prl, sizeof(prl) - sizeof(prl.f)));
}
+TEST_F(EpidVerifierTest, SetPrivRlPassesGivenEmptyPrivRlUsingIkgfData) {
+ VerifierCtxObj verifier(this->kPubKeyIkgfStr, this->kVerifierPrecompIkgfStr);
+
+ uint8_t priv_rl_data_n1_zero_ikgf[] = {
+#include "epid/common-testhelper/testdata/ikgf/groupa/privrl_empty.inc"
+ };
+ PrivRl* priv_rl = reinterpret_cast<PrivRl*>(priv_rl_data_n1_zero_ikgf);
+ size_t priv_rl_size = sizeof(priv_rl_data_n1_zero_ikgf);
+ EXPECT_EQ(kEpidNoErr, EpidVerifierSetPrivRl(verifier, priv_rl, priv_rl_size));
+}
+
TEST_F(EpidVerifierTest, SetPrivRlPassesGivenPrivRlWithSingleElement) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
PrivRl prl = {{0}, {0}, {0}, {0}};
- prl.gid = this->pub_key_str.gid;
- prl.n1 = this->octstr32_1;
+ prl.gid = this->kPubKeyStr.gid;
+ prl.n1 = this->kOctStr32_1;
EXPECT_EQ(kEpidNoErr, EpidVerifierSetPrivRl(verifier, &prl, sizeof(prl)));
}
TEST_F(EpidVerifierTest, SetPrivRlFailsGivenBadGroupId) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
PrivRl prl = {{0}, {0}, {0}, {0}};
- prl.gid = this->pub_key_str.gid;
+ prl.gid = this->kPubKeyStr.gid;
prl.gid.data[0] = ~prl.gid.data[0];
- prl.n1 = this->octstr32_1;
+ prl.n1 = this->kOctStr32_1;
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetPrivRl(verifier, &prl, sizeof(prl)));
}
+TEST_F(EpidVerifierTest,
+ SetPrivRlFailsGivenEmptyPrivRlFromDifferentGroupUsingIkgfData) {
+ VerifierCtxObj verifier(this->kPubKeyRevGroupIkgfStr);
+ auto& priv_rl = this->kEmptyPrivRlIkgf;
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidVerifierSetPrivRl(verifier, (PrivRl const*)priv_rl.data(),
+ priv_rl.size()));
+}
+
TEST_F(EpidVerifierTest, SetPrivRlFailsGivenOldVersion) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
PrivRl prl = {{0}, {0}, {0}, {0}};
- prl.gid = this->pub_key_str.gid;
- prl.version = this->octstr32_1;
+ prl.gid = this->kPubKeyStr.gid;
+ prl.version = this->kOctStr32_1;
EXPECT_EQ(kEpidNoErr,
EpidVerifierSetPrivRl(verifier, &prl, sizeof(prl) - sizeof(prl.f)));
OctStr32 octstr32_0 = {0x00, 0x00, 0x00, 0x00};
@@ -211,71 +244,70 @@ TEST_F(EpidVerifierTest, SetPrivRlFailsGivenOldVersion) {
//////////////////////////////////////////////////////////////////////////
// EpidVerifierSetSigRl
TEST_F(EpidVerifierTest, SetSigRlFailsGivenNullPointer) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
SigRl srl = {{{0}}, {{0}}, {{0}}, {{{{0}, {0}}, {{0}, {0}}}}};
- srl.gid = this->pub_key_str.gid;
+ srl.gid = this->kPubKeyStr.gid;
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetSigRl(nullptr, &srl, sizeof(SigRl)));
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetSigRl(verifier, nullptr, sizeof(SigRl)));
}
TEST_F(EpidVerifierTest, SetSigRlFailsGivenZeroSize) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
SigRl srl = {{{0}}, {{0}}, {{0}}, {{{{0}, {0}}, {{0}, {0}}}}};
- srl.gid = this->pub_key_str.gid;
+ srl.gid = this->kPubKeyStr.gid;
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetSigRl(verifier, &srl, 0));
}
// Size parameter must be at least big enough for n2 == 0 case
TEST_F(EpidVerifierTest, SetSigRlFailsGivenTooSmallSize) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
SigRl srl = {{{0}}, {{0}}, {{0}}, {{{{0}, {0}}, {{0}, {0}}}}};
- srl.gid = this->pub_key_str.gid;
+ srl.gid = this->kPubKeyStr.gid;
EXPECT_EQ(
kEpidBadArgErr,
EpidVerifierSetSigRl(verifier, &srl, (sizeof(srl) - sizeof(srl.bk)) - 1));
- srl.n2 = this->octstr32_1;
+ srl.n2 = this->kOctStr32_1;
EXPECT_EQ(
kEpidBadArgErr,
EpidVerifierSetSigRl(verifier, &srl, (sizeof(srl) - sizeof(srl.bk)) - 1));
}
TEST_F(EpidVerifierTest, SetSigRlFailsGivenN2TooBigForSize) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
SigRl srl = {{{0}}, {{0}}, {{0}}, {{{{0}, {0}}, {{0}, {0}}}}};
- srl.gid = this->pub_key_str.gid;
- srl.n2 = this->octstr32_1;
+ srl.gid = this->kPubKeyStr.gid;
+ srl.n2 = this->kOctStr32_1;
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetSigRl(verifier, &srl, sizeof(srl) - sizeof(srl.bk)));
}
TEST_F(EpidVerifierTest, SetSigRlFailsGivenN2TooSmallForSize) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
SigRl srl = {{{0}}, {{0}}, {{0}}, {{{{0}, {0}}, {{0}, {0}}}}};
- srl.gid = this->pub_key_str.gid;
+ srl.gid = this->kPubKeyStr.gid;
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetSigRl(verifier, &srl, sizeof(srl)));
}
TEST_F(EpidVerifierTest, SetSigRlWorksGivenDefaultSigRl) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
VerifierCtx* ctx = verifier;
SigRl const* sig_rl =
reinterpret_cast<SigRl const*>(this->kGrp01SigRl.data());
- size_t sig_rl_size = this->kGrp01SigRl.size() * sizeof(uint8_t);
+ size_t sig_rl_size = this->kGrp01SigRl.size();
EXPECT_EQ(kEpidNoErr, EpidVerifierSetSigRl(ctx, sig_rl, sig_rl_size));
}
TEST_F(EpidVerifierTest, SetSigRlWorksGivenDefaultSigRlUsingIkgfData) {
- VerifierCtxObj verifier(this->pub_key_ikgf_str,
- this->verifier_precomp_ikgf_str);
+ VerifierCtxObj verifier(this->kPubKeyIkgfStr, this->kVerifierPrecompIkgfStr);
VerifierCtx* ctx = verifier;
SigRl const* sig_rl = reinterpret_cast<SigRl const*>(this->kSigRlIkgf.data());
- size_t sig_rl_size = this->kSigRlIkgf.size() * sizeof(uint8_t);
+ size_t sig_rl_size = this->kSigRlIkgf.size();
EXPECT_EQ(kEpidNoErr, EpidVerifierSetSigRl(ctx, sig_rl, sig_rl_size));
}
TEST_F(EpidVerifierTest, SetSigRlWorksGivenSigRlWithNoElements) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
uint8_t sig_rl_data_n2_zero[] = {
// gid
@@ -292,8 +324,16 @@ TEST_F(EpidVerifierTest, SetSigRlWorksGivenSigRlWithNoElements) {
EXPECT_EQ(kEpidNoErr, EpidVerifierSetSigRl(verifier, sig_rl, sig_rl_size));
}
+TEST_F(EpidVerifierTest, SetSigRlWorksGivenSigRlWithNoElementsUsingIkgfData) {
+ VerifierCtxObj verifier(this->kPubKeyIkgfStr, this->kVerifierPrecompIkgfStr);
+ auto& sig_rl = this->kEmptySigRlIkgf;
+ EXPECT_EQ(kEpidNoErr,
+ EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
+ sig_rl.size()));
+}
+
TEST_F(EpidVerifierTest, SetSigRlWorksGivenSigRlWithOneElement) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
uint8_t sig_rl_data_n2_one[] = {
// gid
@@ -321,19 +361,28 @@ TEST_F(EpidVerifierTest, SetSigRlWorksGivenSigRlWithOneElement) {
}
TEST_F(EpidVerifierTest, SetSigRlFailsGivenBadGroupId) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
SigRl srl = {{{0}}, {{0}}, {{0}}, {{{{0}, {0}}, {{0}, {0}}}}};
- srl.gid = this->pub_key_str.gid;
+ srl.gid = this->kPubKeyStr.gid;
srl.gid.data[0] = ~srl.gid.data[0];
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetSigRl(verifier, &srl, sizeof(srl) - sizeof(srl.bk)));
}
+TEST_F(EpidVerifierTest,
+ SetPrivRlFailsGivenEmptySigRlFromDifferentGroupUsingIkgfData) {
+ VerifierCtxObj verifier(this->kPubKeyRevGroupIkgfStr);
+ auto& sig_rl = this->kEmptySigRlIkgf;
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
+ sig_rl.size()));
+}
+
TEST_F(EpidVerifierTest, SetSigRlFailsGivenOldVersion) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
SigRl srl = {{{0}}, {{0}}, {{0}}, {{{{0}, {0}}, {{0}, {0}}}}};
- srl.gid = this->pub_key_str.gid;
- srl.version = this->octstr32_1;
+ srl.gid = this->kPubKeyStr.gid;
+ srl.version = this->kOctStr32_1;
EXPECT_EQ(kEpidNoErr,
EpidVerifierSetSigRl(verifier, &srl, sizeof(srl) - sizeof(srl.bk)));
OctStr32 octstr32_0 = {0x00, 0x00, 0x00, 0x00};
@@ -345,7 +394,7 @@ TEST_F(EpidVerifierTest, SetSigRlFailsGivenOldVersion) {
//////////////////////////////////////////////////////////////////////////
// EpidVerifierSetGroupRl
TEST_F(EpidVerifierTest, SetGroupRlFailsGivenNullPointer) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
GroupRl grl = {{0}, {0}, {0}};
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetGroupRl(nullptr, &grl, sizeof(grl)));
EXPECT_EQ(kEpidBadArgErr,
@@ -353,14 +402,14 @@ TEST_F(EpidVerifierTest, SetGroupRlFailsGivenNullPointer) {
}
TEST_F(EpidVerifierTest, SetGroupRlFailsGivenSizeZero) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
GroupRl grl = {{0}, {0}, {0}};
size_t grl_size = 0;
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetGroupRl(verifier, &grl, grl_size));
}
TEST_F(EpidVerifierTest, SetGroupRlFailsGivenSizeTooSmall) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
GroupRl grl = {{0}, {0}, {0}};
size_t grl_size = sizeof(grl) - sizeof(grl.gid[0]);
EXPECT_EQ(kEpidBadArgErr,
@@ -368,7 +417,7 @@ TEST_F(EpidVerifierTest, SetGroupRlFailsGivenSizeTooSmall) {
}
TEST_F(EpidVerifierTest, SetGroupRlFailsGivenSizeTooLarge) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
GroupRl grl = {{0}, {0}, {0}};
size_t grl_size = sizeof(grl) - sizeof(grl.gid[0]);
EXPECT_EQ(kEpidBadArgErr,
@@ -376,146 +425,171 @@ TEST_F(EpidVerifierTest, SetGroupRlFailsGivenSizeTooLarge) {
}
TEST_F(EpidVerifierTest, SetGroupRlFailsGivenN3ZeroAndGroupRLSizeTooBig) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
- GroupRl* group_rl = (GroupRl*)this->group_rl_3gid_n0_buf.data();
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ GroupRl* group_rl = (GroupRl*)this->kGroupRl3GidN0Buf.data();
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetGroupRl(verifier, group_rl,
- this->group_rl_3gid_n0_buf.size()));
+ this->kGroupRl3GidN0Buf.size()));
}
TEST_F(EpidVerifierTest, SetGroupRlFailsGivenN3TooSmall) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
- GroupRl* group_rl = (GroupRl*)this->group_rl_3gid_n2_buf.data();
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ GroupRl* group_rl = (GroupRl*)this->kGroupRl3GidN2Buf.data();
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetGroupRl(verifier, group_rl,
- this->group_rl_3gid_n2_buf.size()));
+ this->kGroupRl3GidN2Buf.size()));
}
TEST_F(EpidVerifierTest, SetGroupRlFailsGivenN3TooLarge) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
- GroupRl* group_rl = (GroupRl*)this->group_rl_3gid_n4_buf.data();
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ GroupRl* group_rl = (GroupRl*)this->kGroupRl3GidN4Buf.data();
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetGroupRl(verifier, group_rl,
- this->group_rl_3gid_n4_buf.size()));
+ this->kGroupRl3GidN4Buf.size()));
}
TEST_F(EpidVerifierTest, SetGroupRlSucceedsGivenEmptyRL) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
- GroupRl* empty_grl = (GroupRl*)this->group_rl_empty_buf.data();
- size_t grl_size = this->group_rl_empty_buf.size();
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ GroupRl* empty_grl = (GroupRl*)this->kGroupRlEmptyBuf.data();
+ size_t grl_size = this->kGroupRlEmptyBuf.size();
EXPECT_EQ(kEpidNoErr, EpidVerifierSetGroupRl(verifier, empty_grl, grl_size));
}
TEST_F(EpidVerifierTest, SetGroupRlSucceedsGivenDefaultGroupRLUsingIkgfData) {
- VerifierCtxObj verifier(this->pub_key_ikgf_str,
- this->verifier_precomp_ikgf_str);
- GroupRl* empty_grl = (GroupRl*)this->group_rl_empty_buf.data();
- size_t grl_size = this->group_rl_empty_buf.size();
+ VerifierCtxObj verifier(this->kPubKeyIkgfStr, this->kVerifierPrecompIkgfStr);
+ GroupRl* empty_grl = (GroupRl*)this->kGroupRlEmptyBuf.data();
+ size_t grl_size = this->kGroupRlEmptyBuf.size();
EXPECT_EQ(kEpidNoErr, EpidVerifierSetGroupRl(verifier, empty_grl, grl_size));
}
TEST_F(EpidVerifierTest, SetGroupRlSucceedsGivenRLWith3gid) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
- GroupRl* group_rl = (GroupRl*)this->group_rl_3gid_buf.data();
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ GroupRl* group_rl = (GroupRl*)this->kGroupRl3GidBuf.data();
EXPECT_EQ(kEpidNoErr, EpidVerifierSetGroupRl(verifier, group_rl,
- this->group_rl_3gid_buf.size()));
+ this->kGroupRl3GidBuf.size()));
}
TEST_F(EpidVerifierTest, SetGroupRlFailsGivenOldVersion) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
- GroupRl* group_rl = (GroupRl*)this->group_rl_3gid_buf.data();
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ GroupRl* group_rl = (GroupRl*)this->kGroupRl3GidBuf.data();
EXPECT_EQ(kEpidNoErr, EpidVerifierSetGroupRl(verifier, group_rl,
- this->group_rl_3gid_buf.size()));
- GroupRl* empty_grl = (GroupRl*)this->group_rl_empty_buf.data();
+ this->kGroupRl3GidBuf.size()));
+ GroupRl* empty_grl = (GroupRl*)this->kGroupRlEmptyBuf.data();
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetGroupRl(verifier, empty_grl,
- this->group_rl_empty_buf.size()));
+ this->kGroupRlEmptyBuf.size()));
}
//////////////////////////////////////////////////////////////////////////
// EpidVerifierSetVerifierRl
TEST_F(EpidVerifierTest, SetVerifierRlFailsGivenNullPointer) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
VerifierRl ver_rl = {{0}, {{0}, {0}}, {0}, {0}, {{{0}, {0}}}};
- ver_rl.gid = this->pub_key_str.gid;
+ ver_rl.gid = this->kPubKeyStr.gid;
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetVerifierRl(nullptr, &ver_rl, sizeof(ver_rl)));
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetVerifierRl(verifier, nullptr, sizeof(ver_rl)));
}
+TEST_F(EpidVerifierTest, SetVerifierRlFailsGivenMismatchedBasename) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ std::vector<uint8_t> wrong_bsn = this->kBasename1;
+ wrong_bsn[wrong_bsn.size() - 1] ^= 1;
+
+ VerifierCtx* ctx(verifier);
+ size_t res_ver_rl_size = this->kGrp01VerRl.size();
+ THROW_ON_EPIDERR(
+ EpidVerifierSetBasename(ctx, wrong_bsn.data(), wrong_bsn.size()));
+ EXPECT_EQ(
+ kEpidBadArgErr,
+ EpidVerifierSetVerifierRl(
+ ctx, (VerifierRl const*)this->kGrp01VerRl.data(), res_ver_rl_size));
+}
+TEST_F(EpidVerifierTest, SerVerifierRlFailsGivenRandomBase) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ VerifierCtx* ctx(verifier);
+ size_t res_ver_rl_size = this->kGrp01VerRl.size();
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, nullptr, 0));
+ EXPECT_EQ(
+ kEpidInconsistentBasenameSetErr,
+ EpidVerifierSetVerifierRl(
+ ctx, (VerifierRl const*)this->kGrp01VerRl.data(), res_ver_rl_size));
+}
TEST_F(EpidVerifierTest, SetVerifierRlFailsGivenSizeZero) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
VerifierRl ver_rl = {{0}, {{0}, {0}}, {0}, {0}, {{{0}, {0}}}};
- ver_rl.gid = this->pub_key_str.gid;
+ ver_rl.gid = this->kPubKeyStr.gid;
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetVerifierRl(verifier, &ver_rl, 0));
}
// Size parameter must be at least equal to minimum value for n4 == 0 case
TEST_F(EpidVerifierTest, SetVerifierRlFailsGivenSizeTooSmall) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
VerifierRl ver_rl = {{0}, {{0}, {0}}, {0}, {0}, {{{0}, {0}}}};
- ver_rl.gid = this->pub_key_str.gid;
+ ver_rl.gid = this->kPubKeyStr.gid;
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetVerifierRl(
verifier, &ver_rl, sizeof(ver_rl) - sizeof(ver_rl.K[0]) - 1));
- ver_rl.n4 = this->octstr32_1;
+ ver_rl.n4 = this->kOctStr32_1;
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetVerifierRl(
verifier, &ver_rl, sizeof(ver_rl) - sizeof(ver_rl.K[0]) - 1));
}
TEST_F(EpidVerifierTest, SetVerifierRlFailsGivenN4TooBigForSize) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
VerifierRl ver_rl = {{0}, {{0}, {0}}, {0}, {0}, {{{0}, {0}}}};
- ver_rl.gid = this->pub_key_str.gid;
- ver_rl.n4 = this->octstr32_1;
+ ver_rl.gid = this->kPubKeyStr.gid;
+ ver_rl.n4 = this->kOctStr32_1;
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetVerifierRl(verifier, &ver_rl,
sizeof(ver_rl) - sizeof(ver_rl.K[0])));
}
TEST_F(EpidVerifierTest, SetVerifierRlFailsGivenN4TooSmallForSize) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
VerifierRl ver_rl = {{0}, {{0}, {0}}, {0}, {0}, {{{0}, {0}}}};
- ver_rl.gid = this->pub_key_str.gid;
+ ver_rl.gid = this->kPubKeyStr.gid;
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetVerifierRl(verifier, &ver_rl, sizeof(ver_rl)));
}
TEST_F(EpidVerifierTest, SetVerifierRlWorksGivenDefaultVerifierRl) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
VerifierRl const* ver_rl_ptr =
reinterpret_cast<VerifierRl const*>(this->kGrp01VerRl.data());
- EXPECT_EQ(kEpidNoErr, EpidVerifierSetVerifierRl(
- verifier, ver_rl_ptr,
- this->kGrp01VerRl.size() * sizeof(uint8_t)));
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBasename.data(),
+ this->kBasename.size()));
+ EXPECT_EQ(kEpidNoErr, EpidVerifierSetVerifierRl(verifier, ver_rl_ptr,
+ this->kGrp01VerRl.size()));
+}
+TEST_F(EpidVerifierTest, SetVerifierRlCopiesGivenValidVerifierRl) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ VerifierCtx* ctx(verifier);
+ VerifierRl* ver_rl_ptr = (VerifierRl*)(this->kGrp01VerRl.data());
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBasename.data(),
+ this->kBasename.size()));
+ EXPECT_EQ(kEpidNoErr,
+ EpidVerifierSetVerifierRl(
+ ctx, ver_rl_ptr, this->kGrp01VerRl.size() * sizeof(uint8_t)));
+ EXPECT_NE(ver_rl_ptr, ctx->verifier_rl);
}
-
TEST_F(EpidVerifierTest, SetVerifierRlWorksGivenVerifierRlWithNoElements) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
- uint8_t ver_rl_data_n4_zero[] = {
- // gid
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x2A,
- // B
- 0x41, 0x63, 0xfd, 0x06, 0xb8, 0xb1, 0xa6, 0x32, 0xa5, 0xe3, 0xeb, 0xc4,
- 0x40, 0x11, 0x37, 0xc0, 0x62, 0x0d, 0xe1, 0xca, 0xe9, 0x79, 0xad, 0xff,
- 0x1d, 0x13, 0xb3, 0xda, 0xa0, 0x10, 0x8a, 0xa8, 0x30, 0x72, 0xa4, 0xe8,
- 0x27, 0xb5, 0xad, 0xdb, 0xac, 0x89, 0xd8, 0x37, 0x79, 0xd9, 0x8c, 0xd0,
- 0xb3, 0xef, 0x94, 0x17, 0x4f, 0x05, 0x53, 0x4c, 0x4d, 0xf0, 0x77, 0xf7,
- 0xb6, 0xaf, 0xb8, 0xfa,
- // version
- 0x00, 0x00, 0x00, 0x00,
- // n4
- 0x00, 0x00, 0x00, 0x00,
- // no k's
- };
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ VerifierRl* ver_rl_ptr = (VerifierRl*)(this->kEmptyGrp01VerRl.data());
- VerifierRl* ver_rl_ptr = reinterpret_cast<VerifierRl*>(ver_rl_data_n4_zero);
- EXPECT_EQ(kEpidNoErr, EpidVerifierSetVerifierRl(verifier, ver_rl_ptr,
- sizeof(ver_rl_data_n4_zero)));
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBasename1.data(),
+ this->kBasename1.size()));
+ EXPECT_EQ(kEpidNoErr,
+ EpidVerifierSetVerifierRl(verifier, ver_rl_ptr,
+ this->kEmptyGrp01VerRl.size()));
}
TEST_F(EpidVerifierTest, SetVerifierRlWorksGivenVerifierRlWithOneElement) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
uint8_t ver_rl_data_n4_one[] = {
// gid
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -540,14 +614,35 @@ TEST_F(EpidVerifierTest, SetVerifierRlWorksGivenVerifierRlWithOneElement) {
0x62, 0xa5, 0xb4, 0xe3,
};
VerifierRl* ver_rl_ptr = reinterpret_cast<VerifierRl*>(ver_rl_data_n4_one);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBasename.data(),
+ this->kBasename.size()));
EXPECT_EQ(kEpidNoErr, EpidVerifierSetVerifierRl(verifier, ver_rl_ptr,
sizeof(ver_rl_data_n4_one)));
}
+TEST_F(EpidVerifierTest, CanSetVerifierRlTwice) {
+ VerifierCtxObj verifier(this->kGrpXKey);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBsn0.data(),
+ this->kBsn0.size()));
+ EXPECT_EQ(kEpidNoErr,
+ EpidVerifierSetVerifierRl(
+ verifier, reinterpret_cast<VerifierRl const*>(
+ this->kGrpXBsn0VerRlSingleEntry.data()),
+ this->kGrpXBsn0VerRlSingleEntry.size()));
+ EXPECT_EQ(kEpidNoErr, EpidVerifierSetVerifierRl(
+ verifier, reinterpret_cast<VerifierRl const*>(
+ this->kGrpXBsn0Sha256VerRl.data()),
+ this->kGrpXBsn0Sha256VerRl.size()));
+}
+
TEST_F(EpidVerifierTest, SetVerifierRlFailsGivenBadGroupId) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
VerifierRl ver_rl = {{0}, {{0}, {0}}, {0}, {0}, {{{0}, {0}}}};
- ver_rl.gid = this->pub_key_str.gid;
+ ver_rl.gid = this->kPubKeyStr.gid;
+ VerifierRl* valid_ver_rl = (VerifierRl*)(this->kEmptyGrp01VerRl.data());
+ ver_rl.B = valid_ver_rl->B;
ver_rl.gid.data[0] = ~ver_rl.gid.data[0];
EXPECT_EQ(kEpidBadArgErr,
EpidVerifierSetVerifierRl(verifier, &ver_rl,
@@ -555,10 +650,15 @@ TEST_F(EpidVerifierTest, SetVerifierRlFailsGivenBadGroupId) {
}
TEST_F(EpidVerifierTest, SetVerifierRlFailsGivenOldVersion) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
VerifierRl ver_rl = {{0}, {{0}, {0}}, {0}, {0}, {{{0}, {0}}}};
- ver_rl.gid = this->pub_key_str.gid;
- ver_rl.version = this->octstr32_1;
+ VerifierRl* valid_ver_rl = (VerifierRl*)(this->kEmptyGrp01VerRl.data());
+ ver_rl.B = valid_ver_rl->B;
+ ver_rl.gid = this->kPubKeyStr.gid;
+ ver_rl.version = this->kOctStr32_1;
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBasename1.data(),
+ this->kBasename1.size()));
EXPECT_EQ(kEpidNoErr,
EpidVerifierSetVerifierRl(verifier, &ver_rl,
sizeof(ver_rl) - sizeof(ver_rl.K[0])));
@@ -570,12 +670,333 @@ TEST_F(EpidVerifierTest, SetVerifierRlFailsGivenOldVersion) {
}
//////////////////////////////////////////////////////////////////////////
+// EpidGetVerifierRlSize
+TEST_F(EpidVerifierTest, GetVerifierRlSizeReturnsZeroGivenNoContext) {
+ EXPECT_EQ((size_t)0, EpidGetVerifierRlSize(nullptr));
+}
+TEST_F(EpidVerifierTest, GetVerifierRlSizeReturnsZeroGivenRandomBase) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ EXPECT_EQ((size_t)0, EpidGetVerifierRlSize(verifier));
+}
+TEST_F(EpidVerifierTest, GetVerifierRlSizeReturnsSizeOfEmptyOnNoVerRlSet) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBasename1.data(),
+ this->kBasename1.size()));
+ EXPECT_EQ(sizeof(VerifierRl) - sizeof(((VerifierRl*)0)->K[0]),
+ EpidGetVerifierRlSize(verifier));
+}
+TEST_F(EpidVerifierTest, GetVerifierRlSizeWorksForEmptyVerifierRl) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+
+ VerifierRl* ver_rl_ptr = (VerifierRl*)(this->kEmptyGrp01VerRl.data());
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBasename1.data(),
+ this->kBasename1.size()));
+ THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(verifier, ver_rl_ptr,
+ this->kEmptyGrp01VerRl.size()));
+ EXPECT_EQ(this->kEmptyGrp01VerRl.size(), EpidGetVerifierRlSize(verifier));
+}
+TEST_F(EpidVerifierTest, GetVerifierRlSizeWorksForShortVerifierRl) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBasename.data(),
+ this->kBasename.size()));
+ THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
+ verifier, (VerifierRl*)this->kGrp01VerRlOneEntry.data(),
+ this->kGrp01VerRlOneEntry.size()));
+ EXPECT_EQ(this->kGrp01VerRlOneEntry.size(), EpidGetVerifierRlSize(verifier));
+}
+TEST_F(EpidVerifierTest, GetVerifierRlSizeWorksForLongVerifierRl) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ std::vector<uint8_t> ver_rl_data_long = {
+ // gid
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x2A,
+ // B
+ 0x41, 0x63, 0xfd, 0x06, 0xb8, 0xb1, 0xa6, 0x32, 0xa5, 0xe3, 0xeb, 0xc4,
+ 0x40, 0x11, 0x37, 0xc0, 0x62, 0x0d, 0xe1, 0xca, 0xe9, 0x79, 0xad, 0xff,
+ 0x1d, 0x13, 0xb3, 0xda, 0xa0, 0x10, 0x8a, 0xa8, 0x30, 0x72, 0xa4, 0xe8,
+ 0x27, 0xb5, 0xad, 0xdb, 0xac, 0x89, 0xd8, 0x37, 0x79, 0xd9, 0x8c, 0xd0,
+ 0xb3, 0xef, 0x94, 0x17, 0x4f, 0x05, 0x53, 0x4c, 0x4d, 0xf0, 0x77, 0xf7,
+ 0xb6, 0xaf, 0xb8, 0xfa,
+ // version
+ 0x00, 0x00, 0x00, 0x32,
+ // n4
+ 0x00, 0x00, 0x00, 0x32};
+ const std::vector<uint8_t> entry = {
+ 0xdc, 0x41, 0x24, 0xe7, 0xb8, 0xf2, 0x6d, 0xc4, 0x01, 0xf9, 0x5d,
+ 0xf8, 0xd9, 0x23, 0x32, 0x29, 0x0a, 0xe1, 0xf6, 0xdc, 0xa1, 0xef,
+ 0x52, 0xf7, 0x3a, 0x3c, 0xe6, 0x7e, 0x3d, 0x0e, 0xe8, 0x86, 0xa9,
+ 0x58, 0xf4, 0xfe, 0xfa, 0x8b, 0xe4, 0x1c, 0xad, 0x58, 0x5b, 0x1c,
+ 0xc7, 0x54, 0xee, 0x7e, 0xe7, 0x12, 0x6a, 0x4b, 0x01, 0x63, 0xb4,
+ 0xdb, 0x6e, 0xe7, 0x7a, 0xe9, 0x62, 0xa5, 0xb4, 0xe3};
+ for (uint32_t i = 0; i < ntohl(((VerifierRl*)ver_rl_data_long.data())->n4);
+ ++i) {
+ for (auto it : entry) {
+ ver_rl_data_long.push_back(it);
+ }
+ }
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBasename.data(),
+ this->kBasename.size()));
+ THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
+ verifier, (VerifierRl*)ver_rl_data_long.data(), ver_rl_data_long.size()));
+ EXPECT_EQ(ver_rl_data_long.size(), EpidGetVerifierRlSize(verifier));
+}
+//////////////////////////////////////////////////////////////////////////
+// EpidWriteVerifierRl
+TEST_F(EpidVerifierTest, WriteVerifierRlFailsGivenNullPointer) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBasename.data(),
+ this->kBasename.size()));
+ VerifierCtx* ctx(verifier);
+ VerifierRl res_ver_rl = {0};
+ size_t res_ver_rl_size = this->kGrp01VerRl.size();
+ THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
+ ctx, (VerifierRl const*)this->kGrp01VerRl.data(), res_ver_rl_size));
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidWriteVerifierRl(nullptr, &res_ver_rl, res_ver_rl_size));
+ EXPECT_EQ(kEpidBadArgErr, EpidWriteVerifierRl(ctx, nullptr, res_ver_rl_size));
+}
+TEST_F(EpidVerifierTest, WriteVerifierRlFailsGivenInvalidSize) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBasename.data(),
+ this->kBasename.size()));
+ VerifierCtx* ctx(verifier);
+ VerifierRl res_ver_rl = {0};
+ size_t res_ver_rl_size = this->kGrp01VerRl.size();
+ THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
+ ctx, (VerifierRl const*)this->kGrp01VerRl.data(), res_ver_rl_size));
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidWriteVerifierRl(ctx, &res_ver_rl, res_ver_rl_size - 1));
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidWriteVerifierRl(ctx, &res_ver_rl, res_ver_rl_size + 1));
+}
+TEST_F(EpidVerifierTest, WriteVerifierRlWorksForEmptyVerifierRl) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBasename1.data(),
+ this->kBasename1.size()));
+ VerifierCtx* ctx(verifier);
+
+ size_t res_ver_rl_size = sizeof(VerifierRl) - sizeof(((VerifierRl*)0)->K[0]);
+ std::vector<uint8_t> expected_ver_rl_buf = this->kEmptyGrp01VerRl;
+ std::vector<uint8_t> res_ver_rl_buf(res_ver_rl_size);
+ VerifierRl* res_ver_rl = (VerifierRl*)res_ver_rl_buf.data();
+
+ THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
+ ctx, (VerifierRl*)this->kEmptyGrp01VerRl.data(), res_ver_rl_size));
+ EXPECT_EQ(kEpidNoErr, EpidWriteVerifierRl(ctx, res_ver_rl, res_ver_rl_size));
+ EXPECT_EQ(expected_ver_rl_buf, res_ver_rl_buf);
+}
+TEST_F(EpidVerifierTest, WriteVerifierRlCanSerializeDefaultVerifierRl) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBasename1.data(),
+ this->kBasename1.size()));
+ VerifierCtx* ctx(verifier);
+ size_t res_ver_rl_size = sizeof(VerifierRl) - sizeof(((VerifierRl*)0)->K[0]);
+
+ std::vector<uint8_t> empty_verifier_rl_buf(res_ver_rl_size);
+ std::vector<uint8_t> res_ver_rl_buf(res_ver_rl_size);
+ VerifierRl* empty_verifier_rl = (VerifierRl*)empty_verifier_rl_buf.data();
+ VerifierRl* res_ver_rl = (VerifierRl*)res_ver_rl_buf.data();
+
+ empty_verifier_rl->gid = ctx->pub_key->gid;
+ empty_verifier_rl->B =
+ ((EpidSignature const*)this->kSigGrp01Member0Sha256Basename1Test1NoSigRl
+ .data())
+ ->sigma0.B;
+ empty_verifier_rl->n4 = {0};
+ empty_verifier_rl->version = {0};
+ EXPECT_EQ(kEpidNoErr, EpidWriteVerifierRl(ctx, res_ver_rl, res_ver_rl_size));
+ EXPECT_EQ(empty_verifier_rl_buf, res_ver_rl_buf);
+}
+TEST_F(EpidVerifierTest, WriteVerifierRlWorksForNonEmptyVerifierRl) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, this->kBasename.data(),
+ this->kBasename.size()));
+ VerifierCtx* ctx(verifier);
+ auto expected_ver_rl = this->kGrp01VerRl;
+ std::vector<uint8_t> resultant_ver_rl_buf(this->kGrp01VerRl.size());
+ VerifierRl* resultant_ver_rl = (VerifierRl*)resultant_ver_rl_buf.data();
+
+ THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
+ ctx, (VerifierRl const*)this->kGrp01VerRl.data(),
+ this->kGrp01VerRl.size()));
+ EXPECT_EQ(kEpidNoErr, EpidWriteVerifierRl(ctx, resultant_ver_rl,
+ resultant_ver_rl_buf.size()));
+ EXPECT_EQ(expected_ver_rl, resultant_ver_rl_buf);
+}
+
+//////////////////////////////////////////////////////////////////////////
+// EpidBlacklistSig
+TEST_F(EpidVerifierTest, BlacklistSigFailsGivenNullPointer) {
+ VerifierCtxObj verifier(this->kGrpXKey);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ auto sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+ auto msg = this->kMsg0;
+ auto bsn = this->kBsn0;
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidBlacklistSig(nullptr, (EpidSignature*)sig.data(), sig.size(),
+ msg.data(), msg.size()));
+ EXPECT_EQ(kEpidBadArgErr, EpidBlacklistSig(verifier, nullptr, sig.size(),
+ msg.data(), msg.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidBlacklistSig(verifier, (EpidSignature*)sig.data(), sig.size(),
+ nullptr, 1));
+}
+TEST_F(EpidVerifierTest, BlacklistSigFailsGivenInvalidSignatureLength) {
+ VerifierCtxObj verifier(this->kGrpXKey);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ auto sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+ auto msg = this->kMsg0;
+ auto bsn = this->kBsn0;
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidBlacklistSig(verifier, (EpidSignature*)sig.data(), 0,
+ msg.data(), msg.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidBlacklistSig(verifier, (EpidSignature*)sig.data(),
+ sig.size() - 1, msg.data(), msg.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidBlacklistSig(verifier, (EpidSignature*)sig.data(),
+ sig.size() + 1, msg.data(), msg.size()));
+}
+TEST_F(EpidVerifierTest, BlacklistSigFailsGivenSigFromDiffGroup) {
+ VerifierCtxObj verifier(this->kGrpXKey);
+ auto sig = this->kSigGrp01Member0Sha256Basename1Test1NoSigRl;
+ auto msg = this->kTest1;
+ auto bsn = this->kBasename1;
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidBlacklistSig(verifier, (EpidSignature*)sig.data(), sig.size(),
+ msg.data(), msg.size()));
+}
+TEST_F(EpidVerifierTest, BlacklistSigFailsGivenSigFromDiffBasename) {
+ VerifierCtxObj verifier(this->kGrpXKey);
+ auto sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+ auto msg = this->kMsg0;
+ auto bsn = this->kBasename1;
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidBlacklistSig(verifier, (EpidSignature*)sig.data(), sig.size(),
+ msg.data(), msg.size()));
+}
+TEST_F(EpidVerifierTest, BlacklistSigFailsGivenSigWithDiffHashAlg) {
+ VerifierCtxObj verifier(this->kGrpXKey);
+ auto sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+ auto msg = this->kMsg0;
+ auto bsn = this->kBsn0;
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha384));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidBlacklistSig(verifier, (EpidSignature*)sig.data(), sig.size(),
+ msg.data(), msg.size()));
+}
+TEST_F(EpidVerifierTest, BlacklistSigFailsOnSigAlreadyInVerRl) {
+ VerifierCtxObj verifier(this->kGrpXKey);
+ auto sig = this->kSigGrpXVerRevokedMember0Sha256Bsn0Msg0;
+ auto msg = this->kMsg0;
+ auto bsn = this->kBsn0;
+ auto ver_rl = this->kGrpXBsn0VerRlSingleEntry;
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
+ verifier, (VerifierRl*)ver_rl.data(), ver_rl.size()));
+ EXPECT_EQ(kEpidSigRevokedInVerifierRl,
+ EpidBlacklistSig(verifier, (EpidSignature*)sig.data(), sig.size(),
+ msg.data(), msg.size()));
+}
+TEST_F(EpidVerifierTest, BlacklistSigFailsOnSigRevokedInSigRl) {
+ VerifierCtxObj verifier(this->kGrpXKey);
+ auto sig = this->kSigGrpXMember0Sha256Bsn0Msg0SingleEntrySigRl;
+ auto msg = this->kMsg0;
+ auto bsn = this->kBsn0;
+ auto sig_rl = this->kGrpXSigRlMember0Sha256Bsn0Msg0OnlyEntry;
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ THROW_ON_EPIDERR(
+ EpidVerifierSetSigRl(verifier, (SigRl*)sig_rl.data(), sig_rl.size()));
+ EXPECT_EQ(kEpidSigRevokedInSigRl,
+ EpidBlacklistSig(verifier, (EpidSignature*)sig.data(), sig.size(),
+ msg.data(), msg.size()));
+}
+TEST_F(EpidVerifierTest, BlacklistSigFailsOnSigRevokedInPrivRl) {
+ VerifierCtxObj verifier(this->kGrpXKey);
+ auto sig = this->kSigGrpXRevokedPrivKey000Sha256Bsn0Msg0;
+ auto msg = this->kMsg0;
+ auto bsn = this->kBsn0;
+ auto priv_rl = this->kGrpXPrivRl;
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ THROW_ON_EPIDERR(
+ EpidVerifierSetPrivRl(verifier, (PrivRl*)priv_rl.data(), priv_rl.size()));
+ EXPECT_EQ(kEpidSigRevokedInPrivRl,
+ EpidBlacklistSig(verifier, (EpidSignature*)sig.data(), sig.size(),
+ msg.data(), msg.size()));
+}
+TEST_F(EpidVerifierTest, BlacklistSigWorksForValidSigGivenEmptyBlacklist) {
+ VerifierCtxObj verifier(this->kGrpXKey);
+ auto sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+ auto msg = this->kMsg0;
+ auto bsn = this->kBsn0;
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidNoErr, EpidBlacklistSig(verifier, (EpidSignature*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+
+ std::vector<uint8_t> ver_rl_vec(EpidGetVerifierRlSize(verifier));
+ VerifierRl* ver_rl = (VerifierRl*)ver_rl_vec.data();
+ size_t ver_rl_size = ver_rl_vec.size();
+
+ THROW_ON_EPIDERR(EpidWriteVerifierRl(verifier, ver_rl, ver_rl_size));
+
+ OctStr32 n4_expected = {0x00, 0x00, 0x00, 0x01};
+ OctStr32 rlver_expected = {0x00, 0x00, 0x00, 0x01};
+ EXPECT_EQ(n4_expected, ver_rl->n4);
+ EXPECT_EQ(rlver_expected, ver_rl->version);
+ // missing K checks here
+}
+TEST_F(EpidVerifierTest,
+ MultipleBlacklistFollowedBySerializeIncrementsRlVersionByOne) {
+ VerifierCtxObj verifier(this->kGrpXKey);
+ auto sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
+ auto msg = this->kMsg0;
+ auto bsn = this->kBsn0;
+ auto sig2 = this->kSigGrpXMember1Sha256Bsn0Msg0;
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ EXPECT_EQ(kEpidNoErr, EpidBlacklistSig(verifier, (EpidSignature*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
+ EXPECT_EQ(kEpidNoErr, EpidBlacklistSig(verifier, (EpidSignature*)sig2.data(),
+ sig2.size(), msg.data(), msg.size()));
+ std::vector<uint8_t> ver_rl_vec(EpidGetVerifierRlSize(verifier));
+ VerifierRl* ver_rl = (VerifierRl*)ver_rl_vec.data();
+ size_t ver_rl_size = ver_rl_vec.size();
+
+ THROW_ON_EPIDERR(EpidWriteVerifierRl(verifier, ver_rl, ver_rl_size));
+
+ OctStr32 n4_expected = {0x00, 0x00, 0x00, 0x02};
+ OctStr32 rlver_expected = {0x00, 0x00, 0x00, 0x01};
+ EXPECT_EQ(n4_expected, ver_rl->n4);
+ EXPECT_EQ(rlver_expected, ver_rl->version);
+ // missing K checks
+}
+//////////////////////////////////////////////////////////////////////////
// EpidVerifierSetHashAlg
TEST_F(EpidVerifierTest, SetHashAlgFailsGivenNullPointer) {
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetHashAlg(nullptr, kSha256));
}
TEST_F(EpidVerifierTest, SetHashAlgCanSetValidAlgoritm) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
EXPECT_EQ(kEpidNoErr, EpidVerifierSetHashAlg(verifier, kSha256));
EXPECT_EQ(kEpidNoErr, EpidVerifierSetHashAlg(verifier, kSha384));
EXPECT_EQ(kEpidNoErr, EpidVerifierSetHashAlg(verifier, kSha512));
@@ -583,15 +1004,71 @@ TEST_F(EpidVerifierTest, SetHashAlgCanSetValidAlgoritm) {
// EXPECT_EQ(kEpidNoErr, EpidVerifierSetHashAlg(verifier, kSha512_256));
}
TEST_F(EpidVerifierTest, SetHashAlgCanFailForNonSupportedAlgoritms) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetHashAlg(verifier, kSha3_256));
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetHashAlg(verifier, kSha3_384));
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetHashAlg(verifier, kSha3_512));
EXPECT_EQ(kEpidBadArgErr, EpidVerifierSetHashAlg(verifier, (HashAlg)-1));
}
TEST_F(EpidVerifierTest, DefaultHashAlgIsSha512) {
- VerifierCtxObj verifier(this->pub_key_str, this->verifier_precomp_str);
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
VerifierCtx* ctx = verifier;
EXPECT_EQ(kSha512, ctx->hash_alg);
}
+//////////////////////////////////////////////////////////////////////////
+// EpidVerifierSetBasename
+TEST_F(EpidVerifierTest, DefaultBasenameIsNull) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ VerifierCtx* ctx = verifier;
+ EXPECT_EQ(nullptr, ctx->basename_hash);
+}
+TEST_F(EpidVerifierTest, SetBasenameFailsGivenNullContext) {
+ auto& basename = this->kBasename1;
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidVerifierSetBasename(nullptr, basename.data(), basename.size()));
+}
+TEST_F(EpidVerifierTest, SetBasenameFailsGivenNullBasenameAndNonzeroLength) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ VerifierCtx* ctx = verifier;
+ auto& basename = this->kBasename1;
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidVerifierSetBasename(ctx, nullptr, basename.size()));
+}
+TEST_F(EpidVerifierTest, SetBasenameSucceedsGivenValidParameters) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ VerifierCtx* ctx = verifier;
+ auto& basename = this->kBasename1;
+ EXPECT_EQ(kEpidNoErr,
+ EpidVerifierSetBasename(ctx, basename.data(), basename.size()));
+}
+TEST_F(EpidVerifierTest, SetBasenameAcceptsZeroLengthBasename) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ VerifierCtx* ctx = verifier;
+ EXPECT_EQ(kEpidNoErr, EpidVerifierSetBasename(ctx, "", 0));
+}
+TEST_F(EpidVerifierTest, SetBasenameResetsBasenameGivenNullBasename) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ VerifierCtx* ctx = verifier;
+ auto& basename = this->kBasename1;
+ THROW_ON_EPIDERR(
+ EpidVerifierSetBasename(ctx, basename.data(), basename.size()));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, nullptr, 0));
+ EXPECT_EQ(nullptr, ctx->basename_hash);
+}
+TEST_F(EpidVerifierTest, SetBasenameResetsVerifierBlacklist) {
+ VerifierCtxObj verifier(this->kPubKeyStr, this->kVerifierPrecompStr);
+ VerifierCtx* ctx = verifier;
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(ctx, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(ctx, this->kBasename.data(),
+ this->kBasename.size()));
+ auto& basename = this->kBasename;
+ VerifierRl const* ver_rl_ptr =
+ reinterpret_cast<VerifierRl const*>(this->kGrp01VerRl.data());
+ THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(verifier, ver_rl_ptr,
+ this->kGrp01VerRl.size()));
+ THROW_ON_EPIDERR(
+ EpidVerifierSetBasename(ctx, basename.data(), basename.size()));
+ EXPECT_EQ(nullptr, ctx->verifier_rl);
+}
+
} // namespace
diff --git a/epid/verifier/unittests/nrverify-test.cc b/epid/verifier/unittests/nrverify-test.cc
index dbe3133..9eb7e08 100644
--- a/epid/verifier/unittests/nrverify-test.cc
+++ b/epid/verifier/unittests/nrverify-test.cc
@@ -38,7 +38,8 @@ TEST_F(EpidVerifierTest, NrVerifyFailsGivenNullParameters) {
VerifierCtxObj verifier(this->kGrp01Key);
EpidSignature const* epid_signature = reinterpret_cast<EpidSignature const*>(
this->kSigGrp01Member0Sha256RandombaseTest0.data());
- SigRl const* sig_rl = reinterpret_cast<SigRl const*>(&this->kGrp01SigRl);
+ SigRl const* sig_rl =
+ reinterpret_cast<SigRl const*>(this->kGrp01SigRl.data());
EXPECT_EQ(kEpidBadArgErr,
EpidNrVerify(nullptr, &epid_signature->sigma0, this->kTest0.data(),
this->kTest0.size(), &sig_rl->bk[0],
@@ -72,7 +73,8 @@ TEST_F(EpidVerifierTest, NrVerifyRejectsSigWithTNotInG1) {
VerifierCtxObj verifier(this->kGrp01Key);
EpidSignature const* epid_signature = reinterpret_cast<EpidSignature const*>(
this->kSigGrp01Member0Sha256RandombaseTest0.data());
- SigRl const* sig_rl = reinterpret_cast<SigRl const*>(&this->kGrp01SigRl);
+ SigRl const* sig_rl =
+ reinterpret_cast<SigRl const*>(this->kGrp01SigRl.data());
NrProof nr_proof = epid_signature->sigma[0];
nr_proof.T.x.data.data[0]++;
EXPECT_EQ(kEpidBadArgErr,
@@ -86,9 +88,10 @@ TEST_F(EpidVerifierTest, NrVerifyRejectsSigWithTIdentityOfG1) {
VerifierCtxObj verifier(this->kGrp01Key);
EpidSignature const* epid_signature = reinterpret_cast<EpidSignature const*>(
this->kSigGrp01Member0Sha256RandombaseTest0.data());
- SigRl const* sig_rl = reinterpret_cast<SigRl const*>(&this->kGrp01SigRl);
+ SigRl const* sig_rl =
+ reinterpret_cast<SigRl const*>(this->kGrp01SigRl.data());
NrProof nr_proof = epid_signature->sigma[0];
- nr_proof.T = this->G1_identity_str;
+ nr_proof.T = this->kG1IdentityStr;
EXPECT_EQ(kEpidBadArgErr,
EpidNrVerify(verifier, &epid_signature->sigma0, this->kTest0.data(),
this->kTest0.size(), &sig_rl->bk[0], &nr_proof));
@@ -100,9 +103,10 @@ TEST_F(EpidVerifierTest, NrVerifyRejectsSigWithCNotInRange) {
VerifierCtxObj verifier(this->kGrp01Key);
EpidSignature const* epid_signature = reinterpret_cast<EpidSignature const*>(
this->kSigGrp01Member0Sha256RandombaseTest0.data());
- SigRl const* sig_rl = reinterpret_cast<SigRl const*>(&this->kGrp01SigRl);
+ SigRl const* sig_rl =
+ reinterpret_cast<SigRl const*>(this->kGrp01SigRl.data());
NrProof nr_proof = epid_signature->sigma[0];
- nr_proof.c.data = this->params_str.p.data;
+ nr_proof.c.data = this->kParamsStr.p.data;
EXPECT_EQ(kEpidBadArgErr,
EpidNrVerify(verifier, &epid_signature->sigma0, this->kTest0.data(),
this->kTest0.size(), &sig_rl->bk[0], &nr_proof));
@@ -114,9 +118,10 @@ TEST_F(EpidVerifierTest, NrVerifyRejectsSigWithSmuNotInRange) {
VerifierCtxObj verifier(this->kGrp01Key);
EpidSignature const* epid_signature = reinterpret_cast<EpidSignature const*>(
this->kSigGrp01Member0Sha256RandombaseTest0.data());
- SigRl const* sig_rl = reinterpret_cast<SigRl const*>(&this->kGrp01SigRl);
+ SigRl const* sig_rl =
+ reinterpret_cast<SigRl const*>(this->kGrp01SigRl.data());
NrProof nr_proof = epid_signature->sigma[0];
- nr_proof.smu.data = this->params_str.p.data;
+ nr_proof.smu.data = this->kParamsStr.p.data;
EXPECT_EQ(kEpidBadArgErr,
EpidNrVerify(verifier, &epid_signature->sigma0, this->kTest0.data(),
this->kTest0.size(), &sig_rl->bk[0], &nr_proof));
@@ -128,9 +133,10 @@ TEST_F(EpidVerifierTest, NrVerifyRejectsSigWithSnuNotInRange) {
VerifierCtxObj verifier(this->kGrp01Key);
EpidSignature const* epid_signature = reinterpret_cast<EpidSignature const*>(
this->kSigGrp01Member0Sha256RandombaseTest0.data());
- SigRl const* sig_rl = reinterpret_cast<SigRl const*>(&this->kGrp01SigRl);
+ SigRl const* sig_rl =
+ reinterpret_cast<SigRl const*>(this->kGrp01SigRl.data());
NrProof nr_proof = epid_signature->sigma[0];
- nr_proof.snu.data = this->params_str.p.data;
+ nr_proof.snu.data = this->kParamsStr.p.data;
EXPECT_EQ(kEpidBadArgErr,
EpidNrVerify(verifier, &epid_signature->sigma0, this->kTest0.data(),
this->kTest0.size(), &sig_rl->bk[0], &nr_proof));
@@ -155,7 +161,8 @@ TEST_F(EpidVerifierTest, NrVerifyRejectsSigWithInvalidCommitment) {
VerifierCtxObj verifier(this->kGrp01Key);
EpidSignature const* epid_signature = reinterpret_cast<EpidSignature const*>(
this->kSigGrp01Member0Sha256RandombaseTest0.data());
- SigRl const* sig_rl = reinterpret_cast<SigRl const*>(&this->kGrp01SigRl);
+ SigRl const* sig_rl =
+ reinterpret_cast<SigRl const*>(this->kGrp01SigRl.data());
std::vector<uint8_t> test_msg = this->kTest0;
test_msg[0]++;
EXPECT_EQ(
@@ -177,7 +184,8 @@ TEST_F(EpidVerifierTest, NrVerifyRejectsSigWithValidCommitmentDiffHashAlg) {
EpidSignature const* epid_signature_sha384 =
reinterpret_cast<EpidSignature const*>(
this->kSigGrp01Member0Sha384RandombaseTest0.data());
- SigRl const* sig_rl = reinterpret_cast<SigRl const*>(&this->kGrp01SigRl);
+ SigRl const* sig_rl =
+ reinterpret_cast<SigRl const*>(this->kGrp01SigRl.data());
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha384));
EXPECT_EQ(kEpidBadArgErr,
EpidNrVerify(verifier, &epid_signature_sha256->sigma0,
@@ -211,7 +219,7 @@ TEST_F(EpidVerifierTest, NrVerifyAcceptsSigWithRandomBaseNameSha256) {
TEST_F(EpidVerifierTest,
NrVerifyAcceptsSigWithRandomBaseNameSha256UsingIkgfData) {
- VerifierCtxObj verifier(this->pub_key_ikgf_str);
+ VerifierCtxObj verifier(this->kPubKeyIkgfStr);
EpidSignature const* epid_signature = reinterpret_cast<EpidSignature const*>(
this->kSigMember0Sha256RandombaseMsg0Ikgf.data());
SigRl const* sig_rl = reinterpret_cast<SigRl const*>(this->kSigRlIkgf.data());
diff --git a/epid/verifier/unittests/verifier-testhelper.cc b/epid/verifier/unittests/verifier-testhelper.cc
index d9b2462..ab9d870 100644
--- a/epid/verifier/unittests/verifier-testhelper.cc
+++ b/epid/verifier/unittests/verifier-testhelper.cc
@@ -21,7 +21,7 @@
#include "epid/verifier/unittests/verifier-testhelper.h"
-const G1ElemStr EpidVerifierTest::G1_identity_str = {
+const G1ElemStr EpidVerifierTest::kG1IdentityStr = {
{{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}},
@@ -29,7 +29,7 @@ const G1ElemStr EpidVerifierTest::G1_identity_str = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}}};
-const GroupPubKey EpidVerifierTest::pub_key_str = {
+const GroupPubKey EpidVerifierTest::kPubKeyStr = {
// gid
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -63,7 +63,7 @@ const GroupPubKey EpidVerifierTest::pub_key_str = {
0x1F, 0x3D, 0xEA, 0xA2, 0xBA, 0x6B, 0xF0, 0xDA, 0x8E, 0x25, 0xC6, 0xAD,
0x83, 0x7D, 0x3E, 0x31, 0xEE, 0x11, 0x40, 0xA9}}}};
-const GroupPubKey EpidVerifierTest::pub_key_ikgf_str = {
+const GroupPubKey EpidVerifierTest::kPubKeyIkgfStr = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00}, // group id
{{{{0x45, 0xcb, 0x06, 0x04, 0xb3, 0xf7, 0x23, 0xb2, 0xd1, 0xd1, 0x0d, 0x4f,
@@ -92,7 +92,7 @@ const GroupPubKey EpidVerifierTest::pub_key_ikgf_str = {
0x81, 0x16, 0x5c, 0xd2, 0xca, 0xd4, 0x2e, 0x61}}}}} // w
};
-const GroupPubKey EpidVerifierTest::pub_key_rev_group_ikgf_str = {
+const GroupPubKey EpidVerifierTest::kPubKeyRevGroupIkgfStr = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x78, 0x8a, 0xb6, 0x0f, 0x9a, 0xf5, 0xe4, 0xd1,
0xe7, 0x39, 0x6a, 0x79, 0x6c, 0xb5, 0xd1, 0xa1, 0x83, 0xec, 0xa1, 0x01,
@@ -117,7 +117,12 @@ const GroupPubKey EpidVerifierTest::pub_key_rev_group_ikgf_str = {
0xee, 0xd4, 0x6e, 0xa7, 0x49, 0x7b, 0xeb, 0x8f, 0x92, 0x66, 0x45, 0xda,
0xb4, 0x01, 0xa8, 0xee, 0x7c, 0xdf, 0x8e, 0x08};
-const VerifierPrecomp EpidVerifierTest::verifier_precomp_str = {
+const VerifierPrecomp EpidVerifierTest::kVerifierPrecompStr = {
+ // gid
+ {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x2A,
+ },
// e12
{0xD8, 0x14, 0xBA, 0x4B, 0x44, 0x03, 0x55, 0x6C, 0xF6, 0x42, 0xE8, 0xF0,
0x4C, 0xB5, 0xE7, 0xD4, 0xA2, 0xA3, 0x69, 0x47, 0xF5, 0xD4, 0xC8, 0xE9,
@@ -251,97 +256,99 @@ const VerifierPrecomp EpidVerifierTest::verifier_precomp_str = {
0x6A, 0x86, 0x8B, 0xCC, 0xA2, 0x13, 0xA0, 0xE9, 0xF2, 0x5C, 0xB0, 0x23,
0xB2, 0x15, 0xF9, 0xBB, 0x43, 0xC1, 0x54, 0xF4, 0xC8, 0xAB, 0x16, 0xA6}};
-const VerifierPrecomp EpidVerifierTest::verifier_precomp_ikgf_str = {
- 0xbc, 0x74, 0xd9, 0xd2, 0xcc, 0x56, 0x28, 0xfd, 0x3d, 0x0b, 0x2b, 0x86,
- 0xf4, 0xc6, 0xb2, 0x25, 0x19, 0x6b, 0x5b, 0x42, 0x35, 0x6a, 0xd9, 0x9c,
- 0xf9, 0xb4, 0x30, 0xcb, 0xff, 0x39, 0xbb, 0x92, 0x41, 0x71, 0xf4, 0x49,
- 0xc3, 0xfd, 0x36, 0xa3, 0xe0, 0xdd, 0x83, 0xf1, 0x34, 0x53, 0x2e, 0x16,
- 0x2f, 0x45, 0x06, 0x10, 0x3d, 0x9a, 0xfd, 0x22, 0xb8, 0xf1, 0xfd, 0x52,
- 0x3a, 0x24, 0xc5, 0x9c, 0xdd, 0x54, 0x9c, 0xff, 0xb0, 0x4d, 0xb9, 0xe5,
- 0x21, 0x62, 0x61, 0xaa, 0x76, 0xc3, 0xc1, 0x25, 0x47, 0xe4, 0x3b, 0x62,
- 0xab, 0x5f, 0x2c, 0x56, 0xe1, 0x24, 0x9c, 0x21, 0xec, 0x6b, 0x1d, 0x80,
- 0x1d, 0xca, 0xc5, 0x45, 0x34, 0xee, 0x4e, 0xc6, 0x20, 0x94, 0x14, 0x98,
- 0x0e, 0xd6, 0x88, 0x1d, 0x69, 0xfd, 0x25, 0xd3, 0xe3, 0x08, 0x3f, 0x62,
- 0x82, 0xa9, 0xf2, 0x13, 0xd6, 0x54, 0xda, 0x12, 0xec, 0x4e, 0xd2, 0x92,
- 0xe1, 0x82, 0x3f, 0x54, 0xf8, 0xc7, 0x0e, 0x21, 0x90, 0x49, 0xa1, 0x73,
- 0xa2, 0x03, 0xd0, 0xc7, 0x1c, 0xc2, 0x36, 0x1f, 0xb5, 0x8e, 0x22, 0xaf,
- 0xb5, 0x96, 0xad, 0xba, 0xde, 0xe6, 0x45, 0xb9, 0xee, 0x39, 0x74, 0x53,
- 0x62, 0x68, 0xa6, 0x37, 0x33, 0x65, 0x47, 0x3b, 0xf2, 0xa3, 0x35, 0xd0,
- 0xe9, 0x50, 0x49, 0x68, 0x23, 0x9a, 0xa0, 0x33, 0x66, 0x2f, 0x84, 0x23,
- 0x43, 0x95, 0x35, 0xea, 0x1d, 0xfe, 0x3a, 0xe4, 0x45, 0x6f, 0xad, 0x86,
- 0x7a, 0x4b, 0xf8, 0xb7, 0x32, 0xaf, 0x79, 0x7c, 0x45, 0x8d, 0xd9, 0x36,
- 0x0d, 0x66, 0xcb, 0x47, 0x07, 0xf4, 0x75, 0xae, 0x38, 0xe1, 0x32, 0x67,
- 0x80, 0x73, 0x0b, 0x98, 0xb7, 0x8d, 0xa3, 0x03, 0x94, 0x59, 0x0c, 0x04,
- 0xa8, 0x3e, 0xf8, 0x39, 0xc9, 0x25, 0x74, 0xb5, 0x9c, 0x62, 0x79, 0xb9,
- 0xf0, 0x20, 0x0b, 0x41, 0xb1, 0x76, 0x2a, 0x93, 0x15, 0xfa, 0x7a, 0x55,
- 0xe4, 0x50, 0xf3, 0xe1, 0x54, 0xf8, 0x9e, 0x42, 0x84, 0xaf, 0xb6, 0xc2,
- 0x2e, 0x98, 0xd5, 0xfd, 0x31, 0xe4, 0x16, 0x2b, 0x4d, 0x32, 0x96, 0x04,
- 0x4f, 0xca, 0x8b, 0x8d, 0x3c, 0x24, 0xb4, 0xc3, 0x86, 0x3b, 0x06, 0xc9,
- 0x45, 0xc9, 0xb1, 0x90, 0xac, 0xc3, 0xd6, 0xec, 0x80, 0x5b, 0x84, 0xcb,
- 0x5e, 0x7b, 0xc4, 0xcb, 0x63, 0x9e, 0xca, 0x09, 0x92, 0xca, 0x70, 0xfd,
- 0x24, 0x2a, 0x81, 0x37, 0x5a, 0x85, 0x72, 0x4a, 0x46, 0x2d, 0x29, 0x38,
- 0x8f, 0xc3, 0x59, 0xc7, 0xe9, 0x76, 0x24, 0xea, 0xd4, 0xef, 0x06, 0x12,
- 0xf5, 0xab, 0xab, 0xa1, 0x59, 0x13, 0xc8, 0x1d, 0xdf, 0x0f, 0x41, 0xbe,
- 0x98, 0x65, 0x00, 0x11, 0x41, 0x7c, 0x6e, 0x29, 0x83, 0x73, 0xfd, 0x81,
- 0xff, 0xe8, 0xd8, 0x7f, 0xa1, 0x00, 0x62, 0x11, 0x14, 0x38, 0x06, 0x57,
- 0x20, 0x81, 0xaa, 0x9e, 0xaf, 0xfe, 0xee, 0x68, 0xee, 0x30, 0x1a, 0x83,
- 0xe7, 0x32, 0xc3, 0xfc, 0x69, 0xe5, 0x19, 0x29, 0x4e, 0xee, 0xb0, 0xf1,
- 0x63, 0xaf, 0x41, 0x3d, 0x3b, 0xb9, 0xbb, 0x2e, 0xde, 0xd7, 0x0b, 0xbe,
- 0x11, 0x8f, 0x4a, 0x94, 0x4c, 0x57, 0xf3, 0x64, 0x38, 0x5a, 0xc6, 0xb8,
- 0x5d, 0xa1, 0x9d, 0xc8, 0xfa, 0x32, 0xe2, 0x08, 0xf4, 0x26, 0x3f, 0x75,
- 0xb5, 0x35, 0x9a, 0xe9, 0xd6, 0x1d, 0x35, 0x41, 0x9b, 0x20, 0x2b, 0x54,
- 0xb9, 0x66, 0x6c, 0xc6, 0xb7, 0x44, 0x82, 0x9b, 0x74, 0xe8, 0x09, 0x04,
- 0xa4, 0xf2, 0x7a, 0x8f, 0xe8, 0x6f, 0x3c, 0xa0, 0x18, 0xab, 0x66, 0xf6,
- 0x39, 0x34, 0x70, 0xf3, 0xa6, 0xd3, 0xc9, 0xe1, 0x97, 0xe2, 0xdc, 0x4d,
- 0xca, 0x02, 0xb6, 0x73, 0x07, 0xf3, 0x8c, 0xd0, 0xab, 0xd9, 0x12, 0x45,
- 0x70, 0x7c, 0x3a, 0x24, 0x64, 0xce, 0x9e, 0x38, 0x4d, 0x5d, 0xe1, 0x9d,
- 0xf2, 0x4b, 0x58, 0xdc, 0x71, 0xb3, 0x61, 0x56, 0x14, 0x62, 0x2a, 0x1b,
- 0x36, 0x5e, 0xc9, 0x15, 0xf3, 0x50, 0xe6, 0xc0, 0x93, 0x62, 0xd0, 0x69,
- 0xab, 0xd4, 0xe5, 0x9b, 0xa6, 0xa7, 0xa3, 0x0c, 0x51, 0xad, 0xf7, 0x38,
- 0x6f, 0x1d, 0xcf, 0x43, 0xda, 0x83, 0x95, 0xc6, 0xfb, 0xd8, 0x90, 0x5e,
- 0x35, 0x30, 0x0b, 0x7b, 0x45, 0xd0, 0x12, 0x32, 0x95, 0xc3, 0x96, 0xdc,
- 0x0a, 0x68, 0xcc, 0xcf, 0x19, 0x0b, 0x13, 0xc7, 0x6a, 0x7a, 0x53, 0x36,
- 0x5b, 0x24, 0xc5, 0x84, 0x5c, 0xeb, 0x9e, 0xeb, 0xdc, 0x91, 0x17, 0xb3,
- 0x29, 0xfd, 0xee, 0x55, 0xc9, 0x8c, 0xcd, 0xbe, 0x3a, 0x66, 0xf3, 0xba,
- 0x79, 0xfe, 0xc7, 0xf8, 0x08, 0xeb, 0xd2, 0x3a, 0x17, 0x3c, 0x36, 0x29,
- 0xc1, 0xde, 0xa9, 0xab, 0x80, 0xdb, 0x6c, 0xdd, 0xfb, 0xe5, 0xb1, 0x12,
- 0x25, 0x2f, 0xa3, 0x3d, 0x0e, 0x72, 0xde, 0xaf, 0x86, 0x93, 0x35, 0x18,
- 0x96, 0x19, 0x47, 0xfd, 0x8f, 0xae, 0x7b, 0xe7, 0xac, 0x6e, 0x53, 0x10,
- 0x1e, 0x66, 0x54, 0xc0, 0x36, 0x0e, 0x73, 0x35, 0xb3, 0x20, 0xf9, 0xaa,
- 0x25, 0x4a, 0x66, 0xaf, 0xc9, 0x2f, 0xd1, 0x19, 0x8b, 0x8f, 0x93, 0xbe,
- 0x3a, 0x30, 0xa5, 0x24, 0xc2, 0xad, 0x30, 0xfc, 0x97, 0xfe, 0x6c, 0xe0,
- 0x7f, 0x98, 0x71, 0x37, 0x33, 0x26, 0xc3, 0x75, 0xc8, 0x51, 0xe6, 0xf2,
- 0x99, 0xf0, 0x0f, 0x7d, 0x5d, 0x12, 0x26, 0x9d, 0x96, 0xeb, 0xd5, 0x08,
- 0x28, 0x34, 0x90, 0x1c, 0xdb, 0x98, 0xbd, 0x8a, 0xeb, 0x93, 0x0d, 0xd0,
- 0x57, 0x3e, 0xb8, 0x65, 0xdd, 0xa6, 0xa9, 0x81, 0xd6, 0xca, 0x62, 0x4b,
- 0x24, 0xed, 0xf4, 0x36, 0xf0, 0x83, 0xd6, 0x0e, 0x53, 0xf2, 0x50, 0x89,
- 0x70, 0x23, 0x19, 0x7b, 0xd0, 0x7e, 0x67, 0xa3, 0x45, 0x72, 0x9d, 0x11,
- 0xbe, 0xbb, 0xe1, 0x72, 0x51, 0xf6, 0x5f, 0x4e, 0x2c, 0xca, 0x61, 0x3d,
- 0xaa, 0xfd, 0xb7, 0x61, 0xbc, 0x3a, 0xd2, 0x20, 0x18, 0xa2, 0xee, 0x04,
- 0xe4, 0x6b, 0xf3, 0x84, 0x26, 0xc2, 0x43, 0xa4, 0xfe, 0x4e, 0x14, 0x5c,
- 0xbe, 0xe7, 0x11, 0x4a, 0x61, 0x33, 0x7d, 0xeb, 0x71, 0x98, 0x7c, 0xf0,
- 0x44, 0xe2, 0x41, 0x17, 0x39, 0xd0, 0x4e, 0xe2, 0x9c, 0xcc, 0x8d, 0x76,
- 0x3c, 0xb8, 0x0f, 0x63, 0x4a, 0x56, 0x7c, 0xf8, 0xab, 0xbd, 0x87, 0xcc,
- 0xa2, 0x29, 0xb9, 0x3c, 0xcc, 0x12, 0xd2, 0x9d, 0x6f, 0xbd, 0x28, 0xc3,
- 0x0c, 0x2f, 0x83, 0x8c, 0xf3, 0xad, 0x3d, 0xc6, 0x92, 0xba, 0x0b, 0x28,
- 0x47, 0x81, 0x78, 0xbe, 0x2b, 0xe0, 0x6a, 0x47, 0xba, 0xf3, 0xbe, 0x39,
- 0x30, 0x49, 0x0b, 0x35, 0x34, 0x80, 0x70, 0xc2, 0x75, 0x54, 0x65, 0xd8,
- 0xc8, 0x1c, 0x26, 0xb8, 0x97, 0x61, 0x57, 0xcf, 0x2d, 0xb8, 0xd1, 0xdd,
- 0xb0, 0xf1, 0xa9, 0x0f, 0x3f, 0x7e, 0xfe, 0xd3, 0xee, 0xdc, 0x75, 0xbf,
- 0xc2, 0xf1, 0x30, 0xd6, 0x60, 0x1b, 0xcd, 0x7b, 0x87, 0xde, 0x0b, 0x58,
- 0x5c, 0xac, 0x84, 0xda, 0xef, 0x86, 0x86, 0x8d, 0x8e, 0xfd, 0x6f, 0x93,
- 0x32, 0x8d, 0xac, 0x7b, 0x8f, 0x2a, 0x8a, 0x5f, 0xf1, 0xea, 0xbb, 0x8e,
- 0x6d, 0xbf, 0xe0, 0x59, 0x90, 0xc2, 0xd3, 0x3d, 0x8a, 0x03, 0x64, 0x11,
- 0xdd, 0xf1, 0xfc, 0x2d, 0x26, 0x8a, 0x6f, 0x39, 0x25, 0xa9, 0xaa, 0x61,
- 0x45, 0x5b, 0x7b, 0x36, 0xfd, 0x82, 0xd2, 0x6a, 0x8c, 0x9a, 0xf1, 0xc2};
+const VerifierPrecomp EpidVerifierTest::kVerifierPrecompIkgfStr = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xbc, 0x74, 0xd9, 0xd2, 0xcc, 0x56, 0x28, 0xfd,
+ 0x3d, 0x0b, 0x2b, 0x86, 0xf4, 0xc6, 0xb2, 0x25, 0x19, 0x6b, 0x5b, 0x42,
+ 0x35, 0x6a, 0xd9, 0x9c, 0xf9, 0xb4, 0x30, 0xcb, 0xff, 0x39, 0xbb, 0x92,
+ 0x41, 0x71, 0xf4, 0x49, 0xc3, 0xfd, 0x36, 0xa3, 0xe0, 0xdd, 0x83, 0xf1,
+ 0x34, 0x53, 0x2e, 0x16, 0x2f, 0x45, 0x06, 0x10, 0x3d, 0x9a, 0xfd, 0x22,
+ 0xb8, 0xf1, 0xfd, 0x52, 0x3a, 0x24, 0xc5, 0x9c, 0xdd, 0x54, 0x9c, 0xff,
+ 0xb0, 0x4d, 0xb9, 0xe5, 0x21, 0x62, 0x61, 0xaa, 0x76, 0xc3, 0xc1, 0x25,
+ 0x47, 0xe4, 0x3b, 0x62, 0xab, 0x5f, 0x2c, 0x56, 0xe1, 0x24, 0x9c, 0x21,
+ 0xec, 0x6b, 0x1d, 0x80, 0x1d, 0xca, 0xc5, 0x45, 0x34, 0xee, 0x4e, 0xc6,
+ 0x20, 0x94, 0x14, 0x98, 0x0e, 0xd6, 0x88, 0x1d, 0x69, 0xfd, 0x25, 0xd3,
+ 0xe3, 0x08, 0x3f, 0x62, 0x82, 0xa9, 0xf2, 0x13, 0xd6, 0x54, 0xda, 0x12,
+ 0xec, 0x4e, 0xd2, 0x92, 0xe1, 0x82, 0x3f, 0x54, 0xf8, 0xc7, 0x0e, 0x21,
+ 0x90, 0x49, 0xa1, 0x73, 0xa2, 0x03, 0xd0, 0xc7, 0x1c, 0xc2, 0x36, 0x1f,
+ 0xb5, 0x8e, 0x22, 0xaf, 0xb5, 0x96, 0xad, 0xba, 0xde, 0xe6, 0x45, 0xb9,
+ 0xee, 0x39, 0x74, 0x53, 0x62, 0x68, 0xa6, 0x37, 0x33, 0x65, 0x47, 0x3b,
+ 0xf2, 0xa3, 0x35, 0xd0, 0xe9, 0x50, 0x49, 0x68, 0x23, 0x9a, 0xa0, 0x33,
+ 0x66, 0x2f, 0x84, 0x23, 0x43, 0x95, 0x35, 0xea, 0x1d, 0xfe, 0x3a, 0xe4,
+ 0x45, 0x6f, 0xad, 0x86, 0x7a, 0x4b, 0xf8, 0xb7, 0x32, 0xaf, 0x79, 0x7c,
+ 0x45, 0x8d, 0xd9, 0x36, 0x0d, 0x66, 0xcb, 0x47, 0x07, 0xf4, 0x75, 0xae,
+ 0x38, 0xe1, 0x32, 0x67, 0x80, 0x73, 0x0b, 0x98, 0xb7, 0x8d, 0xa3, 0x03,
+ 0x94, 0x59, 0x0c, 0x04, 0xa8, 0x3e, 0xf8, 0x39, 0xc9, 0x25, 0x74, 0xb5,
+ 0x9c, 0x62, 0x79, 0xb9, 0xf0, 0x20, 0x0b, 0x41, 0xb1, 0x76, 0x2a, 0x93,
+ 0x15, 0xfa, 0x7a, 0x55, 0xe4, 0x50, 0xf3, 0xe1, 0x54, 0xf8, 0x9e, 0x42,
+ 0x84, 0xaf, 0xb6, 0xc2, 0x2e, 0x98, 0xd5, 0xfd, 0x31, 0xe4, 0x16, 0x2b,
+ 0x4d, 0x32, 0x96, 0x04, 0x4f, 0xca, 0x8b, 0x8d, 0x3c, 0x24, 0xb4, 0xc3,
+ 0x86, 0x3b, 0x06, 0xc9, 0x45, 0xc9, 0xb1, 0x90, 0xac, 0xc3, 0xd6, 0xec,
+ 0x80, 0x5b, 0x84, 0xcb, 0x5e, 0x7b, 0xc4, 0xcb, 0x63, 0x9e, 0xca, 0x09,
+ 0x92, 0xca, 0x70, 0xfd, 0x24, 0x2a, 0x81, 0x37, 0x5a, 0x85, 0x72, 0x4a,
+ 0x46, 0x2d, 0x29, 0x38, 0x8f, 0xc3, 0x59, 0xc7, 0xe9, 0x76, 0x24, 0xea,
+ 0xd4, 0xef, 0x06, 0x12, 0xf5, 0xab, 0xab, 0xa1, 0x59, 0x13, 0xc8, 0x1d,
+ 0xdf, 0x0f, 0x41, 0xbe, 0x98, 0x65, 0x00, 0x11, 0x41, 0x7c, 0x6e, 0x29,
+ 0x83, 0x73, 0xfd, 0x81, 0xff, 0xe8, 0xd8, 0x7f, 0xa1, 0x00, 0x62, 0x11,
+ 0x14, 0x38, 0x06, 0x57, 0x20, 0x81, 0xaa, 0x9e, 0xaf, 0xfe, 0xee, 0x68,
+ 0xee, 0x30, 0x1a, 0x83, 0xe7, 0x32, 0xc3, 0xfc, 0x69, 0xe5, 0x19, 0x29,
+ 0x4e, 0xee, 0xb0, 0xf1, 0x63, 0xaf, 0x41, 0x3d, 0x3b, 0xb9, 0xbb, 0x2e,
+ 0xde, 0xd7, 0x0b, 0xbe, 0x11, 0x8f, 0x4a, 0x94, 0x4c, 0x57, 0xf3, 0x64,
+ 0x38, 0x5a, 0xc6, 0xb8, 0x5d, 0xa1, 0x9d, 0xc8, 0xfa, 0x32, 0xe2, 0x08,
+ 0xf4, 0x26, 0x3f, 0x75, 0xb5, 0x35, 0x9a, 0xe9, 0xd6, 0x1d, 0x35, 0x41,
+ 0x9b, 0x20, 0x2b, 0x54, 0xb9, 0x66, 0x6c, 0xc6, 0xb7, 0x44, 0x82, 0x9b,
+ 0x74, 0xe8, 0x09, 0x04, 0xa4, 0xf2, 0x7a, 0x8f, 0xe8, 0x6f, 0x3c, 0xa0,
+ 0x18, 0xab, 0x66, 0xf6, 0x39, 0x34, 0x70, 0xf3, 0xa6, 0xd3, 0xc9, 0xe1,
+ 0x97, 0xe2, 0xdc, 0x4d, 0xca, 0x02, 0xb6, 0x73, 0x07, 0xf3, 0x8c, 0xd0,
+ 0xab, 0xd9, 0x12, 0x45, 0x70, 0x7c, 0x3a, 0x24, 0x64, 0xce, 0x9e, 0x38,
+ 0x4d, 0x5d, 0xe1, 0x9d, 0xf2, 0x4b, 0x58, 0xdc, 0x71, 0xb3, 0x61, 0x56,
+ 0x14, 0x62, 0x2a, 0x1b, 0x36, 0x5e, 0xc9, 0x15, 0xf3, 0x50, 0xe6, 0xc0,
+ 0x93, 0x62, 0xd0, 0x69, 0xab, 0xd4, 0xe5, 0x9b, 0xa6, 0xa7, 0xa3, 0x0c,
+ 0x51, 0xad, 0xf7, 0x38, 0x6f, 0x1d, 0xcf, 0x43, 0xda, 0x83, 0x95, 0xc6,
+ 0xfb, 0xd8, 0x90, 0x5e, 0x35, 0x30, 0x0b, 0x7b, 0x45, 0xd0, 0x12, 0x32,
+ 0x95, 0xc3, 0x96, 0xdc, 0x0a, 0x68, 0xcc, 0xcf, 0x19, 0x0b, 0x13, 0xc7,
+ 0x6a, 0x7a, 0x53, 0x36, 0x5b, 0x24, 0xc5, 0x84, 0x5c, 0xeb, 0x9e, 0xeb,
+ 0xdc, 0x91, 0x17, 0xb3, 0x29, 0xfd, 0xee, 0x55, 0xc9, 0x8c, 0xcd, 0xbe,
+ 0x3a, 0x66, 0xf3, 0xba, 0x79, 0xfe, 0xc7, 0xf8, 0x08, 0xeb, 0xd2, 0x3a,
+ 0x17, 0x3c, 0x36, 0x29, 0xc1, 0xde, 0xa9, 0xab, 0x80, 0xdb, 0x6c, 0xdd,
+ 0xfb, 0xe5, 0xb1, 0x12, 0x25, 0x2f, 0xa3, 0x3d, 0x0e, 0x72, 0xde, 0xaf,
+ 0x86, 0x93, 0x35, 0x18, 0x96, 0x19, 0x47, 0xfd, 0x8f, 0xae, 0x7b, 0xe7,
+ 0xac, 0x6e, 0x53, 0x10, 0x1e, 0x66, 0x54, 0xc0, 0x36, 0x0e, 0x73, 0x35,
+ 0xb3, 0x20, 0xf9, 0xaa, 0x25, 0x4a, 0x66, 0xaf, 0xc9, 0x2f, 0xd1, 0x19,
+ 0x8b, 0x8f, 0x93, 0xbe, 0x3a, 0x30, 0xa5, 0x24, 0xc2, 0xad, 0x30, 0xfc,
+ 0x97, 0xfe, 0x6c, 0xe0, 0x7f, 0x98, 0x71, 0x37, 0x33, 0x26, 0xc3, 0x75,
+ 0xc8, 0x51, 0xe6, 0xf2, 0x99, 0xf0, 0x0f, 0x7d, 0x5d, 0x12, 0x26, 0x9d,
+ 0x96, 0xeb, 0xd5, 0x08, 0x28, 0x34, 0x90, 0x1c, 0xdb, 0x98, 0xbd, 0x8a,
+ 0xeb, 0x93, 0x0d, 0xd0, 0x57, 0x3e, 0xb8, 0x65, 0xdd, 0xa6, 0xa9, 0x81,
+ 0xd6, 0xca, 0x62, 0x4b, 0x24, 0xed, 0xf4, 0x36, 0xf0, 0x83, 0xd6, 0x0e,
+ 0x53, 0xf2, 0x50, 0x89, 0x70, 0x23, 0x19, 0x7b, 0xd0, 0x7e, 0x67, 0xa3,
+ 0x45, 0x72, 0x9d, 0x11, 0xbe, 0xbb, 0xe1, 0x72, 0x51, 0xf6, 0x5f, 0x4e,
+ 0x2c, 0xca, 0x61, 0x3d, 0xaa, 0xfd, 0xb7, 0x61, 0xbc, 0x3a, 0xd2, 0x20,
+ 0x18, 0xa2, 0xee, 0x04, 0xe4, 0x6b, 0xf3, 0x84, 0x26, 0xc2, 0x43, 0xa4,
+ 0xfe, 0x4e, 0x14, 0x5c, 0xbe, 0xe7, 0x11, 0x4a, 0x61, 0x33, 0x7d, 0xeb,
+ 0x71, 0x98, 0x7c, 0xf0, 0x44, 0xe2, 0x41, 0x17, 0x39, 0xd0, 0x4e, 0xe2,
+ 0x9c, 0xcc, 0x8d, 0x76, 0x3c, 0xb8, 0x0f, 0x63, 0x4a, 0x56, 0x7c, 0xf8,
+ 0xab, 0xbd, 0x87, 0xcc, 0xa2, 0x29, 0xb9, 0x3c, 0xcc, 0x12, 0xd2, 0x9d,
+ 0x6f, 0xbd, 0x28, 0xc3, 0x0c, 0x2f, 0x83, 0x8c, 0xf3, 0xad, 0x3d, 0xc6,
+ 0x92, 0xba, 0x0b, 0x28, 0x47, 0x81, 0x78, 0xbe, 0x2b, 0xe0, 0x6a, 0x47,
+ 0xba, 0xf3, 0xbe, 0x39, 0x30, 0x49, 0x0b, 0x35, 0x34, 0x80, 0x70, 0xc2,
+ 0x75, 0x54, 0x65, 0xd8, 0xc8, 0x1c, 0x26, 0xb8, 0x97, 0x61, 0x57, 0xcf,
+ 0x2d, 0xb8, 0xd1, 0xdd, 0xb0, 0xf1, 0xa9, 0x0f, 0x3f, 0x7e, 0xfe, 0xd3,
+ 0xee, 0xdc, 0x75, 0xbf, 0xc2, 0xf1, 0x30, 0xd6, 0x60, 0x1b, 0xcd, 0x7b,
+ 0x87, 0xde, 0x0b, 0x58, 0x5c, 0xac, 0x84, 0xda, 0xef, 0x86, 0x86, 0x8d,
+ 0x8e, 0xfd, 0x6f, 0x93, 0x32, 0x8d, 0xac, 0x7b, 0x8f, 0x2a, 0x8a, 0x5f,
+ 0xf1, 0xea, 0xbb, 0x8e, 0x6d, 0xbf, 0xe0, 0x59, 0x90, 0xc2, 0xd3, 0x3d,
+ 0x8a, 0x03, 0x64, 0x11, 0xdd, 0xf1, 0xfc, 0x2d, 0x26, 0x8a, 0x6f, 0x39,
+ 0x25, 0xa9, 0xaa, 0x61, 0x45, 0x5b, 0x7b, 0x36, 0xfd, 0x82, 0xd2, 0x6a,
+ 0x8c, 0x9a, 0xf1, 0xc2};
-const std::vector<uint8_t> EpidVerifierTest::group_rl_empty_buf = {
+const std::vector<uint8_t> EpidVerifierTest::kGroupRlEmptyBuf = {
// RLVer
0x00, 0x00, 0x00, 0x00,
// n3
0x00, 0x00, 0x00, 0x00};
-const std::vector<uint8_t> EpidVerifierTest::group_rl_3gid_buf = {
+const std::vector<uint8_t> EpidVerifierTest::kGroupRl3GidBuf = {
// RLVer
0x00, 0x00, 0x00, 0x03,
// n3
@@ -357,7 +364,7 @@ const std::vector<uint8_t> EpidVerifierTest::group_rl_3gid_buf = {
0x00, 0x00, 0x00, 0x03,
};
-const std::vector<uint8_t> EpidVerifierTest::group_rl_3gid_n0_buf = {
+const std::vector<uint8_t> EpidVerifierTest::kGroupRl3GidN0Buf = {
// RLVer
0x00, 0x00, 0x00, 0x03,
// n3
@@ -373,7 +380,7 @@ const std::vector<uint8_t> EpidVerifierTest::group_rl_3gid_n0_buf = {
0x00, 0x00, 0x00, 0x03,
};
-const std::vector<uint8_t> EpidVerifierTest::group_rl_3gid_n2_buf = {
+const std::vector<uint8_t> EpidVerifierTest::kGroupRl3GidN2Buf = {
// RLVer
0x00, 0x00, 0x00, 0x03,
// n3
@@ -389,7 +396,7 @@ const std::vector<uint8_t> EpidVerifierTest::group_rl_3gid_n2_buf = {
0x00, 0x00, 0x00, 0x03,
};
-const std::vector<uint8_t> EpidVerifierTest::group_rl_3gid_n4_buf = {
+const std::vector<uint8_t> EpidVerifierTest::kGroupRl3GidN4Buf = {
// RLVer
0x00, 0x00, 0x00, 0x03,
// n3
@@ -405,253 +412,317 @@ const std::vector<uint8_t> EpidVerifierTest::group_rl_3gid_n4_buf = {
0x00, 0x00, 0x00, 0x03,
};
-const Epid2Params EpidVerifierTest::params_str = {
-#include "epid/common/epid2params_ate.inc"
+const std::vector<uint8_t> EpidVerifierTest::kGrp01VerRlOneEntry = {
+ // gid
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x2A,
+ // B
+ 0x41, 0x63, 0xfd, 0x06, 0xb8, 0xb1, 0xa6, 0x32, 0xa5, 0xe3, 0xeb, 0xc4,
+ 0x40, 0x11, 0x37, 0xc0, 0x62, 0x0d, 0xe1, 0xca, 0xe9, 0x79, 0xad, 0xff,
+ 0x1d, 0x13, 0xb3, 0xda, 0xa0, 0x10, 0x8a, 0xa8, 0x30, 0x72, 0xa4, 0xe8,
+ 0x27, 0xb5, 0xad, 0xdb, 0xac, 0x89, 0xd8, 0x37, 0x79, 0xd9, 0x8c, 0xd0,
+ 0xb3, 0xef, 0x94, 0x17, 0x4f, 0x05, 0x53, 0x4c, 0x4d, 0xf0, 0x77, 0xf7,
+ 0xb6, 0xaf, 0xb8, 0xfa,
+ // version
+ 0x00, 0x00, 0x00, 0x01,
+ // n4
+ 0x00, 0x00, 0x00, 0x01,
+ // k's
+ 0xdc, 0x41, 0x24, 0xe7, 0xb8, 0xf2, 0x6d, 0xc4, 0x01, 0xf9, 0x5d, 0xf8,
+ 0xd9, 0x23, 0x32, 0x29, 0x0a, 0xe1, 0xf6, 0xdc, 0xa1, 0xef, 0x52, 0xf7,
+ 0x3a, 0x3c, 0xe6, 0x7e, 0x3d, 0x0e, 0xe8, 0x86, 0xa9, 0x58, 0xf4, 0xfe,
+ 0xfa, 0x8b, 0xe4, 0x1c, 0xad, 0x58, 0x5b, 0x1c, 0xc7, 0x54, 0xee, 0x7e,
+ 0xe7, 0x12, 0x6a, 0x4b, 0x01, 0x63, 0xb4, 0xdb, 0x6e, 0xe7, 0x7a, 0xe9,
+ 0x62, 0xa5, 0xb4, 0xe3};
+const std::vector<uint8_t> EpidVerifierTest::kEmptyGrp01VerRl = {
+ // gid
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x2A,
+ // B
+ 0xa6, 0x13, 0x29, 0xb6, 0x61, 0xa2, 0xb8, 0xd7, 0x49, 0x86, 0xcb, 0xaf,
+ 0x94, 0x4d, 0x9e, 0x51, 0xcf, 0xd3, 0x5d, 0x0f, 0x33, 0x9a, 0x59, 0x0d,
+ 0xe7, 0xc9, 0xb9, 0x7f, 0x83, 0xae, 0x27, 0xe6, 0x40, 0xf0, 0x88, 0x13,
+ 0xe2, 0xb6, 0x6a, 0x43, 0x26, 0xa3, 0x21, 0xea, 0x00, 0x78, 0xcd, 0xce,
+ 0x0e, 0x14, 0x7a, 0xde, 0xcf, 0xaa, 0x7b, 0xc5, 0x7e, 0x7c, 0xaf, 0xe4,
+ 0x5e, 0x8a, 0xdd, 0xc7,
+ // version
+ 0x00, 0x00, 0x00, 0x00,
+ // n4
+ 0x00, 0x00, 0x00, 0x00,
+ // no k's
+};
+const Epid2Params EpidVerifierTest::kParamsStr = {
+#include "epid/common/src/epid2params_ate.inc"
};
const GroupPubKey EpidVerifierTest::kGrp01Key = {
-#include "epid/common/testdata/grp01/gpubkey.inc"
+#include "epid/common-testhelper/testdata/grp01/gpubkey.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrp01PrivRl = {
-#include "epid/common/testdata/grp01/privrl.inc"
+#include "epid/common-testhelper/testdata/grp01/privrl.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrp01SigRl = {
-#include "epid/common/testdata/grp01/sigrl.inc"
+#include "epid/common-testhelper/testdata/grp01/sigrl.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kSigRlIkgf = {
-#include "epid/common/testdata/ikgf/groupa/sigrl.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/sigrl.inc"
+};
+const std::vector<uint8_t> EpidVerifierTest::kEmptySigRlIkgf = {
+#include "epid/common-testhelper/testdata/ikgf/groupa/sigrl_empty.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrp01VerRl = {
-#include "epid/common/testdata/grp01/verrl.inc"
+#include "epid/common-testhelper/testdata/grp01/verrl.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrp01Member0Sha256RandombaseTest0 = {
-#include "epid/common/testdata/grp01/member0/sig_test0_sha256_sigrl.inc"
+#include "epid/common-testhelper/testdata/grp01/member0/sig_test0_sha256_sigrl.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigMember0Sha256RandombaseMsg0Ikgf = {
-#include "epid/common/testdata/ikgf/groupa/sig_msg0_sha256_sigrl.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/sig_msg0_sha256_sigrl.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrp01Member0Sha384RandombaseTest0 = {
-#include "epid/common/testdata/grp01/member0/sig_test0_sha384_sigrl.inc"
+#include "epid/common-testhelper/testdata/grp01/member0/sig_test0_sha384_sigrl.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrp01Member0Sha512RandombaseTest0 = {
-#include "epid/common/testdata/grp01/member0/sig_test0_sha512_sigrl.inc"
+#include "epid/common-testhelper/testdata/grp01/member0/sig_test0_sha512_sigrl.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrp01Member0Sha512256RandombaseTest1 = {0};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrp01Member0Sha256RandombaseTest1NoSigRl = {
-#include "epid/common/testdata/grp01/member0/sig_test1_sha256.inc"
+#include "epid/common-testhelper/testdata/grp01/member0/sig_test1_sha256.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrp01Member0Sha256Basename1Test1NoSigRl = {
-#include "epid/common/testdata/grp01/member0/sig_test1_basename1_sha256.inc"
+#include "epid/common-testhelper/testdata/grp01/member0/sig_test1_basename1_sha256.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigSha256Basename1Test1NoSigRlIkgf = {
-#include "epid/common/testdata/ikgf/groupa/sig_test1_basename1_sha256.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/sig_test1_basename1_sha256.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrp01Member0Sha384RandombaseTest1NoSigRl = {
-#include "epid/common/testdata/grp01/member0/sig_test1_sha384.inc"
+#include "epid/common-testhelper/testdata/grp01/member0/sig_test1_sha384.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrp01Member0Sha512RandombaseTest1NoSigRl = {
-#include "epid/common/testdata/grp01/member0/sig_test1_sha512.inc"
+#include "epid/common-testhelper/testdata/grp01/member0/sig_test1_sha512.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kTest0 = {
't', 'e', 's', 't', ' ', 'm', 'e', 's', 's', 'a', 'g', 'e', 0x0};
const std::vector<uint8_t> EpidVerifierTest::kTest1 = {'t', 'e', 's', 't', '1'};
+const std::vector<uint8_t> EpidVerifierTest::kBasename = {'b', 'a', 's', 'e',
+ 'n', 'a', 'm', 'e'};
const std::vector<uint8_t> EpidVerifierTest::kBasename1 = {
'b', 'a', 's', 'e', 'n', 'a', 'm', 'e', '1'};
-const OctStr32 EpidVerifierTest::octstr32_1 = {0x00, 0x00, 0x00, 0x01};
+const OctStr32 EpidVerifierTest::kOctStr32_1 = {0x00, 0x00, 0x00, 0x01};
-const GroupPubKey EpidVerifierTest::pub_key_sigrl_verify = {
+const GroupPubKey EpidVerifierTest::kPubKeySigRlVerify = {
#include "epid/verifier/unittests/testdata/sigrl/pub_key_sigrl_verify.inc"
};
-const std::vector<uint8_t> EpidVerifierTest::sigrl_single_entry = {
+const std::vector<uint8_t> EpidVerifierTest::kSigRlSingleEntry = {
#include "epid/verifier/unittests/testdata/sigrl/sigrl_single_entry.inc"
};
-const std::vector<uint8_t> EpidVerifierTest::sigrl_five_entries = {
+const std::vector<uint8_t> EpidVerifierTest::kSigRlFiveEntries = {
#include "epid/verifier/unittests/testdata/sigrl/sigrl_five_entries.inc"
};
-const EpidSignature EpidVerifierTest::signature_sigrl_first = {
+const EpidSignature EpidVerifierTest::kSignatureSigrlFirst = {
#include "epid/verifier/unittests/testdata/sigrl/signature_sigrl_first.inc"
};
-const EpidSignature EpidVerifierTest::signature_sigrl_middle = {
+const EpidSignature EpidVerifierTest::kSignatureSigrlMiddle = {
#include "epid/verifier/unittests/testdata/sigrl/signature_sigrl_middle.inc"
};
-const EpidSignature EpidVerifierTest::signature_sigrl_last = {
+const EpidSignature EpidVerifierTest::kSignatureSigrlLast = {
#include "epid/verifier/unittests/testdata/sigrl/signature_sigrl_last.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrpRl = {
-#include "epid/common/testdata/grprl.inc"
+#include "epid/common-testhelper/testdata/grprl.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrpRlIkgf = {
-#include "epid/common/testdata/ikgf/grprl.inc"
+#include "epid/common-testhelper/testdata/ikgf/grprl.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrpRlRevokedGrpXOnlyEntry = {
-#include "epid/common/testdata/grprl_single_entry_revoked_grp_x.inc"
+#include "epid/common-testhelper/testdata/grprl_single_entry_revoked_grp_x.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrpRlRevokedGrpXFirstEntry = {
-#include "epid/common/testdata/grprl_revoked_grp_x_first_entry.inc"
+#include "epid/common-testhelper/testdata/grprl_revoked_grp_x_first_entry.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrpRlRevokedGrpXMiddleEntry = {
-#include "epid/common/testdata/grprl_revoked_grp_x_middle_entry.inc"
+#include "epid/common-testhelper/testdata/grprl_revoked_grp_x_middle_entry.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrpRlRevokedGrpXLastEntry = {
-#include "epid/common/testdata/grprl_revoked_grp_x_last_entry.inc"
+#include "epid/common-testhelper/testdata/grprl_revoked_grp_x_last_entry.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kBsn0 = {'b', 's', 'n', '0'};
const std::vector<uint8_t> EpidVerifierTest::kMsg0 = {'m', 's', 'g', '0'};
const GroupPubKey EpidVerifierTest::kGrpXKey = {
-#include "epid/common/testdata/grp_x/pubkey.inc"
+#include "epid/common-testhelper/testdata/grp_x/pubkey.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrpXPrivRl = {
-#include "epid/common/testdata/grp_x/privrl.inc"
+#include "epid/common-testhelper/testdata/grp_x/privrl.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kPrivRlIkgf = {
-#include "epid/common/testdata/ikgf/groupa/privrl.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/privrl.inc"
+};
+const std::vector<uint8_t> EpidVerifierTest::kEmptyPrivRlIkgf = {
+#include "epid/common-testhelper/testdata/ikgf/groupa/privrl_empty.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kGrpXPrivRlRevokedPrivKey000OnlyEntry = {
-#include "epid/common/testdata/grp_x/privrl_single_entry_revoked_key000.inc"
+#include "epid/common-testhelper/testdata/grp_x/privrl_single_entry_revoked_key000.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrpXSigRl = {
-#include "epid/common/testdata/grp_x/sigrl.inc"
+#include "epid/common-testhelper/testdata/grp_x/sigrl.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrpXSigRlVersion2 = {
-#include "epid/common/testdata/grp_x/sigrl_ver_2.inc"
+#include "epid/common-testhelper/testdata/grp_x/sigrl_ver_2.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kGrpXSigRlMember0Sha256Bsn0Msg0OnlyEntry = {
-#include "epid/common/testdata/grp_x/sigrl_single_entry.inc"
+#include "epid/common-testhelper/testdata/grp_x/sigrl_single_entry.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kGrpXSigRlMember0Sha256Bsn0Msg0FirstEntry = {
-#include "epid/common/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_first_entry.inc"
+#include "epid/common-testhelper/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_first_entry.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kGrpXSigRlMember0Sha256Bsn0Msg0MiddleEntry = {
-#include "epid/common/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_middle_entry.inc"
+#include "epid/common-testhelper/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_middle_entry.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kGrpXSigRlMember0Sha256Bsn0Msg0LastEntry = {
-#include "epid/common/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_last_entry.inc"
+#include "epid/common-testhelper/testdata/grp_x/sigrl_member0_sig_sha256_bsn0_msg0_revoked_last_entry.inc"
};
-const std::vector<uint8_t> EpidVerifierTest::kGrpXBsn0VerRl = {
-#include "epid/common/testdata/grp_x/verrevoked/bsn0/verrl.inc"
+const std::vector<uint8_t> EpidVerifierTest::kGrpXBsn0Sha256VerRl = {
+#include "epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl.inc"
+};
+const std::vector<uint8_t> EpidVerifierTest::kGrpXBsn0Sha384VerRl = {
+#include "epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl_sha384.inc"
+};
+const std::vector<uint8_t> EpidVerifierTest::kGrpXBsn0Sha512VerRl = {
+#include "epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl_sha512.inc"
+};
+const std::vector<uint8_t> EpidVerifierTest::kGrpXBsn0Sha512256VerRl = {
+ // #include "testdata/grp_x/verrevoked/bsn0/verrl_sha512_256.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrpXBsn0VerRlSingleEntry = {
-#include "epid/common/testdata/grp_x/verrevoked/bsn0/verrl_1entry.inc"
+#include "epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/verrl_1entry.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrpXBsn1VerRl = {
-#include "epid/common/testdata/grp_x/verrevoked/bsn1/verrl.inc"
+#include "epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/verrl.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kGrpXBsn1VerRl_012 = {
-#include "epid/common/testdata/grp_x/verrevoked/bsn1/verrl_012revoked.inc"
+#include "epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/verrl_012revoked.inc"
};
// clang-format off
const std::vector<uint8_t>
EpidVerifierTest::kSigGrpXVerRevokedMember0Sha256Bsn0Msg0 = {
-#include "epid/common/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha256bsn0msg0.inc"
+#include "epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked0sha256bsn0msg0.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrpXVerRevokedMember1Sha256Bsn0Msg0 = {
-#include "epid/common/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha256bsn0msg0.inc"
+#include "epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked1sha256bsn0msg0.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrpXVerRevokedMember2Sha256Bsn0Msg0 = {
-#include "epid/common/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha256bsn0msg0.inc"
+#include "epid/common-testhelper/testdata/grp_x/verrevoked/bsn0/sig_revoked2sha256bsn0msg0.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrpXVerRevokedMember3Sha256Bsn1Msg0 = {
-#include "epid/common/testdata/grp_x/verrevoked/bsn1/sig_revoked3sha256bsn1msg0.inc"
+#include "epid/common-testhelper/testdata/grp_x/verrevoked/bsn1/sig_revoked3sha256bsn1msg0.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kSigGrpXMember0Sha256Bsn0Msg0 = {
-#include "epid/common/testdata/grp_x/member0/sig_sha256_bsn0_msg0.inc"
+#include "epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn0_msg0.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kSigMember0Sha256Bsn0Msg0Ikgf = {
-#include "epid/common/testdata/ikgf/groupa/sig_sha256_bsn0_msg0.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0.inc"
+};
+const std::vector<uint8_t>
+EpidVerifierTest::kSigMember0Sha256Bsn0Msg0EmptySigRlIkgf = {
+#include "epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_empty_sigrl.inc"
+};
+const std::vector<uint8_t>
+EpidVerifierTest::kSigMember0Sha256Bsn0Msg0NoSigRlIkgf = {
+#include "epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_nosigrl.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigRevSigMember0Sha256Bsn0Msg0Ikgf = {
-#include "epid/common/testdata/ikgf/groupa/sig_sigrevoked_sha256_bsn0_msg0.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/sig_sigrevoked_sha256_bsn0_msg0.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kRevGroupSigMember0Sha256Bsn0Msg0Ikgf = {
-#include "epid/common/testdata/ikgf/groupb/sig_grouprevoked_sha256_bsn0_msg0.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupb/sig_grouprevoked_sha256_bsn0_msg0.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrpXMember0Sha256Bsn0Msg0SingleEntrySigRl = {
-#include "epid/common/testdata/grp_x/member0/sig_sha256_bsn0_msg0_rl_singleentry.inc"
+#include "epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn0_msg0_rl_singleentry.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrpXRevokedPrivKey000Sha256Bsn0Msg0 = {
-#include "epid/common/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey000.inc"
+#include "epid/common-testhelper/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey000.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigRevokedPrivKeySha256Bsn0Msg0Ikgf = {
-#include "epid/common/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_revkey.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_bsn0_msg0_revkey.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrpXRevokedPrivKey001Sha256Bsn0Msg0 = {
-#include "epid/common/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey001.inc"
+#include "epid/common-testhelper/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey001.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrpXRevokedPrivKey002Sha256Bsn0Msg0 = {
-#include "epid/common/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey002.inc"
+#include "epid/common-testhelper/testdata/grp_x/privrevoked/signatures/sig_sha256_bsn0_msg0_revkey002.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kSigGrpXMember0Sha256Bsn0Msg1 = {
-#include "epid/common/testdata/grp_x/member0/sig_sha256_bsn0_msg1.inc"
+#include "epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn0_msg1.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kSigGrpXMember0Sha256Bsn1Msg0 = {
-#include "epid/common/testdata/grp_x/member0/sig_sha256_bsn1_msg0.inc"
+#include "epid/common-testhelper/testdata/grp_x/member0/sig_sha256_bsn1_msg0.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrpXMember0Sha256RandbaseMsg0 = {
-#include "epid/common/testdata/grp_x/member0/sig_sha256_rndbase_msg0.inc"
+#include "epid/common-testhelper/testdata/grp_x/member0/sig_sha256_rndbase_msg0.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigMember0Sha256RandbaseMsg0Ikgf = {
-#include "epid/common/testdata/ikgf/groupa/sig_sha256_rndbase_msg0.inc"
+#include "epid/common-testhelper/testdata/ikgf/groupa/sig_sha256_rndbase_msg0.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrpXMember0Sha256RandbaseMsg1 = {
-#include "epid/common/testdata/grp_x/member0/sig_sha256_rndbase_msg1.inc"
+#include "epid/common-testhelper/testdata/grp_x/member0/sig_sha256_rndbase_msg1.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kSigGrpXMember0Sha384Bsn0Msg0 = {
-#include "epid/common/testdata/grp_x/member0/sig_sha384_bsn0_msg0.inc"
+#include "epid/common-testhelper/testdata/grp_x/member0/sig_sha384_bsn0_msg0.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrpXMember0Sha384RandbaseMsg0 = {
-#include "epid/common/testdata/grp_x/member0/sig_sha384_rndbase_msg0.inc"
+#include "epid/common-testhelper/testdata/grp_x/member0/sig_sha384_rndbase_msg0.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kSigGrpXMember0Sha512Bsn0Msg0 = {
-#include "epid/common/testdata/grp_x/member0/sig_sha512_bsn0_msg0.inc"
+#include "epid/common-testhelper/testdata/grp_x/member0/sig_sha512_bsn0_msg0.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrpXMember0Sha512RandbaseMsg0 = {
-#include "epid/common/testdata/grp_x/member0/sig_sha512_rndbase_msg0.inc"
+#include "epid/common-testhelper/testdata/grp_x/member0/sig_sha512_rndbase_msg0.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrpXMember0Sha512256Bsn0Msg0 = {
-// #include "epid/common/testdata/grp_x/member0/sig_sha256512_bsn0_msg0.inc"
+ // #include "testdata/grp_x/member0/sig_sha512256_bsn0_msg0.inc"
};
const std::vector<uint8_t>
EpidVerifierTest::kSigGrpXMember0Sha512256RandbaseMsg0 = {
-// #include "epid/common/testdata/grp_x/member0/sig_sha512256_rndbase_msg0.inc"
+ // #include "testdata/grp_x/member0/sig_sha512256_rndbase_msg0.inc"
};
const std::vector<uint8_t> EpidVerifierTest::kSigGrpXMember1Sha256Bsn0Msg0 = {
-#include "epid/common/testdata/grp_x/member1/sig_sha256_bsn0_msg0.inc"
+#include "epid/common-testhelper/testdata/grp_x/member1/sig_sha256_bsn0_msg0.inc"
};
diff --git a/epid/verifier/unittests/verifier-testhelper.h b/epid/verifier/unittests/verifier-testhelper.h
index 66fb410..4bbb7d1 100644
--- a/epid/verifier/unittests/verifier-testhelper.h
+++ b/epid/verifier/unittests/verifier-testhelper.h
@@ -33,19 +33,19 @@ extern "C" {
class EpidVerifierTest : public ::testing::Test {
public:
/// Serialized identity element in G1
- static const G1ElemStr G1_identity_str;
+ static const G1ElemStr kG1IdentityStr;
/// test public key
- static const GroupPubKey pub_key_str;
+ static const GroupPubKey kPubKeyStr;
/// test public key from Ikgf
- static const GroupPubKey pub_key_ikgf_str;
+ static const GroupPubKey kPubKeyIkgfStr;
/// test public key of revoked group from Ikgf
- static const GroupPubKey pub_key_rev_group_ikgf_str;
+ static const GroupPubKey kPubKeyRevGroupIkgfStr;
/// verifier pre-computation data associated with pub_key_str
- static const VerifierPrecomp verifier_precomp_str;
+ static const VerifierPrecomp kVerifierPrecompStr;
/// verifier pre-computation data associated with pub_key_str from Ikgf
- static const VerifierPrecomp verifier_precomp_ikgf_str;
+ static const VerifierPrecomp kVerifierPrecompIkgfStr;
/// Intel(R) EPID 2.0 parameters
- static const Epid2Params params_str;
+ static const Epid2Params kParamsStr;
/// public key in Grp01
static const GroupPubKey kGrp01Key;
/// private key based revocation list in Grp01
@@ -54,22 +54,28 @@ class EpidVerifierTest : public ::testing::Test {
static const std::vector<uint8_t> kGrp01SigRl;
/// signature based revocation list from Ikgf
static const std::vector<uint8_t> kSigRlIkgf;
+ /// empty signature based revocation list from Ikgf
+ static const std::vector<uint8_t> kEmptySigRlIkgf;
/// number of SigRl entries for Grp01
static const uint32_t kGrp01SigRlN2 = 50;
+ /// verifier revocation list in Grp01 with one entry
+ static const std::vector<uint8_t> kGrp01VerRlOneEntry;
/// verifier revocation list in Grp01
static const std::vector<uint8_t> kGrp01VerRl;
+ /// empty verifier revocation in Grp01
+ static const std::vector<uint8_t> kEmptyGrp01VerRl;
/// C string with a message "test message"
static const std::vector<uint8_t> kTest0;
/// the message "test1"
static const std::vector<uint8_t> kTest1;
+ /// the basename "basename"
+ static const std::vector<uint8_t> kBasename;
/// the basename "basename1"
static const std::vector<uint8_t> kBasename1;
/// Signature of Test0 with RandomBase by Grp01 Member0 using Sha256
static const std::vector<uint8_t> kSigGrp01Member0Sha256RandombaseTest0;
/// Signature of Test with RandomBase, Member0 using Sha256 from Ikgf
static const std::vector<uint8_t> kSigMember0Sha256RandombaseMsg0Ikgf;
- /// Signature of Test1 with Basename1 by Grp01 Member0 using Sha256
- static const std::vector<uint8_t> kSigGrp01Member0Sha256Basename1Test1;
/// Signature of Test1 with RandomBase by Grp01 Member0 using Sha384
static const std::vector<uint8_t> kSigGrp01Member0Sha384RandombaseTest0;
/// Signature of Test1 with RandomBase by Grp01 Member0 using Sha512
@@ -90,15 +96,15 @@ class EpidVerifierTest : public ::testing::Test {
static const std::vector<uint8_t>
kSigGrp01Member0Sha512RandombaseTest1NoSigRl;
/// group based rl test data (empty rl)
- static const std::vector<uint8_t> group_rl_empty_buf;
+ static const std::vector<uint8_t> kGroupRlEmptyBuf;
/// group based rl test data (v=3, n=3, 3 revoked gid)
- static const std::vector<uint8_t> group_rl_3gid_buf;
+ static const std::vector<uint8_t> kGroupRl3GidBuf;
/// group based rl test data (v=3, n=0, 3 revoked gid)
- static const std::vector<uint8_t> group_rl_3gid_n0_buf;
+ static const std::vector<uint8_t> kGroupRl3GidN0Buf;
/// group based rl test data (v=3, n=2, 3 revoked gid)
- static const std::vector<uint8_t> group_rl_3gid_n2_buf;
+ static const std::vector<uint8_t> kGroupRl3GidN2Buf;
/// group based rl test data (v=3, n=4, 3 revoked gid)
- static const std::vector<uint8_t> group_rl_3gid_n4_buf;
+ static const std::vector<uint8_t> kGroupRl3GidN4Buf;
/// a message
static const std::vector<uint8_t> kMsg0;
/// a message
@@ -120,8 +126,10 @@ class EpidVerifierTest : public ::testing::Test {
static const std::vector<uint8_t> kGrpRlRevokedGrpXMiddleEntry;
/// a group revocation list with multiple entries
static const std::vector<uint8_t> kGrpRlRevokedGrpXLastEntry;
- /// the privrl from Ikgf
+ /// private key based revocation list from Ikgf
static const std::vector<uint8_t> kPrivRlIkgf;
+ /// empty private key based revocation list from Ikgf
+ static const std::vector<uint8_t> kEmptyPrivRlIkgf;
/// a group key in group X
static const GroupPubKey kGrpXKey;
@@ -132,8 +140,14 @@ class EpidVerifierTest : public ::testing::Test {
static const std::vector<uint8_t> kGrpXPrivRlRevokedPrivKey000OnlyEntry;
/// the sigrl of group X
static const std::vector<uint8_t> kGrpXSigRl;
- /// a verifierrl of group X with bsn0 for some verifier
- static const std::vector<uint8_t> kGrpXBsn0VerRl;
+ /// a verifierrl of group X with bsn0 and SHA256 for some verifier
+ static const std::vector<uint8_t> kGrpXBsn0Sha256VerRl;
+ /// a verifierrl of group X with bsn0 and SHA384 for some verifier
+ static const std::vector<uint8_t> kGrpXBsn0Sha384VerRl;
+ /// a verifierrl of group X with bsn0 and SHA512 for some verifier
+ static const std::vector<uint8_t> kGrpXBsn0Sha512VerRl;
+ /// a verifierrl of group X with bsn0 and SHA512/256 for some verifier
+ static const std::vector<uint8_t> kGrpXBsn0Sha512256VerRl;
/// a verifierrl of group X with bsn0 for some verifier with single entry
static const std::vector<uint8_t> kGrpXBsn0VerRlSingleEntry;
/// a verifierrl of group X with bsn1 for some verifier
@@ -166,6 +180,10 @@ class EpidVerifierTest : public ::testing::Test {
static const std::vector<uint8_t> kSigGrpXMember0Sha256Bsn0Msg0;
/// signature of msg0 by member0 with Sha256 bsn0 from Ikgf
static const std::vector<uint8_t> kSigMember0Sha256Bsn0Msg0Ikgf;
+ /// signature of msg0 by member0 with Sha256 bsn0 from Ikgf with empty SigRl
+ static const std::vector<uint8_t> kSigMember0Sha256Bsn0Msg0EmptySigRlIkgf;
+ /// signature of msg0 by member0 with Sha256 bsn0 from Ikgf without SigRl
+ static const std::vector<uint8_t> kSigMember0Sha256Bsn0Msg0NoSigRlIkgf;
/// signature of msg0 by member0 from SigRl first entry with Sha256 bsn0 from
/// Ikgf
static const std::vector<uint8_t> kSigRevSigMember0Sha256Bsn0Msg0Ikgf;
@@ -223,17 +241,17 @@ class EpidVerifierTest : public ::testing::Test {
// EpidVerify Signature Based Revocation List Reject
/// GroupPubKey to be used for EpidVerify Signature Based Revocation List
/// Reject tests
- static const GroupPubKey pub_key_sigrl_verify;
+ static const GroupPubKey kPubKeySigRlVerify;
/// SigRl with 1 entry
- static const std::vector<uint8_t> sigrl_single_entry;
+ static const std::vector<uint8_t> kSigRlSingleEntry;
/// SigRl with 1 entry
- static const std::vector<uint8_t> sigrl_five_entries;
+ static const std::vector<uint8_t> kSigRlFiveEntries;
/// First entry in sigrl_five_entries
- static const EpidSignature signature_sigrl_first;
+ static const EpidSignature kSignatureSigrlFirst;
/// Middle entry in sigrl_five_entries
- static const EpidSignature signature_sigrl_middle;
+ static const EpidSignature kSignatureSigrlMiddle;
/// Last entry in sigrl_five_entries
- static const EpidSignature signature_sigrl_last;
+ static const EpidSignature kSignatureSigrlLast;
/// setup called before each TEST_F starts
virtual void SetUp() {}
@@ -243,10 +261,9 @@ class EpidVerifierTest : public ::testing::Test {
/// value "1" represented as an octstr constant
/*!
this value is used frequently to set 32 bit fields. describing as a constant
- here
- to reduce replication in code.
+ here to reduce replication in code.
*/
- static const OctStr32 octstr32_1;
+ static const OctStr32 kOctStr32_1;
};
#endif // EPID_VERIFIER_UNITTESTS_VERIFIER_TESTHELPER_H_
diff --git a/epid/verifier/unittests/verify-test.cc b/epid/verifier/unittests/verify-test.cc
index e16ddfa..ffac4d2 100644
--- a/epid/verifier/unittests/verify-test.cc
+++ b/epid/verifier/unittests/verify-test.cc
@@ -23,8 +23,7 @@
extern "C" {
#include "epid/verifier/api.h"
-#include "epid/common/endian_convert.h"
-#include "epid/common/memory.h"
+#include "epid/common/src/endian_convert.h"
}
#include "epid/verifier/unittests/verifier-testhelper.h"
@@ -43,12 +42,12 @@ TEST_F(EpidVerifierTest, VerifyFailsGivenNullParameters) {
EXPECT_EQ(kEpidBadArgErr,
EpidVerify(nullptr, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), nullptr, 0));
- EXPECT_EQ(kEpidBadArgErr, EpidVerify(verifier, nullptr, sig.size(),
- msg.data(), msg.size(), nullptr, 0));
+ msg.data(), msg.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidVerify(verifier, nullptr, sig.size(), msg.data(), msg.size()));
EXPECT_EQ(kEpidBadArgErr,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- nullptr, msg.size(), nullptr, 0));
+ nullptr, msg.size()));
}
TEST_F(EpidVerifierTest, VerifyFailsGivenSigLenTooShortForRlCount) {
@@ -63,7 +62,7 @@ TEST_F(EpidVerifierTest, VerifyFailsGivenSigLenTooShortForRlCount) {
EXPECT_EQ(kEpidBadArgErr,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), nullptr, 0));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyFailsGivenSigLenTooLongForRlCount) {
@@ -77,7 +76,7 @@ TEST_F(EpidVerifierTest, VerifyFailsGivenSigLenTooLongForRlCount) {
EXPECT_EQ(kEpidBadArgErr,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), nullptr, 0));
+ msg.data(), msg.size()));
}
#if (SIZE_MAX <= 0xFFFFFFFF) // When size_t value is 32 bit or lower
@@ -89,13 +88,13 @@ TEST_F(EpidVerifierTest, VerifyFailsGivenRlCountTooBig) {
uint32_t n2 = SIZE_MAX / sizeof(NrProof) + 1;
uint32_t n2_ = ntohl(n2);
EpidSignature* sig_struct = (EpidSignature*)sig.data();
- memcpy_S(&(sig_struct->n2), sizeof(sig_struct->n2), &n2_, sizeof(n2_));
+ sig_struct->n2 = *(OctStr32*)&n2_;
sig.resize(sizeof(EpidSignature) + (n2 - 1) * sizeof(NrProof));
auto& msg = this->kTest0;
EXPECT_EQ(kEpidBadArgErr,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), nullptr, 0));
+ msg.data(), msg.size()));
}
#endif
@@ -119,8 +118,8 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigWithBNotInG1) {
EpidSignature sig = *(
const EpidSignature*)(this->kSigGrp01Member0Sha256RandombaseTest0.data());
sig.sigma0.B.x.data.data[31]++;
- EXPECT_EQ(kEpidSigInvalid, EpidVerify(verifier, &sig, size, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigWithBIdentityOfG1) {
@@ -131,10 +130,10 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigWithBIdentityOfG1) {
EpidSignature sig = *(
const EpidSignature*)(this->kSigGrp01Member0Sha256RandombaseTest0.data());
- sig.sigma0.B = this->G1_identity_str;
+ sig.sigma0.B = this->kG1IdentityStr;
size_t size = this->kSigGrp01Member0Sha256RandombaseTest0.size();
- EXPECT_EQ(kEpidSigInvalid, EpidVerify(verifier, &sig, size, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigWithDiffBaseNameSameHashAlg) {
@@ -148,9 +147,10 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigWithDiffBaseNameSameHashAlg) {
VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
EXPECT_EQ(kEpidSigInvalid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigWithSameBaseNameDiffHashAlg) {
@@ -164,9 +164,10 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigWithSameBaseNameDiffHashAlg) {
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha512));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
EXPECT_EQ(kEpidSigInvalid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigWithKNotInG1) {
@@ -179,8 +180,8 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigWithKNotInG1) {
const EpidSignature*)(this->kSigGrp01Member0Sha256RandombaseTest0.data());
sig.sigma0.K.x.data.data[31]++;
size_t size = this->kSigGrp01Member0Sha256RandombaseTest0.size();
- EXPECT_EQ(kEpidSigInvalid, EpidVerify(verifier, &sig, size, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigWithTNotInG1) {
@@ -193,8 +194,8 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigWithTNotInG1) {
const EpidSignature*)(this->kSigGrp01Member0Sha256RandombaseTest0.data());
sig.sigma0.T.x.data.data[31]++;
size_t size = this->kSigGrp01Member0Sha256RandombaseTest0.size();
- EXPECT_EQ(kEpidSigInvalid, EpidVerify(verifier, &sig, size, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigWithCNotInRange) {
@@ -205,10 +206,10 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigWithCNotInRange) {
EpidSignature sig = *(
const EpidSignature*)(this->kSigGrp01Member0Sha256RandombaseTest0.data());
- sig.sigma0.c.data = this->params_str.p.data;
+ sig.sigma0.c.data = this->kParamsStr.p.data;
size_t size = this->kSigGrp01Member0Sha256RandombaseTest0.size();
- EXPECT_EQ(kEpidSigInvalid, EpidVerify(verifier, &sig, size, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigWithSxNotInRange) {
@@ -219,10 +220,10 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigWithSxNotInRange) {
EpidSignature sig = *(
const EpidSignature*)(this->kSigGrp01Member0Sha256RandombaseTest0.data());
- sig.sigma0.sx.data = this->params_str.p.data;
+ sig.sigma0.sx.data = this->kParamsStr.p.data;
size_t size = this->kSigGrp01Member0Sha256RandombaseTest0.size();
- EXPECT_EQ(kEpidSigInvalid, EpidVerify(verifier, &sig, size, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigWithSfNotInRange) {
@@ -233,10 +234,10 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigWithSfNotInRange) {
EpidSignature sig = *(
const EpidSignature*)(this->kSigGrp01Member0Sha256RandombaseTest0.data());
- sig.sigma0.sf.data = this->params_str.p.data;
+ sig.sigma0.sf.data = this->kParamsStr.p.data;
size_t size = this->kSigGrp01Member0Sha256RandombaseTest0.size();
- EXPECT_EQ(kEpidSigInvalid, EpidVerify(verifier, &sig, size, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigWithSaNotInRange) {
@@ -247,10 +248,10 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigWithSaNotInRange) {
EpidSignature sig = *(
const EpidSignature*)(this->kSigGrp01Member0Sha256RandombaseTest0.data());
- sig.sigma0.sa.data = this->params_str.p.data;
+ sig.sigma0.sa.data = this->kParamsStr.p.data;
size_t size = this->kSigGrp01Member0Sha256RandombaseTest0.size();
- EXPECT_EQ(kEpidSigInvalid, EpidVerify(verifier, &sig, size, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigWithSbNotInRange) {
@@ -261,10 +262,10 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigWithSbNotInRange) {
EpidSignature sig = *(
const EpidSignature*)(this->kSigGrp01Member0Sha256RandombaseTest0.data());
- sig.sigma0.sb.data = this->params_str.p.data;
+ sig.sigma0.sb.data = this->kParamsStr.p.data;
size_t size = this->kSigGrp01Member0Sha256RandombaseTest0.size();
- EXPECT_EQ(kEpidSigInvalid, EpidVerify(verifier, &sig, size, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidVerify(verifier, &sig, size, msg.data(), msg.size()));
}
// 4.1.2 step 2.g - The verifier computes nc = (-c) mod p.
@@ -305,7 +306,7 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigDifferingOnlyInMsg) {
msg[0]++;
EXPECT_EQ(kEpidSigInvalid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), nullptr, 0));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigDifferingOnlyInBaseName) {
@@ -319,8 +320,8 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigDifferingOnlyInBaseName) {
// simulate change to basename
sig->sigma0.B.x.data.data[0] += 1;
auto msg = this->kTest1;
- EXPECT_EQ(kEpidSigInvalid, EpidVerify(verifier, sig, sig_data.size(),
- msg.data(), msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidVerify(verifier, sig, sig_data.size(), msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigDifferingOnlyInGroup) {
@@ -334,8 +335,8 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigDifferingOnlyInGroup) {
// simulate change to h1
sig->sigma0.T.x.data.data[0] += 1;
auto msg = this->kTest1;
- EXPECT_EQ(kEpidSigInvalid, EpidVerify(verifier, sig, sig_data.size(),
- msg.data(), msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidSigInvalid,
+ EpidVerify(verifier, sig, sig_data.size(), msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigDifferingOnlyInHashAlg) {
@@ -348,7 +349,7 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigDifferingOnlyInHashAlg) {
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha512));
EXPECT_EQ(kEpidSigInvalid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), nullptr, 0));
+ msg.data(), msg.size()));
}
// 4.1.2 step 2.p - If any of the above verifications fails, the verifier
@@ -362,7 +363,7 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigDifferingOnlyInHashAlg) {
TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlSingleEntry) {
// * 4.1.2 step 3.a - The verifier verifies that gid does not match any entry
// in GroupRL.
- // result must be kEpidSigRevokedinGroupRl
+ // result must be kEpidSigRevokedInGroupRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
@@ -371,18 +372,19 @@ TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlSingleEntry) {
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinGroupRl,
+ EXPECT_EQ(kEpidSigRevokedInGroupRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlFirstEntry) {
// * 4.1.2 step 3.a - The verifier verifies that gid does not match any entry
// in GroupRL.
- // result must be kEpidSigRevokedinGroupRl
+ // result must be kEpidSigRevokedInGroupRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
@@ -391,17 +393,18 @@ TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlFirstEntry) {
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinGroupRl,
+ EXPECT_EQ(kEpidSigRevokedInGroupRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlFirstEntryUsingIkgfData) {
- // result must be kEpidSigRevokedinGroupRl
- auto& pub_key = this->pub_key_rev_group_ikgf_str;
+ // result must be kEpidSigRevokedInGroupRl
+ auto& pub_key = this->kPubKeyRevGroupIkgfStr;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
auto& grp_rl = this->kGrpRlIkgf;
@@ -409,18 +412,19 @@ TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlFirstEntryUsingIkgfData) {
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinGroupRl,
+ EXPECT_EQ(kEpidSigRevokedInGroupRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlMiddleEntry) {
// * 4.1.2 step 3.a - The verifier verifies that gid does not match any entry
// in GroupRL.
- // result must be kEpidSigRevokedinGroupRl
+ // result must be kEpidSigRevokedInGroupRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
@@ -429,18 +433,19 @@ TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlMiddleEntry) {
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinGroupRl,
+ EXPECT_EQ(kEpidSigRevokedInGroupRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlLastEntry) {
// * 4.1.2 step 3.a - The verifier verifies that gid does not match any entry
// in GroupRL.
- // result must be kEpidSigRevokedinGroupRl
+ // result must be kEpidSigRevokedInGroupRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
@@ -449,12 +454,13 @@ TEST_F(EpidVerifierTest, VerifyRejectsFromGroupRlLastEntry) {
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinGroupRl,
+ EXPECT_EQ(kEpidSigRevokedInGroupRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
// 4.1.2 step 3.b - If gid matches an entry in GroupRL, aborts and returns 2.
@@ -475,7 +481,7 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlSingleEntry) {
// and verifies that G1.isEqual(t4, K) = false.
// A faster private-key revocation check algorithm is
// provided in Section 4.5.
- // result must be kEpidSigRevokedinPrivRl
+ // result must be kEpidSigRevokedInPrivRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
@@ -484,12 +490,13 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlSingleEntry) {
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinPrivRl,
+ EXPECT_EQ(kEpidSigRevokedInPrivRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlFirstEntry) {
@@ -498,7 +505,7 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlFirstEntry) {
// and verifies that G1.isEqual(t4, K) = false.
// A faster private-key revocation check algorithm is
// provided in Section 4.5.
- // result must be kEpidSigRevokedinPrivRl
+ // result must be kEpidSigRevokedInPrivRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
@@ -507,12 +514,13 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlFirstEntry) {
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinPrivRl,
+ EXPECT_EQ(kEpidSigRevokedInPrivRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlFirstEntryUsingIkgfData) {
@@ -521,8 +529,8 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlFirstEntryUsingIkgfData) {
// and verifies that G1.isEqual(t4, K) = false.
// A faster private-key revocation check algorithm is
// provided in Section 4.5.
- // result must be kEpidSigRevokedinPrivRl
- auto& pub_key = this->pub_key_ikgf_str;
+ // result must be kEpidSigRevokedInPrivRl
+ auto& pub_key = this->kPubKeyIkgfStr;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
auto& priv_rl = this->kPrivRlIkgf;
@@ -530,12 +538,13 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlFirstEntryUsingIkgfData) {
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinPrivRl,
+ EXPECT_EQ(kEpidSigRevokedInPrivRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlMiddleEntry) {
@@ -544,7 +553,7 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlMiddleEntry) {
// and verifies that G1.isEqual(t4, K) = false.
// A faster private-key revocation check algorithm is
// provided in Section 4.5.
- // result must be kEpidSigRevokedinPrivRl
+ // result must be kEpidSigRevokedInPrivRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
@@ -553,12 +562,13 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlMiddleEntry) {
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinPrivRl,
+ EXPECT_EQ(kEpidSigRevokedInPrivRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlLastEntry) {
@@ -567,7 +577,7 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlLastEntry) {
// and verifies that G1.isEqual(t4, K) = false.
// A faster private-key revocation check algorithm is
// provided in Section 4.5.
- // result must be kEpidSigRevokedinPrivRl
+ // result must be kEpidSigRevokedInPrivRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
@@ -576,12 +586,30 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromPrivRlLastEntry) {
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinPrivRl,
+ EXPECT_EQ(kEpidSigRevokedInPrivRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
+}
+
+TEST_F(EpidVerifierTest, VerifyAcceptsSigFromEmptyPrivRlUsingIkgfData) {
+ auto& pub_key = this->kPubKeyIkgfStr;
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& priv_rl = this->kEmptyPrivRlIkgf;
+ auto& sig = this->kSigMember0Sha256Bsn0Msg0NoSigRlIkgf;
+
+ VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
+ verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
+
+ EXPECT_EQ(kEpidNoErr, EpidVerify(verifier, (EpidSignature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
}
// 4.1.2 step 4.c - If the above step fails, the verifier aborts and
@@ -608,12 +636,13 @@ TEST_F(EpidVerifierTest, VerifyFailsOnSigRlverNotMatchSigRlRlver) {
auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
sig_rl.size()));
EXPECT_EQ(kEpidBadArgErr,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyFailsOnSigN2NotMatchSigRlN2) {
@@ -627,19 +656,20 @@ TEST_F(EpidVerifierTest, VerifyFailsOnSigN2NotMatchSigRlN2) {
auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
sig_rl.size()));
EXPECT_EQ(kEpidBadArgErr,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlSingleEntry) {
// * 4.1.2 step 5.d - For i = 0, ..., n2-1, the verifier verifies
// nrVerify(B, K, B[i], K[i], Sigma[i]) = true. The details
// of nrVerify() will be given in the next subsection.
- // result must be kEpidSigRevokedinSigRl
+ // result must be kEpidSigRevokedInSigRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
@@ -647,19 +677,20 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlSingleEntry) {
auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0SingleEntrySigRl;
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
sig_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinSigRl,
+ EXPECT_EQ(kEpidSigRevokedInSigRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlFirstEntry) {
// * 4.1.2 step 5.d - For i = 0, ..., n2-1, the verifier verifies
// nrVerify(B, K, B[i], K[i], Sigma[i]) = true. The details
// of nrVerify() will be given in the next subsection.
- // result must be kEpidSigRevokedinSigRl
+ // result must be kEpidSigRevokedInSigRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
@@ -667,35 +698,37 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlFirstEntry) {
auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
sig_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinSigRl,
+ EXPECT_EQ(kEpidSigRevokedInSigRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlFirstEntryUsingIkgfData) {
- auto& pub_key = this->pub_key_ikgf_str;
+ auto& pub_key = this->kPubKeyIkgfStr;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
auto& sig_rl = this->kSigRlIkgf;
auto& sig = this->kSigRevSigMember0Sha256Bsn0Msg0Ikgf;
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
sig_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinSigRl,
+ EXPECT_EQ(kEpidSigRevokedInSigRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlMiddleEntry) {
// * 4.1.2 step 5.d - For i = 0, ..., n2-1, the verifier verifies
// nrVerify(B, K, B[i], K[i], Sigma[i]) = true. The details
// of nrVerify() will be given in the next subsection.
- // result must be kEpidSigRevokedinSigRl
+ // result must be kEpidSigRevokedInSigRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
@@ -703,19 +736,20 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlMiddleEntry) {
auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
sig_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinSigRl,
+ EXPECT_EQ(kEpidSigRevokedInSigRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlLastEntry) {
// * 4.1.2 step 5.d - For i = 0, ..., n2-1, the verifier verifies
// nrVerify(B, K, B[i], K[i], Sigma[i]) = true. The details
// of nrVerify() will be given in the next subsection.
- // result must be kEpidSigRevokedinSigRl
+ // result must be kEpidSigRevokedInSigRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
@@ -723,12 +757,47 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlLastEntry) {
auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
sig_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinSigRl,
+ EXPECT_EQ(kEpidSigRevokedInSigRl,
+ EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
+ msg.data(), msg.size()));
+}
+
+TEST_F(EpidVerifierTest,
+ RejectsSigFromNonemptySigRlGivenEmptySigRlUsingIkgfData) {
+ auto& pub_key = this->kPubKeyIkgfStr;
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& sig_rl = this->kEmptySigRlIkgf;
+ auto& sig = this->kSigMember0Sha256Bsn0Msg0Ikgf;
+ VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
+ sig_rl.size()));
+
+ EXPECT_EQ(kEpidBadArgErr,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
+}
+
+TEST_F(EpidVerifierTest, VerifyAcceptsSigFromEmptySigRlUsingIkgfData) {
+ auto& pub_key = this->kPubKeyIkgfStr;
+ auto& msg = this->kMsg0;
+ auto& bsn = this->kBsn0;
+ auto& sig_rl = this->kEmptySigRlIkgf;
+ auto& sig = this->kSigMember0Sha256Bsn0Msg0EmptySigRlIkgf;
+ VerifierCtxObj verifier(pub_key);
+ THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
+ THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
+ sig_rl.size()));
+
+ EXPECT_EQ(kEpidNoErr, EpidVerify(verifier, (EpidSignature const*)sig.data(),
+ sig.size(), msg.data(), msg.size()));
}
// 4.1.2 step 5.e - If the above step fails, the verifier aborts and
@@ -744,40 +813,15 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromSigRlLastEntry) {
// "operation failed".
// Not possible, checked in EpidVerifierSetVerifierRl
-TEST_F(EpidVerifierTest,
- VerifyDoesNotRejectSigFromMemberIfBaseNameIsOnlyDiffInVerifierRl) {
- // * 4.1.2 step 6.b - The verifier verifies that B in the signature and in
- // VerifierRL match. If mismatch, go to step 7.
- // result must be "operation failed" (not kEpidSig*)
- auto& pub_key = this->kGrpXKey;
- auto& msg = this->kMsg0;
- auto& bsn = this->kBsn0;
- auto& grp_rl = this->kGrpRl;
- auto& priv_rl = this->kGrpXPrivRl;
- auto& sig_rl = this->kGrpXSigRl;
- auto& ver_rl = this->kGrpXBsn1VerRl_012;
- auto& sig = this->kSigGrpXVerRevokedMember0Sha256Bsn0Msg0;
-
- VerifierCtxObj verifier(pub_key);
- THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
- THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
- verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
- THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
- verifier, (PrivRl const*)priv_rl.data(), priv_rl.size()));
- THROW_ON_EPIDERR(EpidVerifierSetSigRl(verifier, (SigRl const*)sig_rl.data(),
- sig_rl.size()));
- THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
- verifier, (VerifierRl const*)ver_rl.data(), ver_rl.size()));
-
- EXPECT_EQ(kEpidSigValid,
- EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
-}
+// * 4.1.2 step 6.b - The verifier verifies that B in the signature and in
+// VerifierRL match. If mismatch, go to step 7.
+// result must be "operation failed" (not kEpidSig*)
+// Not possible, checked in EpidVerifierSetVerifierRl
TEST_F(EpidVerifierTest, VerifyRejectsSigFromVerifierRlSingleEntry) {
// * 4.1.2 step 6.c - For i = 0, ..., n4-1, the verifier verifies that
// K != K[i].
- // result must be kEpidSigRevokedinVerifierRl
+ // result must be kEpidSigRevokedInVerifierRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
@@ -789,6 +833,7 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromVerifierRlSingleEntry) {
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
@@ -798,26 +843,27 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromVerifierRlSingleEntry) {
THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
verifier, (VerifierRl const*)ver_rl.data(), ver_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinVerifierRl,
+ EXPECT_EQ(kEpidSigRevokedInVerifierRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigFromVerifierRlFirstEntry) {
// * 4.1.2 step 6.c - For i = 0, ..., n4-1, the verifier verifies that
// K != K[i].
- // result must be kEpidSigRevokedinVerifierRl
+ // result must be kEpidSigRevokedInVerifierRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
auto& grp_rl = this->kGrpRl;
auto& priv_rl = this->kGrpXPrivRl;
auto& sig_rl = this->kGrpXSigRl;
- auto& ver_rl = this->kGrpXBsn0VerRl;
+ auto& ver_rl = this->kGrpXBsn0Sha256VerRl;
auto& sig = this->kSigGrpXVerRevokedMember0Sha256Bsn0Msg0;
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
@@ -827,26 +873,27 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromVerifierRlFirstEntry) {
THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
verifier, (VerifierRl const*)ver_rl.data(), ver_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinVerifierRl,
+ EXPECT_EQ(kEpidSigRevokedInVerifierRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigFromVerifierRlMiddleEntry) {
// * 4.1.2 step 6.c - For i = 0, ..., n4-1, the verifier verifies that
// K != K[i].
- // result must be kEpidSigRevokedinVerifierRl
+ // result must be kEpidSigRevokedInVerifierRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
auto& grp_rl = this->kGrpRl;
auto& priv_rl = this->kGrpXPrivRl;
auto& sig_rl = this->kGrpXSigRl;
- auto& ver_rl = this->kGrpXBsn0VerRl;
+ auto& ver_rl = this->kGrpXBsn0Sha256VerRl;
auto& sig = this->kSigGrpXVerRevokedMember1Sha256Bsn0Msg0;
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
@@ -856,26 +903,27 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromVerifierRlMiddleEntry) {
THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
verifier, (VerifierRl const*)ver_rl.data(), ver_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinVerifierRl,
+ EXPECT_EQ(kEpidSigRevokedInVerifierRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyRejectsSigFromVerifierRlLastEntry) {
// * 4.1.2 step 6.c - For i = 0, ..., n4-1, the verifier verifies that
// K != K[i].
- // result must be kEpidSigRevokedinVerifierRl
+ // result must be kEpidSigRevokedInVerifierRl
auto& pub_key = this->kGrpXKey;
auto& msg = this->kMsg0;
auto& bsn = this->kBsn0;
auto& grp_rl = this->kGrpRl;
auto& priv_rl = this->kGrpXPrivRl;
auto& sig_rl = this->kGrpXSigRl;
- auto& ver_rl = this->kGrpXBsn0VerRl;
+ auto& ver_rl = this->kGrpXBsn0Sha256VerRl;
auto& sig = this->kSigGrpXVerRevokedMember2Sha256Bsn0Msg0;
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
@@ -885,9 +933,9 @@ TEST_F(EpidVerifierTest, VerifyRejectsSigFromVerifierRlLastEntry) {
THROW_ON_EPIDERR(EpidVerifierSetVerifierRl(
verifier, (VerifierRl const*)ver_rl.data(), ver_rl.size()));
- EXPECT_EQ(kEpidSigRevokedinVerifierRl,
+ EXPECT_EQ(kEpidSigRevokedInVerifierRl,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
// 4.1.2 step 6.d - If the above step fails, the verifier aborts and
@@ -907,9 +955,10 @@ TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameNoRlSha256) {
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
EXPECT_EQ(kEpidSigValid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameAllRlSha256) {
@@ -919,11 +968,12 @@ TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameAllRlSha256) {
auto& grp_rl = this->kGrpRl;
auto& priv_rl = this->kGrpXPrivRl;
auto& sig_rl = this->kGrpXSigRl;
- auto& ver_rl = this->kGrpXBsn0VerRl;
+ auto& ver_rl = this->kGrpXBsn0Sha256VerRl;
auto& sig = this->kSigGrpXMember0Sha256Bsn0Msg0;
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
@@ -935,7 +985,7 @@ TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameAllRlSha256) {
EXPECT_EQ(kEpidSigValid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyAcceptsSigWithRandomBaseNameNoRlSha256) {
@@ -947,7 +997,7 @@ TEST_F(EpidVerifierTest, VerifyAcceptsSigWithRandomBaseNameNoRlSha256) {
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
EXPECT_EQ(kEpidSigValid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), nullptr, 0));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyAcceptsSigWithRandomBaseNameAllRlSha256) {
@@ -969,12 +1019,12 @@ TEST_F(EpidVerifierTest, VerifyAcceptsSigWithRandomBaseNameAllRlSha256) {
EXPECT_EQ(kEpidSigValid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), nullptr, 0));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest,
VerifyAcceptsSigWithRandomBaseNameAllRlSha256UsingIkgfData) {
- auto& pub_key = this->pub_key_ikgf_str;
+ auto& pub_key = this->kPubKeyIkgfStr;
auto& msg = this->kMsg0;
auto& grp_rl = this->kGrpRlIkgf;
auto& priv_rl = this->kPrivRlIkgf;
@@ -992,7 +1042,7 @@ TEST_F(EpidVerifierTest,
EXPECT_EQ(kEpidSigValid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), nullptr, 0));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameAllRlSha384) {
@@ -1002,11 +1052,12 @@ TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameAllRlSha384) {
auto& grp_rl = this->kGrpRl;
auto& priv_rl = this->kGrpXPrivRl;
auto& sig_rl = this->kGrpXSigRl;
- auto& ver_rl = this->kGrpXBsn0VerRl;
+ auto& ver_rl = this->kGrpXBsn0Sha384VerRl;
auto& sig = this->kSigGrpXMember0Sha384Bsn0Msg0;
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha384));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
@@ -1018,7 +1069,7 @@ TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameAllRlSha384) {
EXPECT_EQ(kEpidSigValid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyAcceptsSigWithRandomBaseNameAllRlSha384) {
@@ -1040,7 +1091,7 @@ TEST_F(EpidVerifierTest, VerifyAcceptsSigWithRandomBaseNameAllRlSha384) {
EXPECT_EQ(kEpidSigValid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), nullptr, 0));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameAllRlSha512) {
@@ -1050,11 +1101,12 @@ TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameAllRlSha512) {
auto& grp_rl = this->kGrpRl;
auto& priv_rl = this->kGrpXPrivRl;
auto& sig_rl = this->kGrpXSigRl;
- auto& ver_rl = this->kGrpXBsn0VerRl;
+ auto& ver_rl = this->kGrpXBsn0Sha512VerRl;
auto& sig = this->kSigGrpXMember0Sha512Bsn0Msg0;
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha512));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
@@ -1066,7 +1118,7 @@ TEST_F(EpidVerifierTest, VerifyAcceptsSigWithBaseNameAllRlSha512) {
EXPECT_EQ(kEpidSigValid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyAcceptsSigWithRandomBaseNameAllRlSha512) {
@@ -1088,7 +1140,7 @@ TEST_F(EpidVerifierTest, VerifyAcceptsSigWithRandomBaseNameAllRlSha512) {
EXPECT_EQ(kEpidSigValid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), nullptr, 0));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, DISABLED_VerifyAcceptsSigWithBaseNameAllRlSha512256) {
@@ -1098,11 +1150,12 @@ TEST_F(EpidVerifierTest, DISABLED_VerifyAcceptsSigWithBaseNameAllRlSha512256) {
auto& grp_rl = this->kGrpRl;
auto& priv_rl = this->kGrpXPrivRl;
auto& sig_rl = this->kGrpXSigRl;
- auto& ver_rl = this->kGrpXBsn0VerRl;
+ auto& ver_rl = this->kGrpXBsn0Sha512256VerRl;
auto& sig = this->kSigGrpXMember0Sha512256Bsn0Msg0;
VerifierCtxObj verifier(pub_key);
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha512_256));
+ THROW_ON_EPIDERR(EpidVerifierSetBasename(verifier, bsn.data(), bsn.size()));
THROW_ON_EPIDERR(EpidVerifierSetGroupRl(
verifier, (GroupRl const*)grp_rl.data(), grp_rl.size()));
THROW_ON_EPIDERR(EpidVerifierSetPrivRl(
@@ -1114,7 +1167,7 @@ TEST_F(EpidVerifierTest, DISABLED_VerifyAcceptsSigWithBaseNameAllRlSha512256) {
EXPECT_EQ(kEpidSigValid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), bsn.data(), bsn.size()));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest,
@@ -1137,7 +1190,7 @@ TEST_F(EpidVerifierTest,
EXPECT_EQ(kEpidSigValid,
EpidVerify(verifier, (EpidSignature const*)sig.data(), sig.size(),
- msg.data(), msg.size(), nullptr, 0));
+ msg.data(), msg.size()));
}
} // namespace
diff --git a/epid/verifier/unittests/verifybasic-test.cc b/epid/verifier/unittests/verifybasic-test.cc
index eac2542..9f6b3e5 100644
--- a/epid/verifier/unittests/verifybasic-test.cc
+++ b/epid/verifier/unittests/verifybasic-test.cc
@@ -31,6 +31,7 @@ extern "C" {
#include "epid/verifier/unittests/verifier-testhelper.h"
#include "epid/common-testhelper/verifier_wrapper-testhelper.h"
#include "epid/common-testhelper/errors-testhelper.h"
+#include "epid/member/unittests/member-testhelper.h"
namespace {
@@ -41,23 +42,12 @@ TEST_F(EpidVerifierTest, VerifyBasicSigFailsGivenNullPtr) {
const BasicSignature basic_sig = sig->sigma0;
auto& msg = this->kTest1;
- EXPECT_EQ(kEpidBadArgErr, EpidVerifyBasicSig(nullptr, &basic_sig, msg.data(),
- msg.size(), nullptr, 0));
- EXPECT_EQ(kEpidBadArgErr, EpidVerifyBasicSig(verifier, nullptr, msg.data(),
- msg.size(), nullptr, 0));
- EXPECT_EQ(kEpidBadArgErr, EpidVerifyBasicSig(verifier, &basic_sig, nullptr,
- msg.size(), nullptr, 0));
-}
-
-TEST_F(EpidVerifierTest, VerifyBasicSigFailsGivenIncorrectLegth) {
- VerifierCtxObj verifier(this->kGrp01Key);
- auto const& sig = (EpidSignature const*)this
- ->kSigGrp01Member0Sha256RandombaseTest1NoSigRl.data();
- const BasicSignature basic_sig = sig->sigma0;
- auto& msg = this->kTest1;
-
- EXPECT_EQ(kEpidBadArgErr, EpidVerifyBasicSig(verifier, &basic_sig, msg.data(),
- msg.size(), nullptr, 1));
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidVerifyBasicSig(nullptr, &basic_sig, msg.data(), msg.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidVerifyBasicSig(verifier, nullptr, msg.data(), msg.size()));
+ EXPECT_EQ(kEpidBadArgErr,
+ EpidVerifyBasicSig(verifier, &basic_sig, nullptr, msg.size()));
}
TEST_F(EpidVerifierTest,
@@ -68,8 +58,8 @@ TEST_F(EpidVerifierTest,
const BasicSignature basic_sig = sig->sigma0;
auto& msg = this->kTest1;
- EXPECT_EQ(kEpidNoErr, EpidVerifyBasicSig(verifier, &basic_sig, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidNoErr,
+ EpidVerifyBasicSig(verifier, &basic_sig, msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyBasicSigCanVerifyValidSignatureWithSHA256) {
@@ -80,8 +70,8 @@ TEST_F(EpidVerifierTest, VerifyBasicSigCanVerifyValidSignatureWithSHA256) {
auto& msg = this->kTest1;
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
- EXPECT_EQ(kEpidNoErr, EpidVerifyBasicSig(verifier, &basic_sig, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidNoErr,
+ EpidVerifyBasicSig(verifier, &basic_sig, msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyBasicSigCanVerifyValidSignatureWithSHA384) {
@@ -91,8 +81,8 @@ TEST_F(EpidVerifierTest, VerifyBasicSigCanVerifyValidSignatureWithSHA384) {
const BasicSignature basic_sig = sig->sigma0;
auto& msg = this->kTest1;
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha384));
- EXPECT_EQ(kEpidNoErr, EpidVerifyBasicSig(verifier, &basic_sig, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidNoErr,
+ EpidVerifyBasicSig(verifier, &basic_sig, msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyBasicSigCanVerifyValidSignatureWithSHA512) {
@@ -102,8 +92,8 @@ TEST_F(EpidVerifierTest, VerifyBasicSigCanVerifyValidSignatureWithSHA512) {
const BasicSignature basic_sig = sig->sigma0;
auto& msg = this->kTest1;
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha512));
- EXPECT_EQ(kEpidNoErr, EpidVerifyBasicSig(verifier, &basic_sig, msg.data(),
- msg.size(), nullptr, 0));
+ EXPECT_EQ(kEpidNoErr,
+ EpidVerifyBasicSig(verifier, &basic_sig, msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest,
@@ -116,7 +106,7 @@ TEST_F(EpidVerifierTest,
BasicSignature corrupted_basic_sig = basic_sig;
corrupted_basic_sig.B.x.data.data[0]++;
EXPECT_NE(kEpidNoErr, EpidVerifyBasicSig(verifier, &corrupted_basic_sig,
- msg.data(), msg.size(), nullptr, 0));
+ msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest,
@@ -128,8 +118,7 @@ TEST_F(EpidVerifierTest,
auto msg = this->kTest1;
msg[0]++; // change message for signature verification to fail
EXPECT_EQ(kEpidSigInvalid,
- EpidVerifyBasicSig(verifier, &basic_sig, msg.data(), msg.size(),
- nullptr, 0));
+ EpidVerifyBasicSig(verifier, &basic_sig, msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyBasicSigCanVerifyWithBasename) {
@@ -140,22 +129,24 @@ TEST_F(EpidVerifierTest, VerifyBasicSigCanVerifyWithBasename) {
auto& msg = this->kTest1;
auto& basename = this->kBasename1;
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(
+ EpidVerifierSetBasename(verifier, basename.data(), basename.size()));
EXPECT_EQ(kEpidNoErr,
- EpidVerifyBasicSig(verifier, &basic_sig, msg.data(), msg.size(),
- basename.data(), basename.size()));
+ EpidVerifyBasicSig(verifier, &basic_sig, msg.data(), msg.size()));
}
TEST_F(EpidVerifierTest, VerifyBasicSigCanVerifyWithBasenameUsingIkgfData) {
- VerifierCtxObj verifier(this->pub_key_ikgf_str);
+ VerifierCtxObj verifier(this->kPubKeyIkgfStr);
auto const& sig =
(EpidSignature const*)this->kSigSha256Basename1Test1NoSigRlIkgf.data();
const BasicSignature basic_sig = sig->sigma0;
auto& msg = this->kTest1;
auto& basename = this->kBasename1;
THROW_ON_EPIDERR(EpidVerifierSetHashAlg(verifier, kSha256));
+ THROW_ON_EPIDERR(
+ EpidVerifierSetBasename(verifier, basename.data(), basename.size()));
EXPECT_EQ(kEpidNoErr,
- EpidVerifyBasicSig(verifier, &basic_sig, msg.data(), msg.size(),
- basename.data(), basename.size()));
+ EpidVerifyBasicSig(verifier, &basic_sig, msg.data(), msg.size()));
}
} // namespace
diff --git a/epid/verifier/verifier.parts b/epid/verifier/verifier.parts
index 4027ed3..5f2f140 100644
--- a/epid/verifier/verifier.parts
+++ b/epid/verifier/verifier.parts
@@ -17,47 +17,71 @@ Import('*')
env.PartName('verifier')
api_headers = Pattern(src_dir='.',
- includes=['api.h'],
- excludes=[''],
+ includes=['*.h'],
recursive=False).files()
-
-verifier_headers = Pattern(src_dir='.',
- includes=['*.h'],
- excludes=['api.h'],
- recursive=False).files()
-
-
-src_files = Pattern(src_dir='.',
+src_files = Pattern(src_dir='src',
includes=['*.c'],
- excludes=['*-test.cc'],
- recursive=True).files()
-
-
-#unit tests
-utest_files = Pattern(src_dir='.',
+ recursive=False).files()
+internal_headers = Pattern(src_dir='src',
+ includes=['*.h', '*.inc'],
+ recursive=False).files()
+utest_files = Pattern(src_dir='unittests',
includes=['*-test.cc', '*-testhelper.cc'],
- excludes=[],
- recursive=True).files()
-utest_include_files = Pattern(src_dir='.',
- includes=['*-testhelper.h'],
- excludes=[],
- recursive=True).files()
+ recursive=False).files()
+utest_headers = Pattern(src_dir='unittests',
+ includes=['*-testhelper.h',],
+ recursive=False).files()
utest_data_files = Pattern(src_dir='unittests/testdata/sigrl',
includes=['*.inc'],
excludes=[],
recursive=False).files()
-parts_file = ['verifier.parts']
+
+epid11_headers = Pattern(src_dir='1.1',
+ includes=['*.h'],
+ recursive=False).files()
+epid11_src_files = Pattern(src_dir='1.1/src',
+ includes=['*.c'],
+ recursive=False).files()
+epid11_internal_headers = Pattern(src_dir='1.1/src',
+ includes=['*.h', '*.inc'],
+ recursive=False).files()
+epid11_utest_files = Pattern(src_dir='1.1/unittests',
+ includes=['*-test.cc', '*-testhelper.cc'],
+ recursive=False).files()
+epid11_utest_headers = Pattern(src_dir='1.1/unittests',
+ includes=['*-testhelper.h',],
+ recursive=False).files()
+epid11_utest_data_files = Pattern(src_dir='1.1/unittests/testdata',
+ includes=['*.inc'],
+ recursive=False).files()
+
+build_files = Pattern(src_dir='.',
+ includes=['*.parts', 'Makefile'],
+ recursive=False).files()
if 'install_package' in env['MODE']:
- env.InstallTopLevel(api_headers + verifier_headers,
+ env.InstallTopLevel(api_headers,
sub_dir='epid/${PART_SHORT_NAME}')
- env.InstallTopLevel(src_files, sub_dir='epid/${PART_SHORT_NAME}')
- env.InstallTopLevel(utest_files + utest_include_files,
+ env.InstallTopLevel(src_files + internal_headers,
+ sub_dir='epid/${PART_SHORT_NAME}/src')
+ env.InstallTopLevel(utest_files + utest_headers,
sub_dir='epid/${PART_SHORT_NAME}/unittests')
env.InstallTopLevel(
utest_data_files,
sub_dir='epid/${PART_SHORT_NAME}/unittests/testdata/sigrl')
- env.InstallTopLevel(parts_file, sub_dir='epid/${PART_SHORT_NAME}')
+
+ env.InstallTopLevel(epid11_headers,
+ sub_dir='epid/${PART_SHORT_NAME}/1.1')
+ env.InstallTopLevel(epid11_src_files + epid11_internal_headers,
+ sub_dir='epid/${PART_SHORT_NAME}/1.1/src')
+ env.InstallTopLevel(epid11_utest_files + epid11_utest_headers,
+ sub_dir='epid/${PART_SHORT_NAME}/1.1/unittests')
+ env.InstallTopLevel(
+ epid11_utest_data_files,
+ sub_dir='epid/${PART_SHORT_NAME}/1.1/unittests/testdata')
+
+ env.InstallTopLevel(build_files, sub_dir='epid/${PART_SHORT_NAME}')
+
else:
env.DependsOn([
Component('common'),
@@ -66,17 +90,19 @@ else:
env.Append(CPPPATH='#')
testenv = env.Clone()
- outputs = env.Library('${PART_NAME}', src_files)
+ outputs = env.Library('${PART_NAME}', src_files + epid11_src_files)
env.Sdk(outputs)
env.SdkInclude(api_headers, sub_dir='epid/${PART_SHORT_NAME}')
+ env.SdkInclude(epid11_headers, sub_dir='epid/${PART_SHORT_NAME}/1.1')
if 'install_lib' in env['MODE']:
env.InstallLib(outputs)
env.InstallInclude(api_headers, sub_dir='${PART_SHORT_NAME}')
+ env.InstallInclude(epid11_headers, sub_dir='${PART_SHORT_NAME}/1.1')
testenv['UNIT_TEST_TARGET_NAME'] = "${PART_NAME}-${UNIT_TEST_TARGET}"
testenv.UnitTest("utest",
- utest_files,
+ utest_files + epid11_utest_files,
command_args=[
'--gtest_color=yes',
'--gtest_print_time=1',
diff --git a/example/Makefile b/example/Makefile
new file mode 100644
index 0000000..1589500
--- /dev/null
+++ b/example/Makefile
@@ -0,0 +1,84 @@
+#!/usr/bin/make -f
+
+#define variables
+IPP_API_INCLUDE_DIR = ../ext/ipp/include
+EXAMPLE_INSTALL_DIR = $(epidinstalldir)/example
+COMPRESSED_DEFAULT_FILES_INSTALL_DIR = $(epidinstalldir)/compressed_example
+
+SIGNMSG_INCLUDE_DIR = ./signmsg
+SIGNMSG_SRC = $(wildcard ./signmsg/src/*.c)
+SIGNMSG_OBJ = $(SIGNMSG_SRC:.c=.o)
+SIGNMSG_EXE = ./signmsg/src/signmsg
+
+VERIFYSIG_INCLUDE_DIR = ./verifysig
+VERIFYSIG_SRC = $(wildcard ./verifysig/src/*.c)
+VERIFYSIG_OBJ = $(VERIFYSIG_SRC:.c=.o)
+VERIFYSIG_EXE = ./verifysig/src/verifysig
+
+
+LIB_UTIL_DIR = ./util/src
+LIB_DROPT_DIR = ../ext/dropt/src
+LIB_IPPCP_DIR = ../ext/ipp/sources/ippcp/src
+LIB_IPPCPEPID_DIR = ../ext/ipp/sources/ippcpepid/src
+LIB_MEMBER_DIR = ../epid/member
+LIB_VERIFIER_DIR = ../epid/verifier
+LIB_COMMON_DIR = ../epid/common
+
+#set linker flags
+LDFLAGS += -L$(LIB_UTIL_DIR) \
+ -L$(LIB_DROPT_DIR) \
+ -L$(LIB_IPPCP_DIR) \
+ -L$(LIB_COMMON_DIR) \
+ -L$(LIB_IPPCPEPID_DIR) \
+ -lcommon -lippcpepid \
+ -lippcp -lutil -ldropt
+
+$(VERIFYSIG_EXE): $(VERIFYSIG_OBJ)
+ $(CC) -o $@ $^ $(CFLAGS) -L$(LIB_VERIFIER_DIR) -lverifier $(LDFLAGS)
+
+$(VERIFYSIG_OBJ): %.o: %.c
+ $(CC) -o $@ $(CFLAGS) -I$(LIB_UTIL_DIR)/../.. \
+ -I$(LIB_DROPT_DIR)/../include \
+ -I$(LIB_VERIFIER_DIR)/../.. \
+ -I$(VERIFYSIG_INCLUDE_DIR) \
+ -I$(IPP_API_INCLUDE_DIR) -c $^
+
+
+$(SIGNMSG_EXE): $(SIGNMSG_OBJ)
+ $(CC) -o $@ $^ $(CFLAGS) -L$(LIB_MEMBER_DIR) -lmember $(LDFLAGS)
+
+$(SIGNMSG_OBJ): %.o: %.c
+ $(CC) -o $@ $(CFLAGS) -I$(LIB_UTIL_DIR)/../.. \
+ -I$(LIB_DROPT_DIR)/../include \
+ -I$(LIB_MEMBER_DIR)/../.. \
+ -I$(SIGNMSG_INCLUDE_DIR) \
+ -I$(IPP_API_INCLUDE_DIR) -c $^
+
+#target part
+build: all install
+
+all: $(VERIFYSIG_EXE) $(SIGNMSG_EXE)
+
+install:
+ mkdir -p '$(EXAMPLE_INSTALL_DIR)/data'
+ cp -r ./data/group* ./data/grprl_empty.bin \
+ ./data/*.md '$(EXAMPLE_INSTALL_DIR)/data'
+ cp ./data/cacert.bin ./data/grprl.bin \
+ ./data/privrl.bin ./data/sigrl.bin \
+ ./data/mprivkey.dat ./data/pubkey.bin \
+ '$(EXAMPLE_INSTALL_DIR)'
+ mkdir -p '$(EXAMPLE_INSTALL_DIR)/compressed_data'
+ cp -r ./compressed_data/group* ./compressed_data/grprl_empty.bin \
+ ./compressed_data/*.md '$(EXAMPLE_INSTALL_DIR)/compressed_data'
+ mkdir -p '$(COMPRESSED_DEFAULT_FILES_INSTALL_DIR)'
+ cp ./compressed_data/cacert.bin ./compressed_data/grprl.bin \
+ ./compressed_data/privrl.bin ./compressed_data/sigrl.bin \
+ ./compressed_data/mprivkey.dat ./compressed_data/pubkey.bin \
+ '$(COMPRESSED_DEFAULT_FILES_INSTALL_DIR)'
+ cp $(VERIFYSIG_EXE) $(SIGNMSG_EXE) '$(EXAMPLE_INSTALL_DIR)'
+
+clean:
+ rm -f $(VERIFYSIG_OBJ) \
+ $(VERIFYSIG_EXE) \
+ $(SIGNMSG_OBJ) \
+ $(SIGNMSG_EXE)
diff --git a/example/compressed_data/README.md b/example/compressed_data/README.md
new file mode 100644
index 0000000..4075c75
--- /dev/null
+++ b/example/compressed_data/README.md
@@ -0,0 +1,179 @@
+# Sample Issuer Material
+
+This folder contains compressed key sample issuer material for use with the
+Intel(R) EPID SDK. All data files are in binary format.
+
+_Note: The groups and members provided here are distinct from the
+corresponding uncompressed groups and members._
+
+## Directory Structure
+
+ data
+ |__ groupa
+ | |__ member0
+ | | |__ mprivkey.dat
+ | |
+ | |__ member1
+ | | |__ mprivkey.dat
+ | |
+ | |__ privrevokedmember0
+ | | |__ mprivkey.dat
+ | |
+ | |__ privrevokedmember1
+ | | |__ mprivkey.dat
+ | |
+ | |__ privrevokedmember2
+ | | |__ mprivkey.dat
+ | |
+ | |__ sigrevokedmember0
+ | | |__ mprivkey.dat
+ | |
+ | |__ sigrevokedmember1
+ | | |__ mprivkey.dat
+ | |
+ | |__ sigrevokedmember2
+ | | |__ mprivkey.dat
+ | |
+ | |__ privrl.bin
+ | |__ privrl_empty.bin
+ | |__ pubkey.bin
+ | |__ sigrl.bin
+ | |__ sigrl_empty.bin
+ |
+ |__ groupb
+ | |__ member0
+ | | |__ mprivkey.dat
+ | |
+ | |__ member1
+ | | |__ mprivkey.dat
+ | |
+ | |__ privrevokedmember0
+ | | |__ mprivkey.dat
+ | |
+ | |__ sigrevokedmember0
+ | | |__ mprivkey.dat
+ | |
+ | |__ privrl.bin
+ | |__ privrl_empty.bin
+ | |__ pubkey.bin
+ | |__ sigrl.bin
+ | |__ sigrl_empty.bin
+ |
+ |__ grprl.bin
+ |__ grprl_empty.bin
+ |__ mprivkey.dat
+ |__ privrl.bin
+ |__ pubkey.bin
+ |__ cacert.bin
+ |__ sigrl.bin
+
+
+## Description
+
+There are 2 groups
+
+- **groupa**
+
+- **groupb**
+
+### Group A
+
+**groupa** contains 8 members. Each member has a member private key
+`mprivkey.dat`. Here are the members:
+
+- **member0** - a member in good standing
+
+- **member1** - a member in good standing
+
+- **privrevokedmember0** - a member revoked using its private key
+
+- **privrevokedmember1** - a member revoked using its private key
+
+- **privrevokedmember2** - a member revoked using its private key
+
+- **sigrevokedmember0** - a member revoked using a signature
+
+- **sigrevokedmember1** - a member revoked using a signature
+
+- **sigrevokedmember2** - a member revoked using a signature
+
+
+In addition, **groupa** contain the following revocation lists:
+
+- `pubkey.bin` - group public key
+
+- `privrl.bin` - private key based revocation list with 3 entries -
+ **privrevokedmember0**, **privrevokedmember1** and
+ **privrevokedmember2**
+
+- `sigrl.bin` - signature based revocation list with 3 entries -
+ **sigrevokedmember0**, **sigrevokedmember2** and
+ **sigrevokedmember2**
+
+- `privrl_empty.bin` - private key based revocation list with 0 entries
+
+- `sigrl_empty.bin` - signature based revocation list with 0 entries
+
+
+### Group B
+
+**groupb** contains 3 members. Each member has a member private key
+`mprivkey.dat`. Here are the members:
+
+- **member0** - a member in good standing
+
+- **privrevokedmember0** - a member whose private key is revoked
+
+- **sigrevokedmember0** - a member whose signature is revoked
+
+
+In addition, **groupb** contain the following revocation lists:
+
+- `pubkey.bin` - group public key
+
+- `privrl.bin` - private key based revocation list with 1 entry -
+ **privrevokedmember0**
+
+- `sigrl.bin` - signature based revocation list with 1 entries -
+ **sigrevokedmember0**
+
+- `privrl_empty.bin` - private key based revocation list with 0 entries
+
+- `sigrl_empty.bin` - signature based revocation list with 0 entries
+
+
+### Default files
+
+- `/data/cacert.bin` - CA certificate used as default input to signmsg
+ and `verifysig`
+
+- `/data/grprl.bin` - group revocation list with one entry **groupb** used
+ as default input to `verifysig`
+
+- `/data/pubkey.bin` - public key in **groupa** used as default input
+ to signmsg and `verifysig`
+
+- `/data/mprivkey.dat` - private key of a **member0** in the
+ **groupa** used as default input to `signmsg`
+
+- `/data/privrl.bin` - private key based revocation list in the
+ **groupa** with 0 entries used as default input to `verifysig`
+
+- `/data/sigrl.bin` - signature based revocation list in the
+ **groupa** with 0 entries used as default input to `signmsg`
+ and `verifysig`
+
+### Group revocation lists
+
+There are 2 group revocation lists:
+
+- `grprl.bin` - group revocation list with 1 entry - **groupb**
+
+- `grprl_empty.bin` - group revocation list with 0 entries
+
+
+### IoT EPID Issuing CA certificate
+
+- `/data/cacert.bin` - CA certificate used to check that revocation
+ lists and group public keys are authorized by the issuer, e.g.,
+ signed by the issuer
diff --git a/example/compressed_data/cacert.bin b/example/compressed_data/cacert.bin
new file mode 100644
index 0000000..fcbcc1f
--- /dev/null
+++ b/example/compressed_data/cacert.bin
Binary files differ
diff --git a/example/compressed_data/compressed_data.parts b/example/compressed_data/compressed_data.parts
new file mode 100644
index 0000000..b263763
--- /dev/null
+++ b/example/compressed_data/compressed_data.parts
@@ -0,0 +1,72 @@
+############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################
+
+Import('*')
+
+# Normal stuff that all Parts should have
+env.PartName("sample_compressed_data")
+
+#files
+data_files = Pattern(src_dir='.',
+ includes=[
+ 'grprl_empty.bin',
+ 'README.md',
+ 'groupa/privrl.bin',
+ 'groupa/pubkey.bin',
+ 'groupa/sigrl.bin',
+ 'groupa/privrl_empty.bin',
+ 'groupa/sigrl_empty.bin',
+ 'groupa/member0/mprivkey.dat',
+ 'groupa/member1/mprivkey.dat',
+ 'groupa/privrevokedmember0/mprivkey.dat',
+ 'groupa/privrevokedmember1/mprivkey.dat',
+ 'groupa/privrevokedmember2/mprivkey.dat',
+ 'groupa/sigrevokedmember0/mprivkey.dat',
+ 'groupa/sigrevokedmember1/mprivkey.dat',
+ 'groupa/sigrevokedmember2/mprivkey.dat',
+ 'groupb/privrl.bin',
+ 'groupb/pubkey.bin',
+ 'groupb/sigrl.bin',
+ 'groupb/privrl_empty.bin',
+ 'groupb/sigrl_empty.bin',
+ 'groupb/member0/mprivkey.dat',
+ 'groupb/privrevokedmember0/mprivkey.dat',
+ 'groupb/sigrevokedmember0/mprivkey.dat',
+ ],
+ recursive=True)
+
+sample_default_files = Pattern(src_dir='.',
+ includes=[
+ 'mprivkey.dat',
+ 'pubkey.bin',
+ 'cacert.bin',
+ 'grprl.bin',
+ 'privrl.bin',
+ 'sigrl.bin',
+ ],
+ recursive=True)
+
+part_file = ['compressed_data.parts']
+
+if 'install_package' in env['MODE']:
+ env.InstallTopLevel(data_files, sub_dir='example/compressed_data')
+ env.InstallTopLevel(part_file, sub_dir='example/compressed_data')
+ env.InstallTopLevel(sample_default_files, sub_dir='example/compressed_data')
+else:
+ env.InstallData(data_files,
+ sub_dir='compressed_data',
+ no_pkg=False)
+ env.InstallTopLevel(sample_default_files, sub_dir='compressed_example')
diff --git a/example/compressed_data/groupa/member0/mprivkey.dat b/example/compressed_data/groupa/member0/mprivkey.dat
new file mode 100644
index 0000000..b418a28
--- /dev/null
+++ b/example/compressed_data/groupa/member0/mprivkey.dat
Binary files differ
diff --git a/example/compressed_data/groupa/member1/mprivkey.dat b/example/compressed_data/groupa/member1/mprivkey.dat
new file mode 100644
index 0000000..26ad92e
--- /dev/null
+++ b/example/compressed_data/groupa/member1/mprivkey.dat
Binary files differ
diff --git a/example/compressed_data/groupa/privrevokedmember0/mprivkey.dat b/example/compressed_data/groupa/privrevokedmember0/mprivkey.dat
new file mode 100644
index 0000000..7067865
--- /dev/null
+++ b/example/compressed_data/groupa/privrevokedmember0/mprivkey.dat
Binary files differ
diff --git a/example/compressed_data/groupa/privrevokedmember1/mprivkey.dat b/example/compressed_data/groupa/privrevokedmember1/mprivkey.dat
new file mode 100644
index 0000000..aa11c36
--- /dev/null
+++ b/example/compressed_data/groupa/privrevokedmember1/mprivkey.dat
Binary files differ
diff --git a/example/compressed_data/groupa/privrevokedmember2/mprivkey.dat b/example/compressed_data/groupa/privrevokedmember2/mprivkey.dat
new file mode 100644
index 0000000..8bbb26e
--- /dev/null
+++ b/example/compressed_data/groupa/privrevokedmember2/mprivkey.dat
Binary files differ
diff --git a/example/compressed_data/groupa/privrl.bin b/example/compressed_data/groupa/privrl.bin
new file mode 100644
index 0000000..dbec4b1
--- /dev/null
+++ b/example/compressed_data/groupa/privrl.bin
Binary files differ
diff --git a/example/compressed_data/groupa/privrl_empty.bin b/example/compressed_data/groupa/privrl_empty.bin
new file mode 100644
index 0000000..da1d047
--- /dev/null
+++ b/example/compressed_data/groupa/privrl_empty.bin
Binary files differ
diff --git a/example/compressed_data/groupa/pubkey.bin b/example/compressed_data/groupa/pubkey.bin
new file mode 100644
index 0000000..1f395ea
--- /dev/null
+++ b/example/compressed_data/groupa/pubkey.bin
Binary files differ
diff --git a/example/compressed_data/groupa/sigrevokedmember0/mprivkey.dat b/example/compressed_data/groupa/sigrevokedmember0/mprivkey.dat
new file mode 100644
index 0000000..586c5c7
--- /dev/null
+++ b/example/compressed_data/groupa/sigrevokedmember0/mprivkey.dat
Binary files differ
diff --git a/example/compressed_data/groupa/sigrevokedmember1/mprivkey.dat b/example/compressed_data/groupa/sigrevokedmember1/mprivkey.dat
new file mode 100644
index 0000000..01cb952
--- /dev/null
+++ b/example/compressed_data/groupa/sigrevokedmember1/mprivkey.dat
Binary files differ
diff --git a/example/compressed_data/groupa/sigrevokedmember2/mprivkey.dat b/example/compressed_data/groupa/sigrevokedmember2/mprivkey.dat
new file mode 100644
index 0000000..30c03e5
--- /dev/null
+++ b/example/compressed_data/groupa/sigrevokedmember2/mprivkey.dat
Binary files differ
diff --git a/example/compressed_data/groupa/sigrl.bin b/example/compressed_data/groupa/sigrl.bin
new file mode 100644
index 0000000..dd1a036
--- /dev/null
+++ b/example/compressed_data/groupa/sigrl.bin
Binary files differ
diff --git a/example/compressed_data/groupa/sigrl_empty.bin b/example/compressed_data/groupa/sigrl_empty.bin
new file mode 100644
index 0000000..4943750
--- /dev/null
+++ b/example/compressed_data/groupa/sigrl_empty.bin
Binary files differ
diff --git a/example/compressed_data/groupb/member0/mprivkey.dat b/example/compressed_data/groupb/member0/mprivkey.dat
new file mode 100644
index 0000000..e2ba729
--- /dev/null
+++ b/example/compressed_data/groupb/member0/mprivkey.dat
Binary files differ
diff --git a/example/compressed_data/groupb/privrevokedmember0/mprivkey.dat b/example/compressed_data/groupb/privrevokedmember0/mprivkey.dat
new file mode 100644
index 0000000..d2ee1b7
--- /dev/null
+++ b/example/compressed_data/groupb/privrevokedmember0/mprivkey.dat
Binary files differ
diff --git a/example/compressed_data/groupb/privrl.bin b/example/compressed_data/groupb/privrl.bin
new file mode 100644
index 0000000..4d7ebd4
--- /dev/null
+++ b/example/compressed_data/groupb/privrl.bin
Binary files differ
diff --git a/example/compressed_data/groupb/privrl_empty.bin b/example/compressed_data/groupb/privrl_empty.bin
new file mode 100644
index 0000000..9bcc1ce
--- /dev/null
+++ b/example/compressed_data/groupb/privrl_empty.bin
Binary files differ
diff --git a/example/compressed_data/groupb/pubkey.bin b/example/compressed_data/groupb/pubkey.bin
new file mode 100644
index 0000000..1791b75
--- /dev/null
+++ b/example/compressed_data/groupb/pubkey.bin
Binary files differ
diff --git a/example/compressed_data/groupb/sigrevokedmember0/mprivkey.dat b/example/compressed_data/groupb/sigrevokedmember0/mprivkey.dat
new file mode 100644
index 0000000..1100871
--- /dev/null
+++ b/example/compressed_data/groupb/sigrevokedmember0/mprivkey.dat
Binary files differ
diff --git a/example/compressed_data/groupb/sigrl.bin b/example/compressed_data/groupb/sigrl.bin
new file mode 100644
index 0000000..949692a
--- /dev/null
+++ b/example/compressed_data/groupb/sigrl.bin
Binary files differ
diff --git a/example/compressed_data/groupb/sigrl_empty.bin b/example/compressed_data/groupb/sigrl_empty.bin
new file mode 100644
index 0000000..70762da
--- /dev/null
+++ b/example/compressed_data/groupb/sigrl_empty.bin
Binary files differ
diff --git a/example/compressed_data/grprl.bin b/example/compressed_data/grprl.bin
new file mode 100644
index 0000000..c9a3d71
--- /dev/null
+++ b/example/compressed_data/grprl.bin
Binary files differ
diff --git a/example/compressed_data/grprl_empty.bin b/example/compressed_data/grprl_empty.bin
new file mode 100644
index 0000000..14536de
--- /dev/null
+++ b/example/compressed_data/grprl_empty.bin
Binary files differ
diff --git a/example/compressed_data/mprivkey.dat b/example/compressed_data/mprivkey.dat
new file mode 100644
index 0000000..b418a28
--- /dev/null
+++ b/example/compressed_data/mprivkey.dat
Binary files differ
diff --git a/example/compressed_data/privrl.bin b/example/compressed_data/privrl.bin
new file mode 100644
index 0000000..dbec4b1
--- /dev/null
+++ b/example/compressed_data/privrl.bin
Binary files differ
diff --git a/example/compressed_data/pubkey.bin b/example/compressed_data/pubkey.bin
new file mode 100644
index 0000000..1f395ea
--- /dev/null
+++ b/example/compressed_data/pubkey.bin
Binary files differ
diff --git a/example/compressed_data/sigrl.bin b/example/compressed_data/sigrl.bin
new file mode 100644
index 0000000..dd1a036
--- /dev/null
+++ b/example/compressed_data/sigrl.bin
Binary files differ
diff --git a/example/data/README.md b/example/data/README.md
index 6e2bc05..5e3c43c 100644
--- a/example/data/README.md
+++ b/example/data/README.md
@@ -32,8 +32,10 @@ EPID SDK. All data files are in binary format.
| | |__ mprivkey.dat
| |
| |__ privrl.bin
+ | |__ privrl_empty.bin
| |__ pubkey.bin
| |__ sigrl.bin
+ | |__ sigrl_empty.bin
|
|__ groupb
| |__ member0
@@ -49,14 +51,18 @@ EPID SDK. All data files are in binary format.
| | |__ mprivkey.dat
| |
| |__ privrl.bin
+ | |__ privrl_empty.bin
| |__ pubkey.bin
| |__ sigrl.bin
+ | |__ sigrl_empty.bin
|
|__ grprl.bin
|__ grprl_empty.bin
|__ mprivkey.dat
+ |__ privrl.bin
|__ pubkey.bin
|__ cacert.bin
+ |__ sigrl.bin
## Description
@@ -68,7 +74,7 @@ There are 2 groups
- **groupb**
-_Note: No compressed key sample material is included in the package._
+_Note: No compressed key sample material is included in this folder._
### Group A
@@ -104,6 +110,10 @@ In addition, **groupa** contain the following revocation lists:
**sigrevokedmember0**, **sigrevokedmember2** and
**sigrevokedmember2**
+- `privrl_empty.bin` - private key based revocation list with 0 entries
+
+- `sigrl_empty.bin` - signature based revocation list with 0 entries
+
### Group B
@@ -127,21 +137,31 @@ In addition, **groupb** contain the following revocation lists:
- `sigrl.bin` - signature based revocation list with 1 entries -
**sigrevokedmember0**
+- `privrl_empty.bin` - private key based revocation list with 0 entries
+
+- `sigrl_empty.bin` - signature based revocation list with 0 entries
+
### Default files
- `/data/cacert.bin` - CA certificate used as default input to signmsg
- and verifysig
+ and `verifysig`
- `/data/grprl.bin` - group revocation list with one entry **groupb** used
- as default input to verifysig
+ as default input to `verifysig`
-- `/data/pubkey.bin` - public key of a group A used as default input
- to signmsg and verifysig
+- `/data/pubkey.bin` - public key in **groupa** used as default input
+ to signmsg and `verifysig`
-- `/data/mprivkey.dat` - private key of a member0 in the group A above
- used as default input to signmsg
+- `/data/mprivkey.dat` - private key of a **member0** in the
+ **groupa** used as default input to `signmsg`
+- `/data/privrl.bin` - private key based revocation list in the
+ **groupa** with 0 entries used as default input to `verifysig`
+
+- `/data/sigrl.bin` - signature based revocation list in the
+ **groupa** with 0 entries used as default input to `signmsg`
+ and `verifysig`
### Group revocation lists
@@ -149,7 +169,7 @@ There are 2 group revocation lists:
- `grprl.bin` - group revocation list with 1 entry - **groupb**
-- `grprl_empty.bin` - group revocation list with 0 entry
+- `grprl_empty.bin` - group revocation list with 0 entries
### IoT EPID Issuing CA certificate
@@ -157,5 +177,3 @@ There are 2 group revocation lists:
- `/data/cacert.bin` - CA certificate used to check that revocation
lists and group public keys are authorized by the issuer, e.g.,
signed by the issuer
-
-
diff --git a/example/data/data.parts b/example/data/data.parts
index bcf32b1..28a6b11 100644
--- a/example/data/data.parts
+++ b/example/data/data.parts
@@ -20,15 +20,15 @@ Import('*')
env.PartName("sample_data")
#files
-data_files = Pattern(src_dir='../data',
+data_files = Pattern(src_dir='.',
includes=[
- 'cacert.bin',
- 'grprl.bin',
'grprl_empty.bin',
'README.md',
'groupa/privrl.bin',
'groupa/pubkey.bin',
'groupa/sigrl.bin',
+ 'groupa/privrl_empty.bin',
+ 'groupa/sigrl_empty.bin',
'groupa/member0/mprivkey.dat',
'groupa/member1/mprivkey.dat',
'groupa/privrevokedmember0/mprivkey.dat',
@@ -40,31 +40,33 @@ data_files = Pattern(src_dir='../data',
'groupb/privrl.bin',
'groupb/pubkey.bin',
'groupb/sigrl.bin',
+ 'groupb/privrl_empty.bin',
+ 'groupb/sigrl_empty.bin',
'groupb/member0/mprivkey.dat',
'groupb/privrevokedmember0/mprivkey.dat',
'groupb/sigrevokedmember0/mprivkey.dat',
],
recursive=True)
-sample_default_files = Pattern(src_dir='../data',
+sample_default_files = Pattern(src_dir='.',
includes=[
- 'cacert.bin',
- 'grprl.bin',
'mprivkey.dat',
'pubkey.bin',
+ 'cacert.bin',
+ 'grprl.bin',
+ 'privrl.bin',
+ 'sigrl.bin',
],
recursive=True)
+part_file = ['data.parts']
+
if 'install_package' in env['MODE']:
env.InstallTopLevel(data_files, sub_dir='example/data')
- env.InstallTopLevel(sample_default_files, sub_dir='example/data')
- part_file = ['data.parts']
env.InstallTopLevel(part_file, sub_dir='example/data')
+ env.InstallTopLevel(sample_default_files, sub_dir='example/data')
else:
env.InstallData(data_files,
sub_dir='data',
no_pkg=False)
-
- env.InstallData(sample_default_files,
- sub_dir='',
- no_pkg=False)
+ env.InstallTopLevel(sample_default_files, sub_dir='example')
diff --git a/example/data/groupa/privrl_empty.bin b/example/data/groupa/privrl_empty.bin
new file mode 100644
index 0000000..27bdd70
--- /dev/null
+++ b/example/data/groupa/privrl_empty.bin
Binary files differ
diff --git a/example/data/groupa/sigrl_empty.bin b/example/data/groupa/sigrl_empty.bin
new file mode 100644
index 0000000..2797822
--- /dev/null
+++ b/example/data/groupa/sigrl_empty.bin
Binary files differ
diff --git a/example/data/groupb/privrl_empty.bin b/example/data/groupb/privrl_empty.bin
new file mode 100644
index 0000000..3638c81
--- /dev/null
+++ b/example/data/groupb/privrl_empty.bin
Binary files differ
diff --git a/example/data/groupb/sigrl_empty.bin b/example/data/groupb/sigrl_empty.bin
new file mode 100644
index 0000000..3232377
--- /dev/null
+++ b/example/data/groupb/sigrl_empty.bin
Binary files differ
diff --git a/example/data/privrl.bin b/example/data/privrl.bin
new file mode 100644
index 0000000..27bdd70
--- /dev/null
+++ b/example/data/privrl.bin
Binary files differ
diff --git a/example/data/sigrl.bin b/example/data/sigrl.bin
new file mode 100644
index 0000000..2797822
--- /dev/null
+++ b/example/data/sigrl.bin
Binary files differ
diff --git a/example/signmsg/signmsg.parts b/example/signmsg/signmsg.parts
index 23efe4a..1246cb9 100644
--- a/example/signmsg/signmsg.parts
+++ b/example/signmsg/signmsg.parts
@@ -20,32 +20,33 @@ Import('*')
env.PartName("signmsg")
src_files = Pattern(src_dir='src/',
- includes=['*.c'],
- recursive=True).files()
+ includes=['*.c'],
+ recursive=True).files()
inc_files = Pattern(src_dir='src/',
- includes=['*.h'],
- recursive=True).files()
+ includes=['*.h'],
+ recursive=True).files()
parts_file = ['signmsg.parts']
if 'install_package' in env['MODE']:
- env.InstallTopLevel(inc_files + src_files,sub_dir='example/${PART_SHORT_NAME}/src')
+ env.InstallTopLevel(inc_files + src_files,
+ sub_dir='example/${PART_SHORT_NAME}/src')
env.InstallTopLevel(parts_file, sub_dir='example/${PART_SHORT_NAME}')
else:
env.DependsOn([
Component('member'),
- Component('util')
+ Component('util'),
+ Component('dropt')
])
-
+
env.Append(CPPPATH='#/example/signmsg')
-
+
if env['TARGET_PLATFORM']['OS'] == 'win32':
if env.isConfigBasedOn('debug'):
env['PDB'] = '${PART_NAME}.pdb'
-
+
outputs = env.Program('${PART_NAME}', src_files,
no_import_lib=True)
-
+
env.InstallBin(outputs,
no_pkg=False,
INSTALL_BIN='${INSTALL_SAMPLE_BIN}')
-
diff --git a/example/signmsg/src/main.c b/example/signmsg/src/main.c
index 9618817..8bd9000 100644
--- a/example/signmsg/src/main.c
+++ b/example/signmsg/src/main.c
@@ -25,7 +25,7 @@
#include <stdlib.h>
#include <string.h>
-#include "util/argutil.h"
+#include <dropt.h>
#include "util/buffutil.h"
#include "util/convutil.h"
#include "util/envutil.h"
@@ -33,43 +33,31 @@
#include "src/signmsg.h"
// Defaults
-
-#define PROGRAM_NAME ("signmsg")
-#define MPRIVKEYFILE_DEFAULT ("mprivkey.dat")
-#define PUBKEYFILE_DEFAULT ("pubkey.bin")
-#define SIGRL_DEFAULT (NULL)
-#define SIG_DEFAULT ("sig.dat")
-#define CACERT_DEFAULT ("cacert.bin")
-#define HASHALG_DEFAULT ("SHA-512")
-#define MPRECMPI_DEFAULT NULL
-#define MPRECMPO_DEFAULT NULL
-
-/// Print usage message
-void PrintUsage() {
- log_fmt(
- "Usage: %s [OPTION]...\n"
- "Create Intel(R) EPID signature of message\n"
- "\n"
- "Options:\n"
- "\n"
- "--sig=FILE write signature to FILE (default: %s)\n"
- "--msg=MESSAGE MESSAGE to sign\n"
- "--bsn=BASENAME BASENAME to sign with (default: random)\n"
- "--sigrl=FILE load signature based revocation list from FILE\n"
- "--gpubkey=FILE load group public key from FILE\n"
- " (default: %s)\n"
- "--mprivkey=FILE load member private key from FILE\n"
- " (default: %s)\n"
- "--mprecmpi=FILE load pre-computed member data from FILE\n"
- "--mprecmpo=FILE write pre-computed member data to FILE\n"
- "--hashalg=NAME SHA-256 | SHA-384 | SHA-512 (default: %s)\n"
- "--capubkey=FILE load IoT Issuing CA public key from FILE\n"
- " (default: %s)\n"
- "-h,--help display this help and exit\n"
- "-v,--verbose print status messages to stdout\n"
- "\n",
- PROGRAM_NAME, SIG_DEFAULT, PUBKEYFILE_DEFAULT, MPRIVKEYFILE_DEFAULT,
- HASHALG_DEFAULT, CACERT_DEFAULT);
+#define PROGRAM_NAME "signmsg"
+#define MPRIVKEYFILE_DEFAULT "mprivkey.dat"
+#define PUBKEYFILE_DEFAULT "pubkey.bin"
+#define SIG_DEFAULT "sig.dat"
+#define CACERT_DEFAULT "cacert.bin"
+#define HASHALG_DEFAULT "SHA-512"
+
+/// parses string to a hashalg type
+static dropt_error HandleHashalg(dropt_context* context,
+ const char* option_argument,
+ void* handler_data) {
+ dropt_error err = dropt_error_none;
+ HashAlg* hashalg = handler_data;
+ (void)context;
+ if (option_argument == NULL) {
+ *hashalg = kSha512;
+ } else if (option_argument[0] == '\0') {
+ err = dropt_error_insufficient_arguments;
+ } else if (StringToHashAlg(option_argument, hashalg)) {
+ err = dropt_error_none;
+ } else {
+ /* Reject the value as being inappropriate for this handler. */
+ err = dropt_error_mismatch;
+ }
+ return err;
}
/// Main entrypoint
@@ -80,45 +68,42 @@ int main(int argc, char* argv[]) {
// intermediate return value for EPID functions
EpidStatus result = kEpidErr;
- // Temp option pointer
- char const* opt_str = 0;
-
// User Settings
// Signature file name parameter
- char const* sig_file = SIG_DEFAULT;
+ static char* sig_file = NULL;
// Message string parameter
- char const* msg_str = NULL;
+ static char* msg_str = NULL;
size_t msg_size = 0;
// Basename string parameter
- char const* basename_str = NULL;
+ static char* basename_str = NULL;
size_t basename_size = 0;
// SigRl file name parameter
- char const* sigrl_file = SIGRL_DEFAULT;
+ static char* sigrl_file = NULL;
// Group public key file name parameter
- char const* pubkey_file = PUBKEYFILE_DEFAULT;
+ static char* pubkey_file = NULL;
// Member private key file name parameter
- char const* mprivkey_file = MPRIVKEYFILE_DEFAULT;
+ static char* mprivkey_file = NULL;
// Member pre-computed settings input file name parameter
- char const* mprecmpi_file = MPRECMPI_DEFAULT;
+ static char* mprecmpi_file = NULL;
// Member pre-computed settings output file name parameter
- char const* mprecmpo_file = MPRECMPO_DEFAULT;
-
- // Hash algorithm name parameter
- char const* hashalg_str = HASHALG_DEFAULT;
+ static char* mprecmpo_file = NULL;
// CA certificate file name parameter
- char const* cacert_file = CACERT_DEFAULT;
+ static char* cacert_file = NULL;
+
+ // help flag parameter
+ static bool show_help = false;
// Verbose flag parameter
- bool verbose = false;
+ static bool verbose = false;
// Buffers and computed values
@@ -148,73 +133,122 @@ int main(int argc, char* argv[]) {
bool use_precmp_in;
// Hash algorithm
- HashAlg hashalg;
-
+ static HashAlg hashalg = kSha512;
+
+ dropt_option options[] = {
+ {'\0', "sig", "write signature to FILE (default: " SIG_DEFAULT ")",
+ "FILE", dropt_handle_string, &sig_file},
+ {'\0', "msg", "MESSAGE to sign", "MESSAGE", dropt_handle_string,
+ &msg_str},
+ {'\0', "bsn", "BASENAME to sign with (default: random)", "BASENAME",
+ dropt_handle_string, &basename_str},
+
+ {'\0', "sigrl", "load signature based revocation list from FILE", "FILE",
+ dropt_handle_string, &sigrl_file},
+ {'\0', "gpubkey",
+ "load group public key from FILE (default: " PUBKEYFILE_DEFAULT ")",
+ "FILE", dropt_handle_string, &pubkey_file},
+ {'\0', "mprivkey",
+ "load member private key from FILE "
+ "(default:" MPRIVKEYFILE_DEFAULT ")",
+ "FILE", dropt_handle_string, &mprivkey_file},
+ {'\0', "mprecmpi", "load pre-computed member data from FILE", "FILE",
+ dropt_handle_string, &mprecmpi_file},
+ {'\0', "mprecmpo", "write pre-computed member data to FILE", "FILE",
+ dropt_handle_string, &mprecmpo_file},
+ {'\0', "capubkey",
+ "load IoT Issuing CA public key from FILE (default: " CACERT_DEFAULT ")",
+ "FILE", dropt_handle_string, &cacert_file},
+
+ {'\0', "hashalg",
+ "use specified hash algorithm (default: " HASHALG_DEFAULT ")",
+ "{SHA-256 | SHA-384 | SHA-512}", HandleHashalg, &hashalg},
+ {'h', "help", "display this help and exit", NULL, dropt_handle_bool,
+ &show_help, dropt_attr_halt},
+ {'v', "verbose", "print status messages to stdout", NULL,
+ dropt_handle_bool, &verbose},
+
+ {0} /* Required sentinel value. */
+ };
+
+ dropt_context* dropt_ctx = NULL;
// set program name for logging
set_prog_name(PROGRAM_NAME);
do {
- // Read command line args
-
- if (argc < 1) {
- PrintUsage();
+ dropt_ctx = dropt_new_context(options);
+ if (!dropt_ctx) {
ret_value = EXIT_FAILURE;
break;
+ } else if (argc > 0) {
+ /* Parse the arguments from argv.
+ *
+ * argv[1] is always safe to access since argv[argc] is guaranteed
+ * to be NULL and since we've established that argc > 0.
+ */
+ char** rest = dropt_parse(dropt_ctx, -1, &argv[1]);
+ if (dropt_get_error(dropt_ctx) != dropt_error_none) {
+ log_error(dropt_get_error_message(dropt_ctx));
+ if (dropt_error_invalid_option == dropt_get_error(dropt_ctx)) {
+ fprintf(stderr, "Try '%s --help' for more information.\n",
+ PROGRAM_NAME);
+ }
+ ret_value = EXIT_FAILURE;
+ break;
+ } else if (show_help) {
+ log_fmt(
+ "Usage: %s [OPTION]...\n"
+ "Create Intel(R) EPID signature of message\n"
+ "\n"
+ "Options:\n",
+ PROGRAM_NAME);
+ dropt_print_help(stdout, dropt_ctx, NULL);
+ ret_value = EXIT_SUCCESS;
+ break;
+ } else if (*rest) {
+ // we have unparsed (positional) arguments
+ log_error("invalid argument: %s", *rest);
+ fprintf(stderr, "Try '%s --help' for more information.\n",
+ PROGRAM_NAME);
+ ret_value = EXIT_FAILURE;
+ break;
+ } else {
+ if (verbose) {
+ verbose = ToggleVerbosity();
+ }
+ if (!sig_file) {
+ sig_file = SIG_DEFAULT;
+ }
+ if (!pubkey_file) {
+ pubkey_file = PUBKEYFILE_DEFAULT;
+ }
+ if (!mprivkey_file) {
+ mprivkey_file = MPRIVKEYFILE_DEFAULT;
+ }
+ if (!cacert_file) {
+ cacert_file = CACERT_DEFAULT;
+ }
+
+ if (msg_str) {
+ msg_size = strlen(msg_str);
+ }
+ if (basename_str) {
+ basename_size = strlen(basename_str);
+ }
+ if (verbose) {
+ log_msg("\nOption values:");
+ log_msg(" sig_file : %s", sig_file);
+ log_msg(" msg_str : %s", msg_str);
+ log_msg(" basename_str : %s", basename_str);
+ log_msg(" pubkey_file : %s", pubkey_file);
+ log_msg(" mprivkey_file : %s", mprivkey_file);
+ log_msg(" mprecmpi_file : %s", mprecmpi_file);
+ log_msg(" mprecmpo_file : %s", mprecmpo_file);
+ log_msg(" hashalg : %s", HashAlgToString(hashalg));
+ log_msg(" cacert_file : %s", cacert_file);
+ log_msg("");
+ }
+ }
}
-
- if (CmdOptionExists(argc, argv, "--help") ||
- CmdOptionExists(argc, argv, "-h")) {
- PrintUsage();
- ret_value = EXIT_SUCCESS;
- break;
- }
-
- if (CmdOptionExists(argc, argv, "--verbose") ||
- CmdOptionExists(argc, argv, "-v")) {
- verbose = ToggleVerbosity();
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--sig"))) {
- sig_file = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--msg"))) {
- msg_str = opt_str;
- msg_size = strlen(msg_str);
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--bsn"))) {
- basename_str = opt_str;
- basename_size = strlen(basename_str);
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--sigrl"))) {
- sigrl_file = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--gpubkey"))) {
- pubkey_file = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--mprivkey"))) {
- mprivkey_file = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--mprecmpi"))) {
- mprecmpi_file = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--mprecmpo"))) {
- mprecmpo_file = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--hashalg"))) {
- hashalg_str = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--capubkey"))) {
- cacert_file = opt_str;
- }
-
// convert command line args to usable formats
// CA certificate
@@ -230,21 +264,25 @@ int main(int argc, char* argv[]) {
ret_value = EXIT_FAILURE;
break;
}
-
// SigRl
- if (FileExists(sigrl_file)) {
- signed_sig_rl = NewBufferFromFile(sigrl_file, &signed_sig_rl_size);
- if (!signed_sig_rl) {
- ret_value = EXIT_FAILURE;
- break;
- }
-
- if (0 != ReadLoud(sigrl_file, signed_sig_rl, signed_sig_rl_size)) {
+ if (sigrl_file) {
+ if (FileExists(sigrl_file)) {
+ signed_sig_rl = NewBufferFromFile(sigrl_file, &signed_sig_rl_size);
+ if (!signed_sig_rl) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ if (0 != ReadLoud(sigrl_file, signed_sig_rl, signed_sig_rl_size)) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ } else {
+ log_error("SigRL file %s does not exist", sigrl_file);
ret_value = EXIT_FAILURE;
break;
}
}
-
// Group public key file
signed_pubkey = NewBufferFromFile(pubkey_file, &signed_pubkey_size);
if (!signed_pubkey) {
@@ -255,7 +293,6 @@ int main(int argc, char* argv[]) {
ret_value = EXIT_FAILURE;
break;
}
-
// Member private key
mprivkey = NewBufferFromFile(mprivkey_file, &mprivkey_size);
if (!mprivkey) {
@@ -268,12 +305,10 @@ int main(int argc, char* argv[]) {
ret_value = EXIT_FAILURE;
break;
}
-
if (0 != ReadLoud(mprivkey_file, mprivkey, mprivkey_size)) {
ret_value = EXIT_FAILURE;
break;
}
-
// Load Member pre-computed settings
use_precmp_in = false;
if (mprecmpi_file) {
@@ -290,18 +325,6 @@ int main(int argc, char* argv[]) {
}
}
- // Hash algorithm
- if (!StringToHashAlg(hashalg_str, &hashalg)) {
- ret_value = EXIT_FAILURE;
- break;
- }
-
- if (hashalg != kSha256 && hashalg != kSha384 && hashalg != kSha512) {
- log_error("unsupported hash algorithm %s", HashAlgToString(hashalg));
- ret_value = EXIT_FAILURE;
- break;
- }
-
// Report Settings
if (verbose) {
log_msg("==============================================");
@@ -345,7 +368,7 @@ int main(int argc, char* argv[]) {
// Report Result
if (kEpidNoErr != result) {
- if (kEpidSigRevokedinSigRl == result) {
+ if (kEpidSigRevokedInSigRl == result) {
log_error("signature revoked in SigRL");
} else {
log_error("function SignMsg returned %s", EpidStatusToString(result));
@@ -381,5 +404,7 @@ int main(int argc, char* argv[]) {
if (signed_pubkey) free(signed_pubkey);
if (mprivkey) free(mprivkey);
+ dropt_free_context(dropt_ctx);
+
return ret_value;
}
diff --git a/example/signmsg/src/signmsg.c b/example/signmsg/src/signmsg.c
index cbb4846..7b95d0d 100644
--- a/example/signmsg/src/signmsg.c
+++ b/example/signmsg/src/signmsg.c
@@ -13,10 +13,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################*/
-
+/// Message signing implementation.
/*!
* \file
- * \brief Message signing implementation.
+ *
+ * This file has a corresponding walk-through in the SDK documentation.
+ *
+ * Review the walk-through for correctness after making changes to this
+ * file.
*/
#include <stdlib.h>
#include <string.h>
@@ -25,6 +29,8 @@
#include "util/envutil.h"
#include "util/stdtypes.h"
#include "util/buffutil.h"
+#include "epid/member/api.h"
+#include "epid/common/file_parser.h"
bool IsCaCertAuthorizedByRootCa(void const* data, size_t size) {
// Implementation of this function is out of scope of the sample.
@@ -47,13 +53,12 @@ EpidStatus SignMsg(void const* msg, size_t msg_len, void const* basename,
EpidStatus sts = kEpidErr;
void* prng = NULL;
MemberCtx* member = NULL;
-
SigRl* sig_rl = NULL;
- size_t sig_rl_size = 0;
do {
GroupPubKey pub_key = {0};
PrivKey priv_key = {0};
+ size_t sig_rl_size = 0;
if (!sig) {
sts = kEpidBadArgErr;
@@ -69,8 +74,8 @@ EpidStatus SignMsg(void const* msg, size_t msg_len, void const* basename,
if (signed_sig_rl) {
// authenticate and determine space needed for SigRl
- sts = EpidParseSigRlFile(signed_sig_rl, signed_sig_rl_size, cacert,
- sig_rl, &sig_rl_size);
+ sts = EpidParseSigRlFile(signed_sig_rl, signed_sig_rl_size, cacert, NULL,
+ &sig_rl_size);
if (kEpidSigInvalid == sts) {
// authentication failure
break;
@@ -94,13 +99,7 @@ EpidStatus SignMsg(void const* msg, size_t msg_len, void const* basename,
if (kEpidNoErr != sts) {
break;
}
- }
-
- // acquire PRNG
- sts = PrngCreate(&prng);
- if (kEpidNoErr != sts) {
- break;
- }
+ } // if (signed_sig_rl)
// decompress private key
if (privkey_size == sizeof(PrivKey)) {
@@ -114,6 +113,12 @@ EpidStatus SignMsg(void const* msg, size_t msg_len, void const* basename,
} else {
sts = kEpidErr;
break;
+ } // if (privkey_size == sizeof(PrivKey))
+
+ // acquire PRNG
+ sts = PrngCreate(&prng);
+ if (kEpidNoErr != sts) {
+ break;
}
// create member
diff --git a/example/util/Makefile b/example/util/Makefile
new file mode 100644
index 0000000..f581f41
--- /dev/null
+++ b/example/util/Makefile
@@ -0,0 +1,32 @@
+#!/usr/bin/make -f
+
+#define variables
+COMMON_INCLUDE_DIR = ../../
+UTIL_INCLUDE_DIR = ../
+
+UTIL_SRC = $(wildcard ./src/*.c)
+UTIL_OBJ = $(UTIL_SRC:.c=.o)
+UTIL_LIB = ./src/libutil.a
+
+#set additional compiler flag
+CFLAGS += -D_CRT_SECURE_NO_WARNINGS
+
+#target part
+$(UTIL_OBJ): %.o: %.c
+ $(CC) $(CFLAGS) -I$(COMMON_INCLUDE_DIR) \
+ -I$(UTIL_INCLUDE_DIR) \
+ -c $^ -o $@
+
+$(UTIL_LIB): $(UTIL_OBJ)
+ $(AR) rc $(UTIL_LIB) $(UTIL_OBJ)
+ ranlib $(UTIL_LIB)
+
+build: all
+
+all: $(UTIL_LIB)
+
+install:
+
+clean:
+ rm -f $(UTIL_OBJ) $(UTIL_LIB)
+
diff --git a/example/util/argutil.h b/example/util/argutil.h
deleted file mode 100644
index 365a50c..0000000
--- a/example/util/argutil.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*############################################################################
- # Copyright 2016 Intel Corporation
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- ############################################################################*/
-
-/*!
- * \file
- * \brief Argument parsing utilities interface.
- */
-#ifndef EXAMPLE_UTIL_ARGUTIL_H_
-#define EXAMPLE_UTIL_ARGUTIL_H_
-
-/// get the index of an option in argv
-/*!
- \param[in] argc number of arguments
- \param[in] argv list of arguments
- \param[in] name of option
- \returns index of the option in argv
-*/
-int GetOptionIndex(int argc, char* const argv[], char const* option);
-
-/// test if an option is in argv
-/*!
- \param[in] argc number of arguments
- \param[in] argv list of arguments
- \param[in] name of option
- \retval true option is in argv
- \retval false option is not in argv
-*/
-int CmdOptionExists(int argc, char* const argv[], char const* option);
-
-/// find option in argv
-/*!
- \param[in] argc number of arguments
- \param[in] argv list of arguments
- \param[in] name of option
- \returns pointer from argv for option
-*/
-char const* GetCmdOption(int argc, char* const argv[], char const* option);
-
-#endif // EXAMPLE_UTIL_ARGUTIL_H_
diff --git a/example/util/buffutil.h b/example/util/buffutil.h
index 8e85edc..6c50eb6 100644
--- a/example/util/buffutil.h
+++ b/example/util/buffutil.h
@@ -55,6 +55,19 @@ bool FileExists(char const* filename);
*/
size_t GetFileSize(char const* filename);
+/// Get file size
+/*!
+ checks the size against an expected maximum size.
+ \param[in] filename
+
+ The file path.
+ \param[in] max_size
+
+ the maximum expected size of the file.
+ \returns size of the file in bytes
+*/
+size_t GetFileSize_S(char const* filename, size_t max_size);
+
/// Allocate a buffer of a fixed size
/*!
Logs an error message on failure.
diff --git a/example/util/convutil.h b/example/util/convutil.h
index 0d59431..83aeb9a 100644
--- a/example/util/convutil.h
+++ b/example/util/convutil.h
@@ -42,6 +42,22 @@ char const* HashAlgToString(HashAlg alg);
*/
bool StringToHashAlg(char const* str, HashAlg* alg);
+/// convert an EPID version to a string
+/*!
+\param[in] version an EPID version
+\returns string representing the version
+*/
+char const* EpidVersionToString(EpidVersion version);
+
+/// convert a string to an EPID version
+/*!
+\param[in] str a string
+\param[out] version an EPID version
+\retval true string represents an EPID version
+\retval false string does not represent an EPID version
+*/
+bool StringToEpidVersion(char const* str, EpidVersion* version);
+
/// convert an EPID file type to a string
/*!
\param[in] type an EPID file type
diff --git a/example/util/src/argutil.c b/example/util/src/argutil.c
deleted file mode 100644
index fb3ac4a..0000000
--- a/example/util/src/argutil.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*############################################################################
- # Copyright 2016 Intel Corporation
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- ############################################################################*/
-
-/*!
- * \file
- * \brief Argument parsing utilities implementation.
- */
-
-#include <string.h>
-#include "util/argutil.h"
-#include "util/envutil.h"
-
-int GetOptionIndex(int argc, char* const argv[], char const* option) {
- int result = -1;
- int ca = 0;
- for (ca = argc - 1; ca > 0; ca--) {
- if (0 == strncmp(argv[ca], option, strlen(option))) {
- if (strlen(argv[ca]) > strlen(option) &&
- '=' != *(argv[ca] + strlen(option))) {
- continue;
- } else {
- result = ca;
- break;
- }
- }
- }
- return result;
-}
-
-// this finds options that start with option=
-int GetCmdOptionIndex(int argc, char* const argv[], char const* option) {
- int result = -1;
- int ca = 0;
- for (ca = argc - 1; ca > 0; ca--) {
- if (0 == strcmp(argv[ca], option)) {
- result = ca;
- break;
- }
- }
- return result;
-}
-
-int CmdOptionExists(int argc, char* const argv[], char const* option) {
- return (-1 != GetOptionIndex(argc, argv, option));
-}
-
-char const* GetCmdOption(int argc, char* const argv[], char const* option) {
- char const* optionarg = 0;
- int option_index = GetOptionIndex(argc, argv, option);
- if (-1 != option_index) {
- // we have the option
- if (strlen(argv[option_index]) > strlen(option) + 1) {
- optionarg = argv[option_index] + strlen(option) + 1;
- }
- }
- return optionarg;
-}
diff --git a/example/util/src/bufutil.c b/example/util/src/bufutil.c
index dae77dd..adfb337 100644
--- a/example/util/src/bufutil.c
+++ b/example/util/src/bufutil.c
@@ -58,6 +58,15 @@ size_t GetFileSize(char const* filename) {
return file_length;
}
+size_t GetFileSize_S(char const* filename, size_t max_size) {
+ size_t size = GetFileSize(filename);
+ if (size > max_size) {
+ return 0;
+ } else {
+ return size;
+ }
+}
+
void* AllocBuffer(size_t size) {
void* buffer = NULL;
if (size) {
@@ -80,7 +89,7 @@ void* NewBufferFromFile(const char* filename, size_t* size) {
break;
}
- len = GetFileSize(filename);
+ len = GetFileSize_S(filename, SIZE_MAX);
if (len == 0) {
log_error("cannot load empty file '%s'", filename);
break;
diff --git a/example/util/src/convutil.c b/example/util/src/convutil.c
index 271f938..4a57c68 100644
--- a/example/util/src/convutil.c
+++ b/example/util/src/convutil.c
@@ -48,7 +48,27 @@ bool StringToHashAlg(char const* str, HashAlg* alg) {
return true;
}
}
- log_error("hash algorithm \"%s\" is unknown", str);
+ return false;
+}
+
+const char* epid_version_to_string[kNumEpidVersions] = {"1", "2"};
+
+char const* EpidVersionToString(EpidVersion version) {
+ if ((int)version < 0 || (size_t)version >= COUNT_OF(epid_version_to_string))
+ return "unknown";
+ return epid_version_to_string[version];
+}
+
+bool StringToEpidVersion(char const* str, EpidVersion* version) {
+ size_t i;
+ if (!version || !str) return false;
+ for (i = 0; i < COUNT_OF(epid_version_to_string); i++) {
+ if (0 == strcmp(str, epid_version_to_string[i])) {
+ *version = (EpidVersion)i;
+ return true;
+ }
+ }
+ log_error("epid version \"%s\" is unknown", str);
return false;
}
diff --git a/example/util/src/strutil.c b/example/util/src/strutil.c
new file mode 100644
index 0000000..2080fc1
--- /dev/null
+++ b/example/util/src/strutil.c
@@ -0,0 +1,53 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Buffer handling utilities implementation.
+ */
+
+#include <stdarg.h>
+#include <util/strutil.h>
+
+#include <stdio.h>
+#if defined(_MSC_VER) && _MSC_VER < 1900
+int vsnprintf(char* outBuf, size_t size, const char* format, va_list ap) {
+ int count = -1;
+
+ if (0 != size) {
+ count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap);
+ }
+ if (-1 == count) {
+ // vsnprintf returns "The number of characters that would have been
+ // written if n had been sufficiently large" however _vsnprintf_s
+ // returns -1 if the content was truncated.
+ // _vscprintf calculates that value
+ count = _vscprintf(format, ap);
+ }
+ return count;
+}
+
+int snprintf(char* outBuf, size_t size, const char* format, ...) {
+ int count;
+ va_list ap;
+
+ va_start(ap, format);
+ count = vsnprintf(outBuf, size, format, ap);
+ va_end(ap);
+
+ return count;
+}
+#endif
diff --git a/example/util/stdtypes.h b/example/util/stdtypes.h
index 8eb0a22..72cead8 100644
--- a/example/util/stdtypes.h
+++ b/example/util/stdtypes.h
@@ -25,6 +25,8 @@
#ifndef __cplusplus
#ifndef _Bool
+/// C99 standard name for bool
+#define _Bool char
/// Boolean type
typedef char bool;
/// integer constant 1
diff --git a/example/util/strutil.h b/example/util/strutil.h
new file mode 100644
index 0000000..885fc59
--- /dev/null
+++ b/example/util/strutil.h
@@ -0,0 +1,33 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief Buffer handling utilities interface.
+ */
+#ifndef EXAMPLE_UTIL_STRUTIL_H_
+#define EXAMPLE_UTIL_STRUTIL_H_
+
+#include <stdio.h>
+#include <stdarg.h>
+
+// Prior to version 14.0 snprintf was not supported in MSVC
+#if defined(_MSC_VER) && _MSC_VER < 1900
+int vsnprintf(char* outBuf, size_t size, const char* format, va_list ap);
+int snprintf(char* outBuf, size_t size, const char* format, ...);
+#endif
+
+#endif // EXAMPLE_UTIL_STRUTIL_H_
diff --git a/example/util/util.parts b/example/util/util.parts
index 0821393..881dfe3 100644
--- a/example/util/util.parts
+++ b/example/util/util.parts
@@ -27,6 +27,7 @@ api_headers = Pattern(src_dir='.',
recursive=False).files()
parts_file = ['util.parts']
+makefile = ['Makefile']
#unit tests
utest_files = Pattern(src_dir='.',
includes=['*-test.cc', '*-testhelper.cc'],
@@ -38,6 +39,7 @@ if 'install_package' in env['MODE']:
env.InstallTopLevel(api_headers, sub_dir='example/${PART_SHORT_NAME}')
env.InstallTopLevel(utest_files, sub_dir='example/${PART_SHORT_NAME}/utest')
env.InstallTopLevel(parts_file, sub_dir='example/${PART_SHORT_NAME}')
+ env.InstallTopLevel(makefile, sub_dir='example/${PART_SHORT_NAME}')
else:
env.DependsOn([Component('common', requires=REQ.HEADERS)])
diff --git a/example/verifysig/src/main.c b/example/verifysig/src/main.c
index 6e91829..951f923 100644
--- a/example/verifysig/src/main.c
+++ b/example/verifysig/src/main.c
@@ -23,56 +23,51 @@
#include <stdlib.h>
#include <string.h>
+#include <dropt.h>
#include "epid/common/errors.h"
#include "epid/common/types.h"
+#include "epid/common/file_parser.h"
#include "epid/verifier/api.h"
+#include "epid/verifier/1.1/api.h"
-#include "util/argutil.h"
#include "util/buffutil.h"
#include "util/convutil.h"
#include "util/envutil.h"
#include "src/verifysig.h"
+#include "src/verifysig11.h"
// Defaults
-#define PROGRAM_NAME ("verifysig")
-#define PUBKEYFILE_DEFAULT ("pubkey.bin")
+#define PROGRAM_NAME "verifysig"
+#define PUBKEYFILE_DEFAULT "pubkey.bin"
#define PRIVRL_DEFAULT NULL
#define SIGRL_DEFAULT NULL
-#define GRPRL_DEFAULT ("grprl.bin")
+#define GRPRL_DEFAULT "grprl.bin"
#define VERIFIERRL_DEFAULT NULL
-#define SIG_DEFAULT ("sig.dat")
-#define CACERT_DEFAULT ("cacert.bin")
-#define HASHALG_DEFAULT ("SHA-512")
+#define SIG_DEFAULT "sig.dat"
+#define CACERT_DEFAULT "cacert.bin"
+#define HASHALG_DEFAULT "SHA-512"
+#define UNPARSED_HASHALG (kInvalidHashAlg)
#define VPRECMPI_DEFAULT NULL
#define VPRECMPO_DEFAULT NULL
-/// Print usage message
-void PrintUsage() {
- log_fmt(
- "Usage: %s [OPTION]...\n"
- "Verify signature was created by group member in good standing\n"
- "\n"
- "Options:\n"
- "\n"
- "--sig=FILE load signature from FILE (default: %s)\n"
- "--msg=MESSAGE MESSAGE that was signed (default: empty)\n"
- "--bsn=BASENAME BASENAME used in signature (default: random)\n"
- "--privrl=FILE load private key revocation list from FILE\n"
- "--sigrl=FILE load signature based revocation list from FILE\n"
- "--grprl=FILE load group revocation list from FILE\n"
- " (default: %s)\n"
- "--verifierrl=FILE load verifier revocation list from FILE\n"
- "--gpubkey=FILE load group public key from FILE (default: %s)\n"
- "--vprecmpi=FILE load pre-computed verifier data from FILE\n"
- "--vprecmpo=FILE write pre-computed verifier data to FILE\n"
- "--hashalg=NAME SHA-256 | SHA-384 | SHA-512 (default: %s)\n"
- "--capubkey=FILE load IoT Issuing CA public key from FILE\n"
- " (default: %s)\n"
- "-h,--help display this help and exit\n"
- "-v,--verbose print status messages to stdout\n"
- "\n",
- PROGRAM_NAME, SIG_DEFAULT, GRPRL_DEFAULT, PUBKEYFILE_DEFAULT,
- HASHALG_DEFAULT, CACERT_DEFAULT);
+/// parses string to a hashalg type
+static dropt_error HandleHashalg(dropt_context* context,
+ const char* option_argument,
+ void* handler_data) {
+ dropt_error err = dropt_error_none;
+ HashAlg* hashalg = handler_data;
+ (void)context;
+ if (option_argument == NULL) {
+ *hashalg = UNPARSED_HASHALG;
+ } else if (option_argument[0] == '\0') {
+ err = dropt_error_insufficient_arguments;
+ } else if (StringToHashAlg(option_argument, hashalg)) {
+ err = dropt_error_none;
+ } else {
+ /* Reject the value as being inappropriate for this handler. */
+ err = dropt_error_mismatch;
+ }
+ return err;
}
/// Main entrypoint
@@ -81,56 +76,54 @@ int main(int argc, char* argv[]) {
int ret_value = EXIT_SUCCESS;
// intermediate return value for EPID functions
EpidStatus result = kEpidErr;
- // Temp option pointer
- char const* opt_str = 0;
// User Settings
// Signature file name parameter
- char const* sig_file = SIG_DEFAULT;
+ static char* sig_file = SIG_DEFAULT;
// Message string parameter
- char const* msg_str = NULL;
+ static char* msg_str = NULL;
size_t msg_size = 0;
// Basename string parameter
- char const* basename_str = NULL;
+ static char* basename_str = NULL;
size_t basename_size = 0;
// PrivRl file name parameter
- char const* privrl_file = PRIVRL_DEFAULT;
+ static char* privrl_file = NULL;
// SigRl file name parameter
- char const* sigrl_file = SIGRL_DEFAULT;
+ static char* sigrl_file = NULL;
// GrpRl file name parameter
- char const* grprl_file = GRPRL_DEFAULT;
+ static char* grprl_file = NULL;
// VerRl file name parameter
- char const* verrl_file = VERIFIERRL_DEFAULT;
+ static char* verrl_file = NULL;
// Group public key file name parameter
- char const* pubkey_file = PUBKEYFILE_DEFAULT;
+ static char* pubkey_file = NULL;
// Verifier pre-computed settings input file name parameter
- char const* vprecmpi_file = VPRECMPI_DEFAULT;
+ static char* vprecmpi_file = NULL;
// Verifier pre-computed settings output file name parameter
- char const* vprecmpo_file = VPRECMPO_DEFAULT;
-
- // Hash algorithm name parameter
- char const* hashalg_str = HASHALG_DEFAULT;
+ static char* vprecmpo_file = NULL;
// CA certificate file name parameter
- char const* cacert_file_name = CACERT_DEFAULT;
+ static char* cacert_file_name = NULL;
// Verbose flag parameter
- bool verbose = false;
+ static bool verbose = false;
+
+ // help flag parameter
+ static bool show_help = false;
// Buffers and computed values
// Signature buffer
- EpidSignature* sig = NULL;
+ void* sig = NULL;
size_t sig_size = 0;
// PrivRl buffer
@@ -154,90 +147,131 @@ int main(int argc, char* argv[]) {
size_t signed_pubkey_size = 0;
// Verifier pre-computed settings
- VerifierPrecomp verifier_precmp = {0};
+ void* verifier_precmp = NULL;
+ size_t verifier_precmp_size = 0;
+ size_t vprecmpi_file_size = 0;
// Flag that Verifier pre-computed settings input is valid
bool use_precmp_in;
- // Hash algorithm
- HashAlg hashalg;
-
// CA certificate
EpidCaCertificate cacert = {0};
+ // Hash algorithm
+ static HashAlg hashalg = UNPARSED_HASHALG;
+
+ dropt_option options[] = {
+ {'\0', "sig", "load signature from FILE (default: " SIG_DEFAULT ")",
+ "FILE", dropt_handle_string, &sig_file},
+ {'\0', "msg", "MESSAGE that was signed (default: empty)", "MESSAGE",
+ dropt_handle_string, &msg_str},
+ {'\0', "bsn", "BASENAME used in signature (default: random)", "BASENAME",
+ dropt_handle_string, &basename_str},
+ {'\0', "privrl", "load private key revocation list from FILE", "FILE",
+ dropt_handle_string, &privrl_file},
+ {'\0', "sigrl", "load signature based revocation list from FILE", "FILE",
+ dropt_handle_string, &sigrl_file},
+ {'\0', "grprl",
+ "load group revocation list from FILE\n (default: " GRPRL_DEFAULT ")",
+ "FILE", dropt_handle_string, &grprl_file},
+ {'\0', "verifierrl", "load verifier revocation list from FILE", "FILE",
+ dropt_handle_string, &verrl_file},
+ {'\0', "gpubkey",
+ "load group public key from FILE (default: " PUBKEYFILE_DEFAULT ")",
+ "FILE", dropt_handle_string, &pubkey_file},
+ {'\0', "vprecmpi", "load pre-computed verifier data from FILE", "FILE",
+ dropt_handle_string, &vprecmpi_file},
+ {'\0', "vprecmpo", "write pre-computed verifier data to FILE", "FILE",
+ dropt_handle_string, &vprecmpo_file},
+ {'\0', "capubkey",
+ "load IoT Issuing CA public key from FILE\n (default: " CACERT_DEFAULT
+ ")",
+ "FILE", dropt_handle_string, &cacert_file_name},
+ {'\0', "hashalg",
+ "use specified hash algorithm for 2.0 groups "
+ "(default: " HASHALG_DEFAULT ")",
+ "{SHA-256 | SHA-384 | SHA-512}", HandleHashalg, &hashalg},
+ {'h', "help", "display this help and exit", NULL, dropt_handle_bool,
+ &show_help, dropt_attr_halt},
+ {'v', "verbose", "print status messages to stdout", NULL,
+ dropt_handle_bool, &verbose},
+
+ {0} /* Required sentinel value. */
+ };
+
+ dropt_context* dropt_ctx = NULL;
// set program name for logging
set_prog_name(PROGRAM_NAME);
do {
+ EpidVersion epid_version = kNumEpidVersions;
// Read command line args
- if (argc < 1) {
- PrintUsage();
+ dropt_ctx = dropt_new_context(options);
+ if (!dropt_ctx) {
ret_value = EXIT_FAILURE;
break;
+ } else if (argc > 0) {
+ /* Parse the arguments from argv.
+ *
+ * argv[1] is always safe to access since argv[argc] is guaranteed
+ * to be NULL and since we've established that argc > 0.
+ */
+ char** rest = dropt_parse(dropt_ctx, -1, &argv[1]);
+ if (dropt_get_error(dropt_ctx) != dropt_error_none) {
+ log_error(dropt_get_error_message(dropt_ctx));
+ if (dropt_error_invalid_option == dropt_get_error(dropt_ctx)) {
+ fprintf(stderr, "Try '%s --help' for more information.\n",
+ PROGRAM_NAME);
+ }
+ ret_value = EXIT_FAILURE;
+ break;
+ } else if (show_help) {
+ log_fmt(
+ "Usage: %s [OPTION]...\n"
+ "Verify signature was created by group member in good standing\n"
+ "\n"
+ "Options:\n",
+ PROGRAM_NAME);
+ dropt_print_help(stdout, dropt_ctx, NULL);
+ ret_value = EXIT_SUCCESS;
+ break;
+ } else if (*rest) {
+ // we have unparsed (positional) arguments
+ log_error("invalid argument: %s", *rest);
+ fprintf(stderr, "Try '%s --help' for more information.\n",
+ PROGRAM_NAME);
+ ret_value = EXIT_FAILURE;
+ break;
+ } else {
+ if (verbose) {
+ verbose = ToggleVerbosity();
+ }
+ if (!sig_file) sig_file = SIG_DEFAULT;
+ if (!grprl_file) grprl_file = GRPRL_DEFAULT;
+ if (!pubkey_file) pubkey_file = PUBKEYFILE_DEFAULT;
+ if (!cacert_file_name) cacert_file_name = CACERT_DEFAULT;
+ if (msg_str) msg_size = strlen(msg_str);
+ if (basename_str) basename_size = strlen(basename_str);
+
+ if (verbose) {
+ log_msg("\nOption values:");
+ log_msg(" sig_file : %s", sig_file);
+ log_msg(" msg_str : %s", msg_str);
+ log_msg(" basename_str : %s", basename_str);
+ log_msg(" privrl_file : %s", privrl_file);
+ log_msg(" sigrl_file : %s", sigrl_file);
+ log_msg(" grprl_file : %s", grprl_file);
+ log_msg(" verrl_file : %s", verrl_file);
+ log_msg(" vprecmpi_file : %s", vprecmpi_file);
+ log_msg(" vprecmpo_file : %s", vprecmpo_file);
+ log_msg(" hashalg : %s", (UNPARSED_HASHALG == hashalg)
+ ? "(default)"
+ : HashAlgToString(hashalg));
+ log_msg(" cacert_file_name : %s", cacert_file_name);
+ log_msg("");
+ }
+ }
}
-
- if (CmdOptionExists(argc, argv, "--help") ||
- CmdOptionExists(argc, argv, "-h")) {
- PrintUsage();
- ret_value = EXIT_SUCCESS;
- break;
- }
-
- if (CmdOptionExists(argc, argv, "--verbose") ||
- CmdOptionExists(argc, argv, "-v")) {
- verbose = ToggleVerbosity();
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--sig"))) {
- sig_file = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--msg"))) {
- msg_str = opt_str;
- msg_size = strlen(msg_str);
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--bsn"))) {
- basename_str = opt_str;
- basename_size = strlen(basename_str);
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--privrl"))) {
- privrl_file = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--sigrl"))) {
- sigrl_file = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--grprl"))) {
- grprl_file = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--verifierrl"))) {
- verrl_file = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--gpubkey"))) {
- pubkey_file = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--vprecmpi"))) {
- vprecmpi_file = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--vprecmpo"))) {
- vprecmpo_file = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--hashalg"))) {
- hashalg_str = opt_str;
- }
-
- if (0 != (opt_str = GetCmdOption(argc, argv, "--capubkey"))) {
- cacert_file_name = opt_str;
- }
-
// convert command line args to usable formats
// Signature
@@ -302,40 +336,72 @@ int main(int argc, char* argv[]) {
break;
}
+ // Detect EPID version
+ result = EpidParseFileHeader(signed_pubkey, signed_pubkey_size,
+ &epid_version, NULL);
+ if (kEpidNoErr != result || kNumEpidVersions <= epid_version) {
+ log_error("EPID version can not be detected");
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // Configure hashalg based on group
+ if (kEpid1x == epid_version) {
+ if (!(kSha256 == hashalg || UNPARSED_HASHALG == hashalg)) {
+ log_error(
+ "unsupported hash algorithm: %s only supported for 2.0 groups",
+ HashAlgToString(hashalg));
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ } else {
+ if (UNPARSED_HASHALG == hashalg) {
+ hashalg = kSha512;
+ }
+ }
+
// Load Verifier pre-computed settings
+ if (kEpid1x == epid_version) {
+ verifier_precmp_size = sizeof(Epid11VerifierPrecomp);
+ } else if (kEpid2x == epid_version) {
+ verifier_precmp_size = sizeof(VerifierPrecomp);
+ } else {
+ log_error("EPID version %s is not supported",
+ EpidVersionToString(epid_version));
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ verifier_precmp = AllocBuffer(verifier_precmp_size);
use_precmp_in = false;
if (vprecmpi_file) {
- if (sizeof(verifier_precmp) != GetFileSize(vprecmpi_file)) {
- log_error("incorrect input precomp size");
+ vprecmpi_file_size = GetFileSize(vprecmpi_file);
+ if (verifier_precmp_size != vprecmpi_file_size) {
+ if (kEpid2x == epid_version &&
+ vprecmpi_file_size == verifier_precmp_size - sizeof(GroupId)) {
+ log_error(
+ "incorrect input precomp size: precomp format may have changed, "
+ "try regenerating it");
+ } else {
+ log_error("incorrect input precomp size");
+ }
ret_value = EXIT_FAILURE;
break;
}
use_precmp_in = true;
- if (0 !=
- ReadLoud(vprecmpi_file, &verifier_precmp, sizeof(verifier_precmp))) {
+ if (0 != ReadLoud(vprecmpi_file, verifier_precmp, verifier_precmp_size)) {
ret_value = EXIT_FAILURE;
break;
}
}
- // Hash algorithm
- if (!StringToHashAlg(hashalg_str, &hashalg)) {
- ret_value = EXIT_FAILURE;
- break;
- }
-
- if (hashalg != kSha256 && hashalg != kSha384 && hashalg != kSha512) {
- log_error("unsupported hash algorithm %s", HashAlgToString(hashalg));
- ret_value = EXIT_FAILURE;
- break;
- }
-
// Report Settings
if (verbose) {
log_msg("==============================================");
log_msg("Verifying Message:");
log_msg("");
+ log_msg(" [in] EPID version: %s", EpidVersionToString(epid_version));
+ log_msg("");
log_msg(" [in] Signature Len: %d", (int)sig_size);
log_msg(" [in] Signature: ");
PrintBuffer(sig, sig_size);
@@ -371,18 +437,32 @@ int main(int argc, char* argv[]) {
if (use_precmp_in) {
log_msg("");
log_msg(" [in] Verifier PreComp: ");
- PrintBuffer(&verifier_precmp, sizeof(verifier_precmp));
+ PrintBuffer(verifier_precmp, verifier_precmp_size);
}
log_msg("==============================================");
}
// Verify
- result = Verify(
- sig, sig_size, msg_str, msg_size, basename_str, basename_size,
- signed_priv_rl, signed_priv_rl_size, signed_sig_rl, signed_sig_rl_size,
- signed_grp_rl, signed_grp_rl_size, ver_rl, ver_rl_size, signed_pubkey,
- signed_pubkey_size, &cacert, hashalg, &verifier_precmp, use_precmp_in);
-
+ if (kEpid2x == epid_version) {
+ result =
+ Verify(sig, sig_size, msg_str, msg_size, basename_str, basename_size,
+ signed_priv_rl, signed_priv_rl_size, signed_sig_rl,
+ signed_sig_rl_size, signed_grp_rl, signed_grp_rl_size, ver_rl,
+ ver_rl_size, signed_pubkey, signed_pubkey_size, &cacert,
+ hashalg, (VerifierPrecomp*)verifier_precmp, use_precmp_in);
+ } else if (kEpid1x == epid_version) {
+ result = Verify11(sig, sig_size, msg_str, msg_size, basename_str,
+ basename_size, signed_priv_rl, signed_priv_rl_size,
+ signed_sig_rl, signed_sig_rl_size, signed_grp_rl,
+ signed_grp_rl_size, signed_pubkey, signed_pubkey_size,
+ &cacert, (Epid11VerifierPrecomp*)verifier_precmp,
+ use_precmp_in);
+ } else {
+ log_error("EPID version %s is not supported",
+ EpidVersionToString(epid_version));
+ ret_value = EXIT_FAILURE;
+ break;
+ }
// Report Result
if (kEpidNoErr == result) {
log_msg("signature verified successfully");
@@ -396,7 +476,7 @@ int main(int argc, char* argv[]) {
// Store Verifier pre-computed settings
if (vprecmpo_file) {
if (0 !=
- WriteLoud(&verifier_precmp, sizeof(verifier_precmp), vprecmpo_file)) {
+ WriteLoud(verifier_precmp, verifier_precmp_size, vprecmpo_file)) {
ret_value = EXIT_FAILURE;
break;
}
@@ -413,6 +493,9 @@ int main(int argc, char* argv[]) {
if (signed_grp_rl) free(signed_grp_rl);
if (ver_rl) free(ver_rl);
if (signed_pubkey) free(signed_pubkey);
+ if (verifier_precmp) free(verifier_precmp);
+
+ dropt_free_context(dropt_ctx);
return ret_value;
}
diff --git a/example/verifysig/src/verifysig.c b/example/verifysig/src/verifysig.c
index a49b720..722231d 100644
--- a/example/verifysig/src/verifysig.c
+++ b/example/verifysig/src/verifysig.c
@@ -25,6 +25,8 @@
#include "util/buffutil.h"
#include "util/envutil.h"
+#include "epid/verifier/api.h"
+#include "epid/common/file_parser.h"
bool IsCaCertAuthorizedByRootCa(void const* data, size_t size) {
// Implementation of this function is out of scope of the sample.
@@ -35,16 +37,6 @@ bool IsCaCertAuthorizedByRootCa(void const* data, size_t size) {
return true;
}
-/// Authenticate and allocate revocation list
-/*! Utility function to authenticate revocation list and allocate a
- buffer to contain the parsed result
- \note caller is responsible for freeing free the memory allocated
- */
-EpidStatus AuthenticateAndAllocateRl(void const* buf, size_t len,
- EpidCaCertificate const* cert,
- EpidFileType file_type, const char* name,
- void** new_rl, size_t* rl_len);
-
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,
@@ -53,16 +45,13 @@ EpidStatus Verify(EpidSignature const* sig, size_t sig_len, void const* msg,
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* precomp, bool is_precomp_init) {
+ VerifierPrecomp* verifier_precomp,
+ bool verifier_precomp_is_input) {
EpidStatus result = kEpidErr;
VerifierCtx* ctx = NULL;
-
PrivRl* priv_rl = NULL;
- size_t priv_rl_size = 0;
SigRl* sig_rl = NULL;
- size_t sig_rl_size = 0;
GroupRl* grp_rl = NULL;
- size_t grp_rl_size = 0;
do {
GroupPubKey pub_key = {0};
@@ -73,24 +62,17 @@ EpidStatus Verify(EpidSignature const* sig, size_t sig_len, void const* msg,
break;
}
- if (is_precomp_init && precomp) {
- // create verifier
- result = EpidVerifierCreate(&pub_key, precomp, &ctx);
- if (kEpidNoErr != result) {
- break;
- }
- } else {
- // create verifier
- result = EpidVerifierCreate(&pub_key, NULL, &ctx);
- if (kEpidNoErr != result) {
- break;
- }
+ // create verifier
+ result = EpidVerifierCreate(
+ &pub_key, verifier_precomp_is_input ? verifier_precomp : NULL, &ctx);
+ if (kEpidNoErr != result) {
+ break;
+ }
- // initialize pre-computation blob
- result = EpidVerifierWritePrecomp(ctx, precomp);
- if (kEpidNoErr != result) {
- break;
- }
+ // serialize verifier pre-computation blob
+ result = EpidVerifierWritePrecomp(ctx, verifier_precomp);
+ if (kEpidNoErr != result) {
+ break;
}
// set hash algorithm used for signing
@@ -99,47 +81,109 @@ EpidStatus Verify(EpidSignature const* sig, size_t sig_len, void const* msg,
break;
}
+ // set the basename used for signing
+ result = EpidVerifierSetBasename(ctx, basename, basename_len);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
if (signed_priv_rl) {
- result = AuthenticateAndAllocateRl(signed_priv_rl, signed_priv_rl_size,
- cacert, kPrivRlFile, "PrivRl",
- (void**)&priv_rl, &priv_rl_size);
+ // 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)
if (signed_sig_rl) {
- result = AuthenticateAndAllocateRl(signed_sig_rl, signed_sig_rl_size,
- cacert, kSigRlFile, "SigRl",
- (void**)&sig_rl, &sig_rl_size);
+ // 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)
if (signed_grp_rl) {
- result = AuthenticateAndAllocateRl(signed_grp_rl, signed_grp_rl_size,
- cacert, kGroupRlFile, "GroupRl",
- (void**)&grp_rl, &grp_rl_size);
+ // 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 based revocation list
+ // set group revocation list
result = EpidVerifierSetGroupRl(ctx, grp_rl, grp_rl_size);
if (kEpidNoErr != result) {
break;
}
- }
+ } // if (signed_grp_rl)
if (ver_rl) {
// set verifier based revocation list
@@ -150,8 +194,7 @@ EpidStatus Verify(EpidSignature const* sig, size_t sig_len, void const* msg,
}
// verify signature
- result =
- EpidVerify(ctx, sig, sig_len, msg, msg_len, basename, basename_len);
+ result = EpidVerify(ctx, sig, sig_len, msg, msg_len);
if (kEpidNoErr != result) {
break;
}
@@ -166,68 +209,3 @@ EpidStatus Verify(EpidSignature const* sig, size_t sig_len, void const* msg,
return result;
}
-
-EpidStatus AuthenticateAndAllocateRl(void const* buf, size_t len,
- EpidCaCertificate const* cert,
- EpidFileType file_type, const char* name,
- void** new_rl, size_t* rl_len) {
- typedef EpidStatus (*ParseFuncType)(void const* buf, size_t len,
- EpidCaCertificate const* cert,
- unsigned char* rl, size_t* rl_len);
- EpidStatus result = kEpidErr;
- void* parsed_rl = NULL;
- ParseFuncType ParseFunc = NULL;
-
- if (!buf || !cert || !new_rl || !rl_len || !name) {
- return kEpidBadArgErr;
- }
-
- switch (file_type) {
- case kPrivRlFile:
- ParseFunc = (ParseFuncType)&EpidParsePrivRlFile;
- break;
- case kSigRlFile:
- ParseFunc = (ParseFuncType)&EpidParseSigRlFile;
- break;
- case kGroupRlFile:
- ParseFunc = (ParseFuncType)&EpidParseGroupRlFile;
- break;
- default:
- return kEpidBadArgErr;
- }
-
- do {
- size_t parsed_len = 0;
-
- // authenticate and determine space needed for RL
- result = ParseFunc(buf, len, cert, NULL, &parsed_len);
- if (kEpidSigInvalid == result) {
- // authentication failure
- break;
- }
- if (kEpidNoErr != result) {
- break;
- }
- parsed_rl = AllocBuffer(parsed_len);
- if (!parsed_rl) {
- result = kEpidMemAllocErr;
- break;
- }
-
- // fill the rl
- result = ParseFunc(buf, len, cert, parsed_rl, &parsed_len);
-
- if (kEpidNoErr != result) {
- break;
- }
-
- *rl_len = parsed_len;
- *new_rl = parsed_rl;
- } while (0);
-
- if (kEpidNoErr != result) {
- if (parsed_rl) free(parsed_rl);
- }
-
- return result;
-}
diff --git a/example/verifysig/src/verifysig.h b/example/verifysig/src/verifysig.h
index 8bbc4c4..f566e86 100644
--- a/example/verifysig/src/verifysig.h
+++ b/example/verifysig/src/verifysig.h
@@ -27,7 +27,7 @@
/// Check if opaque data blob containing CA certificate is authorized
bool IsCaCertAuthorizedByRootCa(void const* data, size_t size);
-/// verify signature
+/// verify EPID 2.x signature
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,
@@ -36,6 +36,7 @@ EpidStatus Verify(EpidSignature const* sig, size_t sig_len, void const* msg,
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* precomp, bool is_precomp_init);
+ VerifierPrecomp* verifier_precomp,
+ bool verifier_precomp_is_input);
#endif // EXAMPLE_VERIFYSIG_SRC_VERIFYSIG_H_
diff --git a/example/verifysig/src/verifysig11.c b/example/verifysig/src/verifysig11.c
new file mode 100644
index 0000000..bf44000
--- /dev/null
+++ b/example/verifysig/src/verifysig11.c
@@ -0,0 +1,187 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief EPID 1.1 signature verification implementation.
+ */
+
+#include "src/verifysig11.h"
+
+#include <stdlib.h>
+
+#include "util/buffutil.h"
+#include "util/envutil.h"
+#include "epid/verifier/1.1/api.h"
+#include "epid/common/1.1/file_parser.h"
+
+EpidStatus Verify11(Epid11Signature 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,
+ void const* signed_pub_key, size_t signed_pub_key_size,
+ EpidCaCertificate const* cacert,
+ Epid11VerifierPrecomp* verifier_precomp,
+ bool verifier_precomp_is_input) {
+ EpidStatus result = kEpidErr;
+ Epid11VerifierCtx* ctx = NULL;
+ Epid11PrivRl* priv_rl = NULL;
+ Epid11SigRl* sig_rl = NULL;
+ Epid11GroupRl* grp_rl = NULL;
+
+ do {
+ Epid11GroupPubKey pub_key = {0};
+ // authenticate and extract group public key
+ result = Epid11ParseGroupPubKeyFile(signed_pub_key, signed_pub_key_size,
+ cacert, &pub_key);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ // create verifier
+ result = Epid11VerifierCreate(
+ &pub_key, verifier_precomp_is_input ? verifier_precomp : NULL, &ctx);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ // serialize verifier pre-computation blob
+ result = Epid11VerifierWritePrecomp(ctx, verifier_precomp);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ // set the basename used for signing
+ result = Epid11VerifierSetBasename(ctx, basename, basename_len);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ if (signed_priv_rl) {
+ // authenticate and determine space needed for RL
+ size_t priv_rl_size = 0;
+ result = Epid11ParsePrivRlFile(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 = Epid11ParsePrivRlFile(signed_priv_rl, signed_priv_rl_size,
+ cacert, priv_rl, &priv_rl_size);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ // set private key based revocation list
+ result = Epid11VerifierSetPrivRl(ctx, priv_rl, priv_rl_size);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ } // if (signed_priv_rl)
+
+ if (signed_sig_rl) {
+ // authenticate and determine space needed for RL
+ size_t sig_rl_size = 0;
+ result = Epid11ParseSigRlFile(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 = Epid11ParseSigRlFile(signed_sig_rl, signed_sig_rl_size, cacert,
+ sig_rl, &sig_rl_size);
+ if (kEpidNoErr != result) {
+ break;
+ }
+
+ // set signature based revocation list
+ result = Epid11VerifierSetSigRl(ctx, sig_rl, sig_rl_size);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ } // if (signed_sig_rl)
+
+ if (signed_grp_rl) {
+ // authenticate and determine space needed for RL
+ size_t grp_rl_size = 0;
+ result = Epid11ParseGroupRlFile(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 = Epid11ParseGroupRlFile(signed_grp_rl, signed_grp_rl_size, cacert,
+ grp_rl, &grp_rl_size);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ // set group revocation list
+ result = Epid11VerifierSetGroupRl(ctx, grp_rl, grp_rl_size);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ } // if (signed_grp_rl)
+
+ // verify signature
+ result = Epid11Verify(ctx, sig, sig_len, msg, msg_len);
+ if (kEpidNoErr != result) {
+ break;
+ }
+ } while (0);
+
+ // delete verifier
+ Epid11VerifierDelete(&ctx);
+
+ if (priv_rl) free(priv_rl);
+ if (sig_rl) free(sig_rl);
+ if (grp_rl) free(grp_rl);
+
+ return result;
+}
diff --git a/example/verifysig/src/verifysig11.h b/example/verifysig/src/verifysig11.h
new file mode 100644
index 0000000..a346388
--- /dev/null
+++ b/example/verifysig/src/verifysig11.h
@@ -0,0 +1,38 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ * \brief EPID 1.1 signature verification interface.
+ */
+#ifndef EXAMPLE_VERIFYSIG_SRC_VERIFYSIG11_H_
+#define EXAMPLE_VERIFYSIG_SRC_VERIFYSIG11_H_
+
+#include "epid/verifier/1.1/api.h"
+#include "epid/common/1.1/file_parser.h"
+
+/// verify EPID 1.x signature
+EpidStatus Verify11(Epid11Signature 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,
+ void const* signed_pub_key, size_t signed_pub_key_size,
+ EpidCaCertificate const* cacert,
+ Epid11VerifierPrecomp* verifier_precomp,
+ bool verifier_precomp_is_input);
+
+#endif // EXAMPLE_VERIFYSIG_SRC_VERIFYSIG11_H_
diff --git a/example/verifysig/verifysig.parts b/example/verifysig/verifysig.parts
index 84f17c6..68b62df 100644
--- a/example/verifysig/verifysig.parts
+++ b/example/verifysig/verifysig.parts
@@ -35,11 +35,12 @@ if 'install_package' in env['MODE']:
else:
env.DependsOn([
Component('verifier'),
- Component('util')
+ Component('util'),
+ Component('dropt')
])
env.Append(CPPPATH='#/example/verifysig')
-
+
if env['TARGET_PLATFORM']['OS'] == 'win32':
if env.isConfigBasedOn('debug'):
env['PDB'] = '${PART_NAME}.pdb'
diff --git a/ext/dropt/LICENSE b/ext/dropt/LICENSE
new file mode 100644
index 0000000..aa487e1
--- /dev/null
+++ b/ext/dropt/LICENSE
@@ -0,0 +1,22 @@
+dropt
+Copyright (c) 2006-2012 James D. Lin <jameslin@cal.berkeley.edu>
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source distribution.
+
+<http://www.opensource.org/licenses/zlib-license.php>
diff --git a/ext/dropt/Makefile b/ext/dropt/Makefile
new file mode 100644
index 0000000..2ec4a37
--- /dev/null
+++ b/ext/dropt/Makefile
@@ -0,0 +1,23 @@
+#!/usr/bin/make -f
+
+DROPT_INCLUDE_DIR = ./include
+DROPT_SRC = $(wildcard ./src/*.c)
+DROPT_OBJ = $(DROPT_SRC:.c=.o)
+
+DROPT_LIB = ./src/libdropt.a
+
+$(DROPT_OBJ): %.o: %.c
+ $(CC) -o $@ -c $(CFLAGS) -I$(DROPT_INCLUDE_DIR) $<
+
+$(DROPT_LIB): $(DROPT_OBJ)
+ $(AR) rc $@ $^
+ ranlib $@
+
+build: all
+
+all: $(DROPT_LIB)
+
+install:
+
+clean:
+ rm -f $(DROPT_OBJ) $(DROPT_LIB)
diff --git a/ext/dropt/dropt.parts b/ext/dropt/dropt.parts
new file mode 100644
index 0000000..e2d9b85
--- /dev/null
+++ b/ext/dropt/dropt.parts
@@ -0,0 +1,53 @@
+############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################
+Import('*')
+
+env.PartVersion("1.1.1")
+env.PartName("dropt")
+
+# sourcefiles
+src_files = Pattern(src_dir='src/',
+ includes=['*.c'],
+ excludes=['test_*'],
+ recursive=True).files()
+
+#includes to install
+install_headers = Pattern(src_dir='include/',
+ includes=['dropt.h'],
+ recursive=True).files()
+
+internal_headers = Pattern(src_dir='include/',
+ includes=['dropt_string.h'],
+ recursive=True).files()
+
+parts_file = ['dropt.parts']
+license_file = ['LICENSE']
+makefile = ['Makefile']
+
+if 'install_package' in env['MODE']:
+ env.InstallTopLevel(src_files, sub_dir='ext/dropt/src')
+ env.InstallTopLevel(install_headers + internal_headers,
+ sub_dir='ext/dropt/include')
+ env.InstallTopLevel(parts_file, sub_dir='ext/dropt')
+ env.InstallTopLevel(license_file, sub_dir='ext/dropt')
+ env.InstallTopLevel(makefile, sub_dir='ext/dropt')
+else:
+ env.Append(CPPPATH=[AbsDir('include')])
+
+ outputs = env.Library('${PART_NAME}', src_files)
+ sdk_outs = env.Sdk(outputs)
+
+ env.SdkInclude(install_headers)
diff --git a/ext/dropt/include/dropt.h b/ext/dropt/include/dropt.h
new file mode 100644
index 0000000..2cd66b1
--- /dev/null
+++ b/ext/dropt/include/dropt.h
@@ -0,0 +1,249 @@
+/** dropt.h
+ *
+ * A deliberately rudimentary command-line option parser.
+ *
+ * Version 1.1.1
+ *
+ * Copyright (c) 2006-2012 James D. Lin <jameslin@cal.berkeley.edu>
+ *
+ * The latest version of this file can be downloaded from:
+ * <http://www.taenarum.com/software/dropt/>
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ *
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ *
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+#ifndef DROPT_H
+#define DROPT_H
+
+#include <stdio.h>
+#include <wchar.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifndef DROPT_USE_WCHAR
+#if defined _UNICODE && (defined _MSC_VER || defined DROPT_NO_STRING_BUFFERS)
+#define DROPT_USE_WCHAR 1
+#endif
+#endif
+
+#ifdef DROPT_USE_WCHAR
+ /* This may be used for both char and string literals. */
+ #define DROPT_TEXT_LITERAL(s) L ## s
+
+ typedef wchar_t dropt_char;
+#else
+ #define DROPT_TEXT_LITERAL(s) s
+
+ typedef char dropt_char;
+#endif
+
+
+enum
+{
+ /* Errors in the range [0x00, 0x7F] are reserved for dropt. */
+ dropt_error_none,
+ dropt_error_unknown,
+ dropt_error_bad_configuration,
+ dropt_error_insufficient_memory,
+ dropt_error_invalid_option,
+ dropt_error_insufficient_arguments,
+ dropt_error_mismatch,
+ dropt_error_overflow,
+ dropt_error_underflow,
+
+ /* Errors in the range [0x80, 0xFFFF] are free for clients to use. */
+ dropt_error_custom_start = 0x80,
+ dropt_error_custom_last = 0xFFFF
+};
+typedef unsigned int dropt_error;
+
+typedef unsigned char dropt_bool;
+
+/* Opaque. */
+typedef struct dropt_context dropt_context;
+
+
+/** dropt_option_handler_func callbacks are responsible for parsing
+ * individual options.
+ *
+ * dropt_option_handler_decl may be used for declaring the callback
+ * functions; dropt_option_handler_func is the actual function pointer
+ * type.
+ *
+ * optionArgument will be NULL if no argument is specified for an option.
+ * It will be the empty string if the user explicitly passed an empty
+ * string as the argument (e.g. --option="").
+ *
+ * An option that doesn't expect an argument still can receive a non-NULL
+ * value for optionArgument if the user explicitly specified one (e.g.
+ * --option=arg).
+ *
+ * If the option's argument is optional, the handler might be called
+ * twice: once with a candidate argument, and if that argument is rejected
+ * by the handler, again with no argument. Handlers should be aware of
+ * this if they have side-effects.
+ *
+ * handlerData is the client-specified value specified in the dropt_option
+ * table.
+ */
+typedef dropt_error dropt_option_handler_decl(dropt_context* context,
+ const dropt_char* optionArgument,
+ void* handlerData);
+typedef dropt_option_handler_decl* dropt_option_handler_func;
+
+/** dropt_error_handler_func callbacks are responsible for generating error
+ * messages. The returned string must be allocated on the heap and must
+ * be freeable with free().
+ */
+typedef dropt_char* (*dropt_error_handler_func)(dropt_error error,
+ const dropt_char* optionName,
+ const dropt_char* optionArgument,
+ void* handlerData);
+
+/** dropt_strncmp_func callbacks allow callers to provide their own (possibly
+ * case-insensitive) string comparison function.
+ */
+typedef int (*dropt_strncmp_func)(const dropt_char* s, const dropt_char* t, size_t n);
+
+
+/** Properties defining each option:
+ *
+ * short_name:
+ * The option's short name (e.g. the 'h' in -h).
+ * Use '\0' if the option has no short name.
+ *
+ * long_name:
+ * The option's long name (e.g. "help" in --help).
+ * Use NULL if the option has no long name.
+ *
+ * description:
+ * The description shown when generating help.
+ * May be NULL for undocumented options.
+ *
+ * arg_description:
+ * The description for the option's argument (e.g. --option=argument
+ * or --option argument), printed when generating help. If NULL, the
+ * option does not take an argument.
+ *
+ * handler:
+ * The handler callback and data invoked in response to encountering
+ * the option.
+ *
+ * handler_data:
+ * Callback data for the handler. For typical handlers, this is
+ * usually the address of a variable for the handler to modify.
+ *
+ * attr:
+ * Miscellaneous attributes. See below.
+ */
+typedef struct dropt_option
+{
+ dropt_char short_name;
+ const dropt_char* long_name;
+ const dropt_char* description;
+ const dropt_char* arg_description;
+ dropt_option_handler_func handler;
+ void* handler_data;
+ unsigned int attr;
+} dropt_option;
+
+
+/** Bitwise flags for option attributes:
+ *
+ * dropt_attr_halt:
+ * Stop processing when this option is encountered.
+ *
+ * dropt_attr_hidden:
+ * Don't list the option when generating help. Use this for
+ * undocumented options.
+ *
+ * dropt_attr_optional_val:
+ * The option's argument is optional. If an option has this
+ * attribute, the handler callback may be invoked twice (once with a
+ * potential argument, and if that fails, again with a NULL argument).
+ */
+enum
+{
+ dropt_attr_halt = (1 << 0),
+ dropt_attr_hidden = (1 << 1),
+ dropt_attr_optional_val = (1 << 2)
+};
+
+
+typedef struct dropt_help_params
+{
+ unsigned int indent;
+ unsigned int description_start_column;
+ dropt_bool blank_lines_between_options;
+} dropt_help_params;
+
+
+dropt_context* dropt_new_context(const dropt_option* options);
+void dropt_free_context(dropt_context* context);
+
+const dropt_option* dropt_get_options(const dropt_context* context);
+
+void dropt_set_error_handler(dropt_context* context,
+ dropt_error_handler_func handler, void* handlerData);
+void dropt_set_strncmp(dropt_context* context, dropt_strncmp_func cmp);
+
+/* Use this only for backward compatibility purposes. */
+void dropt_allow_concatenated_arguments(dropt_context* context, dropt_bool allow);
+
+dropt_char** dropt_parse(dropt_context* context, int argc, dropt_char** argv);
+
+dropt_error dropt_get_error(const dropt_context* context);
+void dropt_get_error_details(const dropt_context* context,
+ dropt_char** optionName,
+ dropt_char** optionArgument);
+const dropt_char* dropt_get_error_message(dropt_context* context);
+void dropt_clear_error(dropt_context* context);
+
+#ifndef DROPT_NO_STRING_BUFFERS
+dropt_char* dropt_default_error_handler(dropt_error error,
+ const dropt_char* optionName,
+ const dropt_char* optionArgument);
+
+void dropt_init_help_params(dropt_help_params* helpParams);
+dropt_char* dropt_get_help(const dropt_context* context,
+ const dropt_help_params* helpParams);
+void dropt_print_help(FILE* f, const dropt_context* context,
+ const dropt_help_params* helpParams);
+#endif
+
+
+/* Stock option handlers for common types. */
+dropt_option_handler_decl dropt_handle_bool;
+dropt_option_handler_decl dropt_handle_verbose_bool;
+dropt_option_handler_decl dropt_handle_int;
+dropt_option_handler_decl dropt_handle_uint;
+dropt_option_handler_decl dropt_handle_double;
+dropt_option_handler_decl dropt_handle_string;
+
+#define DROPT_MISUSE(message) dropt_misuse(message, __FILE__, __LINE__)
+void dropt_misuse(const char* message, const char* filename, int line);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* DROPT_H */
diff --git a/ext/dropt/include/dropt_string.h b/ext/dropt/include/dropt_string.h
new file mode 100644
index 0000000..e890c5a
--- /dev/null
+++ b/ext/dropt/include/dropt_string.h
@@ -0,0 +1,94 @@
+/** dropt_string.h
+ *
+ * String routines for dropt.
+ *
+ * Copyright (c) 2006-2010 James D. Lin <jameslin@cal.berkeley.edu>
+ *
+ * The latest version of this file can be downloaded from:
+ * <http://www.taenarum.com/software/dropt/>
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ *
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ *
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+#ifndef DROPT_STRING_H
+#define DROPT_STRING_H
+
+#include <stdarg.h>
+#include "dropt.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef DROPT_USE_WCHAR
+ #define dropt_strlen wcslen
+ #define dropt_strcmp wcscmp
+ #define dropt_strncmp wcsncmp
+ #define dropt_strchr wcschr
+ #define dropt_strtol wcstol
+ #define dropt_strtoul wcstoul
+ #define dropt_strtod wcstod
+ #define dropt_tolower towlower
+ #define dropt_fputs fputws
+#else
+ #define dropt_strlen strlen
+ #define dropt_strcmp strcmp
+ #define dropt_strncmp strncmp
+ #define dropt_strchr strchr
+ #define dropt_strtol strtol
+ #define dropt_strtoul strtoul
+ #define dropt_strtod strtod
+ #define dropt_tolower tolower
+ #define dropt_fputs fputs
+#endif
+
+void* dropt_safe_malloc(size_t numElements, size_t elementSize);
+void* dropt_safe_realloc(void* p, size_t numElements, size_t elementSize);
+
+dropt_char* dropt_strdup(const dropt_char* s);
+dropt_char* dropt_strndup(const dropt_char* s, size_t n);
+int dropt_stricmp(const dropt_char* s, const dropt_char* t);
+int dropt_strnicmp(const dropt_char* s, const dropt_char* t, size_t n);
+
+
+#ifndef DROPT_NO_STRING_BUFFERS
+typedef struct dropt_stringstream dropt_stringstream;
+
+int dropt_vsnprintf(dropt_char* s, size_t n, const dropt_char* format, va_list args);
+int dropt_snprintf(dropt_char* s, size_t n, const dropt_char* format, ...);
+
+dropt_char* dropt_vasprintf(const dropt_char* format, va_list args);
+dropt_char* dropt_asprintf(const dropt_char* format, ...);
+
+dropt_stringstream* dropt_ssopen(void);
+void dropt_ssclose(dropt_stringstream* ss);
+
+void dropt_ssclear(dropt_stringstream* ss);
+dropt_char* dropt_ssfinalize(dropt_stringstream* ss);
+const dropt_char* dropt_ssgetstring(const dropt_stringstream* ss);
+
+int dropt_vssprintf(dropt_stringstream* ss, const dropt_char* format, va_list args);
+int dropt_ssprintf(dropt_stringstream* ss, const dropt_char* format, ...);
+#endif /* DROPT_NO_STRING_BUFFERS */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* DROPT_STRING_H */
diff --git a/ext/dropt/src/dropt.c b/ext/dropt/src/dropt.c
new file mode 100644
index 0000000..917e8fd
--- /dev/null
+++ b/ext/dropt/src/dropt.c
@@ -0,0 +1,1562 @@
+/** dropt.c
+ *
+ * A deliberately rudimentary command-line option parser.
+ *
+ * Copyright (c) 2006-2012 James D. Lin <jameslin@cal.berkeley.edu>
+ *
+ * The latest version of this file can be downloaded from:
+ * <http://www.taenarum.com/software/dropt/>
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ *
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ *
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+// THIS FILE HAS BEEN ALTERED from original version to:
+// * fix warnings
+// * modify error messages
+// * resolve bool type conflict
+// * fix issues found by static code analisys:
+// * possible leak in dropt_get_help
+// * null pointer dereference in dropt_parse
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <wctype.h>
+#include <assert.h>
+
+#include "dropt.h"
+#include "dropt_string.h"
+
+#if __STDC_VERSION__ >= 199901L
+ #include <stdint.h>
+ #include <stdbool.h>
+#else
+ /* Compatibility junk for things that don't yet support ISO C99. */
+ #ifndef SIZE_MAX
+ #define SIZE_MAX ((size_t) -1)
+ #endif
+
+ #ifndef __cplusplus
+ #ifndef _Bool
+ /// C99 standard name for bool
+ #define _Bool char
+ /// Boolean type
+ typedef char bool;
+ /// integer constant 1
+ #define true 1
+ /// integer constant 0
+ #define false 0
+ #endif
+ #endif // ifndef __cplusplus
+#endif
+#ifndef MIN
+#define MIN(x, y) (((x) < (y)) ? (x) : (y))
+#endif
+
+#ifndef ARRAY_LENGTH
+#define ARRAY_LENGTH(array) (sizeof (array) / sizeof (array)[0])
+#endif
+
+#define IMPLIES(p, q) (!(p) || q)
+
+#define OPTION_TAKES_ARG(option) ((option)->arg_description != NULL)
+
+enum
+{
+ default_help_indent = 2,
+ default_description_start_column = 6,
+};
+
+
+/** A string that might not be NUL-terminated. */
+typedef struct
+{
+ const dropt_char* s;
+
+ /* The length of s, excluding any NUL terminator. */
+ size_t len;
+} char_array;
+
+
+/** A proxy for a dropt_option used for qsort and bsearch. Instead of
+ * sorting the dropt_option table directly, we sort arrays of option_proxy
+ * structures. This allows us to have separate arrays sorted by different
+ * keys and allows passing along additional data.
+ */
+typedef struct
+{
+ const dropt_option* option;
+
+ /* The qsort and bsearch comparison callbacks don't pass along any
+ * client-supplied contextual data, so we have to embed it alongside
+ * the regular data.
+ */
+ const dropt_context* context;
+} option_proxy;
+
+
+struct dropt_context
+{
+ const dropt_option* options;
+ size_t numOptions;
+
+ /* These may be NULL. */
+ option_proxy* sortedByLong;
+ option_proxy* sortedByShort;
+
+ bool allowConcatenatedArgs;
+
+ dropt_error_handler_func errorHandler;
+ void* errorHandlerData;
+
+ struct
+ {
+ dropt_error err;
+ dropt_char* optionName;
+ dropt_char* optionArgument;
+ dropt_char* message;
+ } errorDetails;
+
+ /* This isn't named strncmp because platforms might provide a macro
+ * version of strncmp, and we want to avoid a potential naming
+ * conflict.
+ */
+ dropt_strncmp_func ncmpstr;
+};
+
+
+typedef struct
+{
+ const dropt_option* option;
+ const dropt_char* optionArgument;
+ dropt_char** argNext;
+ int argsLeft;
+} parse_state;
+
+
+/** make_char_array
+ *
+ * PARAMETERS:
+ * IN s : A string. Might not be NUL-terminated.
+ * May be NULL.
+ * len : The length of s, excluding any NUL terminator.
+ *
+ * RETURNS:
+ * The constructed char_array structure.
+ */
+static char_array
+make_char_array(const dropt_char* s, size_t len)
+{
+ char_array a;
+
+ assert(IMPLIES(s == NULL, len == 0));
+
+ a.s = s;
+ a.len = len;
+ return a;
+}
+
+
+/** cmp_key_option_proxy_long
+ *
+ * Comparison callback for bsearch. Compares a char_array structure
+ * against an option_proxy structure based on long option names.
+ *
+ * PARAMETERS:
+ * IN key : A pointer to the char_array structure to search for.
+ * IN item : A pointer to the option_proxy structure being searched
+ * against.
+ *
+ * RETURNS:
+ * 0 if key and item are equivalent,
+ * < 0 if key should precede item,
+ * > 0 if key should follow item.
+ */
+static int
+cmp_key_option_proxy_long(const void* key, const void* item)
+{
+ const char_array* longName = key;
+ const option_proxy* op = item;
+
+ size_t optionLen;
+ int ret;
+
+ assert(longName != NULL);
+ assert(op != NULL);
+ assert(op->option != NULL);
+ assert(op->context != NULL);
+ assert(op->context->ncmpstr != NULL);
+
+ if (longName->s == op->option->long_name)
+ {
+ return 0;
+ }
+ else if (longName->s == NULL)
+ {
+ return -1;
+ }
+ else if (op->option->long_name == NULL)
+ {
+ return +1;
+ }
+
+ /* Although the longName key might not be NUL-terminated, the
+ * option_proxy item we're searching against must be.
+ */
+ optionLen = dropt_strlen(op->option->long_name);
+ ret = op->context->ncmpstr(longName->s,
+ op->option->long_name,
+ MIN(longName->len, optionLen));
+ if (ret != 0)
+ {
+ return ret;
+ }
+
+ if (longName->len < optionLen)
+ {
+ return -1;
+ }
+ else if (longName->len > optionLen)
+ {
+ return +1;
+ }
+
+ return 0;
+}
+
+
+/** cmp_option_proxies_long
+ *
+ * Comparison callback for qsort. Compares two option_proxy
+ * structures based on long option names.
+ *
+ * PARAMETERS:
+ * IN p1, p2 : Pointers to the option_proxy structures to compare.
+ *
+ * RETURNS:
+ * 0 if p1 and p2 are equivalent,
+ * < 0 if p1 should precede p2,
+ * > 0 if p1 should follow p2.
+ */
+static int
+cmp_option_proxies_long(const void* p1, const void* p2)
+{
+ const option_proxy* o1 = p1;
+ const option_proxy* o2 = p2;
+
+ char_array ca1;
+
+ assert(o1 != NULL);
+ assert(o2 != NULL);
+ assert(o1->option != NULL);
+ assert(o1->context == o2->context);
+
+ ca1 = make_char_array(o1->option->long_name,
+ (o1->option->long_name == NULL)
+ ? 0
+ : dropt_strlen(o1->option->long_name));
+ return cmp_key_option_proxy_long(&ca1, o2);
+}
+
+
+/** cmp_key_option_proxy_short
+ *
+ * Comparison callback for bsearch. Compares a dropt_char against an
+ * option_proxy structure based on short option names.
+ *
+ * PARAMETERS:
+ * IN key : A pointer to the dropt_char to search for.
+ * IN item : A pointer to the option_proxy structure being searched
+ * against.
+ *
+ * RETURNS:
+ * 0 if key and item are equivalent,
+ * < 0 if key should precede item,
+ * > 0 if key should follow item.
+ */
+static int
+cmp_key_option_proxy_short(const void* key, const void* item)
+{
+ const dropt_char* shortName = key;
+ const option_proxy* op = item;
+
+ assert(shortName != NULL);
+ assert(op != NULL);
+ assert(op->option != NULL);
+ assert(op->context != NULL);
+ assert(op->context->ncmpstr != NULL);
+
+ return op->context->ncmpstr(shortName,
+ &op->option->short_name,
+ 1);
+}
+
+
+/** cmp_option_proxies_short
+ *
+ * Comparison callback for qsort. Compares two option_proxy
+ * structures based on short option names.
+ *
+ * PARAMETERS:
+ * IN p1, p2 : Pointers to the option_proxy structures to compare.
+ *
+ * RETURNS:
+ * 0 if p1 and p2 are equivalent,
+ * < 0 if p1 should precede p2,
+ * > 0 if p1 should follow p2.
+ */
+static int
+cmp_option_proxies_short(const void* p1, const void* p2)
+{
+ const option_proxy* o1 = p1;
+ const option_proxy* o2 = p2;
+
+ assert(o1 != NULL);
+ assert(o2 != NULL);
+ assert(o1->option != NULL);
+ assert(o1->context == o2->context);
+
+ return cmp_key_option_proxy_short(&o1->option->short_name, o2);
+}
+
+
+/** init_lookup_tables
+ *
+ * Initializes the sorted lookup tables in a dropt context if not
+ * already initialized.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The dropt context.
+ * Must not be NULL.
+ */
+static void
+init_lookup_tables(dropt_context* context)
+{
+ const dropt_option* options;
+ size_t n;
+
+ assert(context != NULL);
+
+ options = context->options;
+ n = context->numOptions;
+
+ if (context->sortedByLong == NULL)
+ {
+ context->sortedByLong = dropt_safe_malloc(n, sizeof *(context->sortedByLong));
+ if (context->sortedByLong != NULL)
+ {
+ size_t i;
+ for (i = 0; i < n; i++)
+ {
+ context->sortedByLong[i].option = &options[i];
+ context->sortedByLong[i].context = context;
+ }
+
+ qsort(context->sortedByLong,
+ n, sizeof *(context->sortedByLong),
+ cmp_option_proxies_long);
+ }
+ }
+
+ if (context->sortedByShort == NULL)
+ {
+ context->sortedByShort = dropt_safe_malloc(n, sizeof *(context->sortedByShort));
+ if (context->sortedByShort != NULL)
+ {
+ size_t i;
+ for (i = 0; i < n; i++)
+ {
+ context->sortedByShort[i].option = &options[i];
+ context->sortedByShort[i].context = context;
+ }
+
+ qsort(context->sortedByShort,
+ n, sizeof *(context->sortedByShort),
+ cmp_option_proxies_short);
+ }
+ }
+}
+
+
+/** free_lookup_tables
+ *
+ * Frees the sorted lookup tables in a dropt context.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The dropt context.
+ * May be NULL.
+ */
+static void
+free_lookup_tables(dropt_context* context)
+{
+ if (context != NULL)
+ {
+ free(context->sortedByLong);
+ context->sortedByLong = NULL;
+
+ free(context->sortedByShort);
+ context->sortedByShort = NULL;
+ }
+}
+
+
+/** is_valid_option
+ *
+ * PARAMETERS:
+ * IN option : Specification for an individual option.
+ *
+ * RETURNS:
+ * true if the specified option is valid, false if it's a sentinel
+ * value.
+ */
+static bool
+is_valid_option(const dropt_option* option)
+{
+ return option != NULL
+ && !( option->long_name == NULL
+ && option->short_name == DROPT_TEXT_LITERAL('\0')
+ && option->description == NULL
+ && option->arg_description == NULL
+ && option->handler == NULL
+ && option->handler_data == NULL
+ && option->attr == 0);
+}
+
+
+/** find_option_long
+ *
+ * Finds the option specification for a long option name (i.e., an
+ * option of the form "--option").
+ *
+ * PARAMETERS:
+ * IN context : The dropt context.
+ * IN longName : The long option name to search for (excluding
+ * leading dashes).
+ * longName.s must not be NULL.
+ *
+ * RETURNS:
+ * A pointer to the corresponding option specification or NULL if not
+ * found.
+ */
+static const dropt_option*
+find_option_long(const dropt_context* context,
+ char_array longName)
+{
+ assert(context != NULL);
+ assert(longName.s != NULL);
+
+ if (context->sortedByLong != NULL)
+ {
+ option_proxy* found = bsearch(&longName, context->sortedByLong,
+ context->numOptions, sizeof *(context->sortedByLong),
+ cmp_key_option_proxy_long);
+ return (found == NULL) ? NULL : found->option;
+ }
+
+ /* Fall back to a linear search. */
+ {
+ option_proxy item = { 0 };
+ item.context = context;
+ for (item.option = context->options; is_valid_option(item.option); item.option++)
+ {
+ if (cmp_key_option_proxy_long(&longName, &item) == 0)
+ {
+ return item.option;
+ }
+ }
+ }
+ return NULL;
+}
+
+
+/** find_option_short
+ *
+ * Finds the option specification for a short option name (i.e., an
+ * option of the form "-o").
+ *
+ * PARAMETERS:
+ * IN context : The dropt context.
+ * IN shortName : The short option name to search for.
+ *
+ * RETURNS:
+ * A pointer to the corresponding option specification or NULL if not
+ * found.
+ */
+static const dropt_option*
+find_option_short(const dropt_context* context, dropt_char shortName)
+{
+ assert(context != NULL);
+ assert(shortName != DROPT_TEXT_LITERAL('\0'));
+ assert(context->ncmpstr != NULL);
+
+ if (context->sortedByShort != NULL)
+ {
+ option_proxy* found = bsearch(&shortName, context->sortedByShort,
+ context->numOptions, sizeof *(context->sortedByShort),
+ cmp_key_option_proxy_short);
+ return (found == NULL) ? NULL : found->option;
+ }
+
+ /* Fall back to a linear search. */
+ {
+ const dropt_option* option;
+ for (option = context->options; is_valid_option(option); option++)
+ {
+ if (context->ncmpstr(&shortName, &option->short_name, 1) == 0)
+ {
+ return option;
+ }
+ }
+ }
+ return NULL;
+}
+
+
+/** set_error_details
+ *
+ * Generates error details in the dropt context.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The dropt context.
+ * Must not be NULL.
+ * IN err : The error code.
+ * IN optionName : The name of the option we failed on.
+ * optionName.s must not be NULL.
+ * IN optionArgument : The value of the option we failed on.
+ * Pass NULL if unwanted.
+ */
+static void
+set_error_details(dropt_context* context, dropt_error err,
+ char_array optionName,
+ const dropt_char* optionArgument)
+{
+ assert(context != NULL);
+ assert(optionName.s != NULL);
+
+ context->errorDetails.err = err;
+
+ free(context->errorDetails.optionName);
+ free(context->errorDetails.optionArgument);
+
+ context->errorDetails.optionName = dropt_strndup(optionName.s, optionName.len);
+ context->errorDetails.optionArgument = (optionArgument == NULL)
+ ? NULL
+ : dropt_strdup(optionArgument);
+
+ /* The message will be generated lazily on retrieval. */
+ free(context->errorDetails.message);
+ context->errorDetails.message = NULL;
+}
+
+
+/** set_short_option_error_details
+ *
+ * Generates error details in the dropt context.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The dropt context.
+ * IN err : The error code.
+ * IN shortName : the "short" name of the option we failed on.
+ * IN optionArgument : The value of the option we failed on.
+ * Pass NULL if unwanted.
+ */
+static void
+set_short_option_error_details(dropt_context* context, dropt_error err,
+ dropt_char shortName, const dropt_char* optionArgument)
+{
+ /* "-?" is just a placeholder. */
+ dropt_char shortNameBuf[] = DROPT_TEXT_LITERAL("-?");
+
+ assert(context != NULL);
+ assert(shortName != DROPT_TEXT_LITERAL('\0'));
+
+ shortNameBuf[1] = shortName;
+
+ set_error_details(context, err,
+ make_char_array(shortNameBuf, ARRAY_LENGTH(shortNameBuf) - 1),
+ optionArgument);
+}
+
+
+/** dropt_get_error
+ *
+ * PARAMETERS:
+ * IN context : The dropt context.
+ * Must not be NULL.
+ *
+ * RETURNS:
+ * The current error code waiting in the dropt context.
+ */
+dropt_error
+dropt_get_error(const dropt_context* context)
+{
+ if (context == NULL)
+ {
+ DROPT_MISUSE("No dropt context specified.");
+ return dropt_error_bad_configuration;
+ }
+ return context->errorDetails.err;
+}
+
+
+/** dropt_get_error_details
+ *
+ * Retrieves details about the current error.
+ *
+ * PARAMETERS:
+ * IN context : The dropt context.
+ * OUT optionName : On output, the name of the option we failed
+ * on. Do not free this string.
+ * Pass NULL if unwanted.
+ * OUT optionArgument : On output, the value (possibly NULL) of the
+ * option we failed on. Do not free this
+ * string.
+ * Pass NULL if unwanted.
+ */
+void
+dropt_get_error_details(const dropt_context* context,
+ dropt_char** optionName, dropt_char** optionArgument)
+{
+ if (optionName != NULL) { *optionName = context->errorDetails.optionName; }
+ if (optionArgument != NULL) { *optionArgument = context->errorDetails.optionArgument; }
+}
+
+
+/** dropt_get_error_message
+ *
+ * PARAMETERS:
+ * IN context : The dropt context.
+ * Must not be NULL.
+ *
+ * RETURNS:
+ * The current error message waiting in the dropt context or the empty
+ * string if there are no errors. Note that calling any dropt
+ * function other than dropt_get_error, dropt_get_error_details, and
+ * dropt_get_error_message may invalidate a previously-returned
+ * string.
+ */
+const dropt_char*
+dropt_get_error_message(dropt_context* context)
+{
+ if (context == NULL)
+ {
+ DROPT_MISUSE("no dropt context specified.");
+ return DROPT_TEXT_LITERAL("");
+ }
+
+ if (context->errorDetails.err == dropt_error_none)
+ {
+ return DROPT_TEXT_LITERAL("");
+ }
+
+ if (context->errorDetails.message == NULL)
+ {
+ if (context->errorHandler != NULL)
+ {
+ context->errorDetails.message
+ = context->errorHandler(context->errorDetails.err,
+ context->errorDetails.optionName,
+ context->errorDetails.optionArgument,
+ context->errorHandlerData);
+ }
+ else
+ {
+#ifndef DROPT_NO_STRING_BUFFERS
+ context->errorDetails.message
+ = dropt_default_error_handler(context->errorDetails.err,
+ context->errorDetails.optionName,
+ context->errorDetails.optionArgument);
+#endif
+ }
+ }
+
+ return (context->errorDetails.message == NULL)
+ ? DROPT_TEXT_LITERAL("unknown error")
+ : context->errorDetails.message;
+}
+
+
+/** dropt_clear_error
+ *
+ * Clears the error waiting in the dropt context.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The dropt context to free.
+ * May be NULL.
+ */
+void
+dropt_clear_error(dropt_context* context)
+{
+ if (context != NULL)
+ {
+ context->errorDetails.err = dropt_error_none;
+
+ free(context->errorDetails.optionName);
+ context->errorDetails.optionName = NULL;
+
+ free(context->errorDetails.optionArgument);
+ context->errorDetails.optionArgument = NULL;
+
+ free(context->errorDetails.message);
+ context->errorDetails.message = NULL;
+ }
+}
+
+
+#ifndef DROPT_NO_STRING_BUFFERS
+/** dropt_default_error_handler
+ *
+ * Default error handler.
+ *
+ * PARAMETERS:
+ * IN error : The error code.
+ * IN optionName : The name of the option we failed on.
+ * IN optionArgument : The value of the option we failed on.
+ * Pass NULL if unwanted.
+ *
+ * RETURNS:
+ * An allocated string for the given error. The caller is responsible
+ * for calling free() on it when no longer needed.
+ * May return NULL.
+ */
+dropt_char*
+dropt_default_error_handler(dropt_error error,
+ const dropt_char* optionName,
+ const dropt_char* optionArgument)
+{
+ dropt_char* s = NULL;
+
+ const dropt_char* separator = DROPT_TEXT_LITERAL(": ");
+
+ if (optionArgument == NULL)
+ {
+ separator = optionArgument = DROPT_TEXT_LITERAL("");
+ }
+
+ switch (error)
+ {
+ case dropt_error_none:
+ /* This shouldn't happen (unless client code invokes this
+ * directly with dropt_error_none), but it's here for
+ * completeness.
+ */
+ break;
+
+ case dropt_error_bad_configuration:
+ s = dropt_strdup(DROPT_TEXT_LITERAL("invalid option configuration"));
+ break;
+
+ case dropt_error_invalid_option:
+ s = dropt_asprintf(DROPT_TEXT_LITERAL("invalid option: %s"),
+ optionName);
+ break;
+ case dropt_error_insufficient_arguments:
+ s = dropt_asprintf(DROPT_TEXT_LITERAL("value required after option %s"),
+ optionName);
+ break;
+ case dropt_error_mismatch:
+ s = dropt_asprintf(DROPT_TEXT_LITERAL("invalid value for option %s%s%s"),
+ optionName, separator, optionArgument);
+ break;
+ case dropt_error_overflow:
+ s = dropt_asprintf(DROPT_TEXT_LITERAL("value too large for option %s%s%s"),
+ optionName, separator, optionArgument);
+ break;
+ case dropt_error_underflow:
+ s = dropt_asprintf(DROPT_TEXT_LITERAL("value too small for option %s%s%s"),
+ optionName, separator, optionArgument);
+ break;
+ case dropt_error_insufficient_memory:
+ s = dropt_strdup(DROPT_TEXT_LITERAL("insufficient memory"));
+ break;
+ case dropt_error_unknown:
+ default:
+ s = dropt_asprintf(DROPT_TEXT_LITERAL("unknown error handling option %s"),
+ optionName);
+ break;
+ }
+
+ return s;
+}
+
+
+/** dropt_get_help
+ *
+ * PARAMETERS:
+ * IN context : The dropt context.
+ * Must not be NULL.
+ * IN helpParams : The help parameters.
+ * Pass NULL to use the default help parameters.
+ *
+ * RETURNS:
+ * An allocated help string for the available options. The caller is
+ * responsible for calling free() on it when no longer needed.
+ * Returns NULL on error.
+ */
+dropt_char*
+dropt_get_help(const dropt_context* context, const dropt_help_params* helpParams)
+{
+ dropt_char* helpText = NULL;
+ dropt_stringstream* ss = NULL;
+
+ if (context == NULL)
+ {
+ DROPT_MISUSE("No dropt context specified.");
+ return NULL;
+ }
+
+ ss = dropt_ssopen();
+
+ if (ss != NULL)
+ {
+ const dropt_option* option;
+ dropt_help_params hp;
+
+ if (helpParams == NULL)
+ {
+ dropt_init_help_params(&hp);
+ }
+ else
+ {
+ hp = *helpParams;
+ }
+
+ for (option = context->options; is_valid_option(option); option++)
+ {
+ bool hasLongName = option->long_name != NULL
+ && option->long_name[0] != DROPT_TEXT_LITERAL('\0');
+ bool hasShortName = option->short_name != DROPT_TEXT_LITERAL('\0');
+
+ /* The number of characters printed on the current line so far. */
+ int n;
+
+ if (option->description == NULL || (option->attr & dropt_attr_hidden))
+ {
+ /* Undocumented option. Ignore it and move on. */
+ continue;
+ }
+ else if (hasLongName && hasShortName)
+ {
+ n = dropt_ssprintf(ss, DROPT_TEXT_LITERAL("%*s-%c, --%s"),
+ hp.indent, DROPT_TEXT_LITERAL(""),
+ option->short_name, option->long_name);
+ }
+ else if (hasLongName)
+ {
+ n = dropt_ssprintf(ss, DROPT_TEXT_LITERAL("%*s--%s"),
+ hp.indent, DROPT_TEXT_LITERAL(""),
+ option->long_name);
+ }
+ else if (hasShortName)
+ {
+ n = dropt_ssprintf(ss, DROPT_TEXT_LITERAL("%*s-%c"),
+ hp.indent, DROPT_TEXT_LITERAL(""),
+ option->short_name);
+ }
+ else
+ {
+ /* Comment text. Don't bother with indentation. */
+ assert(option->description != NULL);
+ dropt_ssprintf(ss, DROPT_TEXT_LITERAL("%s\n"), option->description);
+ goto next;
+ }
+
+ if (n < 0) { n = 0; }
+
+ if (option->arg_description != NULL)
+ {
+ int m = dropt_ssprintf(ss,
+ (option->attr & dropt_attr_optional_val)
+ ? DROPT_TEXT_LITERAL("[=%s]")
+ : DROPT_TEXT_LITERAL("=%s"),
+ option->arg_description);
+ if (m > 0) { n += m; }
+ }
+
+ /* Check for equality to make sure that there's at least one
+ * space between the option name and its description.
+ */
+ if ((unsigned int) n >= hp.description_start_column)
+ {
+ dropt_ssprintf(ss, DROPT_TEXT_LITERAL("\n"));
+ n = 0;
+ }
+
+ {
+ const dropt_char* line = option->description;
+ while (line != NULL)
+ {
+ size_t lineLen;
+ const dropt_char* nextLine;
+ const dropt_char* newline = dropt_strchr(line, DROPT_TEXT_LITERAL('\n'));
+
+ if (newline == NULL)
+ {
+ lineLen = (int)dropt_strlen(line);
+ nextLine = NULL;
+ }
+ else
+ {
+ lineLen = (int)(newline - line);
+ nextLine = newline + 1;
+ }
+
+ dropt_ssprintf(ss, DROPT_TEXT_LITERAL("%*s%.*s\n"),
+ hp.description_start_column - n, DROPT_TEXT_LITERAL(""),
+ lineLen, line);
+ n = 0;
+
+ line = nextLine;
+ }
+ }
+
+ next:
+ if (hp.blank_lines_between_options)
+ {
+ dropt_ssprintf(ss, DROPT_TEXT_LITERAL("\n"));
+ }
+ }
+ helpText = dropt_ssfinalize(ss);
+ }
+
+ return helpText;
+}
+
+
+/** dropt_print_help
+ *
+ * Prints help for the available options.
+ *
+ * PARAMETERS:
+ * IN/OUT f : The file stream to print to.
+ * IN context : The dropt context.
+ * Must not be NULL.
+ * IN helpParams : The help parameters.
+ * Pass NULL to use the default help parameters.
+ */
+void
+dropt_print_help(FILE* f, const dropt_context* context,
+ const dropt_help_params* helpParams)
+{
+ dropt_char* helpText = dropt_get_help(context, helpParams);
+ if (helpText != NULL)
+ {
+ dropt_fputs(helpText, f);
+ free(helpText);
+ }
+}
+#endif /* DROPT_NO_STRING_BUFFERS */
+
+
+/** set_option_value
+ *
+ * Sets the value for a specified option by invoking the option's
+ * handler callback.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The dropt context.
+ * IN option : The option.
+ * IN optionArgument : The option's value. May be NULL.
+ *
+ * RETURNS:
+ * An error code.
+ */
+static dropt_error
+set_option_value(dropt_context* context,
+ const dropt_option* option, const dropt_char* optionArgument)
+{
+ assert(option != NULL);
+
+ if (option->handler == NULL)
+ {
+ DROPT_MISUSE("No option handler specified.");
+ return dropt_error_bad_configuration;
+ }
+
+ return option->handler(context, optionArgument, option->handler_data);
+}
+
+
+/** parse_option_arg
+ *
+ * Helper function to dropt_parse to deal with consuming possibly
+ * optional arguments.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The dropt context.
+ * IN/OUT ps : The current parse state.
+ *
+ * RETURNS:
+ * An error code.
+ */
+static dropt_error
+parse_option_arg(dropt_context* context, parse_state* ps)
+{
+ dropt_error err;
+
+ bool consumeNextArg = false;
+
+ if (OPTION_TAKES_ARG(ps->option) && ps->optionArgument == NULL)
+ {
+ /* The option expects an argument, but none was specified with '='.
+ * Try using the next item from the command-line.
+ */
+ if (ps->argsLeft > 0 && *(ps->argNext) != NULL)
+ {
+ consumeNextArg = true;
+ ps->optionArgument = *(ps->argNext);
+ }
+ else if (!(ps->option->attr & dropt_attr_optional_val))
+ {
+ err = dropt_error_insufficient_arguments;
+ goto exit;
+ }
+ }
+
+ /* Even for options that don't ask for arguments, always parse and
+ * consume an argument that was specified with '='.
+ */
+ err = set_option_value(context, ps->option, ps->optionArgument);
+
+ if ( err != dropt_error_none
+ && (ps->option->attr & dropt_attr_optional_val)
+ && consumeNextArg
+ && ps->optionArgument != NULL)
+ {
+ /* The option's handler didn't like the argument we fed it. If the
+ * argument was optional, try again without it.
+ */
+ consumeNextArg = false;
+ ps->optionArgument = NULL;
+ err = set_option_value(context, ps->option, NULL);
+ }
+
+exit:
+ if (err == dropt_error_none && consumeNextArg)
+ {
+ ps->argNext++;
+ ps->argsLeft--;
+ }
+ return err;
+}
+
+
+/** dropt_parse
+ *
+ * Parses command-line options.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The dropt context.
+ * Must not be NULL.
+ * IN argc : The maximum number of arguments to parse from
+ * argv.
+ * Pass -1 to parse all arguments up to a NULL
+ * sentinel value.
+ * IN argv : The list of command-line arguments, not including
+ * the initial program name.
+ *
+ * RETURNS:
+ * A pointer to the first unprocessed element in argv.
+ */
+dropt_char**
+dropt_parse(dropt_context* context,
+ int argc, dropt_char** argv)
+{
+ dropt_error err = dropt_error_none;
+
+ dropt_char* arg;
+ parse_state ps;
+
+ ps.option = NULL;
+ ps.optionArgument = NULL;
+ ps.argNext = argv;
+
+ if (argv == NULL)
+ {
+ /* Nothing to do. */
+ goto exit;
+ }
+
+ if (context == NULL)
+ {
+ DROPT_MISUSE("No dropt context specified.");
+ goto exit;
+ }
+
+#ifdef DROPT_NO_STRING_BUFFERS
+ if (context->errorHandler == NULL)
+ {
+ DROPT_MISUSE("No error handler specified.");
+ set_error_details(context, dropt_error_bad_configuration,
+ make_char_array(DROPT_TEXT_LITERAL(""), 0),
+ NULL);
+ goto exit;
+ }
+#endif
+
+ if (argc == -1)
+ {
+ argc = 0;
+ while (argv[argc] != NULL) { argc++; }
+ }
+
+ if (argc == 0)
+ {
+ /* Nothing to do. */
+ goto exit;
+ }
+
+ init_lookup_tables(context);
+
+ ps.argsLeft = argc;
+
+ while ( ps.argsLeft-- > 0
+ && (arg = *ps.argNext) != NULL
+ && arg[0] == DROPT_TEXT_LITERAL('-'))
+ {
+ assert(err == dropt_error_none);
+
+ if (arg[1] == DROPT_TEXT_LITERAL('\0'))
+ {
+ /* - */
+
+ /* This intentionally leaves "-" unprocessed for the caller to
+ * deal with. This allows construction of programs that treat
+ * "-" to mean "stdin".
+ */
+ goto exit;
+ }
+
+ ps.argNext++;
+
+ if (arg[1] == DROPT_TEXT_LITERAL('-'))
+ {
+ const dropt_char* longName = arg + 2;
+ if (longName[0] == DROPT_TEXT_LITERAL('\0'))
+ {
+ /* -- */
+
+ /* This is used to mark the end of the option processing
+ * to prevent some arguments with leading '-' characters
+ * from being treated as options.
+ *
+ * Don't pass this back to the caller.
+ */
+ goto exit;
+ }
+ else if (longName[0] == DROPT_TEXT_LITERAL('='))
+ {
+ /* Deal with the pathological case of a user supplying
+ * "--=".
+ */
+ err = dropt_error_invalid_option;
+ set_error_details(context, err,
+ make_char_array(arg, dropt_strlen(arg)),
+ NULL);
+ goto exit;
+ }
+ else
+ {
+ /* --longName */
+ const dropt_char* p = dropt_strchr(longName, DROPT_TEXT_LITERAL('='));
+ const dropt_char* longNameEnd;
+ if (p != NULL)
+ {
+ /* --longName=arg */
+ longNameEnd = p;
+ ps.optionArgument = p + 1;
+ }
+ else
+ {
+ longNameEnd = longName + dropt_strlen(longName);
+ assert(ps.optionArgument == NULL);
+ }
+
+ /* Pass the length of the option name so that we don't need
+ * to mutate the original string by inserting a
+ * NUL-terminator.
+ */
+ ps.option = find_option_long(context,
+ make_char_array(longName,
+ longNameEnd - longName));
+ if (ps.option == NULL)
+ {
+ err = dropt_error_invalid_option;
+ set_error_details(context, err,
+ make_char_array(arg, longNameEnd - arg),
+ NULL);
+ }
+ else
+ {
+ err = parse_option_arg(context, &ps);
+ if (err != dropt_error_none)
+ {
+ set_error_details(context, err,
+ make_char_array(arg, longNameEnd - arg),
+ ps.optionArgument);
+ }
+ }
+
+ if ( err != dropt_error_none
+ || ps.option->attr & dropt_attr_halt)
+ {
+ goto exit;
+ }
+ }
+ }
+ else
+ {
+ /* Short name. (-x) */
+ size_t len;
+ size_t j;
+
+ if (arg[1] == DROPT_TEXT_LITERAL('='))
+ {
+ /* Deal with the pathological case of a user supplying
+ * "-=".
+ */
+ err = dropt_error_invalid_option;
+ set_error_details(context, err,
+ make_char_array(arg, dropt_strlen(arg)),
+ NULL);
+ goto exit;
+ }
+ else
+ {
+ const dropt_char* p = dropt_strchr(arg, DROPT_TEXT_LITERAL('='));
+ if (p != NULL)
+ {
+ /* -x=arg */
+ len = p - arg;
+ ps.optionArgument = p + 1;
+ }
+ else
+ {
+ len = dropt_strlen(arg);
+ assert(ps.optionArgument == NULL);
+ }
+ }
+
+ for (j = 1; j < len; j++)
+ {
+ ps.option = find_option_short(context, arg[j]);
+ if (ps.option == NULL)
+ {
+ err = dropt_error_invalid_option;
+ set_short_option_error_details(context, err, arg[j], NULL);
+ goto exit;
+ }
+ else if (j + 1 == len)
+ {
+ /* The last short option in a condensed list gets
+ * to use an argument.
+ */
+ err = parse_option_arg(context, &ps);
+ if (err != dropt_error_none)
+ {
+ set_short_option_error_details(context, err, arg[j],
+ ps.optionArgument);
+ goto exit;
+ }
+ }
+ else if ( context->allowConcatenatedArgs
+ && OPTION_TAKES_ARG(ps.option)
+ && j == 1)
+ {
+ err = set_option_value(context, ps.option, &arg[j + 1]);
+
+ if ( err != dropt_error_none
+ && (ps.option->attr & dropt_attr_optional_val))
+ {
+ err = set_option_value(context, ps.option, NULL);
+ }
+
+ if (err != dropt_error_none)
+ {
+ set_short_option_error_details(context, err, arg[j], &arg[j + 1]);
+ goto exit;
+ }
+
+ /* Skip to the next argument. */
+ break;
+ }
+ else if ( OPTION_TAKES_ARG(ps.option)
+ && !(ps.option->attr & dropt_attr_optional_val))
+ {
+ /* Short options with required arguments can't be used
+ * in condensed lists except in the last position.
+ *
+ * e.g. -abcd arg
+ * ^
+ */
+ err = dropt_error_insufficient_arguments;
+ set_short_option_error_details(context, err, arg[j], NULL);
+ goto exit;
+ }
+ else
+ {
+ err = set_option_value(context, ps.option, NULL);
+ if (err != dropt_error_none)
+ {
+ set_short_option_error_details(context, err, arg[j], NULL);
+ goto exit;
+ }
+ }
+
+ if (ps.option->attr & dropt_attr_halt) { goto exit; }
+ }
+ }
+
+ ps.option = NULL;
+ ps.optionArgument = NULL;
+ }
+
+exit:
+ return ps.argNext;
+}
+
+
+/** dropt_new_context
+ *
+ * Creates a new dropt context.
+ *
+ * PARAMETERS:
+ * IN options : The list of option specifications.
+ * Must not be NULL.
+ *
+ * RETURNS:
+ * An allocated dropt context. The caller is responsible for freeing
+ * it with dropt_free_context when no longer needed.
+ * Returns NULL on error.
+ */
+dropt_context*
+dropt_new_context(const dropt_option* options)
+{
+ dropt_context* context = NULL;
+ size_t n;
+
+ if (options == NULL)
+ {
+ DROPT_MISUSE("No option list specified.");
+ goto exit;
+ }
+
+ /* Sanity-check the options. */
+ for (n = 0; is_valid_option(&options[n]); n++)
+ {
+ if ( options[n].short_name == DROPT_TEXT_LITERAL('=')
+ || ( options[n].long_name != NULL
+ && dropt_strchr(options[n].long_name, DROPT_TEXT_LITERAL('=')) != NULL))
+ {
+ DROPT_MISUSE("Invalid option list. '=' may not be used in an option name.");
+ goto exit;
+ }
+ }
+
+ context = malloc(sizeof *context);
+ if (context == NULL)
+ {
+ goto exit;
+ }
+ else
+ {
+ dropt_context emptyContext = { 0 };
+ *context = emptyContext;
+
+ context->options = options;
+ context->numOptions = n;
+ dropt_set_strncmp(context, NULL);
+ }
+
+exit:
+ return context;
+}
+
+
+/** dropt_free_context
+ *
+ * Frees a dropt context.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The dropt context to free.
+ * May be NULL.
+ */
+void
+dropt_free_context(dropt_context* context)
+{
+ dropt_clear_error(context);
+ free_lookup_tables(context);
+ free(context);
+}
+
+
+/** dropt_get_options
+ *
+ * PARAMETERS:
+ * IN context : The dropt context.
+ * Must not be NULL.
+ *
+ * RETURNS:
+ * The context's list of option specifications.
+ */
+const dropt_option*
+dropt_get_options(const dropt_context* context)
+{
+ if (context == NULL)
+ {
+ DROPT_MISUSE("No dropt context specified.");
+ return NULL;
+ }
+
+ return context->options;
+}
+
+
+/** dropt_init_help_params
+ *
+ * Initializes a dropt_help_params structure with the default
+ * values.
+ *
+ * PARAMETERS:
+ * OUT helpParams : On output, set to the default help parameters.
+ * Must not be NULL.
+ */
+void
+dropt_init_help_params(dropt_help_params* helpParams)
+{
+ if (helpParams == NULL)
+ {
+ DROPT_MISUSE("No dropt help parameters specified.");
+ return;
+ }
+
+ helpParams->indent = default_help_indent;
+ helpParams->description_start_column = default_description_start_column;
+ helpParams->blank_lines_between_options = true;
+}
+
+
+/** dropt_set_error_handler
+ *
+ * Sets the callback function used to generate error strings from
+ * error codes.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The dropt context.
+ * Must not be NULL.
+ * IN handler : The error handler callback.
+ * Pass NULL to use the default error handler.
+ * IN handlerData : Caller-defined callback data.
+ */
+void
+dropt_set_error_handler(dropt_context* context, dropt_error_handler_func handler, void* handlerData)
+{
+ if (context == NULL)
+ {
+ DROPT_MISUSE("No dropt context specified.");
+ return;
+ }
+
+ context->errorHandler = handler;
+ context->errorHandlerData = handlerData;
+}
+
+
+/** dropt_set_strncmp
+ *
+ * Sets the callback function used to compare strings.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The dropt context.
+ * Must not be NULL.
+ * IN cmp : The string comparison function.
+ * Pass NULL to use the default string comparison
+ * function.
+ */
+void
+dropt_set_strncmp(dropt_context* context, dropt_strncmp_func cmp)
+{
+ if (context == NULL)
+ {
+ DROPT_MISUSE("No dropt context specified.");
+ return;
+ }
+
+ if (cmp == NULL) { cmp = dropt_strncmp; }
+ context->ncmpstr = cmp;
+
+ /* Changing the sort method invalidates our existing lookup tables. */
+ free_lookup_tables(context);
+}
+
+
+/** dropt_allow_concatenated_arguments
+ *
+ * Specifies whether "short" options are allowed to have concatenated
+ * arguments (i.e. without space or '=' separators, such as -oARGUMENT).
+ *
+ * (Concatenated arguments are disallowed by default.)
+ *
+ * PARAMETERS:
+ * IN/OUT context : The dropt context.
+ * IN allow : Pass 1 if concatenated arguments should be allowed,
+ * 0 otherwise.
+ */
+void
+dropt_allow_concatenated_arguments(dropt_context* context, dropt_bool allow)
+{
+ if (context == NULL)
+ {
+ DROPT_MISUSE("No dropt context specified.");
+ return;
+ }
+
+ context->allowConcatenatedArgs = (allow != 0);
+}
+
+
+/** dropt_misuse
+ *
+ * Prints a diagnostic for logical errors caused by external clients
+ * calling into dropt improperly.
+ *
+ * In debug builds, terminates the program and prints the filename and
+ * line number of the failure.
+ *
+ * For logical errors entirely internal to dropt, use assert()
+ * instead.
+ *
+ * PARAMETERS:
+ * IN message : The error message.
+ * Must not be NULL.
+ * IN filename : The name of the file where the logical error
+ * occurred.
+ * Must not be NULL.
+ * IN line : The line number where the logical error occurred.
+ */
+void
+dropt_misuse(const char* message, const char* filename, int line)
+{
+#ifdef NDEBUG
+ (void)filename;
+ (void)line;
+ fprintf(stderr, "dropt: %s\n", message);
+#else
+ fprintf(stderr, "dropt: %s (%s: %d)\n", message, filename, line);
+ abort();
+#endif
+}
diff --git a/ext/dropt/src/dropt_handlers.c b/ext/dropt/src/dropt_handlers.c
new file mode 100644
index 0000000..412d571
--- /dev/null
+++ b/ext/dropt/src/dropt_handlers.c
@@ -0,0 +1,438 @@
+/** dropt_handlers.c
+ *
+ * Default type handlers for dropt.
+ *
+ * Copyright (c) 2006-2012 James D. Lin <jameslin@cal.berkeley.edu>
+ *
+ * The latest version of this file can be downloaded from:
+ * <http://www.taenarum.com/software/dropt/>
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ *
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ *
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+// THIS FILE HAS BEEN ALTERED from original version to fix warnings
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <float.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "dropt.h"
+#include "dropt_string.h"
+
+#define ABS(x) (((x) < 0) ? -(x) : (x))
+
+typedef enum { false, true } bool;
+
+/** dropt_handle_bool
+ *
+ * Parses a boolean value from the given string if possible.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The options context.
+ * IN optionArgument : A string representing a boolean value (0 or 1).
+ * If NULL, the boolean value is assumed to be
+ * true.
+ * OUT handlerData : A dropt_bool*.
+ * On success, set to the interpreted boolean
+ * value.
+ * On error, left untouched.
+ *
+ * RETURNS:
+ * dropt_error_none
+ * dropt_error_unknown
+ * dropt_error_bad_configuration
+ * dropt_error_mismatch
+ */
+dropt_error
+dropt_handle_bool(dropt_context* context, const dropt_char* optionArgument,
+ void* handlerData)
+{
+ dropt_error err = dropt_error_none;
+ bool val = false;
+ dropt_bool* out = handlerData;
+
+ if (out == NULL)
+ {
+ DROPT_MISUSE("No handler data specified.");
+ err = dropt_error_bad_configuration;
+ }
+ else if (optionArgument == NULL)
+ {
+ /* No explicit argument implies that the option is being turned on. */
+ val = true;
+ }
+ else if (optionArgument[0] == DROPT_TEXT_LITERAL('\0'))
+ {
+ err = dropt_error_mismatch;
+ }
+ else
+ {
+ unsigned int i = 0;
+ err = dropt_handle_uint(context, optionArgument, &i);
+ if (err == dropt_error_none)
+ {
+ switch (i)
+ {
+ case 0:
+ val = false;
+ break;
+ case 1:
+ val = true;
+ break;
+ default:
+ err = dropt_error_mismatch;
+ break;
+ }
+ }
+ else if (err == dropt_error_overflow)
+ {
+ err = dropt_error_mismatch;
+ }
+ }
+
+ if (err == dropt_error_none) { *out = val; }
+ return err;
+}
+
+
+/** dropt_handle_verbose_bool
+ *
+ * Like dropt_handle_bool but accepts "true" and "false" string
+ * values.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The options context.
+ * IN optionArgument : A string representing a boolean value.
+ * If NULL, the boolean value is assumed to be
+ * true.
+ * OUT handlerData : A dropt_bool*.
+ * On success, set to the interpreted boolean
+ * value.
+ * On error, left untouched.
+ *
+ * RETURNS:
+ * See dropt_handle_bool.
+ */
+dropt_error
+dropt_handle_verbose_bool(dropt_context* context, const dropt_char* optionArgument,
+ void* handlerData)
+{
+ dropt_error err = dropt_handle_bool(context, optionArgument, handlerData);
+ if (err == dropt_error_mismatch)
+ {
+ bool val = false;
+ dropt_bool* out = handlerData;
+
+ /* dropt_handle_bool already checks for this. */
+ assert(out != NULL);
+
+ if (dropt_stricmp(optionArgument, DROPT_TEXT_LITERAL("false")) == 0)
+ {
+ val = false;
+ err = dropt_error_none;
+ }
+ else if (dropt_stricmp(optionArgument, DROPT_TEXT_LITERAL("true")) == 0)
+ {
+ val = true;
+ err = dropt_error_none;
+ }
+
+ if (err == dropt_error_none) { *out = val; }
+ }
+ return err;
+}
+
+
+/** dropt_handle_int
+ *
+ * Parses an integer from the given string.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The options context.
+ * IN optionArgument : A string representing a base-10 integer.
+ * If NULL, returns dropt_error_insufficient_arguments.
+ * OUT handlerData : An int*.
+ * On success, set to the interpreted integer.
+ * On error, left untouched.
+ *
+ * RETURNS:
+ * dropt_error_none
+ * dropt_error_unknown
+ * dropt_error_bad_configuration
+ * dropt_error_insufficient_arguments
+ * dropt_error_mismatch
+ * dropt_error_overflow
+ */
+dropt_error
+dropt_handle_int(dropt_context* context, const dropt_char* optionArgument,
+ void* handlerData)
+{
+ dropt_error err = dropt_error_none;
+ int val = 0;
+ int* out = handlerData;
+ (void)context;
+
+ if (out == NULL)
+ {
+ DROPT_MISUSE("No handler data specified.");
+ err = dropt_error_bad_configuration;
+ }
+ else if (optionArgument == NULL || optionArgument[0] == DROPT_TEXT_LITERAL('\0'))
+ {
+ err = dropt_error_insufficient_arguments;
+ }
+ else
+ {
+ dropt_char* end;
+ long n;
+ errno = 0;
+ n = dropt_strtol(optionArgument, &end, 10);
+
+ /* Check that we matched at least one digit.
+ * (strtol/strtoul will return 0 if fed a string with no digits.)
+ */
+ if (*end == DROPT_TEXT_LITERAL('\0') && end > optionArgument)
+ {
+ if (errno == ERANGE || n < INT_MIN || n > INT_MAX)
+ {
+ err = dropt_error_overflow;
+ val = (n < 0) ? INT_MIN : INT_MAX;
+ }
+ else if (errno == 0)
+ {
+ val = (int) n;
+ }
+ else
+ {
+ err = dropt_error_unknown;
+ }
+ }
+ else
+ {
+ err = dropt_error_mismatch;
+ }
+ }
+
+ if (err == dropt_error_none) { *out = val; }
+ return err;
+}
+
+
+/** dropt_handle_uint
+ *
+ * Parses an unsigned integer from the given string.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The options context.
+ * IN optionArgument : A string representing an unsigned base-10
+ * integer.
+ * If NULL, returns dropt_error_insufficient_arguments.
+ * OUT handlerData : An unsigned int*.
+ * On success, set to the interpreted integer.
+ * On error, left untouched.
+ *
+ * RETURNS:
+ * dropt_error_none
+ * dropt_error_unknown
+ * dropt_error_bad_configuration
+ * dropt_error_insufficient_arguments
+ * dropt_error_mismatch
+ * dropt_error_overflow
+ */
+dropt_error
+dropt_handle_uint(dropt_context* context, const dropt_char* optionArgument,
+ void* handlerData)
+{
+ dropt_error err = dropt_error_none;
+ int val = 0;
+ unsigned int* out = handlerData;
+ (void)context;
+
+ if (out == NULL)
+ {
+ DROPT_MISUSE("No handler data specified.");
+ err = dropt_error_bad_configuration;
+ }
+ else if ( optionArgument == NULL
+ || optionArgument[0] == DROPT_TEXT_LITERAL('\0'))
+ {
+ err = dropt_error_insufficient_arguments;
+ }
+ else if (optionArgument[0] == DROPT_TEXT_LITERAL('-'))
+ {
+ err = dropt_error_mismatch;
+ }
+ else
+ {
+ dropt_char* end;
+ unsigned long n;
+ errno = 0;
+ n = dropt_strtoul(optionArgument, &end, 10);
+
+ /* Check that we matched at least one digit.
+ * (strtol/strtoul will return 0 if fed a string with no digits.)
+ */
+ if (*end == DROPT_TEXT_LITERAL('\0') && end > optionArgument)
+ {
+ if (errno == ERANGE || n > UINT_MAX)
+ {
+ err = dropt_error_overflow;
+ val = UINT_MAX;
+ }
+ else if (errno == 0)
+ {
+ val = (unsigned int) n;
+ }
+ else
+ {
+ err = dropt_error_unknown;
+ }
+ }
+ else
+ {
+ err = dropt_error_mismatch;
+ }
+ }
+
+ if (err == dropt_error_none) { *out = val; }
+ return err;
+}
+
+
+/** dropt_handle_double
+ *
+ * Parses a double from the given string.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The options context.
+ * IN optionArgument : A string representing a base-10 floating-point
+ * number.
+ * If NULL, returns dropt_error_insufficient_arguments.
+ * OUT handlerData : A double*.
+ * On success, set to the interpreted double.
+ * On error, left untouched.
+ *
+ * RETURNS:
+ * dropt_error_none
+ * dropt_error_unknown
+ * dropt_error_bad_configuration
+ * dropt_error_insufficient_arguments
+ * dropt_error_mismatch
+ * dropt_error_overflow
+ * dropt_error_underflow
+ */
+dropt_error
+dropt_handle_double(dropt_context* context, const dropt_char* optionArgument,
+ void* handlerData)
+{
+ dropt_error err = dropt_error_none;
+ double val = 0.0;
+ double* out = handlerData;
+ (void)context;
+
+ if (out == NULL)
+ {
+ DROPT_MISUSE("No handler data specified.");
+ err = dropt_error_bad_configuration;
+ }
+ else if ( optionArgument == NULL
+ || optionArgument[0] == DROPT_TEXT_LITERAL('\0'))
+ {
+ err = dropt_error_insufficient_arguments;
+ }
+ else
+ {
+ dropt_char* end;
+ errno = 0;
+ val = dropt_strtod(optionArgument, &end);
+
+ /* Check that we matched at least one digit.
+ * (strtod will return 0 if fed a string with no digits.)
+ */
+ if (*end == DROPT_TEXT_LITERAL('\0') && end > optionArgument)
+ {
+ if (errno == ERANGE)
+ {
+ /* Note that setting errno to ERANGE for underflow errors
+ * is implementation-defined behavior, but glibc, BSD's
+ * libc, and Microsoft's CRT all have implementations of
+ * strtod documented to return 0 and to set errno to ERANGE
+ * for such cases.
+ */
+ err = (ABS(val) <= DBL_MIN)
+ ? dropt_error_underflow
+ : dropt_error_overflow;
+ }
+ else if (errno != 0)
+ {
+ err = dropt_error_unknown;
+ }
+ }
+ else
+ {
+ err = dropt_error_mismatch;
+ }
+ }
+
+ if (err == dropt_error_none) { *out = val; }
+ return err;
+}
+
+
+/** dropt_handle_string
+ *
+ * Obtains a string.
+ *
+ * PARAMETERS:
+ * IN/OUT context : The options context.
+ * IN optionArgument : A string.
+ * If NULL, returns dropt_error_insufficient_arguments.
+ * OUT handlerData : A dropt_char**.
+ * On success, set to the input string. The
+ * string is NOT copied from the original argv
+ * array, so do not free it.
+ * On error, left untouched.
+ *
+ * RETURNS:
+ * dropt_error_none
+ * dropt_error_bad_configuration
+ * dropt_error_insufficient_arguments
+ */
+dropt_error
+dropt_handle_string(dropt_context* context, const dropt_char* optionArgument,
+ void* handlerData)
+{
+ dropt_error err = dropt_error_none;
+ const dropt_char** out = handlerData;
+ (void)context;
+
+ if (out == NULL)
+ {
+ DROPT_MISUSE("No handler data specified.");
+ err = dropt_error_bad_configuration;
+ }
+ else if (optionArgument == NULL)
+ {
+ err = dropt_error_insufficient_arguments;
+ }
+
+ if (err == dropt_error_none) { *out = optionArgument; }
+ return err;
+}
diff --git a/ext/dropt/src/dropt_string.c b/ext/dropt/src/dropt_string.c
new file mode 100644
index 0000000..6505bd1
--- /dev/null
+++ b/ext/dropt/src/dropt_string.c
@@ -0,0 +1,686 @@
+/** dropt_string.c
+ *
+ * String routines for dropt.
+ *
+ * Copyright (c) 2006-2012 James D. Lin <jameslin@cal.berkeley.edu>
+ *
+ * The latest version of this file can be downloaded from:
+ * <http://www.taenarum.com/software/dropt/>
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ *
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ *
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+#ifdef _MSC_VER
+ #include <tchar.h>
+#endif
+
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <ctype.h>
+#include <wctype.h>
+#include <stdio.h>
+#include <assert.h>
+
+#if __STDC_VERSION__ >= 199901L
+ #include <stdint.h>
+#else
+ /* Compatibility junk for things that don't yet support ISO C99. */
+ #if defined _MSC_VER || defined __BORLANDC__
+ #ifndef va_copy
+ #define va_copy(dest, src) (dest = (src))
+ #endif
+ #else
+ #ifndef va_copy
+ #error Unsupported platform. va_copy is not defined.
+ #endif
+ #endif
+
+ #ifndef SIZE_MAX
+ #define SIZE_MAX ((size_t) -1)
+ #endif
+#endif
+
+#include "dropt_string.h"
+
+#ifndef MAX
+#define MAX(x, y) (((x) > (y)) ? (x) : (y))
+#endif
+
+#ifndef MIN
+#define MIN(x, y) (((x) < (y)) ? (x) : (y))
+#endif
+
+#ifdef DROPT_DEBUG_STRING_BUFFERS
+ enum { default_stringstream_buffer_size = 1 };
+ #define GROWN_STRINGSTREAM_BUFFER_SIZE(oldSize, minAmount) \
+ ((oldSize) + (minAmount))
+#else
+ enum { default_stringstream_buffer_size = 256 };
+ #define GROWN_STRINGSTREAM_BUFFER_SIZE(oldSize, minAmount) \
+ MAX((oldSize) * 2, (oldSize) + (minAmount))
+#endif
+
+
+#ifndef DROPT_NO_STRING_BUFFERS
+struct dropt_stringstream
+{
+ dropt_char* string; /* The string buffer. */
+ size_t maxSize; /* Size of the string buffer, in dropt_char-s, including space for NUL. */
+ size_t used; /* Number of elements used in the string buffer, excluding NUL. */
+};
+#endif
+
+
+/** dropt_safe_malloc
+ *
+ * A version of malloc that checks for integer overflow.
+ *
+ * PARAMETERS:
+ * IN numElements : The number of elements to allocate.
+ * IN elementSize : The size of each element, in bytes.
+ *
+ * RETURNS:
+ * A pointer to the allocated memory.
+ * Returns NULL if numElements is 0.
+ * Returns NULL on error.
+ */
+void*
+dropt_safe_malloc(size_t numElements, size_t elementSize)
+{
+ return dropt_safe_realloc(NULL, numElements, elementSize);
+}
+
+
+/** dropt_safe_realloc
+ *
+ * Wrapper around realloc to check for integer overflow.
+ *
+ * PARAMETERS:
+ * IN/OUT p : A pointer to the memory block to resize.
+ * If NULL, a new memory block of the specified size
+ * will be allocated.
+ * IN numElements : The number of elements to allocate.
+ * If 0, frees p.
+ * IN elementSize : The size of each element, in bytes.
+ *
+ * RETURNS:
+ * A pointer to the allocated memory.
+ * Returns NULL if numElements is 0.
+ * Returns NULL on error.
+ */
+void*
+dropt_safe_realloc(void* p, size_t numElements, size_t elementSize)
+{
+ size_t numBytes;
+
+ /* elementSize shouldn't legally be 0, but we check for it in case a
+ * caller got the argument order wrong.
+ */
+ if (numElements == 0 || elementSize == 0)
+ {
+ /* The behavior of realloc(p, 0) is implementation-defined. Let's
+ * enforce a particular behavior.
+ */
+ free(p);
+
+ assert(elementSize != 0);
+ return NULL;
+ }
+
+ numBytes = numElements * elementSize;
+ if (numBytes / elementSize != numElements)
+ {
+ /* Overflow. */
+ return NULL;
+ }
+
+ return realloc(p, numBytes);
+}
+
+
+/** dropt_strdup
+ *
+ * Duplicates a string.
+ *
+ * PARAMETERS:
+ * IN s : A NUL-terminated string to duplicate.
+ *
+ * RETURNS:
+ * The duplicated string. The caller is responsible for calling
+ * free() on it when no longer needed.
+ * Returns NULL on error.
+ */
+dropt_char*
+dropt_strdup(const dropt_char* s)
+{
+ return dropt_strndup(s, SIZE_MAX);
+}
+
+
+/** dropt_strndup
+ *
+ * Duplicates the first n characters of a string.
+ *
+ * PARAMETERS:
+ * IN s : The string to duplicate.
+ * IN n : The maximum number of dropt_char-s to copy, excluding the
+ * NUL-terminator.
+ *
+ * RETURNS:
+ * The duplicated string, which is always NUL-terminated. The caller
+ * is responsible for calling free() on it when no longer needed.
+ * Returns NULL on error.
+ */
+dropt_char*
+dropt_strndup(const dropt_char* s, size_t n)
+{
+ dropt_char* copy;
+ size_t len = 0;
+
+ assert(s != NULL);
+
+ while (len < n && s[len] != DROPT_TEXT_LITERAL('\0'))
+ {
+ len++;
+ }
+
+ if (len + 1 < len)
+ {
+ /* This overflow check shouldn't be strictly necessary. len can be
+ * at most SIZE_MAX, so SIZE_MAX + 1 can wrap around to 0, but
+ * dropt_safe_malloc will return NULL for a 0-sized allocation.
+ * However, favor defensive paranoia.
+ */
+ return NULL;
+ }
+
+ copy = dropt_safe_malloc(len + 1 /* NUL */, sizeof *copy);
+ if (copy != NULL)
+ {
+ memcpy(copy, s, len * sizeof *copy);
+ copy[len] = DROPT_TEXT_LITERAL('\0');
+ }
+
+ return copy;
+}
+
+
+/** dropt_stricmp
+ *
+ * Compares two NUL-terminated strings ignoring case differences. Not
+ * recommended for non-ASCII strings.
+ *
+ * PARAMETERS:
+ * IN s, t : The strings to compare.
+ *
+ * RETURNS:
+ * 0 if the strings are equivalent,
+ * < 0 if s is lexically less than t,
+ * > 0 if s is lexically greater than t.
+ */
+int
+dropt_stricmp(const dropt_char* s, const dropt_char* t)
+{
+ assert(s != NULL);
+ assert(t != NULL);
+ return dropt_strnicmp(s, t, SIZE_MAX);
+}
+
+
+/** dropt_strnicmp
+ *
+ * Compares the first n characters of two strings, ignoring case
+ * differences. Not recommended for non-ASCII strings.
+ *
+ * PARAMETERS:
+ * IN s, t : The strings to compare.
+ * IN n : The maximum number of dropt_char-s to compare.
+ *
+ * RETURNS:
+ * 0 if the strings are equivalent,
+ * < 0 if s is lexically less than t,
+ * > 0 if s is lexically greater than t.
+ */
+int
+dropt_strnicmp(const dropt_char* s, const dropt_char* t, size_t n)
+{
+ assert(s != NULL);
+ assert(t != NULL);
+
+ if (s == t) { return 0; }
+
+ while (n--)
+ {
+ if (*s == DROPT_TEXT_LITERAL('\0') && *t == DROPT_TEXT_LITERAL('\0'))
+ {
+ break;
+ }
+ else if (*s == *t || dropt_tolower(*s) == dropt_tolower(*t))
+ {
+ s++;
+ t++;
+ }
+ else
+ {
+ return (dropt_tolower(*s) < dropt_tolower(*t))
+ ? -1
+ : +1;
+ }
+ }
+
+ return 0;
+}
+
+
+#ifndef DROPT_NO_STRING_BUFFERS
+/** dropt_vsnprintf
+ *
+ * vsnprintf wrapper to provide ISO C99-compliant behavior.
+ *
+ * PARAMETERS:
+ * OUT s : The destination buffer. May be NULL if n is 0.
+ * If non-NULL, always NUL-terminated.
+ * IN n : The size of the destination buffer, measured in
+ * dropt_char-s.
+ * IN format : printf-style format specifier. Must not be NULL.
+ * IN args : Arguments to insert into the formatted string.
+ *
+ * RETURNS:
+ * The number of characters that would be written to the destination
+ * buffer if it's sufficiently large, excluding the NUL-terminator.
+ * Returns -1 on error.
+ */
+int
+dropt_vsnprintf(dropt_char* s, size_t n, const dropt_char* format, va_list args)
+{
+#if __STDC_VERSION__ >= 199901L || __GNUC__
+ /* ISO C99-compliant.
+ *
+ * As far as I can tell, gcc's implementation of vsnprintf has always
+ * matched the behavior required by the C99 standard (which is to
+ * return the necessary buffer size).
+ *
+ * Note that this won't work with wchar_t because there is no true,
+ * standard wchar_t equivalent of snprintf. swprintf comes close but
+ * doesn't return the necessary buffer size (and the standard does not
+ * provide a guaranteed way to test if truncation occurred), and its
+ * format string can't be used interchangeably with snprintf.
+ *
+ * It's simpler not to support wchar_t on non-Windows platforms.
+ */
+ assert(format != NULL);
+ return vsnprintf(s, n, format, args);
+#elif defined __BORLANDC__
+ /* Borland's compiler neglects to NUL-terminate. */
+ int ret;
+ assert(format != NULL);
+ ret = vsnprintf(s, n, format, args);
+ if (n != 0) { s[n - 1] = DROPT_TEXT_LITERAL('\0'); }
+ return ret;
+#elif defined _MSC_VER
+ /* _vsntprintf and _vsnprintf_s on Windows don't have C99 semantics;
+ * they return -1 if truncation occurs.
+ */
+ va_list argsCopy;
+ int ret;
+
+ assert(format != NULL);
+
+ va_copy(argsCopy, args);
+ ret = _vsctprintf(format, argsCopy);
+ va_end(argsCopy);
+
+ if (n != 0)
+ {
+ assert(s != NULL);
+
+ #if _MSC_VER >= 1400
+ (void) _vsntprintf_s(s, n, _TRUNCATE, format, args);
+ #else
+ /* This version doesn't necessarily NUL-terminate. Sigh. */
+ (void) _vsnprintf(s, n, format, args);
+ s[n - 1] = DROPT_TEXT_LITERAL('\0');
+ #endif
+ }
+
+ return ret;
+
+#else
+ #error Unsupported platform. dropt_vsnprintf unimplemented.
+ return -1;
+#endif
+}
+
+
+/** See dropt_vsnprintf. */
+int
+dropt_snprintf(dropt_char* s, size_t n, const dropt_char* format, ...)
+{
+ int ret;
+ va_list args;
+ va_start(args, format);
+ ret = dropt_vsnprintf(s, n, format, args);
+ va_end(args);
+ return ret;
+}
+
+
+/** dropt_vasprintf
+ *
+ * Allocates a formatted string with vprintf semantics.
+ *
+ * PARAMETERS:
+ * IN format : printf-style format specifier. Must not be NULL.
+ * IN args : Arguments to insert into the formatted string.
+ *
+ * RETURNS:
+ * The formatted string, which is always NUL-terminated. The caller
+ * is responsible for calling free() on it when no longer needed.
+ * Returns NULL on error.
+ */
+dropt_char*
+dropt_vasprintf(const dropt_char* format, va_list args)
+{
+ dropt_char* s = NULL;
+ int len;
+ va_list argsCopy;
+ assert(format != NULL);
+
+ va_copy(argsCopy, args);
+ len = dropt_vsnprintf(NULL, 0, format, argsCopy);
+ va_end(argsCopy);
+
+ if (len >= 0)
+ {
+ size_t n = len + 1 /* NUL */;
+ s = dropt_safe_malloc(n, sizeof *s);
+ if (s != NULL)
+ {
+ dropt_vsnprintf(s, n, format, args);
+ }
+ }
+
+ return s;
+}
+
+
+/** See dropt_vasprintf. */
+dropt_char*
+dropt_asprintf(const dropt_char* format, ...)
+{
+ dropt_char* s;
+
+ va_list args;
+ va_start(args, format);
+ s = dropt_vasprintf(format, args);
+ va_end(args);
+
+ return s;
+}
+
+
+/** dropt_ssopen
+ *
+ * Constructs a new dropt_stringstream.
+ *
+ * RETURNS:
+ * An initialized dropt_stringstream. The caller is responsible for
+ * calling either dropt_ssclose() or dropt_ssfinalize() on it when
+ * no longer needed.
+ * Returns NULL on error.
+ */
+dropt_stringstream*
+dropt_ssopen(void)
+{
+ dropt_stringstream* ss = malloc(sizeof *ss);
+ if (ss != NULL)
+ {
+ ss->used = 0;
+ ss->maxSize = default_stringstream_buffer_size;
+ ss->string = dropt_safe_malloc(ss->maxSize, sizeof *ss->string);
+ if (ss->string == NULL)
+ {
+ free(ss);
+ ss = NULL;
+ }
+ else
+ {
+ ss->string[0] = DROPT_TEXT_LITERAL('\0');
+ }
+ }
+ return ss;
+}
+
+
+/** dropt_ssclose
+ *
+ * Destroys a dropt_stringstream.
+ *
+ * PARAMETERS:
+ * IN/OUT ss : The dropt_stringstream.
+ */
+void
+dropt_ssclose(dropt_stringstream* ss)
+{
+ if (ss != NULL)
+ {
+ free(ss->string);
+ free(ss);
+ }
+}
+
+
+/** dropt_ssgetfreespace
+ *
+ * RETURNS:
+ * The amount of free space in the dropt_stringstream's internal
+ * buffer, measured in dropt_char-s. Space used for the
+ * NUL-terminator is considered free. (The amount of free space
+ * therefore is always positive.)
+ */
+static size_t
+dropt_ssgetfreespace(const dropt_stringstream* ss)
+{
+ assert(ss != NULL);
+ assert(ss->maxSize > 0);
+ assert(ss->maxSize > ss->used);
+ return ss->maxSize - ss->used;
+}
+
+
+/** dropt_ssresize
+ *
+ * Resizes a dropt_stringstream's internal buffer. If the requested
+ * size is less than the amount of buffer already in use, the buffer
+ * will be shrunk to the minimum size necessary.
+ *
+ * PARAMETERS:
+ * IN/OUT ss : The dropt_stringstream.
+ * IN n : The desired buffer size, in dropt_char-s.
+ *
+ * RETURNS:
+ * The new size of the dropt_stringstream's buffer in dropt_char-s,
+ * including space for a terminating NUL.
+ */
+static size_t
+dropt_ssresize(dropt_stringstream* ss, size_t n)
+{
+ assert(ss != NULL);
+
+ /* Don't allow shrinking if it will truncate the string. */
+ if (n < ss->maxSize) { n = MAX(n, ss->used + 1 /* NUL */); }
+
+ /* There should always be a buffer to point to. */
+ assert(n > 0);
+
+ if (n != ss->maxSize)
+ {
+ dropt_char* p = dropt_safe_realloc(ss->string, n, sizeof *ss->string);
+ if (p != NULL)
+ {
+ ss->string = p;
+ ss->maxSize = n;
+ assert(ss->maxSize > 0);
+ }
+ }
+ return ss->maxSize;
+}
+
+
+/** dropt_ssclear
+ *
+ * Clears and re-initializes a dropt_stringstream.
+ *
+ * PARAMETERS:
+ * IN/OUT ss : The dropt_stringstream
+ */
+void
+dropt_ssclear(dropt_stringstream* ss)
+{
+ assert(ss != NULL);
+
+ ss->string[0] = DROPT_TEXT_LITERAL('\0');
+ ss->used = 0;
+
+ dropt_ssresize(ss, default_stringstream_buffer_size);
+}
+
+
+/** dropt_ssfinalize
+ *
+ * Finalizes a dropt_stringstream; returns the contained string and
+ * destroys the dropt_stringstream.
+ *
+ * PARAMETERS:
+ * IN/OUT ss : The dropt_stringstream.
+ *
+ * RETURNS:
+ * The dropt_stringstream's string, which is always NUL-terminated.
+ * Note that the caller assumes ownership of the returned string and
+ * is responsible for calling free() on it when no longer needed.
+ */
+dropt_char*
+dropt_ssfinalize(dropt_stringstream* ss)
+{
+ dropt_char* s;
+ assert(ss != NULL);
+
+ /* Shrink to fit. */
+ dropt_ssresize(ss, 0);
+
+ s = ss->string;
+ ss->string = NULL;
+
+ dropt_ssclose(ss);
+
+ return s;
+}
+
+
+/** dropt_ssgetstring
+ *
+ * PARAMETERS:
+ * IN ss : The dropt_stringstream.
+ *
+ * RETURNS:
+ * The dropt_stringstream's string, which is always NUL-terminated.
+ * The returned string will no longer be valid if further operations
+ * are performed on the dropt_stringstream or if the
+ * dropt_stringstream is closed.
+ */
+const dropt_char*
+dropt_ssgetstring(const dropt_stringstream* ss)
+{
+ assert(ss != NULL);
+ return ss->string;
+}
+
+
+/** dropt_vssprintf
+ *
+ * Appends a formatted string with vprintf semantics to a
+ * dropt_stringstream.
+ *
+ * PARAMETERS:
+ * IN/OUT ss : The dropt_stringstream.
+ * IN format : printf-style format specifier. Must not be NULL.
+ * IN args : Arguments to insert into the formatted string.
+ *
+ * RETURNS:
+ * The number of characters written to the dropt_stringstream,
+ * excluding the NUL-terminator.
+ * Returns a negative value on error.
+ */
+int
+dropt_vssprintf(dropt_stringstream* ss, const dropt_char* format, va_list args)
+{
+ int n;
+ va_list argsCopy;
+ assert(ss != NULL);
+ assert(format != NULL);
+
+ va_copy(argsCopy, args);
+ n = dropt_vsnprintf(NULL, 0, format, argsCopy);
+ va_end(argsCopy);
+
+ if (n > 0)
+ {
+ size_t available = dropt_ssgetfreespace(ss);
+ if ((unsigned int) n >= available)
+ {
+ /* It's possible that newSize < ss->maxSize if
+ * GROWN_STRINGSTREAM_BUFFER_SIZE overflows, but it should be
+ * safe since we'll recompute the available space.
+ */
+ size_t newSize = GROWN_STRINGSTREAM_BUFFER_SIZE(ss->maxSize, n);
+ dropt_ssresize(ss, newSize);
+ available = dropt_ssgetfreespace(ss);
+ }
+ assert(available > 0); /* Space always is reserved for NUL. */
+
+ /* snprintf's family of functions return the number of characters
+ * that would be output with a sufficiently large buffer, excluding
+ * NUL.
+ */
+ n = dropt_vsnprintf(ss->string + ss->used, available, format, args);
+
+ /* We couldn't allocate enough space. */
+ if ((unsigned int) n >= available) { n = -1; }
+
+ if (n > 0) { ss->used += n; }
+ }
+ return n;
+}
+
+
+/** See dropt_vssprintf. */
+int
+dropt_ssprintf(dropt_stringstream* ss, const dropt_char* format, ...)
+{
+ int n;
+
+ va_list args;
+ va_start(args, format);
+ n = dropt_vssprintf(ss, format, args);
+ va_end(args);
+
+ return n;
+}
+#endif /* DROPT_NO_STRING_BUFFERS */
diff --git a/ext/gtest/Makefile b/ext/gtest/Makefile
new file mode 100644
index 0000000..c0e9f15
--- /dev/null
+++ b/ext/gtest/Makefile
@@ -0,0 +1,25 @@
+#!/usr/bin/make -f
+
+GTEST_INCLUDE_DIR = ..
+GTEST_SRC = $(wildcard ./*.cc)
+GTEST_OBJ = $(GTEST_SRC:.cc=.o)
+
+GTEST_LIB = libgtest.a
+
+CXXFLAGS += -DGTEST_HAS_PTHREAD=0
+
+$(GTEST_OBJ): %.o: %.cc
+ $(CXX) -o $@ -c $(CXXFLAGS) -I$(GTEST_INCLUDE_DIR) $<
+
+$(GTEST_LIB): $(GTEST_OBJ)
+ $(AR) rc $@ $^
+ ranlib $@
+
+build: all
+
+all: $(GTEST_LIB)
+
+install:
+
+clean:
+ rm -f $(GTEST_OBJ) $(GTEST_LIB)
diff --git a/ext/gtest/gtest-all.cc b/ext/gtest/gtest-all.cc
index a4de80c..41cfb5b 100644
--- a/ext/gtest/gtest-all.cc
+++ b/ext/gtest/gtest-all.cc
@@ -3758,6 +3758,9 @@ class TestNameIs {
// used.
bool res = false;
res = &TestNameIs::operator();
+ // The line below is to avoid ICPC warning #177: this class constructor
+ // never used.
+ TestNameIs t("");
return test_info && test_info->name() == name_;
}
diff --git a/ext/gtest/gtest.parts b/ext/gtest/gtest.parts
index 9f21e07..fe39a7b 100644
--- a/ext/gtest/gtest.parts
+++ b/ext/gtest/gtest.parts
@@ -28,12 +28,14 @@ install_headers = Glob('*.h')
parts_file = ['gtest.parts']
license_file = ['LICENSE']
+makefile = ['Makefile']
if 'install_package' in env['MODE']:
env.InstallTopLevel(cpp_files,sub_dir='ext/gtest')
env.InstallTopLevel(install_headers,sub_dir='ext/gtest')
env.InstallTopLevel(parts_file,sub_dir='ext/gtest')
env.InstallTopLevel(license_file,sub_dir='ext/gtest')
+ env.InstallTopLevel(makefile,sub_dir='ext/gtest')
else:
env.Append(CPPPATH=[AbsDir('..')])
diff --git a/ext/ipp/ippcp.parts b/ext/ipp/ippcp.parts
index 69e4560..a559908 100644
--- a/ext/ipp/ippcp.parts
+++ b/ext/ipp/ippcp.parts
@@ -15,6 +15,8 @@
############################################################################
Import('*')
+import os
+
env.PartVersion("9.0.1")
env.PartName("ippcp")
env.DependsOn([Component('ippcommon')])
@@ -71,12 +73,43 @@ if 'install_package' in env['MODE']:
excludes=[],
recursive=True)
env.InstallTopLevel(this_file, sub_dir='ext/ipp/')
+ makefile = Pattern(src_dir='./sources/ippcp',
+ includes=['Makefile'],
+ excludes=[],
+ recursive=True)
+ env.InstallTopLevel(makefile, sub_dir='ext/ipp/sources/ippcp')
+
else:
all_c_files = ippcp_files.files()
outputs = env.Library(ipp_libname, all_c_files)
- env.SdkLib(outputs)
env.SdkInclude(install_headers)
env.SdkInclude(common_headers)
- if 'install_lib' in env['MODE']:
- env.InstallLib(outputs)
+ if 'use_commercial_ipp' in env['MODE']:
+ try:
+ IPPROOT = os.environ['IPPROOT']
+ except KeyError, e:
+ env.PrintError("Necessary environment variable not set: ",
+ e, show_stack=False)
+ if env['TARGET_PLATFORM']['OS'] == 'win32':
+ libpre = ''
+ libpost = '.lib'
+ IPP_TH_SYMBOL = 'mt'
+ else:
+ libpre = 'lib'
+ libpost = '.a'
+ IPP_TH_SYMBOL = ''
+ if env['TARGET_PLATFORM']['ARCH'] == 'x86':
+ archdir = 'ia32/'
+ else:
+ archdir = 'intel64/'
+
+ ippcp_libname = libpre + 'ippcp' + IPP_TH_SYMBOL + libpost
+ ippcore_libname = libpre + 'ippcore' + IPP_TH_SYMBOL + libpost
+ ipp_dir = IPPROOT + '/lib/' + archdir
+ env.SdkLib(ipp_dir + ippcp_libname)
+ env.SdkLib(ipp_dir + ippcore_libname)
+ else:
+ env.SdkLib(outputs)
+ if 'install_lib' in env['MODE']:
+ env.InstallLib(outputs)
diff --git a/ext/ipp/ippcpepid.parts b/ext/ipp/ippcpepid.parts
index c2698e2..2913a55 100644
--- a/ext/ipp/ippcpepid.parts
+++ b/ext/ipp/ippcpepid.parts
@@ -49,6 +49,17 @@ ippcp_files = Pattern(src_dir='sources/ippcpepid/src/',
],
excludes=['pcpepidmain.c'],
recursive=True)
+#Symbols defined in following files are used by ippcpepid library
+ippcp_intern_files = Pattern(src_dir='sources/ippcp/src/',
+ includes=[
+ 'pcpmontexpbinca.c',
+ 'pcpmontred.c',
+ 'pcpbnuarith.c',
+ 'pcpbnu32misc.c',
+ 'pcpbnu32arith.c',
+ 'pcpbnumisc.c',
+ ],
+ recursive=True)
ippdir = ''
#internal ipp includes src/primitives/ipp/
@@ -73,9 +84,18 @@ if 'install_package' in env['MODE']:
excludes=[],
recursive=True)
env.InstallTopLevel(this_file, sub_dir='ext/ipp/')
+ makefile = Pattern(src_dir='./sources/ippcpepid',
+ includes=['Makefile'],
+ excludes=[],
+ recursive=True)
+ env.InstallTopLevel(makefile, sub_dir='ext/ipp/sources/ippcpepid')
+
else:
all_c_files = ippcp_files.files()
+ if 'use_commercial_ipp' in env['MODE']:
+ all_c_files = all_c_files + ippcp_intern_files.files()
+
outputs = env.Library(IPP_LIBNAME, all_c_files)
env.SdkLib(outputs)
diff --git a/ext/ipp/sources/ippcp/Makefile b/ext/ipp/sources/ippcp/Makefile
new file mode 100644
index 0000000..ec8f1dd
--- /dev/null
+++ b/ext/ipp/sources/ippcp/Makefile
@@ -0,0 +1,31 @@
+#!/usr/bin/make -f
+
+API_INCLUDE_DIR = ../../include
+SRC_INCLUDE_DIR = ../../sources/include
+LIB_INSTALL_DIR = $(epidinstalldir)/lib/posix-$(ARCH)/
+
+PCP_INCLUDE_DIR = ./src
+PCP_SRC = $(wildcard ./src/*.c)
+PCP_OBJ = $(PCP_SRC:.c=.o)
+PCP_LIB = ./src/libippcp.a
+
+
+$(PCP_OBJ): %.o: %.c
+ $(CC) $(CFLAGS) -I$(API_INCLUDE_DIR) -I$(SRC_INCLUDE_DIR) -I$(PCP_INCLUDE_DIR) -c -o $@ $<
+
+$(PCP_LIB): $(PCP_OBJ)
+ $(AR) rc $@ $^
+ ranlib $@
+
+build: all
+
+all: $(PCP_LIB)
+
+install:
+ mkdir -p '$(LIB_INSTALL_DIR)'
+ cp $(PCP_LIB) '$(LIB_INSTALL_DIR)'
+
+clean:
+ rm -f $(PCP_OBJ) $(PCP_LIB)
+
+
diff --git a/ext/ipp/sources/ippcpepid/Makefile b/ext/ipp/sources/ippcpepid/Makefile
new file mode 100644
index 0000000..632e97a
--- /dev/null
+++ b/ext/ipp/sources/ippcpepid/Makefile
@@ -0,0 +1,32 @@
+#!/usr/bin/make -f
+
+API_INCLUDE_DIR = ../../include
+SRC_INCLUDE_DIR = ../../sources/include
+LIB_INSTALL_DIR = $(epidinstalldir)/lib/posix-$(ARCH)/
+
+PCP_INCLUDE_DIR = ../ippcp/src
+PCPEPID_INCLUDE_DIR = ./src
+PCPEPID_SRC = $(wildcard ./src/*.c)
+PCPEPID_OBJ = $(PCPEPID_SRC:.c=.o)
+PCPEPID_LIB = ./src/libippcpepid.a
+
+
+$(PCPEPID_OBJ): %.o: %.c
+ $(CC) $(CFLAGS) -I$(API_INCLUDE_DIR) -I$(SRC_INCLUDE_DIR) -I$(PCP_INCLUDE_DIR) -I$(PCPEPID_INCLUDE_DIR) -c -o $@ $<
+
+$(PCPEPID_LIB): $(PCPEPID_OBJ)
+ $(AR) rc $@ $^
+ ranlib $@
+
+build: all
+
+all: $(PCPEPID_LIB)
+
+install:
+ mkdir -p '$(LIB_INSTALL_DIR)'
+ cp $(PCPEPID_LIB) '$(LIB_INSTALL_DIR)'
+
+clean:
+ rm -f $(PCPEPID_OBJ) $(PCPEPID_LIB)
+
+
diff --git a/parts-site/configurations/__init__.py b/parts-site/configurations/__init__.py
index e841c39..8e82fa7 100644
--- a/parts-site/configurations/__init__.py
+++ b/parts-site/configurations/__init__.py
@@ -1,25 +1,27 @@
-/*############################################################################
- # Copyright 2016 Intel Corporation
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- ############################################################################*/
+############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################*/
+# pylint: disable=locally-disabled, missing-docstring, no-member, unused-variable
+
import parts.load_module as load_module
import parts.reporter as reporter
-def configuration(type):
+def configuration(type_name):
+ """define configurations"""
try:
- mod=load_module.load_module(
- load_module.get_site_directories('configurations'),type,'configtype')
+ mod = load_module.load_module(
+ load_module.get_site_directories('configurations'), type_name, 'configtype')
except ImportError:
- reporter.report_error('configuration "%s" was not found.'%type,show_stack=False)
-
+ reporter.report_error('configuration "%s" was not found.'%type_name, show_stack=False)
diff --git a/parts-site/configurations/debug/__init__.py b/parts-site/configurations/debug/__init__.py
index 5002098..624392f 100644
--- a/parts-site/configurations/debug/__init__.py
+++ b/parts-site/configurations/debug/__init__.py
@@ -13,8 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################
+# pylint: disable=locally-disabled, missing-docstring
from parts.config import DefineConfiguration
DefineConfiguration("debug", dependsOn='default')
-
diff --git a/parts-site/configurations/debug/g++.py b/parts-site/configurations/debug/g++.py
index 32ac07a..0f11799 100644
--- a/parts-site/configurations/debug/g++.py
+++ b/parts-site/configurations/debug/g++.py
@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################
+# pylint: disable=locally-disabled, invalid-name, missing-docstring
"""g++ compiler configuration for debug
"""
diff --git a/parts-site/configurations/debug/gcc.py b/parts-site/configurations/debug/gcc.py
index f1a8f7e..ebf4162 100644
--- a/parts-site/configurations/debug/gcc.py
+++ b/parts-site/configurations/debug/gcc.py
@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################
+# pylint: disable=locally-disabled, invalid-name, missing-docstring
"""gcc compiler configuration for debug
"""
diff --git a/parts-site/configurations/debug/intelc_posix-any.py b/parts-site/configurations/debug/intelc_posix-any.py
index a17cb2c..8b3d845 100644
--- a/parts-site/configurations/debug/intelc_posix-any.py
+++ b/parts-site/configurations/debug/intelc_posix-any.py
@@ -1,13 +1,24 @@
-# INTEL CORPORATION PROPRIETARY INFORMATION
-# This software is supplied under the terms of a license agreement or
-# nondisclosure agreement with Intel Corporation and may not be copied or
-# disclosed except in accordance with the terms of that agreement
-# Copyright(c) 2016 Intel Corporation. All Rights Reserved.
+############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################
+# pylint: disable=locally-disabled, invalid-name, missing-docstring
-""" Defines build configuration for Parts """
-
-from parts.config import *
+"""Intel posix compiler configuration for debug
+"""
+from parts.config import ConfigValues, configuration
def map_default_version(env):
return env['INTELC_VERSION']
@@ -34,4 +45,4 @@ config.VersionRange("7-*",
'-std=c++0x',
]
)
- )
+ )
diff --git a/parts-site/configurations/debug/intelc_win32-any_win32-x86.py b/parts-site/configurations/debug/intelc_win32-any_win32-x86.py
index 60ea32c..c95da26 100644
--- a/parts-site/configurations/debug/intelc_win32-any_win32-x86.py
+++ b/parts-site/configurations/debug/intelc_win32-any_win32-x86.py
@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################
+# pylint: disable=locally-disabled, invalid-name, missing-docstring
"""Intel win32 compiler configuration for debug
"""
diff --git a/parts-site/configurations/debug/intelc_win32-any_win32-x86_64.py b/parts-site/configurations/debug/intelc_win32-any_win32-x86_64.py
index 749f439..9af6428 100644
--- a/parts-site/configurations/debug/intelc_win32-any_win32-x86_64.py
+++ b/parts-site/configurations/debug/intelc_win32-any_win32-x86_64.py
@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################
+# pylint: disable=locally-disabled, invalid-name, missing-docstring
"""Intel win32 compiler configuration for debug
"""
diff --git a/parts-site/configurations/debug/msvc_win32-any_win32-x86.py b/parts-site/configurations/debug/msvc_win32-any_win32-x86.py
index 6a4406e..713a33f 100644
--- a/parts-site/configurations/debug/msvc_win32-any_win32-x86.py
+++ b/parts-site/configurations/debug/msvc_win32-any_win32-x86.py
@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################
+# pylint: disable=locally-disabled, invalid-name, missing-docstring
"""MSVC win32 compiler configuration for debug
"""
diff --git a/parts-site/configurations/debug/msvc_win32-any_win32-x86_64.py b/parts-site/configurations/debug/msvc_win32-any_win32-x86_64.py
index 04f843b..e665283 100644
--- a/parts-site/configurations/debug/msvc_win32-any_win32-x86_64.py
+++ b/parts-site/configurations/debug/msvc_win32-any_win32-x86_64.py
@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################
+# pylint: disable=locally-disabled, invalid-name, missing-docstring
"""MSVC win32 compiler configuration for debug
"""
diff --git a/parts-site/configurations/release/__init__.py b/parts-site/configurations/release/__init__.py
index f6ecebc..a571c53 100644
--- a/parts-site/configurations/release/__init__.py
+++ b/parts-site/configurations/release/__init__.py
@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################
+# pylint: disable=locally-disabled, missing-docstring
from parts.config import DefineConfiguration
diff --git a/parts-site/configurations/release/g++.py b/parts-site/configurations/release/g++.py
index 2ae9459..21ba88d 100644
--- a/parts-site/configurations/release/g++.py
+++ b/parts-site/configurations/release/g++.py
@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################
+# pylint: disable=locally-disabled, invalid-name, missing-docstring
"""g++ compiler configuration for release
"""
diff --git a/parts-site/configurations/release/gcc.py b/parts-site/configurations/release/gcc.py
index 5ce09b8..55e3201 100644
--- a/parts-site/configurations/release/gcc.py
+++ b/parts-site/configurations/release/gcc.py
@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################
+# pylint: disable=locally-disabled, invalid-name, missing-docstring
"""gcc compiler configuration for release
"""
diff --git a/parts-site/configurations/release/intelc_posix-any.py b/parts-site/configurations/release/intelc_posix-any.py
index 70e7f2c..a1b587a 100644
--- a/parts-site/configurations/release/intelc_posix-any.py
+++ b/parts-site/configurations/release/intelc_posix-any.py
@@ -1,13 +1,24 @@
-# INTEL CORPORATION PROPRIETARY INFORMATION
-# This software is supplied under the terms of a license agreement or
-# nondisclosure agreement with Intel Corporation and may not be copied or
-# disclosed except in accordance with the terms of that agreement
-# Copyright(c) 2016 Intel Corporation. All Rights Reserved.
+############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################
+# pylint: disable=locally-disabled, invalid-name, missing-docstring
-""" Defines build configuration for Parts """
-
-from parts.config import *
+"""Intel posix compiler configuration for release
+"""
+from parts.config import ConfigValues, configuration
def map_default_version(env):
return env['INTELC_VERSION']
@@ -35,4 +46,4 @@ config.VersionRange("7-*",
],
CPPDEFINES=['NDEBUG']
)
- )
+ )
diff --git a/parts-site/configurations/release/intelc_win32-any_win32-x86.py b/parts-site/configurations/release/intelc_win32-any_win32-x86.py
index 338d877..54b8f08 100644
--- a/parts-site/configurations/release/intelc_win32-any_win32-x86.py
+++ b/parts-site/configurations/release/intelc_win32-any_win32-x86.py
@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################
+# pylint: disable=locally-disabled, invalid-name, missing-docstring
"""Intel win32 compiler configuration for release
"""
diff --git a/parts-site/configurations/release/intelc_win32-any_win32-x86_64.py b/parts-site/configurations/release/intelc_win32-any_win32-x86_64.py
index c2eb06a..44e28ed 100644
--- a/parts-site/configurations/release/intelc_win32-any_win32-x86_64.py
+++ b/parts-site/configurations/release/intelc_win32-any_win32-x86_64.py
@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################
+# pylint: disable=locally-disabled, invalid-name, missing-docstring
"""Intel win32 compiler configurations release
"""
diff --git a/parts-site/configurations/release/msvc_win32-any_win32-x86.py b/parts-site/configurations/release/msvc_win32-any_win32-x86.py
index b3dd7bd..6d7a5d5 100644
--- a/parts-site/configurations/release/msvc_win32-any_win32-x86.py
+++ b/parts-site/configurations/release/msvc_win32-any_win32-x86.py
@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################
+# pylint: disable=locally-disabled, invalid-name, missing-docstring
"""Intel win32 compiler configurations release
"""
diff --git a/parts-site/configurations/release/msvc_win32-any_win32-x86_64.py b/parts-site/configurations/release/msvc_win32-any_win32-x86_64.py
index f5a6933..3a14b84 100644
--- a/parts-site/configurations/release/msvc_win32-any_win32-x86_64.py
+++ b/parts-site/configurations/release/msvc_win32-any_win32-x86_64.py
@@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
############################################################################
+# pylint: disable=locally-disabled, invalid-name, missing-docstring
"""Intel win32 compiler configurations release
"""
diff --git a/tools/Makefile b/tools/Makefile
new file mode 100644
index 0000000..03c8c88
--- /dev/null
+++ b/tools/Makefile
@@ -0,0 +1,107 @@
+#!/usr/bin/make -f
+
+#define variables
+TOOLS_INSTALL_DIR = $(epidinstalldir)/tools
+
+EXTRACTGRPS_INCLUDE_DIR = ./extractgrps
+EXTRACTGRPS_SRC = $(wildcard ./extractgrps/src/*.c)
+EXTRACTGRPS_OBJ = $(EXTRACTGRPS_SRC:.c=.o)
+EXTRACTGRPS_EXE = ./extractgrps/src/extractgrps
+
+EXTRACTKEYS_INCLUDE_DIR = ./extractkeys
+EXTRACTKEYS_SRC = $(wildcard ./extractkeys/src/*.c)
+EXTRACTKEYS_OBJ = $(EXTRACTKEYS_SRC:.c=.o)
+EXTRACTKEYS_EXE = ./extractkeys/src/extractkeys
+
+REVOKEGRP_INCLUDE_DIR = ./revokegrp
+REVOKEGRP_SRC = $(wildcard ./revokegrp/src/*.c)
+REVOKEGRP_OBJ = $(REVOKEGRP_SRC:.c=.o)
+REVOKEGRP_EXE = ./revokegrp/src/revokegrp
+
+REVOKEKEY_INCLUDE_DIR = ./revokekey
+REVOKEKEY_SRC = $(wildcard ./revokekey/src/*.c)
+REVOKEKEY_OBJ = $(REVOKEKEY_SRC:.c=.o)
+REVOKEKEY_EXE = ./revokekey/src/revokekey
+
+REVOKESIG_INCLUDE_DIR = ./revokesig
+REVOKESIG_SRC = $(wildcard ./revokesig/src/*.c)
+REVOKESIG_OBJ = $(REVOKESIG_SRC:.c=.o)
+REVOKESIG_EXE = ./revokesig/src/revokesig
+
+EPID_SDK_ROOT_DIR = ..
+EXAMPLE_DIR = $(EPID_SDK_ROOT_DIR)/example
+LIB_DROPT_DIR = $(EPID_SDK_ROOT_DIR)/ext/dropt/src
+LIB_UTIL_DIR = $(EPID_SDK_ROOT_DIR)/example/util/src
+LIB_IPPCP_DIR = $(EPID_SDK_ROOT_DIR)/ext/ipp/sources/ippcp/src
+LIB_IPPCPEPID_DIR = $(EPID_SDK_ROOT_DIR)/ext/ipp/sources/ippcpepid/src
+LIB_MEMBER_DIR = $(EPID_SDK_ROOT_DIR)/epid/member
+LIB_COMMON_DIR = $(EPID_SDK_ROOT_DIR)/epid/common
+
+#set linker flags
+LDFLAGS += -L$(LIB_UTIL_DIR) \
+ -L$(LIB_DROPT_DIR) \
+ -L$(LIB_IPPCP_DIR) \
+ -L$(LIB_COMMON_DIR) \
+ -L$(LIB_IPPCPEPID_DIR) \
+ -lcommon -lippcpepid \
+ -lippcp -lutil -ldropt
+
+$(EXTRACTGRPS_EXE): $(EXTRACTGRPS_OBJ)
+ $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)
+
+$(EXTRACTGRPS_OBJ): %.o: %.c
+ $(CC) -o $@ $(CFLAGS) -I$(EPID_SDK_ROOT_DIR) \
+ -I${EXAMPLE_DIR} -I$(EXTRACTGRPS_INCLUDE_DIR) \
+ -I${LIB_DROPT_DIR}/../include \
+ -c $^
+
+$(EXTRACTKEYS_EXE): $(EXTRACTKEYS_OBJ)
+ $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)
+
+$(EXTRACTKEYS_OBJ): %.o: %.c
+ $(CC) -o $@ $(CFLAGS) -I$(EPID_SDK_ROOT_DIR) \
+ -I${EXAMPLE_DIR} -I$(EXTRACTKEYS_INCLUDE_DIR) \
+ -I${LIB_DROPT_DIR}/../include \
+ -c $^
+
+$(REVOKEGRP_EXE): $(REVOKEGRP_OBJ)
+ $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)
+
+$(REVOKEGRP_OBJ): %.o: %.c
+ $(CC) -o $@ $(CFLAGS) -I$(EPID_SDK_ROOT_DIR) \
+ -I${EXAMPLE_DIR} -I$(REVOKEGRP_INCLUDE_DIR) \
+ -I${LIB_DROPT_DIR}/../include \
+ -c $^
+
+$(REVOKEKEY_EXE): $(REVOKEKEY_OBJ)
+ $(CC) -o $@ $^ $(CFLAGS) -L$(LIB_MEMBER_DIR) -lmember $(LDFLAGS)
+
+$(REVOKEKEY_OBJ): %.o: %.c
+ $(CC) -o $@ $(CFLAGS) -I$(EPID_SDK_ROOT_DIR) \
+ -I$(LIB_MEMBER_DIR)/../.. \
+ -I${EXAMPLE_DIR} -I$(REVOKEKEY_INCLUDE_DIR) \
+ -I${LIB_DROPT_DIR}/../include \
+ -c $^
+
+$(REVOKESIG_EXE): $(REVOKESIG_OBJ)
+ $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)
+
+$(REVOKESIG_OBJ): %.o: %.c
+ $(CC) -o $@ $(CFLAGS) -I$(EPID_SDK_ROOT_DIR) \
+ -I${EXAMPLE_DIR} -I$(REVOKESIG_INCLUDE_DIR) \
+ -I${LIB_DROPT_DIR}/../include \
+ -c $^
+
+#target part
+build: all install
+
+all: $(EXTRACTGRPS_EXE) $(EXTRACTKEYS_EXE) $(REVOKEGRP_EXE) $(REVOKEKEY_EXE) $(REVOKESIG_EXE)
+
+install:
+ mkdir -p '$(TOOLS_INSTALL_DIR)'
+ cp $(EXTRACTGRPS_EXE) $(EXTRACTKEYS_EXE) $(REVOKEGRP_EXE) $(REVOKEKEY_EXE) $(REVOKESIG_EXE) \
+ '$(TOOLS_INSTALL_DIR)'
+
+clean:
+ rm -f $(EXTRACTGRPS_EXE) $(EXTRACTKEYS_EXE) $(REVOKEGRP_EXE) $(REVOKEKEY_EXE) $(REVOKESIG_EXE) \
+ $(EXTRACTGRPS_OBJ) $(EXTRACTKEYS_OBJ) $(REVOKEGRP_OBJ) $(REVOKEKEY_OBJ) $(REVOKESIG_OBJ)
diff --git a/tools/extractgrps/extractgrps.parts b/tools/extractgrps/extractgrps.parts
new file mode 100644
index 0000000..93aa46c
--- /dev/null
+++ b/tools/extractgrps/extractgrps.parts
@@ -0,0 +1,47 @@
+############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################
+
+Import('*')
+
+env.PartName("extractgrps")
+
+src_files = Pattern(src_dir='src/',
+ includes=['*.c'],
+ recursive=True).files()
+
+parts_file = ['extractgrps.parts']
+
+if 'install_package' in env['MODE']:
+ env.InstallTopLevel(src_files, sub_dir='tools/${PART_SHORT_NAME}/src')
+ env.InstallTopLevel(parts_file, sub_dir='tools/${PART_SHORT_NAME}')
+else:
+ env.DependsOn([
+ Component('common'),
+ Component('util'),
+ Component('dropt')
+ ])
+
+ if env['TARGET_PLATFORM']['OS'] == 'win32':
+ env.Append(CPPDEFINES='_CRT_SECURE_NO_WARNINGS')
+ if env.isConfigBasedOn('debug'):
+ env['PDB'] = '${PART_NAME}.pdb'
+
+ outputs = env.Program('${PART_NAME}', src_files,
+ no_import_lib=True)
+
+ env.InstallBin(outputs,
+ no_pkg=False,
+ INSTALL_BIN='${INSTALL_TOOLS_BIN}')
diff --git a/tools/extractgrps/src/main.c b/tools/extractgrps/src/main.c
new file mode 100644
index 0000000..164a348
--- /dev/null
+++ b/tools/extractgrps/src/main.c
@@ -0,0 +1,227 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ *
+ * \brief Extract group keys from EPID group key output file
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <dropt.h>
+
+#include "util/envutil.h"
+#include "util/stdtypes.h"
+#include "util/buffutil.h"
+#include "util/strutil.h"
+#include "epid/common/types.h"
+#include "epid/common/file_parser.h"
+
+#define PROGRAM_NAME "extractgrps"
+
+#pragma pack(1)
+/// EPID Key Output File Entry
+typedef struct EpidBinaryGroupCertificate {
+ EpidFileHeader header; ///< EPID binary file header
+ GroupPubKey pubkey; ///< EPID 2.0 group public key
+ EcdsaSignature signature; ///< ECDSA Signature on SHA-256 of above values
+} EpidBinaryGroupCertificate;
+#pragma pack()
+
+/// Main entrypoint
+int main(int argc, char* argv[]) {
+ // intermediate return value for C style functions
+ int ret_value = EXIT_SUCCESS;
+
+ size_t keyfile_size = 0;
+ size_t num_keys_extracted = 0;
+ size_t num_keys_in_file = 0;
+
+ char* end = NULL;
+ FILE* file = NULL;
+
+ unsigned int i = 0;
+ size_t bytes_read = 0;
+
+ // File to extract keys from
+ static char* keyfile_name = NULL;
+
+ // Number of keys to extract
+ static size_t num_keys_to_extract = 0;
+
+ // help flag parameter
+ static bool show_help = false;
+
+ // Verbose flag parameter
+ static bool verbose = false;
+
+ dropt_option options[] = {
+ {'h', "help", "display this help and exit", NULL, dropt_handle_bool,
+ &show_help, dropt_attr_halt},
+ {'v', "verbose", "print status messages to stdout", NULL,
+ dropt_handle_bool, &verbose},
+
+ {0} /* Required sentinel value. */
+ };
+
+ dropt_context* dropt_ctx = NULL;
+ // set program name for logging
+ set_prog_name(PROGRAM_NAME);
+ do {
+ dropt_ctx = dropt_new_context(options);
+ if (!dropt_ctx) {
+ ret_value = EXIT_FAILURE;
+ break;
+ } else if (argc > 0) {
+ /* Parse the arguments from argv.
+ *
+ * argv[1] is always safe to access since argv[argc] is guaranteed
+ * to be NULL and since we've established that argc > 0.
+ */
+ char** rest = dropt_parse(dropt_ctx, -1, &argv[1]);
+ if (dropt_get_error(dropt_ctx) != dropt_error_none) {
+ log_error(dropt_get_error_message(dropt_ctx));
+ if (dropt_error_invalid_option == dropt_get_error(dropt_ctx)) {
+ fprintf(stderr, "Try '%s --help' for more information.\n",
+ PROGRAM_NAME);
+ }
+ ret_value = EXIT_FAILURE;
+ break;
+ } else if (show_help) {
+ log_fmt(
+ "Usage: %s [OPTION]... [FILE] [NUM]\n"
+ "Extract the first NUM group certs from FILE to current "
+ "directory\n"
+ "\n"
+ "Options:\n",
+ PROGRAM_NAME);
+ dropt_print_help(stdout, dropt_ctx, NULL);
+ ret_value = EXIT_SUCCESS;
+ break;
+ } else {
+ // number of arguments rest
+ size_t rest_count = 0;
+
+ if (verbose) {
+ verbose = ToggleVerbosity();
+ }
+
+ // count number of arguments rest
+ while (rest[rest_count]) rest_count++;
+
+ if (2 != rest_count) {
+ log_error("unexpected number of arguments", *rest);
+ fprintf(stderr, "Try '%s --help' for more information.\n",
+ PROGRAM_NAME);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ keyfile_name = rest[0];
+
+ num_keys_to_extract = strtoul(rest[1], &end, 10);
+ if ('\0' != *end) {
+ log_error("input '%s' is invalid: not a valid number of group keys",
+ rest[1]);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ }
+ }
+
+ // check file existence
+ if (!FileExists(keyfile_name)) {
+ log_error("cannot access '%s'", keyfile_name);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ keyfile_size = GetFileSize(keyfile_name);
+ if (0 != keyfile_size % sizeof(EpidBinaryGroupCertificate)) {
+ log_error(
+ "input file '%s' is invalid: does not contain integral number of "
+ "group keys",
+ keyfile_name);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ num_keys_in_file = keyfile_size / sizeof(EpidBinaryGroupCertificate);
+
+ if (num_keys_to_extract > num_keys_in_file) {
+ log_error("can not extract %d keys: only %d in file", num_keys_to_extract,
+ num_keys_in_file);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ file = fopen(keyfile_name, "rb");
+ if (!file) {
+ log_error("failed read from '%s'", keyfile_name);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // start extraction
+ for (i = 0; i < num_keys_to_extract; i++) {
+ EpidBinaryGroupCertificate temp;
+ int seek_failed = 0;
+ seek_failed = fseek(file, i * sizeof(temp), SEEK_SET);
+ bytes_read = fread(&temp, 1, sizeof(temp), file);
+ if (seek_failed || bytes_read != sizeof(temp)) {
+ log_error("failed to extract key #%lu from '%s'", i, keyfile_name);
+ } else {
+ // ulong max = 4294967295
+ char outkeyname[256] = {0};
+ if (memcmp(&kEpidVersionCode[kEpid2x], &temp.header.epid_version,
+ sizeof(temp.header.epid_version)) ||
+ memcmp(&kEpidFileTypeCode[kGroupPubKeyFile], &temp.header.file_type,
+ sizeof(temp.header.file_type))) {
+ log_error("failed to extract key #%lu from '%s': file is invalid", i,
+ keyfile_name);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ snprintf(outkeyname, sizeof(outkeyname), "pubkey%010u.bin", i);
+ if (FileExists(outkeyname)) {
+ log_error("file '%s' already exists", outkeyname);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ if (0 != WriteLoud(&temp, sizeof(temp), outkeyname)) {
+ log_error("failed to write key #%lu from '%s'", i, keyfile_name);
+ } else {
+ num_keys_extracted++;
+ }
+ }
+ }
+ if (EXIT_FAILURE == ret_value) {
+ break;
+ }
+
+ log_msg("extracted %lu of %lu keys", num_keys_extracted, num_keys_in_file);
+ } while (0);
+
+ if (file) {
+ fclose(file);
+ file = NULL;
+ }
+
+ dropt_free_context(dropt_ctx);
+
+ return ret_value;
+}
diff --git a/tools/extractkeys/extractkeys.parts b/tools/extractkeys/extractkeys.parts
new file mode 100644
index 0000000..89e3f0d
--- /dev/null
+++ b/tools/extractkeys/extractkeys.parts
@@ -0,0 +1,47 @@
+############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################
+
+Import('*')
+
+env.PartName("extractkeys")
+
+src_files = Pattern(src_dir='src/',
+ includes=['*.c'],
+ recursive=True).files()
+
+parts_file = ['extractkeys.parts']
+
+if 'install_package' in env['MODE']:
+ env.InstallTopLevel(src_files, sub_dir='tools/${PART_SHORT_NAME}/src')
+ env.InstallTopLevel(parts_file, sub_dir='tools/${PART_SHORT_NAME}')
+else:
+ env.DependsOn([
+ Component('common'),
+ Component('util'),
+ Component('dropt')
+ ])
+
+ if env['TARGET_PLATFORM']['OS'] == 'win32':
+ env.Append(CPPDEFINES='_CRT_SECURE_NO_WARNINGS')
+ if env.isConfigBasedOn('debug'):
+ env['PDB'] = '${PART_NAME}.pdb'
+
+ outputs = env.Program('${PART_NAME}', src_files,
+ no_import_lib=True)
+
+ env.InstallBin(outputs,
+ no_pkg=False,
+ INSTALL_BIN='${INSTALL_TOOLS_BIN}')
diff --git a/tools/extractkeys/src/main.c b/tools/extractkeys/src/main.c
new file mode 100644
index 0000000..6754a6d
--- /dev/null
+++ b/tools/extractkeys/src/main.c
@@ -0,0 +1,252 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ *
+ * \brief Extract member private keys from EPID key output file
+ *
+ * Not validating SHA hashes in key file
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <dropt.h>
+#include "util/envutil.h"
+#include "util/stdtypes.h"
+#include "util/buffutil.h"
+#include "util/strutil.h"
+#include "epid/common/types.h"
+
+#define PROGRAM_NAME "extractkeys"
+#define MANDATORY_PARAM_COUNT 2
+
+#pragma pack(1)
+/// EPID Key Output File Entry
+typedef struct EpidKeyOutputFileKey {
+ unsigned char product_id[2]; ///< 2-byte Product ID (Big Endian)
+ unsigned char key_id[8]; ///< 8-byte Key Unique Id(Big Endian)
+ unsigned char svn[4]; ///< 4-byte Security Version Number (SVN) (Big Endian)
+ PrivKey privkey; ///< EPID 2.0 Private Key
+ unsigned char hash[20]; ///< 20-byte SHA-1 of above
+} EpidKeyOutputFileKey;
+
+/// EPID Compressed Key Output File Entry
+typedef struct EpidCompressedKeyOutputFileKey {
+ unsigned char product_id[2]; ///< 2-byte Product ID (Big Endian)
+ unsigned char key_id[8]; ///< 8-byte Key Unique Id(Big Endian)
+ unsigned char svn[4]; ///< 4-byte Security Version Number (SVN) (Big Endian)
+ CompressedPrivKey privkey; ///< EPID 2.0 Compressed Private Key
+ unsigned char hash[20]; ///< 20-byte SHA-1 of above
+} EpidCompressedKeyOutputFileKey;
+#pragma pack()
+
+/// Main entrypoint
+int main(int argc, char* argv[]) {
+ // intermediate return value for C style functions
+ int ret_value = EXIT_SUCCESS;
+ // Buffer to store read key
+ uint8_t temp[sizeof(EpidKeyOutputFileKey)] = {0};
+
+ // Private key to extract
+ void* privkey = 0;
+ size_t privkey_size = 0;
+
+ size_t keyfile_size = 0;
+ size_t keyfile_entry_size = 0;
+ size_t num_keys_extracted = 0;
+ size_t num_keys_in_file = 0;
+
+ char* end = NULL;
+ FILE* file = NULL;
+
+ // File to extract keys from
+ static char* keyfile_name = NULL;
+
+ // Number of keys to extract
+ static size_t num_keys_to_extract = 0;
+
+ // help flag parameter
+ static bool show_help = false;
+
+ // Verbose flag parameter
+ static bool verbose = false;
+
+ // Compressed flag parameter
+ static bool compressed = false;
+
+ unsigned int i = 0;
+ size_t bytes_read = 0;
+
+ dropt_option options[] = {
+ {'c', "compressed", "extract compressed keys", NULL, dropt_handle_bool,
+ &compressed},
+ {'h', "help", "display this help and exit", NULL, dropt_handle_bool,
+ &show_help, dropt_attr_halt},
+ {'v', "verbose", "print status messages to stdout", NULL,
+ dropt_handle_bool, &verbose},
+
+ {0} /* Required sentinel value. */
+ };
+
+ dropt_context* dropt_ctx = NULL;
+ (void)argc;
+ // set program name for logging
+ set_prog_name(PROGRAM_NAME);
+
+ do {
+ dropt_ctx = dropt_new_context(options);
+
+ if (dropt_ctx && argc > 0) {
+ char** rest = dropt_parse(dropt_ctx, -1, &argv[1]);
+
+ if (dropt_get_error(dropt_ctx) != dropt_error_none) {
+ log_error(dropt_get_error_message(dropt_ctx));
+ if (dropt_error_invalid_option == dropt_get_error(dropt_ctx)) {
+ fprintf(stderr, "Try '%s --help' for more information.\n",
+ PROGRAM_NAME);
+ }
+ ret_value = EXIT_FAILURE;
+ break;
+ } else if (show_help) {
+ log_fmt(
+ "Usage: %s [OPTION]... [FILE] [NUM]\n"
+
+ "Extract the first NUM private keys from FILE to current "
+ "directory.\n\n"
+ "Options:\n",
+ PROGRAM_NAME);
+ dropt_print_help(stdout, dropt_ctx, NULL);
+ ret_value = EXIT_SUCCESS;
+ break;
+ } else {
+ size_t rest_count = 0;
+ if (verbose) verbose = ToggleVerbosity();
+
+ // count number of arguments rest
+ while (rest[rest_count]) rest_count++;
+ if (rest_count != MANDATORY_PARAM_COUNT) {
+ log_error(
+ "%s arguments: found %i positional arguments, expected %i",
+ (rest_count < MANDATORY_PARAM_COUNT) ? "missing" : "too many",
+ rest_count, MANDATORY_PARAM_COUNT);
+
+ fprintf(stderr, "Try '%s --help' for more information.\n",
+ PROGRAM_NAME);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ keyfile_name = *(rest);
+
+ num_keys_to_extract = strtoul(*(rest + 1), &end, 10);
+ if ('\0' != *end) {
+ log_error("input '%s' is invalid: not a valid number of keys",
+ *(rest + 1));
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ }
+
+ } else {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // check file existence
+ if (!FileExists(keyfile_name)) {
+ log_error("cannot access '%s'", keyfile_name);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ keyfile_size = GetFileSize(keyfile_name);
+ if (compressed) {
+ privkey_size = sizeof(CompressedPrivKey);
+ privkey = &(((EpidCompressedKeyOutputFileKey*)&temp[0])->privkey);
+ keyfile_entry_size = sizeof(EpidCompressedKeyOutputFileKey);
+ } else {
+ privkey_size = sizeof(PrivKey);
+ privkey = &(((EpidKeyOutputFileKey*)&temp[0])->privkey);
+ keyfile_entry_size = sizeof(EpidKeyOutputFileKey);
+ }
+
+ if (0 != keyfile_size % keyfile_entry_size) {
+ log_error(
+ "input file '%s' is invalid: does not contain integral number of "
+ "keys",
+ keyfile_name);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ num_keys_in_file = keyfile_size / keyfile_entry_size;
+
+ if (num_keys_to_extract > num_keys_in_file) {
+ log_error("can not extract %d keys: only %d in file", num_keys_to_extract,
+ num_keys_in_file);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ file = fopen(keyfile_name, "rb");
+ if (!file) {
+ log_error("failed read from '%s'", keyfile_name);
+
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // start extraction
+ for (i = 0; i < num_keys_to_extract; ++i) {
+ int seek_failed = 0;
+ seek_failed = fseek(file, (int)(i * keyfile_entry_size), SEEK_SET);
+ bytes_read = fread(&temp, 1, keyfile_entry_size, file);
+ if (seek_failed || bytes_read != keyfile_entry_size) {
+ log_error("failed to extract key #%lu from '%s'", i, keyfile_name);
+ } else {
+ char outkeyname[256] = {0};
+ snprintf(outkeyname, sizeof(outkeyname), "mprivkey%010u.dat", i);
+
+ if (FileExists(outkeyname)) {
+ log_error("file '%s' already exists", outkeyname);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ if (0 != WriteLoud(privkey, privkey_size, outkeyname)) {
+ log_error("failed to write key #%lu from '%s'", i, keyfile_name);
+ } else {
+ num_keys_extracted++;
+ }
+ }
+ }
+ if (EXIT_FAILURE == ret_value) {
+ break;
+ }
+
+ log_msg("extracted %lu of %lu keys", num_keys_extracted, num_keys_in_file);
+ } while (0);
+
+ if (file) {
+ fclose(file);
+ file = NULL;
+ }
+
+ dropt_free_context(dropt_ctx);
+ dropt_ctx = NULL;
+
+ return ret_value;
+}
diff --git a/tools/revokegrp/revokegrp.parts b/tools/revokegrp/revokegrp.parts
new file mode 100644
index 0000000..053c88f
--- /dev/null
+++ b/tools/revokegrp/revokegrp.parts
@@ -0,0 +1,46 @@
+############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################
+
+Import('*')
+
+env.PartName("revokegrp")
+
+src_files = Pattern(src_dir='src/',
+ includes=['*.c'],
+ recursive=True).files()
+
+parts_file = ['revokegrp.parts']
+
+if 'install_package' in env['MODE']:
+ env.InstallTopLevel(src_files, sub_dir='tools/${PART_SHORT_NAME}/src')
+ env.InstallTopLevel(parts_file, sub_dir='tools/${PART_SHORT_NAME}')
+else:
+ env.DependsOn([
+ Component('common'),
+ Component('util'),
+ Component('dropt')
+ ])
+
+ if env['TARGET_PLATFORM']['OS'] == 'win32':
+ if env.isConfigBasedOn('debug'):
+ env['PDB'] = '${PART_NAME}.pdb'
+
+ outputs = env.Program('${PART_NAME}', src_files,
+ no_import_lib=True)
+
+ env.InstallBin(outputs,
+ no_pkg=False,
+ INSTALL_BIN='${INSTALL_TOOLS_BIN}')
diff --git a/tools/revokegrp/src/main.c b/tools/revokegrp/src/main.c
new file mode 100644
index 0000000..7213150
--- /dev/null
+++ b/tools/revokegrp/src/main.c
@@ -0,0 +1,382 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ *
+ * \brief Create group revocation list request
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <dropt.h>
+#include "util/buffutil.h"
+#include "util/envutil.h"
+#include "util/stdtypes.h"
+#include "epid/common/file_parser.h"
+
+const OctStr16 kEpidFileVersion = {2, 0};
+
+// Defaults
+#define PROGRAM_NAME "revokegrp"
+#define PUBKEYFILE_DEFAULT "pubkey.bin"
+#define REQFILE_DEFAULT "grprlreq.dat"
+#define REASON_DEFAULT 0
+#define GROUP_PUB_KEY_SIZE \
+ (sizeof(EpidFileHeader) + sizeof(GroupPubKey) + sizeof(EcdsaSignature))
+#define STRINGIZE(a) #a
+
+#pragma pack(1)
+/// Group revocation request entry
+typedef struct GrpInfo {
+ GroupId gid; ///< EPID Group ID
+ uint8_t reason; ///< Revocation reason
+} GrpInfo;
+/// Group Revocation request
+typedef struct GrpRlRequest {
+ EpidFileHeader header; ///< EPID File Header
+ uint32_t count; ///< Revoked count (big endian)
+ GrpInfo groups[1]; ///< Revoked group count (flexible array)
+} GrpRlRequest;
+#pragma pack()
+
+/// convert host to network byte order
+static uint32_t htonl(uint32_t hostlong) {
+ return (((hostlong & 0xFF) << 24) | ((hostlong & 0xFF00) << 8) |
+ ((hostlong & 0xFF0000) >> 8) | ((hostlong & 0xFF000000) >> 24));
+}
+/// convert network to host byte order
+static uint32_t ntohl(uint32_t netlong) {
+ return (((netlong & 0xFF) << 24) | ((netlong & 0xFF00) << 8) |
+ ((netlong & 0xFF0000) >> 8) | ((netlong & 0xFF000000) >> 24));
+}
+
+/// Makes a request and appends it to file.
+/*!
+\param[in] cacert_file
+Issuing CA certificate used to sign group public key file.
+\param[in] pubkey_file
+File containing group public key.
+\param[in] req_file
+File to write a request.
+\param[in] reason
+Revokation reason.
+\param[in] verbose
+If true function would print debug information to stdout.
+*/
+int MakeRequest(char const* cacert_file, char const* pubkey_file,
+ char const* req_file, uint8_t reason, bool verbose);
+
+/// Main entrypoint
+int main(int argc, char* argv[]) {
+ // intermediate return value for C style functions
+ int ret_value = EXIT_FAILURE;
+
+ // User Settings
+
+ // Group revocation request file name parameter
+ static char* req_file = NULL;
+
+ // Group public key file name parameter
+ static char* pubkey_file = NULL;
+
+ // CA certificate file name parameter
+ static char* cacert_file = NULL;
+
+ // Revocation reason
+ static uint32_t reason = REASON_DEFAULT;
+
+ // help flag parameter
+ static bool show_help = false;
+
+ // Verbose flag parameter
+ static bool verbose = false;
+
+ dropt_option options[] = {
+ {'\0', "gpubkey",
+ "load group public key from FILE (default: " PUBKEYFILE_DEFAULT ")",
+ "FILE", dropt_handle_string, &pubkey_file},
+ {'\0', "capubkey", "load IoT Issuing CA public key from FILE", "FILE",
+ dropt_handle_string, &cacert_file},
+ {'\0', "reason",
+ "revocation reason (default: " STRINGIZE(REASON_DEFAULT) ")", "FILE",
+ dropt_handle_uint, &reason},
+ {'\0', "req",
+ "append signature revocation request to FILE (default: " REQFILE_DEFAULT
+ ")",
+ "FILE", dropt_handle_string, &req_file},
+
+ {'h', "help", "display this help and exit", NULL, dropt_handle_bool,
+ &show_help, dropt_attr_halt},
+ {'v', "verbose", "print status messages to stdout", NULL,
+ dropt_handle_bool, &verbose},
+
+ {0} /* Required sentinel value. */
+ };
+ dropt_context* dropt_ctx = NULL;
+ // set program name for logging
+ set_prog_name(PROGRAM_NAME);
+ do {
+ dropt_ctx = dropt_new_context(options);
+ if (!dropt_ctx) {
+ ret_value = EXIT_FAILURE;
+ break;
+ } else if (argc > 0) {
+ /* Parse the arguments from argv.
+ *
+ * argv[1] is always safe to access since argv[argc] is guaranteed
+ * to be NULL and since we've established that argc > 0.
+ */
+ char** rest = dropt_parse(dropt_ctx, -1, &argv[1]);
+ if (dropt_get_error(dropt_ctx) != dropt_error_none) {
+ log_error(dropt_get_error_message(dropt_ctx));
+ if (dropt_error_invalid_option == dropt_get_error(dropt_ctx)) {
+ fprintf(stderr, "Try '%s --help' for more information.\n",
+ PROGRAM_NAME);
+ }
+ ret_value = EXIT_FAILURE;
+ break;
+ } else if (show_help) {
+ log_fmt(
+ "Usage: %s [OPTION]...\n"
+ "Revoke Intel(R) EPID group\n"
+ "\n"
+ "Options:\n",
+ PROGRAM_NAME);
+ dropt_print_help(stdout, dropt_ctx, NULL);
+ ret_value = EXIT_SUCCESS;
+ break;
+ } else if (*rest) {
+ // we have unparsed (positional) arguments
+ log_error("invalid argument: %s", *rest);
+ fprintf(stderr, "Try '%s --help' for more information\n", PROGRAM_NAME);
+ ret_value = EXIT_FAILURE;
+ break;
+ } else {
+ if (reason > UCHAR_MAX) {
+ log_error(
+ "unexpected reason value. Value of the reason must be lesser or "
+ "equal to %d",
+ UCHAR_MAX);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ if (verbose) {
+ verbose = ToggleVerbosity();
+ }
+ if (!pubkey_file) {
+ pubkey_file = PUBKEYFILE_DEFAULT;
+ }
+ if (!cacert_file) {
+ log_error("issuing CA public key must be specified");
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ if (!req_file) {
+ req_file = REQFILE_DEFAULT;
+ }
+ if (verbose) {
+ log_msg("\nOption values:");
+ log_msg(" pubkey_file : %s", pubkey_file);
+ log_msg(" cacert_file : %s", cacert_file);
+ log_msg(" reason : %d", reason);
+ log_msg(" req_file : %s", req_file);
+ log_msg("");
+ }
+ }
+ }
+
+ ret_value = MakeRequest(cacert_file, pubkey_file, req_file, (uint8_t)reason,
+ verbose);
+ } while (0);
+ dropt_free_context(dropt_ctx);
+ return ret_value;
+}
+
+int MakeRequest(char const* cacert_file, char const* pubkey_file,
+ char const* req_file, uint8_t reason, bool verbose) {
+ // Group index and count
+ uint32_t grp_index = 0;
+ uint32_t grp_count = 0;
+
+ // Buffers and computed values
+ // Group public key file
+ unsigned char* pubkey_file_data = NULL;
+ size_t pubkey_file_size = 0;
+
+ // Group public key buffer
+ GroupPubKey pubkey = {0};
+
+ // CA certificate
+ EpidCaCertificate cacert = {0};
+
+ // Request buffer
+ uint8_t* req_buf = NULL;
+ size_t req_size = 0;
+ size_t req_file_size = 0;
+ GrpRlRequest* request = NULL;
+ size_t req_extra_space = sizeof(GroupId) + sizeof(uint8_t);
+
+ int ret_value = EXIT_FAILURE;
+ do {
+ if (!cacert_file || !pubkey_file || !req_file) {
+ log_error("internal error: badarg to MakeRequest()");
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // convert command line args to usable formats
+ // CA certificate
+ if (0 != ReadLoud(cacert_file, &cacert, sizeof(cacert))) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // Group public key file
+ pubkey_file_data = NewBufferFromFile(pubkey_file, &pubkey_file_size);
+ if (!pubkey_file_data) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // Security note:
+ // Application must confirm group public key is
+ // authorized by the issuer, e.g., signed by the issuer.
+ if (GROUP_PUB_KEY_SIZE != pubkey_file_size) {
+ log_error("unexpected file size for '%s'. Expected: %d; got: %d",
+ pubkey_file, (int)GROUP_PUB_KEY_SIZE, pubkey_file_size);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ if (kEpidNoErr != EpidParseGroupPubKeyFile(pubkey_file_data,
+ pubkey_file_size, &cacert,
+ &pubkey)) {
+ log_error("group public key is not authorized");
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // Report Settings
+ if (verbose) {
+ log_msg("==============================================");
+ log_msg("Input settings:");
+ log_msg("");
+ log_msg(" [in] Group ID: ");
+ PrintBuffer(&pubkey.gid, sizeof(pubkey.gid));
+ log_msg("");
+ log_msg(" [in] Reason: %d", reason);
+ log_msg("==============================================");
+ }
+
+ // Calculate request size
+ req_size = sizeof(EpidFileHeader) + sizeof(uint32_t);
+
+ if (FileExists(req_file)) {
+ req_file_size = GetFileSize_S(req_file, SIZE_MAX - req_extra_space);
+
+ if (req_file_size < req_size) {
+ log_error("output file smaller then size of empty request");
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ req_size = req_file_size;
+ } else {
+ log_msg("request file does not exsist, create new");
+ }
+
+ req_size += req_extra_space;
+
+ // Allocate request buffer
+ req_buf = AllocBuffer(req_size);
+ if (!req_buf) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ request = (GrpRlRequest*)req_buf;
+
+ // Load existing request file
+ if (req_file_size > 0) {
+ if (0 != ReadLoud(req_file, req_buf, req_file_size)) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // Check EPID and file versions
+ if (0 != memcmp(&request->header.epid_version, &kEpidFileVersion,
+ sizeof(kEpidFileVersion))) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ if (0 != memcmp(&request->header.file_type,
+ &kEpidFileTypeCode[kGroupRlRequestFile],
+ sizeof(kEpidFileTypeCode[kGroupRlRequestFile]))) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ grp_count = ntohl(request->count);
+
+ // Update the reason if the group is in the request
+ for (grp_index = 0; grp_index < grp_count; grp_index++) {
+ if (0 == memcmp(&request->groups[grp_index].gid, &pubkey.gid,
+ sizeof(pubkey.gid))) {
+ request->groups[grp_index].reason = reason;
+ req_size = req_file_size;
+ break;
+ }
+ }
+ }
+
+ // Append group to the request
+ if (grp_index == grp_count) {
+ request->header.epid_version = kEpidFileVersion;
+ request->header.file_type = kEpidFileTypeCode[kGroupRlRequestFile];
+ request->groups[grp_count].gid = pubkey.gid;
+ request->groups[grp_count].reason = reason;
+ request->count = htonl(++grp_count);
+ }
+
+ // Report Settings
+ if (verbose) {
+ log_msg("==============================================");
+ log_msg("Request generated:");
+ log_msg("");
+ log_msg(" [in] Request Len: %d", (int)req_size);
+ log_msg(" [in] Request: ");
+ PrintBuffer(req_buf, req_size);
+ log_msg("==============================================");
+ }
+
+ // Store request
+ if (0 != WriteLoud(req_buf, req_size, req_file)) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // Success
+ ret_value = EXIT_SUCCESS;
+ } while (0);
+
+ // Free allocated buffers
+ if (pubkey_file_data) free(pubkey_file_data);
+ if (req_buf) free(req_buf);
+
+ return ret_value;
+}
diff --git a/tools/revokekey/revokekey.parts b/tools/revokekey/revokekey.parts
new file mode 100644
index 0000000..5517349
--- /dev/null
+++ b/tools/revokekey/revokekey.parts
@@ -0,0 +1,47 @@
+############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################
+
+Import('*')
+
+env.PartName("revokekey")
+
+src_files = Pattern(src_dir='src/',
+ includes=['*.c'],
+ recursive=True).files()
+
+parts_file = ['revokekey.parts']
+
+if 'install_package' in env['MODE']:
+ env.InstallTopLevel(src_files, sub_dir='tools/${PART_SHORT_NAME}/src')
+ env.InstallTopLevel(parts_file, sub_dir='tools/${PART_SHORT_NAME}')
+else:
+ env.DependsOn([
+ Component('common'),
+ Component('member'),
+ Component('util'),
+ Component('dropt')
+ ])
+
+ if env['TARGET_PLATFORM']['OS'] == 'win32':
+ if env.isConfigBasedOn('debug'):
+ env['PDB'] = '${PART_NAME}.pdb'
+
+ outputs = env.Program('${PART_NAME}', src_files,
+ no_import_lib=True)
+
+ env.InstallBin(outputs,
+ no_pkg=False,
+ INSTALL_BIN='${INSTALL_TOOLS_BIN}')
diff --git a/tools/revokekey/src/main.c b/tools/revokekey/src/main.c
new file mode 100644
index 0000000..9ce068f
--- /dev/null
+++ b/tools/revokekey/src/main.c
@@ -0,0 +1,356 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ *
+ * \brief Create private key revocation list request
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <dropt.h>
+
+#include "util/buffutil.h"
+#include "util/envutil.h"
+#include "util/stdtypes.h"
+#include "epid/common/file_parser.h"
+#include "epid/member/api.h"
+
+const OctStr16 kEpidFileVersion = {2, 0};
+
+// Defaults
+#define PROGRAM_NAME "revokekey"
+#define PRIVKEY_DEFAULT "mprivkey.dat"
+#define REQFILE_DEFAULT "privreq.dat"
+#define PUBKEYFILE_DEFAULT "pubkey.bin"
+
+/// Partial signature request, includes all but message.
+typedef struct PrivRlRequestTop {
+ EpidFileHeader header; ///< EPID File Header
+ PrivKey privkey; ///< EPID Private Key
+} PrivRlRequestTop;
+
+int OpenKey(char const* privkey_file, char const* gpubkey_file,
+ char const* cacert_file, PrivKey* priv_key) {
+ int retval = EXIT_FAILURE;
+ size_t file_size = GetFileSize(privkey_file);
+
+ if (0 == file_size && !FileExists(privkey_file)) {
+ log_error("cannot access '%s'", privkey_file);
+ return EXIT_FAILURE;
+ }
+
+ if (file_size == sizeof(PrivKey)) {
+ if (0 != ReadLoud(privkey_file, priv_key, sizeof(PrivKey))) {
+ return EXIT_FAILURE;
+ }
+ retval = EXIT_SUCCESS;
+ } else if (file_size == sizeof(CompressedPrivKey)) {
+ void* signed_pubkey = NULL;
+ if (!cacert_file) {
+ log_error("issuing CA public key must be specified for compressed key");
+ return EXIT_FAILURE;
+ }
+ if (!gpubkey_file) {
+ log_error("group public key must be specified for compressed key");
+ return EXIT_FAILURE;
+ }
+
+ do {
+ size_t signed_pubkey_size = 0;
+ CompressedPrivKey cmp_key;
+ EpidCaCertificate cacert;
+ GroupPubKey pub_key;
+ EpidStatus sts;
+ if (0 != ReadLoud(privkey_file, &cmp_key, sizeof(CompressedPrivKey))) {
+ retval = EXIT_FAILURE;
+ break;
+ }
+ signed_pubkey = NewBufferFromFile(gpubkey_file, &signed_pubkey_size);
+ if (!signed_pubkey) {
+ retval = EXIT_FAILURE;
+ break;
+ }
+ if (0 != ReadLoud(gpubkey_file, signed_pubkey, signed_pubkey_size)) {
+ retval = EXIT_FAILURE;
+ break;
+ }
+ if (0 != ReadLoud(cacert_file, &cacert, sizeof(cacert))) {
+ retval = EXIT_FAILURE;
+ break;
+ }
+ sts = EpidParseGroupPubKeyFile(signed_pubkey, signed_pubkey_size, &cacert,
+ &pub_key);
+ if (kEpidNoErr != sts) {
+ log_error("error while parsing group public key");
+ retval = EXIT_FAILURE;
+ break;
+ }
+ sts = EpidDecompressPrivKey(&pub_key, &cmp_key, priv_key);
+ if (kEpidNoErr != sts) {
+ log_error("error while decompressing member private key");
+ retval = EXIT_FAILURE;
+ break;
+ }
+ retval = EXIT_SUCCESS;
+ } while (0);
+ free(signed_pubkey);
+ } else {
+ log_error("unexpected file size for '%s'", privkey_file);
+ retval = EXIT_FAILURE;
+ }
+ return retval;
+}
+
+int MakeRequest(PrivKey priv_key, char const* req_file, bool verbose) {
+ // Request buffer
+ uint8_t* req_buf = NULL;
+ size_t req_size = 0;
+ size_t req_extra_space = 0;
+ int ret_value = EXIT_FAILURE;
+ do {
+ size_t entry_size = sizeof(EpidFileHeader) + sizeof(PrivKey);
+ size_t req_file_size = 0;
+ bool duplicate = false;
+ size_t i = 0;
+ PrivRlRequestTop* req_top = NULL;
+
+ if (!req_file) {
+ log_error("internal error: badarg to MakeRequest()");
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // convert command line args to usable formats
+
+ // Report Settings
+ if (verbose) {
+ log_msg("==============================================");
+ log_msg("Input settings:");
+ log_msg("");
+ log_msg(" [in] Group ID: ");
+ PrintBuffer(&(priv_key.gid), sizeof(priv_key.gid));
+ log_msg("");
+ log_msg(" [in] Private Key Len: %d", sizeof(PrivKey));
+ log_msg(" [in] Private Key: ");
+ PrintBuffer(&(priv_key), sizeof(PrivKey));
+ log_msg("");
+ log_msg("==============================================");
+ }
+
+ req_extra_space += entry_size;
+ if (FileExists(req_file)) {
+ req_file_size = GetFileSize_S(req_file, SIZE_MAX - req_extra_space);
+
+ if (req_file_size < entry_size) {
+ log_error("output file smaller then size of one entry");
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ if (req_file_size % entry_size != 0) {
+ log_error("size of output file is not multiple of the entry size");
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ } else {
+ log_msg("request file does not exsist, create new");
+ }
+
+ req_size = req_file_size + req_extra_space;
+
+ req_buf = AllocBuffer(req_size);
+ if (!req_buf) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // Load existing request file
+ if (req_file_size > 0) {
+ if (0 != ReadLoud(req_file, req_buf, req_file_size)) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ for (i = 0; i < req_file_size / entry_size; i++) {
+ if (0 == memcmp(req_buf + entry_size * i + sizeof(EpidFileHeader),
+ &(priv_key), sizeof(PrivKey))) {
+ duplicate = true;
+ break;
+ }
+ }
+ if (duplicate) {
+ log_error("this private key already exists in output file");
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ }
+
+ // Append to the request
+ req_top = (PrivRlRequestTop*)(req_buf + req_file_size);
+ req_top->header.epid_version = kEpidFileVersion;
+ req_top->header.file_type = kEpidFileTypeCode[kPrivRlRequestFile];
+ req_top->privkey = priv_key;
+
+ // Report Settings
+ if (verbose) {
+ log_msg("==============================================");
+ log_msg("Request generated:");
+ log_msg("");
+ log_msg(" [in] Request Len: %d", sizeof(PrivRlRequestTop));
+ log_msg(" [in] Request: ");
+ PrintBuffer(&req_top, sizeof(PrivRlRequestTop));
+ log_msg("==============================================");
+ }
+
+ // Store request
+ if (0 != WriteLoud(req_buf, req_size, req_file)) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ ret_value = EXIT_SUCCESS;
+ } while (0);
+
+ // Free allocated buffers
+ if (req_buf) free(req_buf);
+
+ return ret_value;
+}
+
+/// Main entrypoint
+int main(int argc, char* argv[]) {
+ int retval = EXIT_FAILURE;
+
+ // User Settings
+ // Private key file name parameter
+ static char* privkey_file = NULL;
+ static char* gpubkey_file = NULL;
+ static char* capubkey_file = NULL;
+
+ // Private key revocation request file name parameter
+ static char* req_file = NULL;
+
+ // help flag parameter
+ static bool show_help = false;
+
+ // Verbose flag parameter
+ static bool verbose = false;
+
+ // Private key
+ PrivKey priv_key;
+
+ dropt_option options[] = {
+ {'\0', "mprivkey",
+ "load private key to revoke from FILE (default: " PRIVKEY_DEFAULT ")",
+ "FILE", dropt_handle_string, &privkey_file},
+ {'\0', "req",
+ "append signature revocation request to FILE (default: " REQFILE_DEFAULT
+ ")",
+ "FILE", dropt_handle_string, &req_file},
+ {'h', "help", "display this help and exit", NULL, dropt_handle_bool,
+ &show_help, dropt_attr_halt},
+ {'v', "verbose", "print status messages to stdout", NULL,
+ dropt_handle_bool, &verbose},
+ {'\0', '\0', "The following options are only needed for compressed keys:",
+ NULL, dropt_handle_string, NULL},
+ {'\0', "gpubkey",
+ "load group public key from FILE (default: " PUBKEYFILE_DEFAULT ")",
+ "FILE", dropt_handle_string, &gpubkey_file},
+ {'\0', "capubkey", "load IoT Issuing CA public key from FILE", "FILE",
+ dropt_handle_string, &capubkey_file},
+ {0} /* Required sentinel value. */
+ };
+
+ dropt_context* dropt_ctx = NULL;
+
+ // set program name for logging
+ set_prog_name(PROGRAM_NAME);
+
+ do {
+ dropt_ctx = dropt_new_context(options);
+ if (!dropt_ctx) {
+ retval = EXIT_FAILURE;
+ break;
+ } else if (argc > 0) {
+ /* Parse the arguments from argv.
+ *
+ * argv[1] is always safe to access since argv[argc] is guaranteed
+ * to be NULL and since we've established that argc > 0.
+ */
+ char** rest = dropt_parse(dropt_ctx, -1, &argv[1]);
+ if (dropt_get_error(dropt_ctx) != dropt_error_none) {
+ log_error(dropt_get_error_message(dropt_ctx));
+ if (dropt_error_invalid_option == dropt_get_error(dropt_ctx)) {
+ fprintf(stderr, "Try '%s --help' for more information.\n",
+ PROGRAM_NAME);
+ }
+ retval = EXIT_FAILURE;
+ break;
+ } else if (show_help) {
+ log_fmt(
+ "Usage: %s [OPTION]...\n"
+ "Revoke Intel(R) EPID signature\n"
+ "\n"
+ "Options:\n",
+ PROGRAM_NAME);
+ dropt_print_help(stdout, dropt_ctx, NULL);
+ retval = EXIT_SUCCESS;
+ break;
+ } else if (*rest) {
+ // we have unparsed (positional) arguments
+ log_error("invalid argument: %s", *rest);
+ fprintf(stderr, "Try '%s --help' for more information.\n",
+ PROGRAM_NAME);
+ retval = EXIT_FAILURE;
+ break;
+ } else {
+ if (verbose) {
+ verbose = ToggleVerbosity();
+ }
+ if (!privkey_file) {
+ privkey_file = PRIVKEY_DEFAULT;
+ }
+ if (!gpubkey_file) {
+ gpubkey_file = PUBKEYFILE_DEFAULT;
+ }
+ if (!req_file) {
+ req_file = REQFILE_DEFAULT;
+ }
+ if (verbose) {
+ log_msg("\nOption values:");
+ log_msg(" mprivkey : %s", privkey_file);
+ log_msg(" req : %s", req_file);
+ log_msg(" gpubkey : %s", gpubkey_file);
+ log_msg(" capubkey : %s", capubkey_file);
+ log_msg("");
+ }
+ }
+ }
+
+ retval = OpenKey(privkey_file, gpubkey_file, capubkey_file, &priv_key);
+ if (EXIT_SUCCESS != retval) {
+ break;
+ }
+ retval = MakeRequest(priv_key, req_file, verbose);
+ } while (0);
+
+ dropt_free_context(dropt_ctx);
+
+ return retval;
+}
diff --git a/tools/revokesig/revokesig.parts b/tools/revokesig/revokesig.parts
new file mode 100644
index 0000000..5dc108d
--- /dev/null
+++ b/tools/revokesig/revokesig.parts
@@ -0,0 +1,46 @@
+############################################################################
+# Copyright 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+############################################################################
+
+Import('*')
+
+env.PartName("revokesig")
+
+src_files = Pattern(src_dir='src/',
+ includes=['*.c'],
+ recursive=True).files()
+
+parts_file = ['revokesig.parts']
+
+if 'install_package' in env['MODE']:
+ env.InstallTopLevel(src_files, sub_dir='tools/${PART_SHORT_NAME}/src')
+ env.InstallTopLevel(parts_file, sub_dir='tools/${PART_SHORT_NAME}')
+else:
+ env.DependsOn([
+ Component('common'),
+ Component('util'),
+ Component('dropt')
+ ])
+
+ if env['TARGET_PLATFORM']['OS'] == 'win32':
+ if env.isConfigBasedOn('debug'):
+ env['PDB'] = '${PART_NAME}.pdb'
+
+ outputs = env.Program('${PART_NAME}', src_files,
+ no_import_lib=True)
+
+ env.InstallBin(outputs,
+ no_pkg=False,
+ INSTALL_BIN='${INSTALL_TOOLS_BIN}')
diff --git a/tools/revokesig/src/main.c b/tools/revokesig/src/main.c
new file mode 100644
index 0000000..861e389
--- /dev/null
+++ b/tools/revokesig/src/main.c
@@ -0,0 +1,455 @@
+/*############################################################################
+ # Copyright 2016 Intel Corporation
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+ # You may obtain a copy of the License at
+ #
+ # http://www.apache.org/licenses/LICENSE-2.0
+ #
+ # Unless required by applicable law or agreed to in writing, software
+ # distributed under the License is distributed on an "AS IS" BASIS,
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
+ ############################################################################*/
+
+/*!
+ * \file
+ *
+ * \brief Create signature based revocation list request
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <dropt.h>
+#include "util/buffutil.h"
+#include "util/envutil.h"
+#include "util/stdtypes.h"
+#include "epid/common/file_parser.h"
+
+// Defaults
+#define PROGRAM_NAME "revokesig"
+#define PUBKEYFILE_DEFAULT "pubkey.bin"
+#define REQFILE_DEFAULT "sigrlreq.dat"
+#define SIG_DEFAULT "sig.dat"
+#define GROUP_PUB_KEY_SIZE \
+ (sizeof(EpidFileHeader) + sizeof(GroupPubKey) + sizeof(EcdsaSignature))
+
+#pragma pack(1)
+/// Partial signature request, includes components through sig.
+typedef struct SigRlRequestTop {
+ EpidFileHeader header; ///< EPID File Header
+ GroupId gid; ///< EPID Group ID
+ EpidSignature sig; ///< EPID Signature
+} SigRlRequestTop;
+
+/// Partial signature request, includes components after.
+typedef struct SigRlRequestMid {
+ uint32_t be_msg_size; ///< size of message in bytes (big endian)
+ uint8_t msg[1]; ///< message used to create signature (flexible array)
+} SigRlRequestMid;
+#pragma pack()
+
+/// convert host to network byte order
+static uint32_t htonl(uint32_t hostlong) {
+ return (((hostlong & 0xFF) << 24) | ((hostlong & 0xFF00) << 8) |
+ ((hostlong & 0xFF0000) >> 8) | ((hostlong & 0xFF000000) >> 24));
+}
+
+/// Fill a single SigRlRequest structure
+/*!
+\param[in] pubkey
+Group public key.
+\param[in] sig
+Signature to append to request.
+\param[in] sig_size
+Size of the signature.
+\param[in] msg_str
+Message used to generate signature to revoke.
+\param[in] msg_size
+Length of the message.
+\param[in out] req_buf
+Pointer to request buffer.
+\param[in] req_size
+Size of request buffer.
+\param[in out] req_top
+Pointer to top structure of request.
+*/
+void FillRequest(GroupPubKey const* pubkey, EpidSignature const* sig,
+ size_t sig_size, char const* msg_str, size_t msg_size,
+ uint8_t* req_buf, size_t req_size, SigRlRequestTop* req_top);
+
+/// Makes a request and appends it to file.
+/*!
+\param[in] cacert_file
+Issuing CA certificate used to sign group public key file.
+\param[in] sig_file
+File containing signature to add to request.
+\param[in] pubkey_file
+File containing group public key.
+\param[in] req_file
+File to write a request.
+\param[in] msg_str
+Message used to generate signature to revoke.
+\param[in] msg_size
+Length of the message.
+\param[in] verbose
+If true function would print debug information to stdout.
+*/
+int MakeRequest(char const* cacert_file, char const* sig_file,
+ char const* pubkey_file, char const* req_file,
+ char const* msg_str, size_t msg_size, bool verbose);
+
+/// Main entrypoint
+int main(int argc, char* argv[]) {
+ // intermediate return value for C style functions
+ int ret_value = EXIT_FAILURE;
+
+ // Signature file name parameter
+ static char* sig_file = NULL;
+
+ // Message string parameter
+ static char* msg_str = NULL;
+ size_t msg_size = 0;
+ static char* msg_file = NULL;
+ char* msg_buf = NULL; // message loaded from msg_file
+
+ // Signature revocation request file name parameter
+ static char* req_file = NULL;
+
+ // Group public key file name parameter
+ static char* pubkey_file = NULL;
+
+ // CA certificate file name parameter
+ static char* cacert_file = NULL;
+
+ // help flag parameter
+ static bool show_help = false;
+
+ // Verbose flag parameter
+ static bool verbose = false;
+
+ dropt_option options[] = {
+ {'\0', "sig",
+ "load signature to revoke from FILE (default: " SIG_DEFAULT ")", "FILE",
+ dropt_handle_string, &sig_file},
+ {'\0', "msg", "MESSAGE used to generate signature to revoke", "MESSAGE",
+ dropt_handle_string, &msg_str},
+ {'\0', "msgfile",
+ "FILE containing message used to generate signature to revoke", "FILE",
+ dropt_handle_string, &msg_file},
+ {'\0', "gpubkey",
+ "load group public key from FILE (default: " PUBKEYFILE_DEFAULT ")",
+ "FILE", dropt_handle_string, &pubkey_file},
+ {'\0', "capubkey", "load IoT Issuing CA public key from FILE", "FILE",
+ dropt_handle_string, &cacert_file},
+ {'\0', "req",
+ "append signature revocation request to FILE (default: " REQFILE_DEFAULT
+ ")",
+ "FILE", dropt_handle_string, &req_file},
+
+ {'h', "help", "display this help and exit", NULL, dropt_handle_bool,
+ &show_help, dropt_attr_halt},
+ {'v', "verbose", "print status messages to stdout", NULL,
+ dropt_handle_bool, &verbose},
+
+ {0} /* Required sentinel value. */
+ };
+
+ dropt_context* dropt_ctx = NULL;
+ // set program name for logging
+ set_prog_name(PROGRAM_NAME);
+ do {
+ dropt_ctx = dropt_new_context(options);
+ if (!dropt_ctx) {
+ ret_value = EXIT_FAILURE;
+ break;
+ } else if (argc > 0) {
+ /* Parse the arguments from argv.
+ *
+ * argv[1] is always safe to access since argv[argc] is guaranteed
+ * to be NULL and since we've established that argc > 0.
+ */
+ char** rest = dropt_parse(dropt_ctx, -1, &argv[1]);
+ if (dropt_get_error(dropt_ctx) != dropt_error_none) {
+ log_error(dropt_get_error_message(dropt_ctx));
+ if (dropt_error_invalid_option == dropt_get_error(dropt_ctx)) {
+ fprintf(stderr, "Try '%s --help' for more information.\n",
+ PROGRAM_NAME);
+ }
+ ret_value = EXIT_FAILURE;
+ break;
+ } else if (show_help) {
+ log_fmt(
+ "Usage: %s [OPTION]...\n"
+ "Revoke Intel(R) EPID signature\n"
+ "\n"
+ "Options:\n",
+ PROGRAM_NAME);
+ dropt_print_help(stdout, dropt_ctx, NULL);
+ ret_value = EXIT_SUCCESS;
+ break;
+ } else if (*rest) {
+ // we have unparsed (positional) arguments
+ log_error("invalid argument: %s", *rest);
+ fprintf(stderr, "Try '%s --help' for more information.\n",
+ PROGRAM_NAME);
+ ret_value = EXIT_FAILURE;
+ break;
+ } else {
+ if (verbose) {
+ verbose = ToggleVerbosity();
+ }
+ if (!sig_file) {
+ sig_file = SIG_DEFAULT;
+ }
+
+ if (msg_str && msg_file) {
+ log_error("--msg and --msgfile cannot be used together");
+ ret_value = EXIT_FAILURE;
+ break;
+ } else if (msg_str) {
+ msg_size = strlen(msg_str);
+ } else if (msg_file) {
+ msg_buf = NewBufferFromFile(msg_file, &msg_size);
+ if (!msg_buf) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ msg_str = msg_buf;
+ } else {
+ msg_size = 0;
+ }
+
+ if (!pubkey_file) {
+ pubkey_file = PUBKEYFILE_DEFAULT;
+ }
+ if (!cacert_file) {
+ log_error("issuing CA public key must be specified");
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ if (!req_file) {
+ req_file = REQFILE_DEFAULT;
+ }
+ if (verbose) {
+ log_msg("\nOption values:");
+ log_msg(" sig_file : %s", sig_file);
+ log_msg(" msg_str : %s", msg_str);
+ log_msg(" pubkey_file : %s", pubkey_file);
+ log_msg(" cacert_file : %s", cacert_file);
+ log_msg(" req_file : %s", req_file);
+ log_msg("");
+ }
+ }
+ }
+
+ ret_value = MakeRequest(cacert_file, sig_file, pubkey_file, req_file,
+ msg_str, msg_size, verbose);
+ } while (0);
+
+ if (msg_buf) {
+ free(msg_buf);
+ msg_buf = NULL;
+ }
+
+ dropt_free_context(dropt_ctx);
+
+ return ret_value;
+}
+
+/// Fill a single SigRlRequest structure
+/*!
+
+ | Field | Size |
+ |:--------------------------------|--------------:|
+ | EPID Version (0x0200) | 2 bytes |
+ | File Type (0x000B) | 2 bytes |
+ | Group ID Number | 16 bytes |
+ | Basic Signature | 52 bytes |
+ | SigRL Version | 4 bytes |
+ | Number of Non-Revoked Proofs | 4 bytes |
+ | nNRP * Non-Revoked Proofs | 160 * nNRP |
+ | Message Size in Bytes (msgSize) | 4 bytes |
+ | Message | msgSize bytes |
+
+ */
+void FillRequest(GroupPubKey const* pubkey, EpidSignature const* sig,
+ size_t sig_size, char const* msg_str, size_t msg_size,
+ uint8_t* req_buf, size_t req_size, SigRlRequestTop* req_top) {
+ const OctStr16 kEpidFileVersion = {2, 0};
+ size_t i = 0;
+ size_t req_mid_size = sizeof(((SigRlRequestMid*)0)->be_msg_size) + msg_size;
+ SigRlRequestMid* req_mid =
+ (SigRlRequestMid*)(req_buf + req_size - req_mid_size);
+
+ if (!pubkey || !sig || !req_buf || !req_top || (!msg_str && 0 != msg_size)) {
+ log_error("internal error: badarg to FillRequest()");
+ return;
+ }
+
+ req_top->header.epid_version = kEpidFileVersion;
+ req_top->header.file_type = kEpidFileTypeCode[kSigRlRequestFile];
+ req_top->gid = pubkey->gid;
+ // copy signature
+ for (i = 0; i < sig_size; i++) {
+ ((uint8_t*)&req_top->sig)[i] = ((uint8_t*)sig)[i];
+ }
+ req_mid->be_msg_size = htonl((uint32_t)msg_size);
+ // copy msg
+ for (i = 0; i < msg_size; i++) {
+ req_mid->msg[i] = msg_str[i];
+ }
+}
+
+int MakeRequest(char const* cacert_file, char const* sig_file,
+ char const* pubkey_file, char const* req_file,
+ char const* msg_str, size_t msg_size, bool verbose) {
+ // Buffers and computed values
+ // Signature buffer
+ EpidSignature* sig = NULL;
+ size_t sig_size = 0;
+
+ // Group public key file
+ unsigned char* pubkey_file_data = NULL;
+ size_t pubkey_file_size = 0;
+
+ // CA certificate
+ EpidCaCertificate cacert = {0};
+
+ // Group public key buffer
+ GroupPubKey pubkey = {0};
+
+ // Request buffer
+ uint8_t* req_buf = NULL;
+ size_t req_size = 0;
+
+ size_t req_extra_space = (sizeof(EpidFileHeader) + sizeof(GroupId));
+
+ int ret_value = EXIT_FAILURE;
+ do {
+ SigRlRequestTop* req_top = NULL;
+ size_t req_file_size = 0;
+ const size_t kMsgSizeSize = sizeof(((SigRlRequestMid*)0)->be_msg_size);
+
+ if (!cacert_file || !sig_file || !pubkey_file || !req_file ||
+ (!msg_str && 0 != msg_size)) {
+ log_error("internal error: badarg to MakeRequest()");
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // convert command line args to usable formats
+ // CA certificate
+ if (0 != ReadLoud(cacert_file, &cacert, sizeof(cacert))) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // Signature
+ sig = NewBufferFromFile(sig_file, &sig_size);
+ if (!sig) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // Group public key file
+ pubkey_file_data = NewBufferFromFile(pubkey_file, &pubkey_file_size);
+ if (!pubkey_file_data) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // Security note:
+ // Application must confirm group public key is
+ // authorized by the issuer, e.g., signed by the issuer.
+ if (GROUP_PUB_KEY_SIZE != pubkey_file_size) {
+ log_error("unexpected file size for '%s'. Expected: %d; got: %d",
+ pubkey_file, (int)GROUP_PUB_KEY_SIZE, (int)pubkey_file_size);
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ if (kEpidNoErr != EpidParseGroupPubKeyFile(pubkey_file_data,
+ pubkey_file_size, &cacert,
+ &pubkey)) {
+ log_error("group public key is not authorized");
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // Report Settings
+ if (verbose) {
+ log_msg("==============================================");
+ log_msg("Creating SigRL revocation request:");
+ log_msg("");
+ log_msg(" [in] Group ID: ");
+ PrintBuffer(&pubkey.gid, sizeof(pubkey.gid));
+ log_msg("");
+ log_msg(" [in] Signature Len: %d", (int)sig_size);
+ log_msg(" [in] Signature: ");
+ PrintBuffer(&sig, sig_size);
+ log_msg("");
+ log_msg(" [in] Message Len: %d", (int)msg_size);
+ log_msg(" [in] Message: ");
+ PrintBuffer(msg_str, msg_size);
+ log_msg("==============================================");
+ }
+
+ req_extra_space += sig_size + kMsgSizeSize + msg_size;
+
+ if (FileExists(req_file)) {
+ req_file_size = GetFileSize_S(req_file, SIZE_MAX - req_extra_space);
+ } else {
+ log_msg("request file does not exsist, create new");
+ }
+
+ req_size = req_file_size + req_extra_space;
+
+ req_buf = AllocBuffer(req_size);
+ if (!req_buf) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ if (req_file_size > 0) {
+ if (0 != ReadLoud(req_file, req_buf, req_file_size)) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+ }
+
+ req_top = (SigRlRequestTop*)(req_buf + req_file_size);
+
+ FillRequest(&pubkey, sig, sig_size, msg_str, msg_size, req_buf, req_size,
+ req_top);
+
+ // Report Settings
+ if (verbose) {
+ log_msg("==============================================");
+ log_msg("Reqest generated:");
+ log_msg("");
+ log_msg(" [in] Request Len: %d", sizeof(SigRlRequestTop));
+ log_msg(" [in] Request: ");
+ PrintBuffer(&req_top, sizeof(SigRlRequestTop));
+ log_msg("==============================================");
+ }
+
+ // Store request
+ if (0 != WriteLoud(req_buf, req_size, req_file)) {
+ ret_value = EXIT_FAILURE;
+ break;
+ }
+
+ // Success
+ ret_value = EXIT_SUCCESS;
+ } while (0);
+
+ // Free allocated buffers
+ if (pubkey_file_data) free(pubkey_file_data);
+ if (sig) free(sig);
+ if (req_buf) free(req_buf);
+
+ return ret_value;
+}