diff --git a/Android.bp b/Android.bp new file mode 100644 index 0000000000000000000000000000000000000000..39b5f2222fe22143ba782fa7c3b0fab647e03cc2 --- /dev/null +++ b/Android.bp @@ -0,0 +1,265 @@ +cc_defaults { + name: "epid_cflags", + host_supported: true, + target: { + darwin: { + enabled: false, + }, + }, + cflags: [ + "-Wno-missing-braces", + "-Wno-unknown-pragmas", + "-Wno-typedef-redefinition", + "-Wno-missing-field-initializers", + "-Wno-for-loop-analysis", + "-Wno-unused-const-variable", + "-fexceptions", + "-fPIC", + "-O2", + ], +} + +cc_library { + name: "libippcp", + defaults: ["epid_cflags"], + srcs: [ + "ext/ipp/sources/ippcp/src/*.c", + ], + cflags: [ + "-D_IPP_v50_", + "-D_IPP_DEBUG", + "-D_DISABLE_ALG_MD5_", + "-D_DISABLE_ALG_SM3_", + ], + local_include_dirs: [ + "ext/ipp/sources/ippcp/", + "ext/ipp/sources/include/", + ], + export_include_dirs: [ + "ext/ipp/include/", + ], +} + +cc_library { + name: "libepid_common", + defaults: ["epid_cflags"], + srcs: [ + "epid/common/1.1/src/*.c", + "epid/common/math/src/*.c", + "epid/common/src/*.c", + ], + local_include_dirs: [ + "epid/common/math/src", + "epid/common/math/", + "epid/common/src", + ], + static_libs: [ + "libippcp", + ], +} + +cc_library { + name: "libepid_member", + defaults: ["epid_cflags"], + srcs: [ + "epid/member/src/*.c", + "epid/member/tpm2/src/*.c", + ], + export_include_dirs: [ + ".", + ], + static_libs: [ + "libepid_common", + "libippcp", + ], +} + +cc_library { + name: "libepid_verifier", + defaults: ["epid_cflags"], + srcs: [ + "epid/verifier/1.1/src/*.c", + "epid/verifier/src/*.c", + ], + export_include_dirs: [ + ".", + ], + static_libs: [ + "libepid_common", + "libippcp", + ], +} + +cc_library { + name: "libepid_util", + defaults: ["epid_cflags"], + srcs: [ + "example/util/src/*.c", + ], + export_include_dirs: [ + "example", + ], + static_libs: [ + "libepid_common", + ], +} + +cc_library { + name: "libargtable3", + defaults: ["epid_cflags"], + srcs: [ + "ext/argtable3/argtable3.c", + ], + export_include_dirs: [ + "ext/argtable3", + ], +} + +cc_library { + name: "libepid_common_testhelper", + defaults: ["epid_cflags"], + srcs: [ + "epid/common-testhelper/*cc", + "epid/common-testhelper/1.1/*cc", + ], + local_include_dirs: [ + "ext", + "epid/common-testhelper/", + "epid/common-testhelper/1.1", + ], + static_libs: [ + "libepid_member", + "libepid_verifier", + "libepid_common", + "libippcp", + "libgtest", + ], +} + +cc_binary { + name: "epid_verifysig", + defaults: ["epid_cflags"], + srcs: [ + "example/verifysig/src/*.c", + ], + local_include_dirs: [ + "example/verifysig", + ], + static_libs: [ + "libepid_verifier", + "libepid_common", + "libepid_util", + "libippcp", + "libargtable3", + ], +} + +cc_binary { + name: "epid_signmsg", + defaults: ["epid_cflags"], + srcs: [ + "example/signmsg/src/*.c", + ], + local_include_dirs: [ + "example/signmsg", + ], + static_libs: [ + "libepid_member", + "libepid_common", + "libepid_util", + "libippcp", + "libargtable3", + ], +} + +cc_test { + name: "epid_common_testhelper_utest", + defaults: ["epid_cflags"], + srcs: [ + "epid/common-testhelper/unittests/*cc", + ], + local_include_dirs: [ + "ext", + ], + static_libs: [ + "libepid_common_testhelper", + "libepid_member", + "libepid_verifier", + "libepid_common", + "libippcp", + ], +} + +cc_test { + name: "epid_common_utest", + defaults: ["epid_cflags"], + srcs: [ + "epid/common/math/unittests/*cc", + "epid/common/unittests/*cc", + "epid/common/1.1/unittests/*cc", + ], + local_include_dirs: [ + "epid/common/unittests/", + ], + static_libs: [ + "libepid_common_testhelper", + "libepid_member", + "libepid_verifier", + "libepid_common", + "libippcp", + ], +} + +cc_test { + name: "epid_member_utest", + defaults: ["epid_cflags"], + srcs: [ + "epid/member/unittests/*cc", + "epid/member/tpm2/unittests/tpm2_wrapper-testhelper.cc", + ], + local_include_dirs: [ + "ext", + ], + static_libs: [ + "libepid_common_testhelper", + "libepid_verifier", + "libepid_member", + "libepid_common", + "libippcp", + ], +} + +cc_test { + name: "epid_member_tpm2_utest", + defaults: ["epid_cflags"], + srcs: [ + "epid/member/tpm2/unittests/*.cc", + ], + exclude_srcs: [ + "epid/member/tpm2/unittests/*tss-test.cc", + ], + static_libs: [ + "libepid_common_testhelper", + "libepid_verifier", + "libepid_member", + "libepid_common", + "libippcp", + + ], +} + +cc_test { + name: "epid_verifier_utest", + defaults: ["epid_cflags"], + srcs: [ + "epid/verifier/unittests/*cc", + "epid/verifier/1.1/unittests/*cc", + ], + static_libs: [ + "libepid_common_testhelper", + "libepid_verifier", + "libepid_member", + "libepid_common", + "libippcp", + ], +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..9c12ee48e7f15cc5e902d698ade19e3ed109fdbe --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,264 @@ +# Intel(R) EPID SDK ChangeLog {#ChangeLog} + +## [6.0.1] - 2018-05-04 + +### Changed + +- Updated Intel(R) IPP Cryptography library to version 2018 (Update + 2.1). + +### Fixed + +- The member library now includes the tpm2 subcomponent when built + using SCons, instead of requiring a separate member.tpm2 library. + +### Known Issues + +- Only the SHA-256 hash algorithm is supported when using the SDK with + the IBM TPM simulator due to a defect in version 532 of the + simulator. + +- Basenames are limited to 124 bytes in TPM mode. + +- Scons build will not work natively on ARM. You can still build using + `make` or cross compile. + +## [6.0.0] - 2017-12-15 + +### Added + +- The member can now be built with a substantially reduced code size + using a compilation option. + +- New context lifetime management APIs have been added to member to + give callers more control of memory allocation. + +- New member API `EpidClearRegisteredBasenames` has been added to + clear registered basenames without recreating the member. + +### Changed + +- `EpidRegisterBaseName` was renamed to `EpidRegisterBasename` because + basename is a single word. + +- Command-line parsing library used by samples and tools has been + replaced by Argtable3. + + +### Deprecated + +- `EpidMemberCreate` has been deprecated. This API has been superseded + by `EpidMemberGetSize` and `EpidMemberInit`. + +- `EpidMemberDelete` has been deprecated. This API has been superseded + by `EpidMemberDeinit`. + +### Removed + +- `size_optimized_release` build configuration has been removed. + Use the compilation option to build member with reduced code size. + +### Known Issues + +- Only the SHA-256 hash algorithm is supported when using the SDK with + the IBM TPM simulator due to a defect in version 532 of the + simulator. + +- Basenames are limited to 124 bytes in TPM mode. + +- Scons build will not work natively on ARM. You can still build using + `make` or cross compile. + + +## [5.0.0] - 2017-09-15 + +### Added + +- The member implementation now has the option to support signing + using a TPM, using the ECDAA capabilities of TPM 2.0. + + +### Changed + +- Member API updated to unify HW and SW use cases. + - Added + - `ProvisionKey` + - `ProvisionCompressed` + - `ProvisionCredential` + - `Startup` + - Parameters changed + - `MemberCreate` + - `RequestJoin` + - Removed or made private + - `WritePrecomp` + - `SignBasic` + - `NrProve` + - `AssemblePrivKey` + +- `EpidRequestJoin` was renamed to `EpidCreateJoinRequest` to make it + clear that it is not directly communicating with the issuer. + + +### Fixed + +- `EpidCreateJoinRequest` creates valid join requests. This fixes a + regression in `EpidRequestJoin` introduced in 4.0.0. + + +### Known Issues + +- Only the SHA-256 hash algorithm is supported when using the + SDK with the IBM TPM simulator due to a defect in version + 532 of the simulator. + +- Basenames are limited to 124 bytes in TPM mode. + + +## [4.0.0] - 2017-04-25 + +### Added + +- The member implementation now provides an internal interface that + gives guidance on partitioning member operations between highly + sensitive ones that use f value of the private key, and less + sensitive operations that can be performed in a host environment. + +- New member API `EpidAssemblePrivKey` was added to help assemble and + validate the new member private key that is created when a member + either joins a group (using the join protocol) or switches to a new + group (as the result of a performance rekey). + + +### Changed + +- Updated Intel(R) IPP Cryptography library to version 2017 (Update 2). + +- The mechanism to set the signature based revocation list (SigRL) + used for signing was changed. `EpidMemberSetSigRl` must be used to + set the SigRL. The SigRL is no longer a parameter to `EpidSign`. + This better models typical use case where a device stores a + revocation list and updates it independently of signing operations. + + +### Removed + +- Removed `EpidWritePreSigs` API. Serialization of pre-computed + signatures is a risky capability to provide, and simply expanding + the internal pool via `EpidAddPreSigs` still provides most of the + optimization benefits. + +- The `EpidIsPrivKeyInGroup` API is no longer exposed to clients. It + is no longer needed because the new member API `EpidAssemblePrivKey` + performs this check. + + +### Fixed + +- When building with commercial version of the Intel(R) IPP + Cryptography library, optimized functions are now properly invoked, + making signing and verification operations ~2 times faster + +- SHA-512/256 hash algorithm is now supported. + +- README for compressed data now correctly documents the number of + entries in revocation lists. + +- The `verifysig` sample now reports a more clear error message for + mismatched SigRLs. + +- The default scons build will now build for a 32-bit target on a + 32-bit platform. + + +### Known Issues + +- Scons build will not work natively on ARM. You can still build using + `make` or cross compile. + + +## [3.0.0] - 2016-11-22 + +### Added + +- Support for verification of Intel(R) 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 + +### Added + +- 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 + + +### Changed + +- The default hash algorithm has changed. It is now SHA-512. + +- Functions that returned `EpidNullPtrErr` now return `EpidBadArgErr` + instead. + + +### Fixed + +- Updated build flags to work around GCC 4.8.5 defect. + + +## [1.0.0] - 2016-03-03 + +### Added + +- Basic sign and verify functionality + +- Dynamic join support for member + +- Apache 2.0 License diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..6af60009ba09936f18de72dd26d2ce0a8692fb55 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,253 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. + + +======================================================================= + +SDK Subcomponents: + +The Intel(R) EPID SDK contains subcomponents with separate copyright +notices and license terms. Your use of the source code for these +subcomponents is subject to the terms and conditions of the following +licenses. + + +----------------------------------------------------------------------- +The BSD 3-Clause License +----------------------------------------------------------------------- + +The Intel(R) EPID SDK bundles portions of the following under the BSD +3-Clause License: + + - Google Test (https://github.com/google/googletest) + Copyright 2008, Google Inc. + - Argtable3 (https://github.com/argtable/argtable3) + Copyright (C) 1998-2001,2003-2011,2013 Stewart Heitmann + + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000000000000000000000000000000000000..1c96fc2bf5313cde0fd67b82579d9bac5c7675b8 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,207 @@ +#!/usr/bin/make -f + +#variables are set by configure +prefix = @prefix@ +installdir = $(prefix)/ +epidinstalldir = $(installdir)/epid-sdk +CC = @CC@ +CXX = @CXX@ +CFLAGS = @CFLAGS@ +LDFLAGS = @LDFLAGS@ +RANLIB = @RANLIB@ +TSS_PATH = @TSS_PATH@ +TINY = @TINY@ + +#set performance affecting flags +SIZE_CFLAGS := -O2 + +#gcc flags +CC_FLAGS := $(CFLAGS) $(SIZE_CFLAGS) -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 -Wformat \ + -Wformat-security -fstack-protector -DNDEBUG -D_FORTIFY_SOURCE=2 + +#intel c compiler flags +ICC_FLAGS := $(CFLAGS) $(SIZE_CFLAGS) -Werror -Wall -Wextra -DNDEBUG \ + -fstack-protector -D_FORTIFY_SOURCE=2 \ + -Wformat -Wformat-security + +ifneq ($(OS),Windows_NT) + CC_FLAGS += -fPIC + ICC_FLAGS += -fPIC + CXX11_FLAG = -std=c++0x + EXE_EXTENSION = +else + CC_FLAGS += -D__int64='long long' + CXX11_FLAG = -std=gnu++11 + EXE_EXTENSION = .exe +endif + +#g++ flags +CXX_FLAGS := $(CC_FLAGS) $(CXX11_FLAG) + +#intel c++ compiler flags +ICPC_FLAGS := $(ICC_FLAGS) $(CXX11_FLAG) + +#check if architecture was specified +#or take it by shell command +ifeq ($(findstring -m32,$(CFLAGS)),-m32) + ARCH = x86 + CXXFLAGS += -m32 + LDFLAGS += -m32 +else ifeq ($(findstring -m64,$(CFLAGS)),-m64) + ARCH = x86_64 + CXXFLAGS += -m64 + LDFLAGS += -m64 +else + ifeq ($(findstring arm-,$(CC)),arm-) + ARCH = arm + + ifneq (,$(findstring gnueabihf,$(CC))) + ARCH := $(addsuffix hf,$(ARCH)) + endif + + else + ARCH := $(shell uname -m) + endif +endif + +#set ippflags +IPP_FLAGS := -D_IPP_v50_ -D_IPP_DEBUG -D_DISABLE_ALG_MD5_ -D_DISABLE_ALG_SM3_ + +#set tools and flags depending on specified compiler +ifeq ($(findstring icc,$(CC)),icc) + CFLAGS := $(ICC_FLAGS) + CXXFLAGS := $(ICPC_FLAGS) + AR = $(subst icc,xiar,$(CC)) +else + CFLAGS := $(CC_FLAGS) + CXXFLAGS := $(CXX_FLAGS) +endif + +# ld flags +LDFLAGS += -fstack-protector +ifneq ($(OS),Windows_NT) + LDFLAGS += -z noexecstack -z relro -z now -pie +endif + +#gtest defines +GTEST_DEFINES := -DGTEST_HAS_PTHREAD=0 -D_VARIADIC_MAX=10 + +#set flags for unit tests executables +GTEST_FLAGS = --gtest_color=yes \ + --gtest_print_time=1 \ + --gtest_output=xml + +export CC LDFLAGS ARCH CFLAGS +export CXX CXXFLAGS +export AR RANLIB +export epidinstalldir +export GTEST_FLAGS GTEST_DEFINES IPP_FLAGS +export EXE_EXTENSION +export TSS_PATH +export TINY + +#output of the main parameters +$(info $$ccompiler is [${CC}]) +$(info $$cxxcompiler is [${CXX}]) +$(info $$architecture is [${ARCH}]) +#targets part +all: + $(MAKE) ipp common member verifier argtable3 examples_util + $(MAKE) examples epid_tools + +clean: + $(MAKE) -C ./ext/ipp/sources/ippcp 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/argtable3/ clean +ifneq ("$(wildcard ./ext/google_benchmark)","") + $(MAKE) -C ./ext/google_benchmark/ clean +endif + +install: + $(MAKE) -C ./ext/ipp/sources/ippcp 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 + +common-testhelper: + $(MAKE) -C ./epid/common-testhelper/ all + +common-testhelper_utest: + $(MAKE) -C ./epid/common-testhelper/ utest + +common: + $(MAKE) -C ./epid/common/ all + +common_utest: + $(MAKE) -C ./epid/common/ utest + +member: + $(MAKE) -C ./epid/member/ all + +member_utest: + $(MAKE) -C ./epid/member/ utest + +verifier: + $(MAKE) -C ./epid/verifier/ all + +verifier_utest: + $(MAKE) -C ./epid/verifier/ utest + +gtest: + $(MAKE) -C ./ext/gtest/ all + +argtable3: + $(MAKE) -C ./ext/argtable3/ all + +examples_util: + $(MAKE) -C ./example/util/ all + +utest: + $(MAKE) gtest common-testhelper + $(MAKE) common-testhelper_utest common_utest member_utest verifier_utest + +run_utest: + $(MAKE) -C ./epid/common-testhelper/ run_utest + $(MAKE) -C ./epid/common/ run_utest + $(MAKE) -C ./epid/member/ run_utest + $(MAKE) -C ./epid/verifier/ run_utest + +check: + $(MAKE) utest + $(MAKE) run_utest + +examples: + $(MAKE) -C ./example/ all + +epid_tools: + $(MAKE) -C ./tools/ all + +perf: +ifneq ("$(wildcard ./ext/google_benchmark/)","") + $(MAKE) -C ./ext/google_benchmark/ all + $(MAKE) -C ./ext/google_benchmark/ utest + $(MAKE) -C ./ext/google_benchmark/ run_utest +endif + +build: + $(MAKE) all + $(MAKE) check + $(MAKE) install diff --git a/NOTICE.txt b/NOTICE.txt new file mode 100644 index 0000000000000000000000000000000000000000..51a62a2bccdbf20d1c28d1ed47ecfae6b8ebdc1e --- /dev/null +++ b/NOTICE.txt @@ -0,0 +1,21 @@ +Intel(R) EPID SDK +Copyright 2016-2017 Intel Corporation + +========== + +The Intel(R) EPID SDK contains subcomponents with separate copyright +notices and license terms. + +Your use of the source code for the these subcomponents is subject to +the terms and conditions of their respective licenses. + +See the LICENSE.txt file for a list of subcomponents and dependencies +and their respective licenses. + +---------- + +The source code used for math primitives in the Intel(R) EPID SDK is a +subset of Intel(R) IPP Cryptography 2017 Update 2 written in C. For +higher performance, you can use the commercial version of the IPP +Cryptography libraries, which are available at +https://software.intel.com/articles/download-ipp-cryptography-libraries. diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..2c201e0b876c5687c515e578e7625056c17f6d3d --- /dev/null +++ b/README.md @@ -0,0 +1,63 @@ +# Intel(R) EPID SDK + +The Intel(R) Enhanced Privacy ID Software Development Kit + +Intel(R) EPID SDK enables adding Intel(R) EPID support to applications +and platforms. + +Intel(R) EPID is a cryptographic protocol which enables the remote +authentication of a trusted platform whilst preserving the user's +privacy. + +* For a given public key there are many (e.g., millions) of private + keys. The key holders form a group. + +* Any key holder may sign against the one public key. + +* No one can tell which private key signed the data. This is the + privacy property. + +You can use Intel(R) EPID as a foundational building block for a +multitude of security solutions. + + +## Prerequisites + +* [Python](http://www.python.org) + +* [SCons](http://www.scons.org/) + +* [Parts](https://bitbucket.org/sconsparts/parts) + +* A C/C++ compiler supported by Parts + + +## What's New in This Release + +See [CHANGELOG.md](CHANGELOG.md). + + +## Documentation + +See [doc/index.html](doc/index.html) to browse the html +documentation. + + +## License + +See [LICENSE.txt](LICENSE.txt). + + +## Math Primitives + +The source code used for math primitives in the Intel(R) EPID SDK is a +subset of the Intel(R) IPP Cryptography library (version 2017 Update +2) written in pure C and not optimized for performance. For higher +performance, you can use the commercial version of the IPP +Cryptography library, which is available at +[https://software.intel.com/articles/download-ipp-cryptography-libraries](https://software.intel.com/articles/download-ipp-cryptography-libraries). + +More information on the optimized versions of Intel(R) IPP +Cryptography library, including mitigations for a potential +side-channel issue are available at +[https://security-center.intel.com/advisory.aspx?intelid=INTEL-SA-00060&languageid=en-fr](https://security-center.intel.com/advisory.aspx?intelid=INTEL-SA-00060&languageid=en-fr). diff --git a/SConstruct b/SConstruct new file mode 100644 index 0000000000000000000000000000000000000000..033d2d731370d7009968887e40a1a30f4e87f940 --- /dev/null +++ b/SConstruct @@ -0,0 +1,566 @@ +############################################################################ +# Copyright 2016-2017 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. +############################################################################ + +"""use scons -k to invoke all builds regardless of unit test failures +""" +import string +import sys +import SCons.Script +import os.path +import subprocess +from subprocess import Popen, PIPE +from parts import * +import re +import tempfile +import shutil +from collections import OrderedDict + +def get_parts_versions(env): + """Get Parts related versions given SCons environment env""" + return OrderedDict({'python': string.split(sys.version, " ", 1)[0], + 'scons': str(SCons.__version__), + 'parts': str(PartsExtensionVersion())}) + +def get_toolchain_versions(env): + """Get version of compilation toolchain given SCons environment env""" + versions = OrderedDict() + if 'MSVC_VERSION' in env: + versions['compiler'] = 'MSVC ' + env['MSVC_VERSION'] + cmd = env.subst('echo int main(){return 0;} > a.cpp' + ' | $CXX $CCFLAGS a.cpp /link /verbose') + defaultlib_regexp = r'.*Searching (.*\.lib).*' + elif 'GCC_VERSION' in env: + versions['compiler'] = 'GCC ' + env['GCC_VERSION'] + if 'GXX_VERSION' in env: + versions['compiler'] += ' and GXX ' + env['GXX_VERSION'] + if os.name == 'nt': + cmd = env.subst('echo int main(){return 0;}' + ' | $CXX $CCFLAGS -xc++ -Wl,--verbose -') + else: + cmd = env.subst('echo "int main(){return 0;}"' + ' | $CXX $CCFLAGS -xc++ -Wl,--verbose -') + else: + if os.name == 'nt': + cmd = env.subst('echo int main(){return 0;}' + ' | $CXX $CCFLAGS -xc++ -Wl,--verbose -') + else: + cmd = env.subst('echo "int main(){return 0;}"' + ' | $CC $CCFLAGS -xc -Wl,--verbose -') + if os.name == 'nt': + defaultlib_regexp = r'\n.* open (.*) succeeded' + else: + defaultlib_regexp = r'[\n(](/.*\.so[-.\da-fA-F]*).*' + + # Intel C compiler always depends from base toolchain + if 'INTELC_VERSION' in env: + versions['compiler'] = 'INTELC {0} with {1}'.format( + env['INTELC_VERSION'], + versions['compiler']) + + env['ENV']['PATH'] = str(env['ENV']['PATH']) + temp_dir = tempfile.mkdtemp() + try: + proc = subprocess.Popen(cmd, + cwd=temp_dir, + env=env['ENV'], + shell=True, + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, _ = proc.communicate() + if proc.returncode != 0: + versions['default_libs'] = 'failure executing: "{0}"'.format(cmd) + else: + default_libs = list( + set(re.findall(defaultlib_regexp, stdout, re.M))) + if 'MSVC_VERSION' in env: + # for windows additionally report versions of Windows Kit used + runtime_version_set = set() + for lib_path in default_libs: + path_components = os.path.realpath(lib_path).split(os.sep) + if 'Windows Kits' in path_components: + i = path_components.index('Windows Kits') + runtime_version_set.add( + 'Windows Kits {0} {1}'.format(path_components[i + 1], + path_components[i + 3])) + versions['sdk_or_libc'] = '; '.join(list(runtime_version_set)) + else: + # for posix additionally report versions of libc used + versions['sdk_or_libc'] = os.path.split(os.path.realpath( + next((lib for lib in default_libs if + 'libc' in lib.lower() and 'libcilk' not in lib.lower()), None)))[1] + versions['default_libs'] = default_libs + finally: + shutil.rmtree(temp_dir) + + return versions + + +def log_versions(env, include_toolchain=True): + """Log tools and libraries versions given SCons environment env + + Args: + env: Scons environment. + include_toolchain: Log version of compilation toolchain if True. + """ + + versions = get_parts_versions(env) + if include_toolchain: + versions.update(get_toolchain_versions(env)) + + print "**************** VERSIONS *************" + long_names = { + 'python': 'Python Version', + 'scons': 'SCons Version', + 'parts': 'Parts Version', + 'compiler': 'Compiler Version', + 'sdk_or_libc': 'Libc/SDK', + 'default_libs': 'Default Libs' + } + for name, value in versions.iteritems(): + if not isinstance(value, list): + print '* {0}: {1}'.format(long_names.get(name, name), value) + else: + print '* {0}:\n* \t{1}'.format(long_names.get(name, name), + '\n* \t'.join(sorted(value))) + print "***************************************" + + +def include_parts(part_list, **kwargs): + for parts_file in part_list: + if os.path.isfile(DefaultEnvironment().subst(parts_file)): + Part(parts_file=parts_file, **kwargs) + + +######## Part groups #################################################### +ipp_parts = ['ext/ipp/ippcp.parts'] +utest_parts = ['ext/gtest/gtest.parts', + 'epid/common-testhelper/common-testhelper.parts'] +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 = ['ext/argtable3/argtable3.parts', + 'example/verifysig/verifysig.parts', + 'example/signmsg/signmsg.parts', + 'example/data/data.parts', + 'example/compressed_data/compressed_data.parts'] +sizing_parts = ['example/util/util_static.parts', + 'example/signmsg/signmsg_shared.parts', + 'example/verifysig/verifysig_shared.parts', + 'example/verifysig/verifysig11_shared.parts'] +example_static_parts = ['example/util/util_static.parts', + 'example/signmsg/signmsg_static.parts', + 'example/verifysig/verifysig_static.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/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', + 'tools/reports/reports.parts'] +tss_test_parts = ['test/tss/tss.parts'] +package_parts = ['ext/gtest/gtest.parts', + 'ext/ipp/ippcp.parts', + 'package.parts'] +memory_profiler_parts = ['tools/memory_profiler/memory_profiler.parts'] +internal_tools_parts = ['ext/argtable3/argtable3.parts', + 'tools/ikgfwrapper/ikgfwrapper.parts'] +epid_data = ['test/epid_data/epid_data.parts'] +perf_benchmark_parts = ['ext/google_benchmark/google_benchmark.parts', + 'test/performance/performance.parts'] +memory_benchmark_parts = ['test/dynamic_memory/dynamic_memory.parts'] +######## End Part groups ############################################### +######## Commandline option setup ####################################### +product_variants = [ + 'production', + 'internal-test', + 'package-epid-sdk', + 'internal-tools', + 'benchmark', + 'tiny', + 'internal-test-tiny' +] + +default_variant = 'production' + + +def is_production(): + return GetOption("product-variant") == 'production' + + +def is_internal_test(): + return GetOption("product-variant") == 'internal-test' + + +def is_internal_tools(): + return GetOption("product-variant") == 'internal-tools' + + +def is_package(): + return GetOption("product-variant") == 'package-epid-sdk' + + +def is_benchmark(): + return GetOption("product-variant") == 'benchmark' + +def is_tiny(): + return GetOption("product-variant") == 'tiny' + +def is_internal_test_tiny(): + return GetOption("product-variant") == 'internal-test-tiny' + + +def use_commercial_ipp(): + return GetOption("use-commercial-ipp") + + +def use_tss(): + return GetOption("use-tss") + + +def config_has_instrumentation(): + return any(DefaultEnvironment().isConfigBasedOn(config_name) + for config_name in ['instr_release']) + + +def variant_dirname(): + s = GetOption("product-variant") + if s == 'production': + return 'epid-sdk' + elif s == 'package-epid-sdk': + return 'epid-sdk' + elif s == 'tiny': + return 'epid-sdk' + else: + return s + + +AddOption("--product-variant", "--prod-var", nargs=1, + help=("Select product variant to build. Possible " + "options are: {0}. The default is {1} if no option " + "is specified").format(", ".join(product_variants), + default_variant), + action='store', dest='product-variant', type='choice', + choices=product_variants, default=default_variant) + +AddOption("--use-commercial-ipp", + help=("Link with commercial IPP. The IPPCRYPTOROOT environment " + "variable must be set."), + action='store_true', dest='use-commercial-ipp', + default=False) + +AddOption("--use-tss", + help=("Link with TPM TSS. The TSSROOT environment variable " + "must be set."), + action='store_true', dest='use-tss', + default=False) + +AddOption("--ipp-shared", + help=("Build /ext/ipp as shared library."), + action='store_true', dest='ipp-shared', + default=False) + +AddOption("--enable-sanitizers", + help=("Build with sanitizers (https://github.com/google/sanitizers)."), + action='store_true', dest='sanitizers', + default=False) + +AddOption("--sanitizers-recover", + help=("Configure sanititzers to recover and continue execution " + "on error found. Only applicable when sanitizers are enabled." + "See --enable-sanitizers option."), + action='store_true', dest='sanitizers-recover', + default=False) + + +SetOptionDefault("PRODUCT_VARIANT", variant_dirname()) + +######## End Commandline option setup ################################### + + +# fix for parts 0.10.8 until we get better logic to extract ${CC} +SetOptionDefault('PARTS_USE_SHORT_TOOL_NAMES', 1) + + +def enable_sanitizers(recover): + """ + Configures compiler to enable sanitizers. + Adds sanitizer options to default scons environment such + that it affects all parts. + Args: + recover: Enable sanitizers recovery from errors found when True. + """ + env = DefaultEnvironment() + error_msg = None + try: + major = int(env.subst('$GCC_VERSION').partition('.')[0]) + except ValueError: + major = 0 + + if major >= 6 and env['TARGET_OS'] == 'posix': + if 'INTELC_VERSION' not in env: + ccflags = ['-fsanitize=address,undefined', '-fno-sanitize=alignment', + '-fno-sanitize=shift', '-fno-omit-frame-pointer'] + if recover: + ccflags = ccflags + ['-fsanitize-recover=all', '-fsanitize-recover=address'] + else: + ccflags = ccflags + ['-fno-sanitize-recover'] + # Extends default flags with sanitizer options + SetOptionDefault('CCFLAGS', ccflags) + SetOptionDefault('LIBS', ['asan', 'ubsan']) + else: + error_msg = """ + Build with sanitizers is not supported for Intel(R) C++ Compiler. + Try scons --toolchain=gcc_6 --target=posix + """ + else: + # User experience with sanitizers in GCC 4.8 is not great. Use at least GCC 6.x. + error_msg = """ + Build with sanitizers is only supported for GCC version greater than + 6.x targeting posix OS. Current GCC version is "{0}" and OS target is "{1}". + Try scons --toolchain=gcc_6 --target=posix + """.format(env.get('GCC_VERSION', 'unknown'), env.get('TARGET_OS', 'unknown')) + if error_msg is not None: + env.PrintError(error_msg) + + +def set_default_production_options(): + SetOptionDefault('CONFIG', 'release') + + SetOptionDefault('TARGET_VARIANT', '${TARGET_OS}-${TARGET_ARCH}') + + SetOptionDefault('INSTALL_ROOT', + '#_install/${PRODUCT_VARIANT}') + + SetOptionDefault('INSTALL_TOOLS_BIN', + '$INSTALL_ROOT/tools') + + SetOptionDefault('INSTALL_SAMPLE_BIN', + '$INSTALL_ROOT/example') + + SetOptionDefault('INSTALL_EPID_INCLUDE', + '$INSTALL_ROOT/include/epid') + + SetOptionDefault('INSTALL_IPP_INCLUDE', + '$INSTALL_ROOT/include/ext/ipp/include') + + SetOptionDefault('INSTALL_TEST_BIN', + '$INSTALL_ROOT/test') + + SetOptionDefault('INSTALL_LIB', + '$INSTALL_ROOT/lib/${TARGET_VARIANT}') + + SetOptionDefault('INSTALL_SAMPLE_DATA', + '$INSTALL_ROOT/example') + + SetOptionDefault('INSTALL_TOOLS_DATA', + '$INSTALL_ROOT/tools') + + SetOptionDefault('PACKAGE_DIR', + '#_package') + + SetOptionDefault('PACKAGE_ROOT', + '#_package/${PRODUCT_VARIANT}') + + SetOptionDefault('ROOT', + '#') + + SetOptionDefault('PACKAGE_NAME', + '{PRODUCT_VARIANT}') + + +if GetOption("sanitizers"): + enable_sanitizers(GetOption("sanitizers-recover")) + +if is_production(): + set_default_production_options() + ipp_mode = ['install_lib'] + if use_commercial_ipp(): + ipp_mode.append('use_commercial_ipp') + sdk_mode = ['install_lib'] + if use_tss(): + sdk_mode.append('use_tss') + if GetOption('ipp-shared'): + ipp_mode.append('build_ipp_shared') + include_parts(ipp_parts, mode=ipp_mode, + INSTALL_INCLUDE='${INSTALL_IPP_INCLUDE}') + include_parts(utest_parts + common_parts + + member_parts + verifier_parts, + mode=sdk_mode, + INSTALL_INCLUDE='${INSTALL_EPID_INCLUDE}') + include_parts(util_parts + example_parts, + 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}') + Default('all') + Default('utest::') + if not use_tss(): + Default('run_utest::') + +if is_internal_test(): + set_default_production_options() + sdk_mode = [] + if use_tss(): + sdk_mode.append('use_tss') + include_parts(tss_test_parts) + include_parts(ipp_parts) + include_parts(utest_parts + common_parts + + member_parts + verifier_parts, + mode=sdk_mode) + include_parts(util_parts + example_parts, + INSTALL_BIN='${INSTALL_SAMPLE_BIN}', + INSTALL_DATA='${INSTALL_SAMPLE_DATA}') + include_parts(sizing_parts, + INSTALL_BIN='${INSTALL_SAMPLE_BIN}') + 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 + verifier_parts + member_parts + util_parts) + include_parts(internal_tools_parts + memory_profiler_parts, + INSTALL_BIN='${INSTALL_TOOLS_BIN}') + Default('ikgfwrapper', 'memory_profiler') + Default('run_utest::memory_profiler::') + +if is_benchmark(): + set_default_production_options() + MODE = [] + if config_has_instrumentation(): + MODE.append('use_memory_profiler') + ipp_mode = [] + if use_commercial_ipp(): + ipp_mode.append('use_commercial_ipp') + + # install ipp static and ipp shared builds into separate locations + if GetOption('ipp-shared'): + ipp_mode.append('build_ipp_shared') + SetOptionDefault('INSTALL_TEST_BIN', + '$INSTALL_ROOT/test_ipp_shared') + SetOptionDefault('INSTALL_LIB', + '$INSTALL_ROOT/lib_ipp_shared') + else: + SetOptionDefault('INSTALL_LIB', + '$INSTALL_ROOT/lib') + + # do not allow file links to keep previous builds intact + SetOptionDefault('CCOPY_LOGIC', 'copy') + + include_parts(ipp_parts, config_independent=True, mode=MODE + ipp_mode, + INSTALL_BIN='${INSTALL_TEST_BIN}') + include_parts(example_static_parts + utest_parts + perf_benchmark_parts + + common_parts + verifier_parts + + sizing_parts + epid_data, + config_independent=True, + mode=MODE, + INSTALL_BIN='${INSTALL_TEST_BIN}') + + member_mode = ['install_lib'] + member_cfg = ('embedded' if not DefaultEnvironment().isConfigBasedOn( + 'debug') and not config_has_instrumentation() else DefaultEnvironment().subst('$CONFIG')) + Part(parts_file='epid/common/tinycommon.parts', CONFIG=member_cfg) + Part(parts_file='epid/member/tinymember.parts', CONFIG=member_cfg, + config_independent=True, mode=MODE + member_mode, INSTALL_BIN='${INSTALL_TEST_BIN}') + + if config_has_instrumentation(): + include_parts(memory_benchmark_parts + memory_profiler_parts, + config_independent=True, + mode=MODE, + INSTALL_BIN='${INSTALL_TEST_BIN}') + + Default('build::') + +if is_package(): + set_default_production_options() + include_parts(package_parts, + mode=['install_package'], + INSTALL_TOP_LEVEL='${PACKAGE_ROOT}') + Default('package') + +if is_tiny(): + set_default_production_options() + ### Member + Part(parts_file='ext/gtest/gtest.parts') + member_mode = ['install_lib'] + member_cfg = ('embedded' + if not DefaultEnvironment().isConfigBasedOn('debug') + else DefaultEnvironment().subst('$CONFIG')) + Part(parts_file='epid/common/tinycommon.parts', CONFIG=member_cfg) + Part(parts_file='epid/member/tinymember.parts', CONFIG=member_cfg, + config_independent=True, mode=member_mode) + Default('member::') + Default('run_utest::member::') + ### Verifier, samples and tools + verifier_mode = ['install_lib'] + ipp_mode = ['install_lib'] + if use_commercial_ipp(): + ipp_mode.append('use_commercial_ipp') + if GetOption('ipp-shared'): + ipp_mode.append('build_ipp_shared') + include_parts(ipp_parts, mode=ipp_mode, + INSTALL_INCLUDE='${INSTALL_IPP_INCLUDE}') + Part(parts_file='epid/common-testhelper/common-testhelper.parts', + config_independent=True) + include_parts(common_parts + verifier_parts, + mode=verifier_mode, + INSTALL_INCLUDE='${INSTALL_EPID_INCLUDE}') + include_parts(util_parts + example_parts, + 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}') + Default('all') + Default('utest::') + +if is_internal_test_tiny(): + set_default_production_options() + sdk_mode = [] + ### Member + Part(parts_file='ext/gtest/gtest.parts') + member_cfg = ('embedded' + if not DefaultEnvironment().isConfigBasedOn('debug') + else DefaultEnvironment().subst('$CONFIG')) + Part(parts_file='epid/common/tinycommon.parts', CONFIG=member_cfg) + Part(parts_file='epid/member/tinymember.parts', CONFIG=member_cfg, + config_independent=True, mode=sdk_mode) + ### Verifier, samples and tools + include_parts(ipp_parts) + Part(parts_file='epid/common-testhelper/common-testhelper.parts', + config_independent=True) + include_parts(common_parts + verifier_parts, + mode=sdk_mode) + include_parts(util_parts + example_parts, + INSTALL_BIN='${INSTALL_SAMPLE_BIN}', + INSTALL_DATA='${INSTALL_SAMPLE_DATA}') + include_parts(tools_parts, INSTALL_BIN='${INSTALL_TOOLS_BIN}') + include_parts(testbot_test_parts) + Default('build::') + +log_versions(DefaultEnvironment(), not is_package()) diff --git a/configure b/configure new file mode 100644 index 0000000000000000000000000000000000000000..a288104abe8debebabb950264cb8bf2743effaac --- /dev/null +++ b/configure @@ -0,0 +1,3968 @@ +#! /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 &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 +TINY +TSS_PATH +RANLIB +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 +with_tss +enable_tiny +' + 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 + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-tiny Build size optimized member. Mutually exclusive with + '--with-tss' + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-tss Link with TPM TSS. The TSSROOT environment variable + must be set. + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + 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 +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 +#include +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 + +#define ranlib +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib" + $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 +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; 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_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_RANLIB="ranlib" + $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_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + 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 + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +# restore flags +CFLAGS="$CFLAGS_OLD" +CPPFLAGS="$CPPFLAGS_OLD" + + +# Check whether --with-tss was given. +if test "${with_tss+set}" = set; then : + withval=$with_tss; +else + with_tss=no + +fi + + + + +if test "x$with_tss" != "xno"; then : + as_ac_File=`$as_echo "ac_cv_file_$TSSROOT" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $TSSROOT" >&5 +$as_echo_n "checking for $TSSROOT... " >&6; } +if eval \${$as_ac_File+:} false; then : + $as_echo_n "(cached) " >&6 +else + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "$TSSROOT"; then + eval "$as_ac_File=yes" +else + eval "$as_ac_File=no" +fi +fi +eval ac_res=\$$as_ac_File + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_File"\" = x"yes"; then : + TSS_PATH=$TSSROOT +else + + as_fn_error $? "Necessary environment variable not set or set incorrectly: 'TSSROOT'" "$LINENO" 5 + +fi + +fi + + +# Check whether --enable-tiny was given. +if test "${enable_tiny+set}" = set; then : + enableval=$enable_tiny; +else + enable_tiny=no + +fi + + + +if test "x$enable_tiny" != "xno"; then : + if test "x$with_tss" != "xno"; then : + + as_fn_error $? "Size optimized member can not link with TPM TSS" "$LINENO" 5 + +fi + TINY=yes +fi +# 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` +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 +' >$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/doc/html/1_81_2file__parser_8h.html b/doc/html/1_81_2file__parser_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..85965f95c00caae681ec357534819e1246ef85fc --- /dev/null +++ b/doc/html/1_81_2file__parser_8h.html @@ -0,0 +1,106 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common/1.1/file_parser.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
file_parser.h File Reference
+
+
+ +

Intel(R) EPID 1.1 issuer material parsing utilities. +More...

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

+Functions

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

Detailed Description

+

Intel(R) EPID 1.1 issuer material parsing utilities.

+
+
+ + + + + diff --git a/doc/html/1_81_2types_8h.html b/doc/html/1_81_2types_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..7b89ece555777dcd56c76fab85acb57014b7bb20 --- /dev/null +++ b/doc/html/1_81_2types_8h.html @@ -0,0 +1,153 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common/1.1/types.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
types.h File Reference
+
+
+ +

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

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

+Data Structures

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

+Typedefs

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

Detailed Description

+

SDK data types for Intel(R) EPID 1.1.

+
+
+ + + + + diff --git a/doc/html/_basenames.html b/doc/html/_basenames.html new file mode 100644 index 0000000000000000000000000000000000000000..14289bbd98a8ba98b94d0e58822b104fa8bf5a25 --- /dev/null +++ b/doc/html/_basenames.html @@ -0,0 +1,101 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: In-Depth Explanation of Basenames + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
In-Depth Explanation of Basenames
+
+
+

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

+


+

+

+Random Base Signatures

+
+random_base.png +
+

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

+

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

+

+Name Based Signatures

+
+base_name.png +
+

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

+

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

+

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

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

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

+ + + + + + + + + +
Prerequisite URL Downloads -----—
Python 2.7 https://www.python.org python 2.7.12 installers
SCons 2.4 http://www.scons.org scons-2.4.1.zip
Parts 0.11 https://bitbucket.org/sconsparts/parts/downloads parts-0.11.1.zip
+


+

+

+Installing Python

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

To verify that Python installed correctly, run:

    > python --version
+


+

+

+Installing SCons

+

After Python is installed, install SCons.

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


+ To verify that SCons installed correctly, run:

    > scons --version
+


+

+

+Installing Parts

+

After SCons is installed, install Parts.

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


+ To verify that Parts installed correctly, run:

    > python -c "import pkgutil; print 'Parts is installed' if 'parts' in [str(n) for _, n, _ in pkgutil.iter_modules()] else 'Parts module is not found'"
+


+

+
+
+ + + + + diff --git a/doc/html/_building_sdk.html b/doc/html/_building_sdk.html new file mode 100644 index 0000000000000000000000000000000000000000..e698a997e5ba236ea09f3e08bc88e13991c25f02 --- /dev/null +++ b/doc/html/_building_sdk.html @@ -0,0 +1,220 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Building from Source + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Building from Source
+
+
+ +

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

+

+Prerequisites

+

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

+

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

+

For a list of compilers and libraries that the SDK was validated on, refer to Tested Libraries and Compilers.

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

+Building SDK with SCons

+

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

+

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

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

By default, this performs a release build of the SDK with unit tests for the current platform and runs unit tests.

+

To skip unit test execution when doing cross platform build use:

scons build:: utest::
+

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

+

Potentially useful command line options:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Option Action -----------------------—
--cfg=debug Build in debug mode
--cfg=release Build in release mode
--target=x86 Target x86 (i386) architecture
--target=x86_64 Target x86-64 architecture
--target=arm Target 32-bit ARM architecture
--target=arm_hf Target 32-bit ARM architecture with hard float ABI
--target=aarch64 Target AArch64 (64-bit ARM) architecture
--tc=cl Use MSVC to compile (Microsoft®* C/C++ Compiler)
--tc=gcc Use GCC to compile (GNU* Compiler Collection)
--tc=icl,mstools Use Intel® C++ compiler for Windows
--tc=icc,gnutools Use Intel® C++ compiler for Linux
build:: Build the SDK (does not build unit tests)
utest:: Build unit tests
run_utest:: Run unit tests (builds tests if needed)
-c Clean the build
-j N or --jobs=N Allow N jobs at once
+

+Alternate Makefile Based Build Approach

+

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

+

In the root directory of the SDK, run:

./configure
+make all
+make check
+make install
+

./configure sets up the default settings:

+
    +
  • The default compilers are GCC/G++. You can specify compilers via the CC and CXX variables. For example, ./configure CC=/opt/intel/bin/icc CXX=/opt/intel/bin/icpc
  • +
  • The default installation directory is ./_install. You can specify the installation directory by using ./configure --prefix=/usr/local/epid_install
  • +
  • The default target matches the current environment. You may change it with the CFLAGS parameter. For example, ./configure CFLAGS=-m32 when run on x86_64 environment configures compilation to target x86.
  • +
+

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

+

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

+

To run N jobs at once use the -j N or --jobs=N option with the make command, e.g. make all -j 4 will allow make to create 4 jobs at once.

+

To clean the build, run make clean.

+

To remove the install directory, run make uninstall.

+

To configure cross compilation use --host option. For example, ./configure --host=arm-linux-gnueabi configures cross compilation build targeting ARM architecture. Cross compiled tests will not run on the build machine so make check should be replaced to make utest. A typical build sequence for cross compilation is as follows:

./configure --host=<target system>
+make all
+make utest
+make install
+

+Improving Performance with Commercial IPP

+

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

+
Note
The SDK has been validated with version 2018 (Update 2.1) of the cryptography library.
+

To build the SDK using a commercial Intel® IPP installation, the IPPCRYPTOROOT environment variable must be properly configured to point to the IPP installation directory, as described in Setting Environment Variables in the Intel® IPP Crypto Developer Guide.

+

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

+

+Optimizing for Code Size

+

To build the SDK with a member with substantially reduced code size, you can use tiny mode.

+

To build with SCons, go to the root directory of the SDK and run:

scons --prod-var=tiny
+

To build with Make, go to the root directory of the SDK and run:

./configure --enable-tiny
+make all
+make check
+make install
+

+Limitations

+

By design, a member built in tiny mode has the following limitations:

+
    +
  • TPM mode is not supported.
  • +
  • Only SHA-256 and SHA-512 are supported.
  • +
  • Signature pre-computation is not supported.
  • +
  • Compressed keys are not supported.
  • +
  • Commercial IPP cannot be used.
  • +
  • The implementation prioritizes size over performance.
  • +
+

+Example Programs

+

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

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

+Building with Other Build Systems

+

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

+
+basicdoc.png +
+


+

+

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

+
+
+ + + + + diff --git a/doc/html/_change_log.html b/doc/html/_change_log.html new file mode 100644 index 0000000000000000000000000000000000000000..99f86b040d1a64648492609633a27813d2b8e280 --- /dev/null +++ b/doc/html/_change_log.html @@ -0,0 +1,246 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: What's New + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
What's New
+
+
+

[6.0.1] - 2018-05-04

+

Changed

+
    +
  • Updated Intel(R) IPP Cryptography library to version 2018 (Update 2.1).
  • +
+

Fixed

+
    +
  • The member library now includes the tpm2 subcomponent when built using SCons, instead of requiring a separate member.tpm2 library.
  • +
+

Known Issues

+
    +
  • Only the SHA-256 hash algorithm is supported when using the SDK with the IBM TPM simulator due to a defect in version 532 of the simulator.
  • +
  • Basenames are limited to 124 bytes in TPM mode.
  • +
  • Scons build will not work natively on ARM. You can still build using make or cross compile.
  • +
+

[6.0.0] - 2017-12-15

+

Added

+
    +
  • The member can now be built with a substantially reduced code size using a compilation option.
  • +
  • New context lifetime management APIs have been added to member to give callers more control of memory allocation.
  • +
  • New member API EpidClearRegisteredBasenames has been added to clear registered basenames without recreating the member.
  • +
+

Changed

+
    +
  • EpidRegisterBaseName was renamed to EpidRegisterBasename because basename is a single word.
  • +
  • Command-line parsing library used by samples and tools has been replaced by Argtable3.
  • +
+

Deprecated

+
    +
  • EpidMemberCreate has been deprecated. This API has been superseded by EpidMemberGetSize and EpidMemberInit.
  • +
  • EpidMemberDelete has been deprecated. This API has been superseded by EpidMemberDeinit.
  • +
+

Removed

+
    +
  • size_optimized_release build configuration has been removed. Use the compilation option to build member with reduced code size.
  • +
+

Known Issues

+
    +
  • Only the SHA-256 hash algorithm is supported when using the SDK with the IBM TPM simulator due to a defect in version 532 of the simulator.
  • +
  • Basenames are limited to 124 bytes in TPM mode.
  • +
  • Scons build will not work natively on ARM. You can still build using make or cross compile.
  • +
+

[5.0.0] - 2017-09-15

+

Added

+
    +
  • The member implementation now has the option to support signing using a TPM, using the ECDAA capabilities of TPM 2.0.
  • +
+

Changed

+
    +
  • Member API updated to unify HW and SW use cases.
      +
    • Added
        +
      • ProvisionKey
      • +
      • ProvisionCompressed
      • +
      • ProvisionCredential
      • +
      • Startup
      • +
      +
    • +
    • Parameters changed
        +
      • MemberCreate
      • +
      • RequestJoin
      • +
      +
    • +
    • Removed or made private
        +
      • WritePrecomp
      • +
      • SignBasic
      • +
      • NrProve
      • +
      • AssemblePrivKey
      • +
      +
    • +
    +
  • +
  • EpidRequestJoin was renamed to EpidCreateJoinRequest to make it clear that it is not directly communicating with the issuer.
  • +
+

Fixed

+
    +
  • EpidCreateJoinRequest creates valid join requests. This fixes a regression in EpidRequestJoin introduced in 4.0.0.
  • +
+

Known Issues

+
    +
  • Only the SHA-256 hash algorithm is supported when using the SDK with the IBM TPM simulator due to a defect in version 532 of the simulator.
  • +
  • Basenames are limited to 124 bytes in TPM mode.
  • +
+

[4.0.0] - 2017-04-25

+

Added

+
    +
  • The member implementation now provides an internal interface that gives guidance on partitioning member operations between highly sensitive ones that use f value of the private key, and less sensitive operations that can be performed in a host environment.
  • +
  • New member API EpidAssemblePrivKey was added to help assemble and validate the new member private key that is created when a member either joins a group (using the join protocol) or switches to a new group (as the result of a performance rekey).
  • +
+

Changed

+
    +
  • Updated Intel(R) IPP Cryptography library to version 2017 (Update 2).
  • +
  • The mechanism to set the signature based revocation list (SigRL) used for signing was changed. EpidMemberSetSigRl must be used to set the SigRL. The SigRL is no longer a parameter to EpidSign. This better models typical use case where a device stores a revocation list and updates it independently of signing operations.
  • +
+

Removed

+
    +
  • Removed EpidWritePreSigs API. Serialization of pre-computed signatures is a risky capability to provide, and simply expanding the internal pool via EpidAddPreSigs still provides most of the optimization benefits.
  • +
  • The EpidIsPrivKeyInGroup API is no longer exposed to clients. It is no longer needed because the new member API EpidAssemblePrivKey performs this check.
  • +
+

Fixed

+
    +
  • When building with commercial version of the Intel(R) IPP Cryptography library, optimized functions are now properly invoked, making signing and verification operations ~2 times faster
  • +
  • SHA-512/256 hash algorithm is now supported.
  • +
  • README for compressed data now correctly documents the number of entries in revocation lists.
  • +
  • The verifysig sample now reports a more clear error message for mismatched SigRLs.
  • +
  • The default scons build will now build for a 32-bit target on a 32-bit platform.
  • +
+

Known Issues

+
    +
  • Scons build will not work natively on ARM. You can still build using make or cross compile.
  • +
+

[3.0.0] - 2016-11-22

+

Added

+
    +
  • Support for verification of Intel(R) 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

+

Added

+
    +
  • 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
    • +
    +
  • +
+

Changed

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

Fixed

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

[1.0.0] - 2016-03-03

+

Added

+
    +
  • Basic sign and verify functionality
  • +
  • Dynamic join support for member
  • +
  • Apache 2.0 License
  • +
+
+
+ + + + + diff --git a/doc/html/_epid_overview.html b/doc/html/_epid_overview.html new file mode 100644 index 0000000000000000000000000000000000000000..a746663e7b5a0a5790563c328d36c3695c221556 --- /dev/null +++ b/doc/html/_epid_overview.html @@ -0,0 +1,196 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Introduction to the Intel® EPID Scheme + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Introduction to the Intel® EPID Scheme
+
+
+ +

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

+

+Roles

+

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

+

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

+
+epid_diagram_roles_summary.png +
+

+Issuers

+

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

+

The issuer manages groups by doing the following:

+
    +
  • Creates groups by generating one issuing private key and one group certificate for each group. The group certificate contains the group public key.
  • +
+
+epid_diagram_group_public_key_and_issuing_private_key.png +
+


+

+
    +
  • Creates group members by generating unique Intel® EPID member private keys through bulk provisioning. Member private keys are created from the issuing private key for the group.
  • +
  • Manages requests from prospective members to join existing groups.
  • +
+
+epid_diagram_generating_member_private_keys.png +
+
+epid_diagram_provisioning.png +
+


+

+
    +
  • Creates and maintains group revocation lists.
  • +
  • Creates and maintains signature revocation lists and member private key revocation lists. These lists of members no longer in good standing allow members to be dropped from a group.
  • +
+
+epid_diagram_maintaining_revocation_lists.png +
+


+

+
    +
  • Makes group public keys and revocation lists available to verifiers. Makes signature revocation list available to members.
  • +
+
+epid_diagram_issuer_makes_revocation_lists_available.png +
+

+Members

+

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

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

+Verifiers

+

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

+

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

+

A verifier can do the following:

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

+Member and Verifier Interaction

+

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

+

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

+

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

+
+epid_diagram_signing_and_verification.png +
+

+Groups

+

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

+

All groups have the following:

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

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

+
+epid_diagram_group.png +
+

+Keys

+

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

+

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

+

+Group Public Key

+

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

+

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

+

+Issuing Private Key

+

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

+

+Member Private Key

+

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

+

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

+
+
+ + + + + diff --git a/doc/html/_examples.html b/doc/html/_examples.html new file mode 100644 index 0000000000000000000000000000000000000000..3b5e18c1d57d053ca34f1770bb45d5c9f054c20a --- /dev/null +++ b/doc/html/_examples.html @@ -0,0 +1,87 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Walkthroughs of Examples Showing API Usage + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Walkthroughs of Examples Showing API Usage
+
+
+

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

+ + + + + + + +
Example Application Concept Demonstrated
signmsg Generating an Intel® EPID Signature
verifysig Verifying an Intel® EPID Signature
+
+
+ + + + + diff --git a/doc/html/_examples.js b/doc/html/_examples.js new file mode 100644 index 0000000000000000000000000000000000000000..3abe571c66584665d2ba06e87e0926e2588d88b8 --- /dev/null +++ b/doc/html/_examples.js @@ -0,0 +1,11 @@ +var _examples = +[ + [ "Generating an Intel® EPID Signature", "_user_manual__generating_an_intel_epid_signature.html", [ + [ "Summary", "_user_manual__generating_an_intel_epid_signature.html#signmsgWalktrhu_overview", null ], + [ "Signmsg Walkthrough", "_user_manual__generating_an_intel_epid_signature.html#signmsgWalkthru_", null ] + ] ], + [ "Verifying an Intel® EPID Signature", "_user_manual__verifying_an_intel_epid_signature.html", [ + [ "Summary", "_user_manual__verifying_an_intel_epid_signature.html#verifysigWalktrhu_overview", null ], + [ "Verifysig Walkthrough", "_user_manual__verifying_an_intel_epid_signature.html#verifysigWalkthrough_main", null ] + ] ] +]; \ No newline at end of file diff --git a/doc/html/_glossary.html b/doc/html/_glossary.html new file mode 100644 index 0000000000000000000000000000000000000000..8f1220ffbf7e232f3043267d5decf9998590cc8e --- /dev/null +++ b/doc/html/_glossary.html @@ -0,0 +1,176 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Glossary + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Glossary
+
+
+ +

+CA public key

+

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

+

+DAA

+

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

+

+Elliptic curve

+

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

+

+Elliptic curve point

+

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

+

+Group

+

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

+

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

+

All groups have the following:

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

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

+

+Group certificate

+

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

+

+Group public key

+

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

+

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

+

+Intel® EPID

+

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

+

+Intel® EPID signature

+

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

+

+Issuer

+

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

+

The issuer manages groups by doing the following:

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

+Issuing private key

+

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

+

+Member

+

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

+

+Name-based signature

+

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

+

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

+

+Member private key

+

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

+

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

+

+Non-revoked proof

+

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

+

+Pairing

+

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

+

+Revocation, revocation lists

+

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

+

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

+

+Verifier

+

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

+

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

+
+
+ + + + + diff --git a/doc/html/_how_validated.html b/doc/html/_how_validated.html new file mode 100644 index 0000000000000000000000000000000000000000..22be5cb26a3247b2d27b08154d63e76da6a8bf6b --- /dev/null +++ b/doc/html/_how_validated.html @@ -0,0 +1,123 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Tested Libraries and Compilers + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Tested Libraries and Compilers
+
+
+

+Tested Libraries and Compilers

+

The Intel® SDK was validated with the following compilers:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Runtime Library Compiler ---------------------------—
GNU* C Library (glibc) 2.23 GNU* Compiler Collection version (GCC) 6.2.0
glibc 2.23 GCC 5.4.0
glibc 2.23 GCC 4.8.5
glibc 2.23 Intel® C++ Compiler for Linux* (ICC) 17.0.1 with GCC 4.8.5
glibc 2.23 ICC 17.0.1 with GCC 5.4.0
glibc 2.23 ICC 17.0.1 with GCC 6.2.0
glibc 2.23 ICC 16.0.3 with GCC 4.8.5
glibc 2.23 ICC 16.0.3 with GCC 5.4.0
glibc 2.23 ICC 16.0.3 with GCC 6.2.0
glibc 2.23 ICC 15.0.7 with GCC 4.8.5
glibc 2.23 ICC 14.0.4 with GCC 4.8.5
Microsoft* Windows* Kit 10 Microsoft* Visual Studio*(VS) 2015
Microsoft* Windows* Kit 8.1 VS 2015
Microsoft* Windows* Kit 8.1 Intel® C++ Compiler for Windows* (ICL) 16.0.207 with VS 2013
Microsoft* Windows* Kit 10 ICL 16.0.207 with VS 2015
Microsoft* Windows* Kit 8.1 ICL 15.0.287 with VS 2013
Microsoft* Windows* Kit 10 ICL 15.0.287 with VS 2015
Microsoft* Windows* Kit 8.1 ICL 14.0.241 with VS 2013
+


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

+
+
+ + + + + diff --git a/doc/html/_implementation_notes.html b/doc/html/_implementation_notes.html new file mode 100644 index 0000000000000000000000000000000000000000..5e0169334a20efe314fd9c8e269e17b3f7c03e46 --- /dev/null +++ b/doc/html/_implementation_notes.html @@ -0,0 +1,122 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Implementation Notes + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Implementation Notes
+
+
+ +

+Member Implementations

+

There are three member implementations. You can use a specific compilation option to select the implementation that will be used at compile time. The implementations are:

+
    +
  1. Reference: This default implementation gives guidance on partitioning member operations between highly sensitive ones that use the f value of the member private key, and less sensitive ones that can be performed in a host environment. To build in default mode, refer to Building from Source.
  2. +
  3. TPM: This TPM member implementation uses the TPM for signing by linking to the IBM TSS. To build in TPM mode, refer to Building the SDK in TPM Mode.
  4. +
  5. Tiny: This tiny implementation builds the SDK with a substantially reduced code size. To build in tiny mode, refer to Optimizing for Code Size.
  6. +
+

+Random Number Generation

+

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

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

+Protecting Secrets

+

Member code works with private keys, so member code must be run in a trusted environment. The member component contains a TPM subcomponent which contains the most sensitive operations performed by the member.

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

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

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

+Replacing Math Primitives

+

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

+

+Octstring/Buffer Types

+

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

+

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

+

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

+

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

+

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

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

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

+

+Flexible Arrays

+

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

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

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

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

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

+

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

+
+
+ + + + + diff --git a/doc/html/_issuer_material.html b/doc/html/_issuer_material.html new file mode 100644 index 0000000000000000000000000000000000000000..7e79f968af2cd57e81d1bbdf1dc206e8ede67c28 --- /dev/null +++ b/doc/html/_issuer_material.html @@ -0,0 +1,268 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Test Data + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Test Data
+
+
+

The SDK includes sample material in example/data that is intended to be provisioned in members and verifiers so that they can operate without material from a real issuer, such as iKGF.

+

+Sample Groups

+

Sample Group A

+

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

+


+

+

Members in Group A

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


+

+

Revocation Lists for Group A

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


+

+

Sample Group B

+

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

+


+

+

Members in Group B

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


+

+

Revocation Lists for Group B

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

+Group Revocation Lists

+

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

+


+

+

Sample GrpRLs

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

+Compressed Sample Groups

+

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

+

Compressed Sample Group A

+

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

+


+

+

Members in Group A

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


+

+

Revocation Lists for Group A

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


+

+

Compressed Sample Group B

+

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

+


+

+

Members in Group B

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


+

+

Revocation Lists for Group B

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

+Compressed Group Revocation Lists

+

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

+


+

+

Sample GrpRLs

+ + + + + + + +
Group Revocation List Description
grprl_empty.bin No entries
grprl.bin One entry in which groupb is revoked
+
+
+ + + + + diff --git a/doc/html/_legal_information.html b/doc/html/_legal_information.html new file mode 100644 index 0000000000000000000000000000000000000000..e5de9497b28d2d8abb9b1cc6301517a0be6f7611 --- /dev/null +++ b/doc/html/_legal_information.html @@ -0,0 +1,86 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Legal Information + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Legal Information
+
+
+

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

+

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

+

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

+

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

+

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

+

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

+

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

+

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

+
+
+ + + + + diff --git a/doc/html/_provisioning.html b/doc/html/_provisioning.html new file mode 100644 index 0000000000000000000000000000000000000000..4cad26e7d38d40e9923a4044eb56394a18331220 --- /dev/null +++ b/doc/html/_provisioning.html @@ -0,0 +1,140 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Preparing a Device + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Preparing a Device
+
+
+ +

In order to be an Intel® EPID device, members need to be provisioned with a member private key and group public key. Members can get member private keys through bulk or dynamic provisioning.

+

For Intel® EPID verifiers to function, they need access to a group public key and revocation lists.

+

All Intel® EPID keys and revocation lists are referred to collectively as issuer material.

+

This section describes how to:

+
    +
  • Provision member private keys through bulk provisioning
  • +
  • Provision member private keys through dynamic provisioning
  • +
  • Provision members and verifiers with sample issuer material
  • +
+

For information on obtaining real issuer material from iKGF (Intel Key Generation Facility), see Managing Groups with iKGF. For more general information on how the issuer provides material for members and verifiers, see Introduction to the Intel® EPID Scheme.

+

+Bulk Provisioning

+

Bulk provisioning is typically done during manufacturing.

+

In bulk provisioning, the issuer provides complete member private keys to the device manufacturer.

+

In bulk provisioning, the manufacturer needs to do the following:

+
    +
  • Request member private keys from the issuer in bulk. These are complete member private keys, including the membership credential and the secret f component.
  • +
  • Fuse the member private keys into each device.
  • +
+

+Dynamic Provisioning

+

Dynamic provisioning was designed to allow a device to join a group post-manufacturing. While key generation is the key part of bulk provisioning, the key part of dynamic provisioning is the join protocol.

+

Dynamic provisioning relies on a two-way exchange of intermediate values to protect the secrecy of the final member private key. In dynamic provisioning, the issuer provides the membership credential component of each member private key, while the secret f value comes from the device and is never known to the issuer.

+
+member_private_key.png +
+

In dynamic provisioning, the manufacturer needs to do the following:

+
    +
  1. Generate the f value of the member private key.
  2. +
  3. Generate the join request using the f value and a nonce obtained from the issuer.
  4. +
  5. Send the join request to the issuer. The issuer will respond to the join request by returning the membership credential.
  6. +
  7. Provision the membership credential to the member device.
  8. +
+

+Issuer Material

+

Members and verifiers need issuer material to operate. The SDK includes sample material in example/data so that members and verifiers can operate without real issuer material. The following types of sample issuer material are included:

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

For detailed information on what sample issuer material is included in the SDK, refer to Test Data.

+

For information on how to work with real issuer material, refer to Managing Groups with iKGF.

+

+Issuer Material for Verifiers

+

To test a verifier, you can provide the verifier a sample group public key and sample revocation lists from example/data, and make sure that verification succeeds or fails based on the revoked or non-revoked status of the member.

+

+Issuer Material for Members

+

To test a member, you can provision the member with a sample group public key, sample member private key, and sample SigRL from example/data.

+

You can provision the member with revoked material to make sure the verification process fails. For example, when you sign and verify using the member groupa/privrevokedmember0, and use the sample private key revocation list on which privrevokedmember0 is revoked, verification should fail.

+

Similarly, when you generate a signature using the member groupa/sigrevokedmember0, using sample SigRL groupa/sigrl.bin, verification should fail.

+
+
+ + + + + diff --git a/doc/html/_revocation.html b/doc/html/_revocation.html new file mode 100644 index 0000000000000000000000000000000000000000..98e5f3c6c16850f9c23357e2d20055de2e7f0049 --- /dev/null +++ b/doc/html/_revocation.html @@ -0,0 +1,144 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: In-Depth Explanation of Revocation + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
In-Depth Explanation of Revocation
+
+
+

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

+


+

+

+Revocation Hierarchy

+

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

+

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

+

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

+

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

+

+Revocation List Versions

+

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

+

+Group Based Revocation

+

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

+

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

+

+Reasons the Issuer Might Revoke a Group

+

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

+

Reasons to revoke a group might include:

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

+Private Key Based Revocation

+

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

+

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

+

+Reasons the Issuer Might Revoke a Member Private Key

+

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

+

+Signature Based Revocation

+

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

+

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

+

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

+

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

+

+Signing with Non-Revoked Proofs

+

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

+

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

+

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

+

+Reasons the Issuer Might Revoke an Intel® EPID Signature

+

Reasons for revoking a signature might include the following:

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

+Verifier Blacklist Revocation

+

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

+

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

+

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

+

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

+

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

+

+Reasons the Verifier Might Revoke an Intel® EPID Signature

+

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

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

+SDK Components

+

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

+
+sdk_block_diagram.png +
+


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

+


+

+

+SDK Core

+

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

+ + + + + + + + + + + +
Component Description ------------—
member Library containing APIs needed to implement a member
verifier Library containing APIs needed to implement a verifier
common Library containing common types and functions
math Math primitives used by member and verifier
+


+

+

+Samples

+

The SDK includes Test Data in example/data that is intended to be provisioned in members and verifiers so that they can operate without real issuer material. (For information on how to work with real issuer material, refer to Managing Groups with iKGF.)

+

The SDK also includes signing and verification Examples that show how to use the SDK APIs in working code.

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


+

+

+Tools

+

The SDK provides tools to interact with Intel® EPID related services such those offered by the Intel® Key Generation Facility.

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


+

+

+Other Components

+

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

+ + + + + + + + + +
Component Description ------------—
gtest gtest unit test framework
Build Scripts Scripts to configure and build the SDK
dropt Library for parsing command line
+

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

+


+

+

+Intel® EPID 1.1 Compatibility

+

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

+

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

+

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

+

+Member Implementations

+

There are three member implementations. You can use a specific compilation option to select the implementation that will be used at compile time. The implementations are:

+
    +
  1. Reference: This default implementation gives guidance on partitioning member operations between highly sensitive ones that use the f value of the member private key, and less sensitive ones that can be performed in a host environment. To build in default mode, refer to Building from Source.
  2. +
  3. TPM: This TPM member implementation uses the TPM for signing by linking to the IBM TSS. To build in TPM mode, refer to Building the SDK in TPM Mode.
  4. +
  5. Tiny: This tiny implementation builds the SDK with a substantially reduced code size. To build in tiny mode, refer to Optimizing for Code Size.
  6. +
+
+implementing_member.png +
+

+Folder Layout

+

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

+

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

+

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

+

+Source Layout

+

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

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

+Install Layout

+

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

_install/
+|__ epid-sdk/
+    |__ include/            C include header files for the SDK
+    |__ lib/
+    |   |__ <platform>      Target specific static libraries for the SDK
+    |
+    |__ example/             Sample applications and data
+    |__ compressed_example/  Compressed Member Key Binary data for sample applications
+    |__ test/                Unit test executables (if unit tests built)
+    |__ tools/               Tools
+
+ + + + + diff --git a/doc/html/_sign_verify_tutorial.html b/doc/html/_sign_verify_tutorial.html new file mode 100644 index 0000000000000000000000000000000000000000..17a212f10a19cbe3e9b74e216d1d27ba482d8456 --- /dev/null +++ b/doc/html/_sign_verify_tutorial.html @@ -0,0 +1,251 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Signing and Verification Tutorial + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Signing and Verification Tutorial
+
+
+ +

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

+

These examples use the pre-generated data described in Test Data. After you build the SDK, the data is in the _install/epid-sdk/example/data directory. If you don't have genuine issuer material, you can use this data for validation purposes.

+

You can follow along with the commands used in this tutorial if you first build these examples using the instructions in Building from Source. The tutorial assumes _install/epid-sdk/example is the current directory.

+

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

+

For detailed walkthroughs of the code used in signmsg and verifysig, refer to Walkthroughs of Examples Showing API Usage.

+

+Creating an Intel® EPID Signature of a Given Message

+

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

+

+What Do You Need to Create a Signature?

+

To generate a signature, you need the following items:

+
    +
  • Group public key: You need the group public key to specify which group the member belongs to.
  • +
  • Member private key: You need the member private key so that the member can create a signature that corresponds with the group public key.
  • +
  • Message: You need the message because the member needs something to sign.
  • +
  • Hash algorithm: You need the hash algorithm to encrypt the signature. If you don't specify a hash algorithm, a default hash algorithm is used.
  • +
  • Signature based revocation list (SigRL): You need the SigRL so that the member can create non-revoked proofs for each entry on the list. For more information, see In-Depth Explanation of Revocation.
  • +
  • Member precomputation blob: The precomputation blob is an optional parameter that you can use to improve performance when generating signatures repeatedly with the same member private key.
  • +
  • Basename: A basename is a parameter that is only provided when the member is generating a name based signature. If no basename is specified, a random value is chosen as the basename. For more information, see In-Depth Explanation of Basenames.
  • +
  • Random number generator: You need a cryptographically secure random number generator to ensure that signatures generated by the same member with the same message are different. The SDK provides the BitSupplier function prototype that specifies the interface for your random number generator implementation.
  • +
+

+Signing Example

+

The signmsg command can be passed a number of options:

$ ./signmsg -h
+Usage: signmsg [OPTION]...
+Verify signature was created by group member in good standing
+
+Options:
+  --sig=FILE                write signature to FILE (default: sig.dat)
+  --msg=MESSAGE             MESSAGE to sign
+  --msgfile=FILE            FILE containing message to sign
+  --bsn=BASENAME            BASENAME to sign with (default: random)
+  --bsnfile=FILE            FILE containing basename to sign with
+  --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
+  --capubkey=FILE           load IoT Issuing CA public key from FILE (default: cacert.bin)
+  --hashalg={SHA-256 | SHA-384 | SHA-512 | SHA-512/256} use specified hash algorithm (default: SHA-512)
+  --help                    display this help and exit
+  -v, --verbose             print status messages to stdout
+

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

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

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

+

+Verifying an Intel® EPID Signature

+

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

+

+What Do You Need to Verify a Signature?

+

To verify a signature, you need the following items:

+
    +
  • Signature: You need the signature that you want to verify.
  • +
  • CA certificate: You need the CA certificate to verify the authenticity of the issuer material before you use it. Depending on how your issuer protects its data, you may not need a CA certificate. For more information on issuer material, refer to Preparing a Device and Test Data.
  • +
  • Group certificate: The group certificate comes from the issuer and contains the group public key. You need the group public key to determine if the signature came from a member of this group. The group public key corresponds to the member private key used to generate the signature.
  • +
  • Message: In order for verification to succeed, you need to specify the message that was signed.
  • +
  • Hash algorithm: In order for verification to succeed, you need to specify the hash algorithm that was used to sign the message. If you don't specify a hash algorithm, a default hash algorithm is used.
  • +
  • Group based revocation list (GroupRL): You need the GroupRL to ensure the member does not belong to a revoked group. The GroupRL comes from the issuer.
  • +
  • Private key based revocation list (PrivRL): You need the PrivRL to ensure that the member private key has not been revoked. The PrivRL comes from the issuer.
  • +
  • Signature based revocation list (SigRL): You need to compare the SigRL with non-revoked proofs from the member to ensure that the member did not create any revoked signaures. The SigRL comes from the issuer.
  • +
  • Verifier revocation list: The VerRL is optional. The verifier uses the VerRL to ensure that the member did not create any signatures that were revoked by the verifier. You can only use the VerRL if the signature is a name based signature. The VerRL comes from the verifier. For more information, refer to In-Depth Explanation of Revocation and In-Depth Explanation of Basenames.
  • +
  • Verifier precomputation blob: The verifier precomputation blob is optional. You can use the precomputation blob to increase performance when verifying signatures repeatedly with the same group public key.
  • +
  • Basename: A basename is a parameter that is only provided in instances where Intel® EPID uses name based signatures. If a basename is used, the member and verifier have to use the same basename. If a basename is not specified, a random number is chosen as the basename. Because name-based signatures decrease the member's privacy, they must only be used with the knowledge and consent of the member. For more information, refer to In-Depth Explanation of Basenames.
  • +
  • Precomputation blob: You can optionally provide a precomputation blob to greatly speed up EpidVerifierCreate. If you don't use one, the precomputation blob can be stored for use in a future session to verify membership in the same group using EpidVerifierWritePrecomp.
  • +
+

+Verification Example

+

The verifysig command can be passed a number of options:

$ ./verifysig -h
+Usage: verifysig [OPTION]...
+Create Intel(R) EPID signature of message
+
+Options:
+  --sig=FILE                load signature from FILE (default: sig.dat)
+  --msg=MESSAGE             MESSAGE that was signed (default: empty)
+  --msgfile=FILE            FILE containing message that was signed
+  --bsn=BASENAME            BASENAME used in signature (default: random)
+  --bsnfile=FILE            FILE containing basename used in signature
+  --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 | SHA-512/256} use specified hash algorithm for 2.0 groups (default: SHA-512)
+  --help                    display this help and exit
+  -v, --verbose             print status messages to stdout
+

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

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

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

+

+Parameter Matching Requirements

+

To successfully create and verify a signature, the member and verifier have to use the same message, hash algorithm, signature revocation list, and basename.

+

The signature verification process fails if there is a parameter mismatch between sign and verify operations. The mechanism for avoiding a parameter mismatch is outside the scope of the SDK.

+

+Message

+

The member needs the message to generate the signature using the member private key. In order for verification to succeed, the verifier needs to use the same message that the member used.

+

This comparison allows the verifier to determine if the signature fulfills the verifier's basic expectations of what a signature from a valid member should look like, given the original message and the group public key.

+

Verification fails if the signing and verification operations don't use the same message:

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

+Hash Algorithm

+

The member needs to encrypt the signature with the hash algorithm. The verifier needs to use the same hash algorithm that the member used.

+

If you don't specify a hash algorithm, a default hash algorithm is used.

+

The Intel® EPID SDK supports the following hash algorithms: SHA-256, SHA-384, SHA-512.

+

Verification fails if the signing and verification operations don't use the same hash algorithm:

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

+Signature Revocation List

+

The member needs the signature based revocation list (SigRL) to create non-revoked proofs for each entry on the SigRL. The verifier needs to use the same SigRL to check the proofs.

+

Verification fails if the signing and verification operations don't use the same SigRL.

$ ./signmsg --msg="test0" --sigrl=data\groupa\sigrl.bin
+$ ./verifysig --msg="test0" --sigrl=sigrl.bin
+verifysig: signature verification failed: bad arguments
+

+Basenames

+

For a verifier to be able to know that multiple signatures were generated by the same member, the verifier has to use the same basename that the member used for each name based signature. For more information, refer to In-Depth Explanation of Basenames.

+

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

+

If a basename is not provided to the verifier, then the verifier does not check for a basename and it will verify the signature successfully without linking it to other signatures.

+

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

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

To verify the signature:

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

Verification fails if the signing and verification operations use different basenames:

$ ./signmsg --msg="test0" --bsn="base0"
+$ ./verifysig --msg="test0" --bsn="base1"
+verifysig: signature verification failed: invalid signature
+
Warning
The use of a name-based signature creates a platform unique pseudonymous identifier. Because it reduces the member's privacy, the user should be notified when it is used and should have control over its use.
+

+Revocation

+

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

+

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

+

+Detecting Revoked Group from Group Revocation List

+

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

+

For example,

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

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

+

+Detecting Revoked Member from Private Key Based Revocation List

+

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

+

For example,

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

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

+

+Detecting Revoked Member from Signature Based Revocation List

+

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

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

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

+
+
+ + + + + diff --git a/doc/html/_tpm_considerations.html b/doc/html/_tpm_considerations.html new file mode 100644 index 0000000000000000000000000000000000000000..57ef50cba7610bee29a5db14feeab2a4871857d8 --- /dev/null +++ b/doc/html/_tpm_considerations.html @@ -0,0 +1,230 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Considerations for TPM + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Considerations for TPM
+
+
+ +

Intel® EPID is compatible with TPM (Trusted Platform Modules) and is designed to take advantage of the security features of TPM. This section describes integrating a TPM device and Intel® EPID functionality.

+

Intel® EPID is a technology for securely and anonymously identifying a device, and TPM is a technology for protecting secrets on a device. Therefore it is desirable to protect the most secret part of the member private key on an Intel® EPID TPM device.

+

+Compatibility

+

The SDK is compatible with the Trusted Computing Group's TPM 2.0 spec. The most recent version of the TPM 2.0 specification (Level 00, Revision 01.38) includes the use of a nonce, which is incompatible with the current version of the Intel® EPID scheme. Therefore, this implementation of Intel® EPID APIs is compatible with an earlier version, which is the TPM 2.0 specification Level 00, Revision 1.16.

+

+Considerations for TPM Manufacturers

+

This section explains what manufacturers have to do with the SDK in order to have their TPMs recognized to a service provider:

+
    +
  • Provisioning TPM devices with crypto secrets
  • +
  • Adapting SDK code to specific TSS functionality
  • +
+

This SDK was tested on the IBM TPM and TSS (Trusted Computing Group Software Stack). Device manufacturers should replace specific items with their own TPM functionality.

+

+Provisioning TPM with Intel® EPID Key Material

+

For TPM use with Intel® EPID, members and verifiers need to be provisioned with crypto material to enable security function.

+

In order to ensure that the f value only exists in the volatile memory of the TPM, TPM manufacturers need to provision the TPM with an EPS (Endorsement Primary Seed), from which the f value of the member private key is derived.

+

Typically, bulk provisioning is more efficient than dynamic provisioning in a manufacturing environment. However, bulk provisioning is not viable for TPM devices for the following reasons:

+
    +
  • In bulk provisioning, the issuer provides f as part of each member private key, but it is intentionally difficult to derive EPS from f.
  • +
  • The issuer cannot provide EPS to manufacturers because the translation from EPS to f is dependent upon an implementation specific, deterministic random number generator.
  • +
+

Therefore, in order to provision the TPM with EPS, Intel supports a variation on typical dynamic provisioning in which manufacturers provide their own EPS.

+

In this variation on dynamic provisioning, which we call bulk-join, some steps are performed in bulk and credentials for many devices can be generated at the same time. This process allows TPM devices to be provisioned during manufacturing.

+

For bulk-join, TPM device manufacturers need to do the following:

+
    +
  1. Generate a set of EPS, because EPS are the seeds from which the f values of the member private keys are generated.
  2. +
  3. Derive a set of f values from the EPS values.
  4. +
  5. Request a set of nonces from the issuer which will be used to generate join requests.
  6. +
  7. Generate a set of join requests using the f values and nonces and send them to the issuer. The issuer will respond to the bulk join requests by sending membership credentials to the manufacturer in bulk.
  8. +
  9. Provision the membership credentials in silicon, mapping each membership credential to the corresponding EPS value.
  10. +
+

The following graphic shows how the issuer, manufacturer, TPM, and member interact during the time of key generation, device manufacturing, and signing:

+
+uml_sequence.png +
+

+Mapping TPM Commands to Intel® EPID

+

APIs

+

The tpm2 module in the member section of the API reference contains internal functions that map to TPM commands. This code is provided as sample code for manufacturers who will use it to write their own implementation of Intel® EPID APIs for TPM.

+ + + + + + + + + + + + + + + + + + + + + + + +
Intel® EPID Function Corresponding TPM 2.0 Command
Tpm2Commit TPM2_Commit
Tpm2CreateContext N/A
Tpm2DeleteContext N/A
Tpm2GetRandom TPM2_GetRandom
Tpm2LoadExternal TPM2_LoadExternal
Tpm2NvDefineSpace TPM2_NV_DefineSpace
Tpm2NvUndefineSpace TPM2_NV_UndefineSpace
Tpm2NvWrite TPM2_NV_Write
Tpm2NvRead TPM2_NV_Read
Tpm2Sign TPM2_Sign
+

+Considerations for TPM Applications

+

Unlike non-TPM device manufacturers, TPM manufacturers cannot use EpidProvisionKey. TPMs are designed to protect secret values from access even by the programs that use them. Dynamic provisioning is specifically designed to allow this use case.

+

To get a TPM device running, TPM applications can use the following steps to join a group using a TPM protected secret:

+
    +
  1. Use EpidMemberGetSize and EpidMemberInit to create a new member context. Those functions take the parameter MemberParams. You will pass NULL to this struct instead of the f value, which indicates that f needs to be derived from the EPS within the TPM.
  2. +
  3. Use EpidCreateJoinRequest to generate join requests using the f derived from EPS within the TPM. Then send the join request to the issuer to request a membership credential.
  4. +
  5. After receiving the membership credential (A, x), use EpidProvisionCredential to provision it into the non-volatile memory of the TPM device.
  6. +
+

After the TPM device is provisioned with EpidProvisionCredential, the simplest way to get the device running is:

+
    +
  1. EpidMemberGetSize,
  2. +
  3. EpidMemberInit,
  4. +
  5. EpidMemberStartup, and
  6. +
  7. EpidSign.
  8. +
+

+SDK Member Architecture

+

In the SDK, the Tpm2 module exposes commands that can be mapped to real TSS commands.

+
+member_host.png +
+

The Member Host (member/src) implements Intel® EPID signing in terms of TPM2 commands.

+

The TPM module (member/tpm2) implements TPM2 commands.

+

There are two implementations of TPM functionality:

+
    +
  • BM TSS dispatcher implementation (member/tpm2/ibm_tss), which calls the IBM TSS, which calls the IBM TPM simulator (in this implementation). It is invoked when building in TPM mode.
  • +
  • TPM SDK software implementation (member/tpm2/src) implements sufficient TPM functionality for Intel® EPID. It is invoked when building in non-TPM mode.
  • +
+

+Building the SDK to Take Advantage of TPM

+

This section describes:

+
    +
  • Prerequisites to building the SDK to take advantage of TPM
  • +
  • Building the SDK in TPM mode
  • +
  • Running signing and verification operations with TPM
  • +
+

+Prerequisites to Build the SDK in TPM Mode

+
    +
  1. Download IBM TSS version 966. (The SDK was tested on version 966. Newer versions may also work, but we do not guarantee it.)
  2. +
  3. Download IBM TPM version 532. (The SDK was tested on version 532 and does not work on newer versions.)
  4. +
  5. Build the IBM TSS in accordance with the build steps from the package. Copy tss.lib and tss.dll from ibmtss\tpmutils\Release to ibmtss\utils.
  6. +
+

+Building the SDK in TPM Mode

+

Set the TSSROOT environment variable to the ..\ibmtss\utils\ folder. Make sure this folder contains the \tss2 folder, tss.lib and tss.dll. Example of the command for Windows:

> set TSSROOT=C:\ibmtss\utils\
+

To build the SDK in TPM mode, go to the SDK folder and build the SDK with the following command:

> scons --target=x86 --use-tss
+


+

+

To build the SDK in TPM mode using make command, go to the SDK folder and build the SDK with the following commands:

> ./configure CFLAGS=-m32 --with-tss
+> make all
+> make utest
+> make install
+

Because the IBM TSS only supports x86 targets, you must build in x86.

+

+Intel® EPID Signing and Verification with a TPM

+
    +
  1. Build the IBM TSS (see above).
  2. +
  3. Build the IBM TPM (see above).
  4. +
  5. Build the Intel® EPID SDK with --target=86 --use-tss (see above).
  6. +
  7. Copy tss.dll from _install/epid-sdk/test to _install/epid-sdk/example.
  8. +
  9. Go to the ibmtpm folder and run the tpm_server executable. Note: if you built the TPM server with the MS Visual Studio debug mode, go to the ..\ibmtpm\tpmvstudio\tpm_server\Debug\ folder.
  10. +
  11. You need to run both the TPM server and the powerup and startup executables on IBM TSS. Go to ..\ibmtss\tpmutils\Debug\ or ..\ibmtss\tpmutils\Release\ and run powerup and startup executables.
  12. +
+

Then you can run:

+
> signmsg --hashalg=SHA-256 --msg="test"
+
Note
In TPM mode samples have to be used with --hashalg=SHA-256.
+

If signing succeeds, nothing is returned.

+

Then run:

+
> verifysig --hashalg=SHA-256 --msg="test"
+-signature verified successfully
+
Warning
The samples use LoadExternal to load keys into the TPM. In a real TPM use case, CreatePrimary should be used, and the SDK implementation provides functions for this use case.
+
+
+ + + + + diff --git a/doc/html/_user_manual__generating_an_intel_epid_signature.html b/doc/html/_user_manual__generating_an_intel_epid_signature.html new file mode 100644 index 0000000000000000000000000000000000000000..60118ba658573875922adfba90910c746d3d268b --- /dev/null +++ b/doc/html/_user_manual__generating_an_intel_epid_signature.html @@ -0,0 +1,188 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Generating an Intel® EPID Signature + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Generating an Intel® EPID Signature
+
+
+

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

+

+Summary

+

In the code example below, we take this approach:

+
    +
  • Extract and authenticate issuer provided material
  • +
  • Create the member context to allow us to call other member APIs
  • +
  • Generate the signature
  • +
  • Clean up
  • +
+

+Signmsg Walkthrough

+


+

+

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

+

#include "src/signmsg.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "src/prng.h"

+

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

+


+

+

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

+

In main.c, we define a stub function, IsCaCertAuthorizedByRootCa, which is responsible for checking that the CA certificate is authorized by the root CA. Before calling signmsg, we call this function, IsCaCertAuthorizedByRootCa. In an actual implementation, you need to provide an implementation to validate the issuing CA certificate with the CA root certificate before using it in parse functions.

+


+

+

The core signing functionality is contained in SignMsg.

+

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

+

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

+

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

+

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

+

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

+

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

+


+

+

Next we do basic variable setup and argument checking.

+

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

+

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

+

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

+

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

+


+

+

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

+

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

+

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

+


+

+

Next, if member private key is passed we fill the member private key.

+

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

+

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

+

If the member private key contains just public part, then we fill it as membership credential. To check if the member private key is complete or contains only the membership credential, we check if it is the known size of the member private key without the secret f value.

+

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

+


+

+

Next, we create a pseudo-random number generator.

+

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

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


+

+

Now that the inputs have been prepared, we create a member context using EpidMemberGetSize and EpidMemberInit.

+

sts = EpidMemberGetSize(&params, &member_size);
if (kEpidNoErr != sts) {
break;
}
member = (MemberCtx*)calloc(1, member_size);
if (!member) {
break;
}
sts = EpidMemberInit(&params, member);
if (kEpidNoErr != sts) {
break;
}

+

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

+

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

+

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

+


+

+

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

+


+

+

Next we provision either the member private key or the membership credential based on the passed member private key.

+

if (privkey_size == sizeof(PrivKey) ||
privkey_size == sizeof(CompressedPrivKey)) {
sts = EpidProvisionKey(member, &pub_key, &priv_key, member_precomp);
if (kEpidNoErr != sts) {
break;
}
} else if (privkey_size == sizeof(MembershipCredential)) {
sts = EpidProvisionCredential(member, &pub_key, &member_credential,
member_precomp);
if (kEpidNoErr != sts) {
break;
}
} // if (privkey_size == sizeof(PrivKey))

+

If neither is passed, we provision nothing.

+


+

+

Now we load provisioned membership credential and initialize context.

+

sts = EpidMemberStartup(member);
if (kEpidNoErr != sts) {
break;
}

+


+

+

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

+

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

+

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

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


+

+

We authenticate and extract the signed SigRL using EpidParseSigRlFile.

+

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

+

We use EpidParseSigRlFile to:

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

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

+

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

+

After we extracted the signature based revocation list we should assign it to the member context using EpidMemberSetSigRl.

+


+

+

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

+

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

+

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

+

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

+


+

+

Finally, we clean up and exit.

+

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

+

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

+

Next, we de-initialize the member context and free the allocated resources. EpidMemberDeinit de-initializes an existing member context.

+

We return from SignMsg with the success or error status.

+


+

+

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

+

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

+
+
+ + + + + diff --git a/doc/html/_user_manual__verifying_an_intel_epid_signature.html b/doc/html/_user_manual__verifying_an_intel_epid_signature.html new file mode 100644 index 0000000000000000000000000000000000000000..e718e5918939c60d0fe660efecfd3dbc9e313cff --- /dev/null +++ b/doc/html/_user_manual__verifying_an_intel_epid_signature.html @@ -0,0 +1,205 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Verifying an Intel® EPID Signature + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Verifying an Intel® EPID Signature
+
+
+

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

+

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

+


+

+

+Summary

+

In the code example below, we take this approach:

+
    +
  • Extract and authenticate issuer provided material
  • +
  • Create the verifier context to allow us to call other verifier APIs
  • +
  • Verify signature
  • +
  • Clean up
  • +
+


+

+

+Verifysig Walkthrough

+

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

+

#include "src/verifysig.h"
#include <stdlib.h>

+

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

+


+

+

In main.c, we define a stub function, IsCaCertAuthorizedByRootCa, which is responsible for checking that the CA certificate is authorized by the root CA. Before calling verify, we call this function, IsCaCertAuthorizedByRootCa. In an actual implementation, you need to provide an implementation to validate the issuing CA certificate with the CA root certificate before using it in parse functions.

+


+

+

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

+

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

+

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

+

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

+

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

+

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

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


+

+

Next we do basic variable setup.

+

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

+

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

+


+

+

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

+

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

+

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

+

Next, if a pre-computation blob is being used, we make sure that it is not in a legacy format.

+

if (*verifier_precomp &&
*verifier_precomp_size != sizeof(VerifierPrecomp)) {
result = kEpidBadArgErr;
break;
}
*verifier_precomp_size = sizeof(VerifierPrecomp);

+


+

+

Next, we create a verifier context using EpidVerifierCreate.

+

result = EpidVerifierCreate(&pub_key, *verifier_precomp, &ctx);
if (kEpidNoErr != result) {
break;
}

+

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

+


+

+

Then we serialize pre-computed verifier data using EpidVerifierWritePrecomp.

+

if (!*verifier_precomp) {
*verifier_precomp = calloc(1, *verifier_precomp_size);
}
result = EpidVerifierWritePrecomp(ctx, *verifier_precomp);
if (kEpidNoErr != result) {
break;
}

+

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

+


+

+

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

+

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

+

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

+


+

+

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

+

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

+

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

+


+

+

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

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


+

+

We set the private key revocation list using EpidVerifierSetPrivRl.

+

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

+

We use EpidParsePrivRlFile to:

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

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

+

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

+


+

+

Next, we set the signature revocation list using EpidVerifierSetSigRl.

+

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

+

We use EpidParseSigRlFile to:

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

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

+

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

+


+

+

Next, we set the group revocation list using EpidVerifierSetGroupRl.

+

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

+

We use EpidParseGroupRlFile to:

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

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

+

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

+


+

+

Next, we set the verifier blacklist using EpidVerifierSetVerifierRl.

+

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

+

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

+


+

+

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

+

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

+

+

Finally, we clean up and exit.

+

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

+

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

+

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

+

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

+

We return from Verify with the success or error status.

+


+

+

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

+

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

+
+
+ + + + + diff --git a/doc/html/_usingi_k_g_f.html b/doc/html/_usingi_k_g_f.html new file mode 100644 index 0000000000000000000000000000000000000000..3726fed8d743eaa49131384acc95229b0a7a3887 --- /dev/null +++ b/doc/html/_usingi_k_g_f.html @@ -0,0 +1,248 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Managing Groups with iKGF + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Managing Groups with iKGF
+
+
+ +

The issuer handles group membership and revocation. To provision devices with Intel® EPID keys, you need to process data provided by the issuer. Also, in order to revoke a member, you have to generate a revocation request and send it to the issuer.

+

This section assumes you are using iKGF as your issuer, and describes how to do the following:

+
    +
  • Create group revocation request for iKGF
  • +
  • Create member private key revocation request for iKGF
  • +
  • Create signature revocation request for iKGF
  • +
  • Extract group public keys from iKGF files
  • +
  • Extract member private keys from iKGF files
  • +
+

After you send revocation requests with the issuer, the issuer updates the revocation lists as needed.

+

The Intel® EPID SDK provides tools designed to make it easier to generate revocation requests and extract keys from iKGF files.

+

+Contacting iKGF

+

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

+

+Tools for Creating Revocation Requests

+

The Intel® EPID SDK includes tools to help you request that iKGF add a revoked group, member private key, or signature to a revocation list.

+

These tools are designed to create a revocation request in the specific format required by iKGF. After one of these tools generates a revocation request, the request must be submitted to the issuer in order for the revocation to take effect.

+

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

+

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

+

The following tools are available:

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


+

+

+Requesting Group Revocation

+

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

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


+

+

+Requesting Private Key Revocation

+

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

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


+

+

+Requesting Signature Revocation

+

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

+

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

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

+Tools for Extracting Keys from iKGF Files

+

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

+

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

+

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

+

The following tools are available:

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


+

+

+Extracting Group Public Keys

+

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

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


+

+

+Extracting Member Private Keys

+

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

Usage: extractkeys [OPTION]... [FILE] [NUM]
+Extract the first NUM private keys from FILE to current directory.
+
+Options:
+  -c, --compressed
+      extract compressed keys
+
+  -h, --help
+      display this help and exit
+
+  -v, --verbose
+      print status messages to stdout
+
+ + + + + diff --git a/doc/html/annotated.html b/doc/html/annotated.html new file mode 100644 index 0000000000000000000000000000000000000000..f8087d54f225ad9c0da4335491d97d7a0e903e80 --- /dev/null +++ b/doc/html/annotated.html @@ -0,0 +1,153 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Structures + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Data Structures
+
+
+
Here are the data structures with brief descriptions:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 CBasicSignatureIntel(R) EPID 2.0 basic signature
 CBigNumStrSerialized BigNum
 CCompressedPrivKeyCompressed private key
 CEccPointFqPoint in EFq
 CEccPointFq2Point in EFq2
 CEccPointJacobiFqElement of EFq in Jacobi format
 CEccPointJacobiFq2Element of EFq2 in Jacobi format
 CEcdsaPrivateKeyECDSA Private Key
 CEcdsaPublicKeyECDSA Public Key
 CEcdsaSignatureECDSA Signature using NIST 256-bit curve secp256r1
 CEpid11BasicSignatureIntel(R) EPID 1.1 basic signature
 CEpid11G2ElemStrSerialized Intel(R) EPID 1.1 G2 element
 CEpid11GroupPubKeyIntel(R) EPID 1.1 group public key
 CEpid11GroupRlIntel(R) EPID 1.1 group revocation list
 CEpid11GtElemStrSerialized Intel(R) EPID 1.1 GT element
 CEpid11NrProofIntel(R) EPID 1.1 non-revoked Proof
 CEpid11ParamsIntel(R) EPID 1.1 Parameters
 CEpid11PrivRlIntel(R) EPID 1.1 private-key based revocation list
 CEpid11SignatureIntel(R) EPID 1.1 Signature
 CEpid11SigRlIntel(R) EPID 1.1 signature based revocation list
 CEpid11SigRlEntryIntel(R) EPID 1.1 entry in SigRL (B,K)
 CEpid11VerifierPrecompIntel(R) EPID 1.1 Pre-computed verifier settings
 CEpid2ParamsIntel(R) EPID 2.0 Parameters
 CEpidCaCertificateIoT CA Certificate binary format
 CEpidFileHeaderIntel(R) EPID binary file header
 CEpidSignatureIntel(R) EPID 2.0 Signature
 CFpElemElement of Fp
 CFpElemStrNumber in [0, p-1]
 CFq12ElemElement of Fq12
 CFq12ElemStrSerialized Fq2^3^2 element
 CFq2ElemElement of Fq2
 CFq2ElemStrSerialized Fq2 element
 CFq3ElemStrSerialized Fq3 element
 CFq6ElemElement of Fq6
 CFq6ElemStrSerialized Fq2^3 element
 CFqElemElement of Fq
 CFqElemStrNumber in [0, q-1]
 CG1ElemStrSerialized G1 element
 CG2ElemStrSerialized G2 element
 CGroupPubKeyIntel(R) EPID 2.0 group public key
 CGroupRlGroup revocation list
 CGtElemStrSerialized GT element
 CIPrivKeyIntel(R) EPID 2.0 issuing private key
 CJoinRequestJoin request
 CMemberParamsSoftware only specific member parameters
 CMemberPrecompPre-computed member settings
 CMembershipCredentialMembership credential
 CNrProofNon-revoked Proof
 COctStr128128 bit octet string
 COctStr1616 bit octet string
 COctStr256256 bit octet string
 COctStr3232 bit octet string
 COctStr512512 bit octet string
 COctStr600600 bit octet string
 COctStr6464 bit octet string
 COctStr768768 bit octet string
 COctStr88 bit octet string
 COctStr8080 bit octet string
 CPairingStateA scratch buffer for stateful pairing calls
 CPrivKeyIntel(R) EPID 2.0 private key
 CPrivRlPrivate-key based revocation list
 CSha256DigestSHA256 digest
 Csha_digestSha Digest Element
 CSigRlSignature based revocation list
 CSigRlEntryEntry in SigRL (B,K)
 Ctiny_shaTiny Sha wrapper Element
 CTpm2CtxTPM TSS context definition
 CVerifierPrecompPre-computed verifier settings
 CVerifierRl
 CVeryLargeIntLarge integer
 CVeryLargeIntProductUsed for multiplication
+
+
+
+ + + + + diff --git a/doc/html/base_name.png b/doc/html/base_name.png new file mode 100644 index 0000000000000000000000000000000000000000..5b28a61e2359ef6248b8914df3108641462e043f Binary files /dev/null and b/doc/html/base_name.png differ diff --git a/doc/html/basenames_8dox.html b/doc/html/basenames_8dox.html new file mode 100644 index 0000000000000000000000000000000000000000..1318631908cf301f46728671ec2f0fbcfa238d74 --- /dev/null +++ b/doc/html/basenames_8dox.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: doc/docsrc/basenames.dox File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
doc/docsrc/basenames.dox File Reference
+
+
+ +

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

+

Detailed Description

+

This file is used by Doxygen to generate documentation.

+
+
+ + + + + diff --git a/doc/html/basicdoc.png b/doc/html/basicdoc.png new file mode 100644 index 0000000000000000000000000000000000000000..7464933cd11916bf1ce4b49f7739f2b7be13a37f Binary files /dev/null and b/doc/html/basicdoc.png differ diff --git a/doc/html/bc_s.png b/doc/html/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 Binary files /dev/null and b/doc/html/bc_s.png differ diff --git a/doc/html/bdwn.png b/doc/html/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 Binary files /dev/null and b/doc/html/bdwn.png differ diff --git a/doc/html/bignum_8h.html b/doc/html/bignum_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..c23a9caef61860929ffeced91c9166d89bcf99de --- /dev/null +++ b/doc/html/bignum_8h.html @@ -0,0 +1,139 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common/math/bignum.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
bignum.h File Reference
+
+
+ +

Big number interface. +More...

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

+Typedefs

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

+Functions

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

Detailed Description

+

Big number interface.

+
+
+ + + + + diff --git a/doc/html/bitsupplier_8h.html b/doc/html/bitsupplier_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..9fb58aa416f370630aa22ad938a876c3b6947048 --- /dev/null +++ b/doc/html/bitsupplier_8h.html @@ -0,0 +1,94 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common/bitsupplier.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
bitsupplier.h File Reference
+
+
+ +

Random data supplier interface. +More...

+ + + + + +

+Typedefs

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

Detailed Description

+

Random data supplier interface.

+
+
+ + + + + diff --git a/doc/html/build__tools__installation_8dox.html b/doc/html/build__tools__installation_8dox.html new file mode 100644 index 0000000000000000000000000000000000000000..3aa11e3293d78f2378e4e7dd6753afb9a943ff92 --- /dev/null +++ b/doc/html/build__tools__installation_8dox.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: doc/docsrc/build_tools_installation.dox File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
doc/docsrc/build_tools_installation.dox File Reference
+
+
+ +

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

+

Detailed Description

+

This file is used by Doxygen to generate documentation.

+
+
+ + + + + diff --git a/doc/html/building__sdk_8dox.html b/doc/html/building__sdk_8dox.html new file mode 100644 index 0000000000000000000000000000000000000000..a2d2638cacf8b4c1a01598dd2f3c428eae5d8624 --- /dev/null +++ b/doc/html/building__sdk_8dox.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: doc/docsrc/building_sdk.dox File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
doc/docsrc/building_sdk.dox File Reference
+
+
+ +

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

+

Detailed Description

+

This file is used by Doxygen to generate documentation.

+
+
+ + + + + diff --git a/doc/html/classes.html b/doc/html/classes.html new file mode 100644 index 0000000000000000000000000000000000000000..067234970e11df445ee7a667bea1bc2547a1b6b6 --- /dev/null +++ b/doc/html/classes.html @@ -0,0 +1,118 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Structure Index + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Data Structure Index
+
+
+
b | c | e | f | g | i | j | m | n | o | p | s | t | v
+ + + + + + + + + + + + + + + + + + + + + + + +
  b  
+
Epid11GtElemStr   Fq3ElemStr   MemberPrecomp   PrivKey   
Epid11NrProof   Fq6Elem   MembershipCredential   PrivRl   
BasicSignature   Epid11Params   Fq6ElemStr   
  n  
+
  s  
+
BigNumStr   Epid11PrivRl   FqElem   
  c  
+
Epid11Signature   FqElemStr   NrProof   Sha256Digest   
Epid11SigRl   
  g  
+
  o  
+
sha_digest   
CompressedPrivKey   Epid11SigRlEntry   SigRl   
  e  
+
Epid11VerifierPrecomp   G1ElemStr   OctStr128   SigRlEntry   
Epid2Params   G2ElemStr   OctStr16   
  t  
+
EccPointFq   EpidCaCertificate   GroupPubKey   OctStr256   
EccPointFq2   EpidFileHeader   GroupRl   OctStr32   tiny_sha   
EccPointJacobiFq   EpidSignature   GtElemStr   OctStr512   Tpm2Ctx   
EccPointJacobiFq2   
  f  
+
  i  
+
OctStr600   
  v  
+
EcdsaPrivateKey   OctStr64   
EcdsaPublicKey   FpElem   IPrivKey   OctStr768   VerifierPrecomp   
EcdsaSignature   FpElemStr   
  j  
+
OctStr8   VerifierRl   
Epid11BasicSignature   Fq12Elem   OctStr80   VeryLargeInt   
Epid11G2ElemStr   Fq12ElemStr   JoinRequest   
  p  
+
VeryLargeIntProduct   
Epid11GroupPubKey   Fq2Elem   
  m  
+
Epid11GroupRl   Fq2ElemStr   PairingState   
MemberParams   
+
b | c | e | f | g | i | j | m | n | o | p | s | t | v
+
+
+ + + + + diff --git a/doc/html/closed.png b/doc/html/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 Binary files /dev/null and b/doc/html/closed.png differ diff --git a/doc/html/commit_8c.html b/doc/html/commit_8c.html new file mode 100644 index 0000000000000000000000000000000000000000..a596151028b12903c6ea0f98c9b4717b8827d8da --- /dev/null +++ b/doc/html/commit_8c.html @@ -0,0 +1,139 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tpm2/ibm_tss/commit.c File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
commit.c File Reference
+
+
+ +

Tpm2Commit implementation. +More...

+
#include "epid/member/tpm2/commit.h"
+#include <tss2/TPM_Types.h>
+#include <tss2/tss.h>
+#include "epid/common/math/ecgroup.h"
+#include "epid/common/src/epid2params.h"
+#include "epid/common/src/memory.h"
+#include "epid/member/tpm2/ibm_tss/conversion.h"
+#include "epid/member/tpm2/ibm_tss/printtss.h"
+#include "epid/member/tpm2/ibm_tss/state.h"
+
+ + + + + + + + + + +

+Macros

#define BREAK_ON_EPID_ERROR(ret)
 Handle Intel(R) EPID Error with Break. More...
 
+#define BIT7   0x080
 Bit 7 binary mask.
 
+#define BITS0500   0x3f
 Binary 00011111.
 
+ + + + +

+Functions

EpidStatus Tpm2Commit (Tpm2Ctx *ctx, EcPoint const *p1, void const *s2, size_t s2_len, FfElement const *y2, EcPoint *k, EcPoint *l, EcPoint *e, uint16_t *counter)
 Performs TPM2_Commit TPM operation. More...
 
+

Detailed Description

+

Tpm2Commit implementation.

+

Macro Definition Documentation

+ +

◆ BREAK_ON_EPID_ERROR

+ +
+
+ + + + + + + + +
#define BREAK_ON_EPID_ERROR( ret)
+
+Value:
if (kEpidNoErr != (ret)) { \
break; \
}
no error
Definition: errors.h:41
+
+

Handle Intel(R) EPID Error with Break.

+ +
+
+
+
+ + + + + diff --git a/doc/html/commit_8h.html b/doc/html/commit_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..79f642d1663d2fe4b821ceca3b7b714c886cafd6 --- /dev/null +++ b/doc/html/commit_8h.html @@ -0,0 +1,96 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tpm2/commit.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
commit.h File Reference
+
+
+ +

SDK TPM Commit API. +More...

+
#include <stddef.h>
+#include "epid/common/errors.h"
+#include "epid/common/stdtypes.h"
+
+ + + + +

+Functions

EpidStatus Tpm2Commit (Tpm2Ctx *ctx, EcPoint const *p1, void const *s2, size_t s2_len, FfElement const *y2, EcPoint *k, EcPoint *l, EcPoint *e, uint16_t *counter)
 Performs TPM2_Commit TPM operation. More...
 
+

Detailed Description

+

SDK TPM Commit API.

+
+
+ + + + + diff --git a/doc/html/common_2math_2pairing_8h.html b/doc/html/common_2math_2pairing_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..5c6718c0818bf4f35be9a884e12d8a083033b575 --- /dev/null +++ b/doc/html/common_2math_2pairing_8h.html @@ -0,0 +1,103 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common/math/pairing.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
pairing.h File Reference
+
+
+ +

Pairing interface. +More...

+ + + + + + + + + + + +

+Functions

EpidStatus NewPairingState (EcGroup const *ga, EcGroup const *gb, FiniteField *ff, BigNumStr const *t, bool neg, PairingState **ps)
 Constructs a new pairing state. More...
 
void DeletePairingState (PairingState **ps)
 Frees a previously allocated by PairingState. More...
 
EpidStatus Pairing (PairingState *ps, EcPoint const *a, EcPoint const *b, FfElement *d)
 Computes an Optimal Ate Pairing for two parameters. More...
 
+

Detailed Description

+

Pairing interface.

+
+
+ + + + + diff --git a/doc/html/context_8c.html b/doc/html/context_8c.html new file mode 100644 index 0000000000000000000000000000000000000000..443ec8cfbded86e452f02f60342bc4235ac975b3 --- /dev/null +++ b/doc/html/context_8c.html @@ -0,0 +1,180 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tpm2/ibm_tss/context.c File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
context.c File Reference
+
+
+ +

TPM context implementation. +More...

+
#include "epid/member/tpm2/context.h"
+#include <tss2/TPM_Types.h>
+#include <tss2/tss.h>
+#include "epid/common/math/finitefield.h"
+#include "epid/common/src/epid2params.h"
+#include "epid/common/src/memory.h"
+#include "epid/member/tpm2/getrandom.h"
+#include "epid/member/tpm2/ibm_tss/printtss.h"
+#include "epid/member/tpm2/ibm_tss/state.h"
+#include "epid/member/tpm_member.h"
+
+ + + + +

+Macros

#define BREAK_ON_EPID_ERROR(ret)
 Handle Intel(R) EPID Error with Break. More...
 
+ + + + + + + + + + + + + + + + +

+Functions

void Tpm2FlushKey (Tpm2Ctx *ctx)
 Deletes key from TPM. More...
 
EpidStatus Tpm2CreateContext (MemberParams const *params, Epid2Params_ const *epid2_params, BitSupplier *rnd_func, void **rnd_param, const FpElemStr **f, Tpm2Ctx **ctx)
 Creates a new Tpm context. More...
 
void Tpm2DeleteContext (Tpm2Ctx **ctx)
 Deletes an existing Tpm context. More...
 
EpidStatus Tpm2SetHashAlg (Tpm2Ctx *ctx, HashAlg hash_alg)
 Sets the hash algorithm to be used by a TPM2. More...
 
void Tpm2ResetContext (Tpm2Ctx **ctx)
 Reset an existing Tpm context. More...
 
+ + + + +

+Variables

+bool is_context_already_created = false
 Flag that indicates that context was already created.
 
+

Detailed Description

+

TPM context implementation.

+

Macro Definition Documentation

+ +

◆ BREAK_ON_EPID_ERROR

+ +
+
+ + + + + + + + +
#define BREAK_ON_EPID_ERROR( ret)
+
+Value:
if (kEpidNoErr != (ret)) { \
break; \
}
no error
Definition: errors.h:41
+
+

Handle Intel(R) EPID Error with Break.

+ +
+
+

Function Documentation

+ +

◆ Tpm2FlushKey()

+ +
+
+ + + + + + + + +
void Tpm2FlushKey (Tpm2Ctxctx)
+
+ +

Deletes key from TPM.

+
Parameters
+ + +
[in,out]ctxTPM context.
+
+
+
Returns
EpidStatus
+ +
+
+
+
+ + + + + diff --git a/doc/html/context_8h.html b/doc/html/context_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..177199648da2dc9c1ebff5f8f37f371bb5d4abbf --- /dev/null +++ b/doc/html/context_8h.html @@ -0,0 +1,105 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tpm2/context.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
context.h File Reference
+
+
+ +

SDK TPM API. +More...

+ + + + + + + + + + + + + + +

+Functions

EpidStatus Tpm2CreateContext (MemberParams const *params, Epid2Params_ const *epid2_params, BitSupplier *rnd_func, void **rnd_param, const FpElemStr **f, Tpm2Ctx **ctx)
 Creates a new Tpm context. More...
 
void Tpm2DeleteContext (Tpm2Ctx **ctx)
 Deletes an existing Tpm context. More...
 
EpidStatus Tpm2SetHashAlg (Tpm2Ctx *ctx, HashAlg hash_alg)
 Sets the hash algorithm to be used by a TPM2. More...
 
void Tpm2ResetContext (Tpm2Ctx **ctx)
 Reset an existing Tpm context. More...
 
+

Detailed Description

+

SDK TPM API.

+
+
+ + + + + diff --git a/doc/html/conversion_8c.html b/doc/html/conversion_8c.html new file mode 100644 index 0000000000000000000000000000000000000000..635eff69bea075b423a3cf1ec3940af4ae678a67 --- /dev/null +++ b/doc/html/conversion_8c.html @@ -0,0 +1,323 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tpm2/ibm_tss/conversion.c File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
conversion.c File Reference
+
+
+ +

TPM-SDK data conversion implementation. +More...

+
#include "epid/member/tpm2/ibm_tss/conversion.h"
+#include <string.h>
+#include <tss2/TPM_Types.h>
+#include "epid/common/math/ecgroup.h"
+#include "epid/common/src/memory.h"
+#include "epid/common/types.h"
+
+ + + + + + + + + + + + + + + + + + + +

+Functions

TPMI_ALG_HASH EpidtoTpm2HashAlg (HashAlg hash_alg)
 Maps HashAlg to TPM type. More...
 
HashAlg Tpm2toEpidHashAlg (TPMI_ALG_HASH tpm_hash_alg)
 Maps TPMI_ALG_HASH to HashAlg. More...
 
EpidStatus ReadTpm2FfElement (OctStr256 const *str, TPM2B_ECC_PARAMETER *tpm_data)
 Converts serialized FfElement into TPM type. More...
 
EpidStatus WriteTpm2FfElement (TPM2B_ECC_PARAMETER const *tpm_data, OctStr256 *str)
 Converts TPM finite field element types into serialized FfElement. More...
 
EpidStatus ReadTpm2EcPoint (G1ElemStr const *p_str, TPM2B_ECC_POINT *tpm_point)
 Converts ECPoint string to TMP ECPoint structure. More...
 
EpidStatus WriteTpm2EcPoint (TPM2B_ECC_POINT const *tpm_point, G1ElemStr *p_str)
 Serializes TMP ECPoint to ECPoint string. More...
 
+

Detailed Description

+

TPM-SDK data conversion implementation.

+

Function Documentation

+ +

◆ EpidtoTpm2HashAlg()

+ +
+
+ + + + + + + + +
TPMI_ALG_HASH EpidtoTpm2HashAlg (HashAlg hash_alg)
+
+ +

Maps HashAlg to TPM type.

+

Maps Intel(R) EPID SDK HashAlg into TPMI_ALG_HASH.

+
Parameters
+ + +
[in]hash_algCode of the hash algorithm
+
+
+
Returns
TPMI_ALG_HASH
+ +
+
+ +

◆ ReadTpm2EcPoint()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus ReadTpm2EcPoint (G1ElemStr const * p_str,
TPM2B_ECC_POINT * tpm_point 
)
+
+ +

Converts ECPoint string to TMP ECPoint structure.

+
Parameters
+ + + +
[in]p_strThe serialized EcPoint to convert.
[out]tpm_pointThe TPM EC point representation.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ ReadTpm2FfElement()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus ReadTpm2FfElement (OctStr256 const * str,
TPM2B_ECC_PARAMETER * tpm_data 
)
+
+ +

Converts serialized FfElement into TPM type.

+
Parameters
+ + + +
[in]strSerialized Intel(R) EPID SDK FfElement
[out]tpm_datatpm type data.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ Tpm2toEpidHashAlg()

+ +
+
+ + + + + + + + +
HashAlg Tpm2toEpidHashAlg (TPMI_ALG_HASH tpm_hash_alg)
+
+ +

Maps TPMI_ALG_HASH to HashAlg.

+

Maps TPM hash code TPMI_ALG_HASH into HashAlg.

+
Parameters
+ + +
[in]tpm_hash_algCode of the hash algorithm in TPM
+
+
+
Returns
HashAlg
+ +
+
+ +

◆ WriteTpm2EcPoint()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus WriteTpm2EcPoint (TPM2B_ECC_POINT const * tpm_point,
G1ElemStrp_str 
)
+
+ +

Serializes TMP ECPoint to ECPoint string.

+
Parameters
+ + + +
[in]tpm_pointThe TPM EC point to convert.
[in]p_strThe target string.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ WriteTpm2FfElement()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus WriteTpm2FfElement (TPM2B_ECC_PARAMETER const * tpm_data,
OctStr256str 
)
+
+ +

Converts TPM finite field element types into serialized FfElement.

+
Parameters
+ + + +
[in]tpm_dataThe TPM finite field data, typically TPM2B_DIGEST or TPM2B_ECC_PARAMETER.
[out]strThe target buffer.
+
+
+
Returns
EpidStatus
+ +
+
+
+
+ + + + + diff --git a/doc/html/conversion_8h.html b/doc/html/conversion_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..ac5922aa02c745fe233beeda164bfe2d80f73738 --- /dev/null +++ b/doc/html/conversion_8h.html @@ -0,0 +1,340 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tpm2/ibm_tss/conversion.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
conversion.h File Reference
+
+
+ +

TPM-SDK data conversion interface. +More...

+
#include <tss2/TPM_Types.h>
+#include "epid/common/errors.h"
+#include "epid/common/types.h"
+
+ + + + + + + + + + + + + +

+Macros

+#define TPM_ALG_SHA256   (TPM_ALG_ID)(0x000B)
 TPM code of SHA 256 algorithm.
 
+#define TPM_ALG_SHA384   (TPM_ALG_ID)(0x000C)
 TPM code of SHA 384 algorithm.
 
+#define TPM_ALG_SHA512   (TPM_ALG_ID)(0x000D)
 TPM code of SHA 512 algorithm.
 
+#define TPM_ALG_NULL   (TPM_ALG_ID)(0x0010)
 TPM code of Null algorithm.
 
+ + + + + + + + + + + + + + + + + + + +

+Functions

TPMI_ALG_HASH EpidtoTpm2HashAlg (HashAlg hash_alg)
 Maps HashAlg to TPM type. More...
 
HashAlg Tpm2toEpidHashAlg (TPMI_ALG_HASH tpm_hash_alg)
 Maps TPMI_ALG_HASH to HashAlg. More...
 
EpidStatus ReadTpm2FfElement (OctStr256 const *str, TPM2B_ECC_PARAMETER *tpm_data)
 Converts serialized FfElement into TPM type. More...
 
EpidStatus WriteTpm2FfElement (TPM2B_ECC_PARAMETER const *tpm_data, OctStr256 *str)
 Converts TPM finite field element types into serialized FfElement. More...
 
EpidStatus ReadTpm2EcPoint (G1ElemStr const *p_str, TPM2B_ECC_POINT *tpm_point)
 Converts ECPoint string to TMP ECPoint structure. More...
 
EpidStatus WriteTpm2EcPoint (TPM2B_ECC_POINT const *tpm_point, G1ElemStr *p_str)
 Serializes TMP ECPoint to ECPoint string. More...
 
+

Detailed Description

+

TPM-SDK data conversion interface.

+

Function Documentation

+ +

◆ EpidtoTpm2HashAlg()

+ +
+
+ + + + + + + + +
TPMI_ALG_HASH EpidtoTpm2HashAlg (HashAlg hash_alg)
+
+ +

Maps HashAlg to TPM type.

+

Maps Intel(R) EPID SDK HashAlg into TPMI_ALG_HASH.

+
Parameters
+ + +
[in]hash_algCode of the hash algorithm
+
+
+
Returns
TPMI_ALG_HASH
+ +
+
+ +

◆ ReadTpm2EcPoint()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus ReadTpm2EcPoint (G1ElemStr const * p_str,
TPM2B_ECC_POINT * tpm_point 
)
+
+ +

Converts ECPoint string to TMP ECPoint structure.

+
Parameters
+ + + +
[in]p_strThe serialized EcPoint to convert.
[out]tpm_pointThe TPM EC point representation.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ ReadTpm2FfElement()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus ReadTpm2FfElement (OctStr256 const * str,
TPM2B_ECC_PARAMETER * tpm_data 
)
+
+ +

Converts serialized FfElement into TPM type.

+
Parameters
+ + + +
[in]strSerialized Intel(R) EPID SDK FfElement
[out]tpm_datatpm type data.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ Tpm2toEpidHashAlg()

+ +
+
+ + + + + + + + +
HashAlg Tpm2toEpidHashAlg (TPMI_ALG_HASH tpm_hash_alg)
+
+ +

Maps TPMI_ALG_HASH to HashAlg.

+

Maps TPM hash code TPMI_ALG_HASH into HashAlg.

+
Parameters
+ + +
[in]tpm_hash_algCode of the hash algorithm in TPM
+
+
+
Returns
HashAlg
+ +
+
+ +

◆ WriteTpm2EcPoint()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus WriteTpm2EcPoint (TPM2B_ECC_POINT const * tpm_point,
G1ElemStrp_str 
)
+
+ +

Serializes TMP ECPoint to ECPoint string.

+
Parameters
+ + + +
[in]tpm_pointThe TPM EC point to convert.
[in]p_strThe target string.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ WriteTpm2FfElement()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus WriteTpm2FfElement (TPM2B_ECC_PARAMETER const * tpm_data,
OctStr256str 
)
+
+ +

Converts TPM finite field element types into serialized FfElement.

+
Parameters
+ + + +
[in]tpm_dataThe TPM finite field data, typically TPM2B_DIGEST or TPM2B_ECC_PARAMETER.
[out]strThe target buffer.
+
+
+
Returns
EpidStatus
+ +
+
+
+
+ + + + + diff --git a/doc/html/createprimary_8c.html b/doc/html/createprimary_8c.html new file mode 100644 index 0000000000000000000000000000000000000000..fae9bbeff7f9e2727a41285190584580541cdfb3 --- /dev/null +++ b/doc/html/createprimary_8c.html @@ -0,0 +1,139 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tpm2/ibm_tss/createprimary.c File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
createprimary.c File Reference
+
+
+ +

TPM2_CreatePrimary command implementation. +More...

+
#include "epid/member/tpm2/createprimary.h"
+#include "epid/common/src/memory.h"
+#include "epid/member/tpm2/ibm_tss/conversion.h"
+#include "epid/member/tpm2/ibm_tss/printtss.h"
+#include "epid/member/tpm2/ibm_tss/state.h"
+#include "tss2/TPM_Types.h"
+#include "tss2/tss.h"
+
+ + + + +

+Functions

EpidStatus Tpm2CreatePrimary (Tpm2Ctx *ctx, G1ElemStr *p_str)
 Creates Primary key. More...
 
+

Detailed Description

+

TPM2_CreatePrimary command implementation.

+

Function Documentation

+ +

◆ Tpm2CreatePrimary()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus Tpm2CreatePrimary (Tpm2Ctxctx,
G1ElemStrp_str 
)
+
+ +

Creates Primary key.

+
Parameters
+ + + +
[in,out]ctxTPM context.
[out]p_strPrimary key: g1^f
+
+
+
Returns
EpidStatus
+ +
+
+
+
+ + + + + diff --git a/doc/html/createprimary_8h.html b/doc/html/createprimary_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..c219b7695f0d7e0e1a94ca0ca2ee2b4ef5387073 --- /dev/null +++ b/doc/html/createprimary_8h.html @@ -0,0 +1,133 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tpm2/createprimary.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
createprimary.h File Reference
+
+
+ +

TPM2_CreatePrimary command interface. +More...

+ + + + + +

+Functions

EpidStatus Tpm2CreatePrimary (Tpm2Ctx *ctx, G1ElemStr *p_str)
 Creates Primary key. More...
 
+

Detailed Description

+

TPM2_CreatePrimary command interface.

+

Function Documentation

+ +

◆ Tpm2CreatePrimary()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus Tpm2CreatePrimary (Tpm2Ctxctx,
G1ElemStrp_str 
)
+
+ +

Creates Primary key.

+
Parameters
+ + + +
[in,out]ctxTPM context.
[out]p_strPrimary key: g1^f
+
+
+
Returns
EpidStatus
+ +
+
+
+
+ + + + + diff --git a/doc/html/deprecated.html b/doc/html/deprecated.html new file mode 100644 index 0000000000000000000000000000000000000000..28c20ed45431b9839c500b51f35e8842c55e228c --- /dev/null +++ b/doc/html/deprecated.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Deprecated List + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Deprecated List
+
+
+
+
Global EpidMemberCreate (MemberParams const *params, MemberCtx **ctx)
+
This API has been superseded by EpidMemberGetSize and EpidMemberInit.
+
Global EpidMemberDelete (MemberCtx **ctx)
+
This API has been superseded by EpidMemberDeinit.
+
+
+
+ + + + + diff --git a/doc/html/dir_02c945662023679b89476bd7126bc985.html b/doc/html/dir_02c945662023679b89476bd7126bc985.html new file mode 100644 index 0000000000000000000000000000000000000000..768288aecc2ad954e57e2039921830f4ccbc46d9 --- /dev/null +++ b/doc/html/dir_02c945662023679b89476bd7126bc985.html @@ -0,0 +1,95 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/verifier Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
verifier Directory Reference
+
+
+ +

Verifier functionality.

+ +More...

+ + +

+Directories

+ + + + +

+Files

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

Detailed Description

+

Verifier functionality.

+
+
+ + + + + diff --git a/doc/html/dir_0d59f1b8006345e373e07b4691e0da76.html b/doc/html/dir_0d59f1b8006345e373e07b4691e0da76.html new file mode 100644 index 0000000000000000000000000000000000000000..78865d887258e064c26287905a9f0c64c431a59c --- /dev/null +++ b/doc/html/dir_0d59f1b8006345e373e07b4691e0da76.html @@ -0,0 +1,107 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tpm2 Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
tpm2 Directory Reference
+
+
+ + +

+Directories

+ + + + + + + + + + + + + + + + + + + + + + +

+Files

file  commit.h
 SDK TPM Commit API.
 
file  context.h
 SDK TPM API.
 
file  createprimary.h
 TPM2_CreatePrimary command interface.
 
file  getrandom.h
 SDK TPM API.
 
file  load_external.h
 SDK TPM API.
 
file  nv.h
 SDK TPM non volatile memory API.
 
file  sign.h
 SDK TPM Sign API.
 
+
+
+ + + + + diff --git a/doc/html/dir_12b90d9c027aaf878a834df729679a56.html b/doc/html/dir_12b90d9c027aaf878a834df729679a56.html new file mode 100644 index 0000000000000000000000000000000000000000..57bbab5264f5898a44971c72c971c21c509a8cab --- /dev/null +++ b/doc/html/dir_12b90d9c027aaf878a834df729679a56.html @@ -0,0 +1,98 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
epid Directory Reference
+
+
+ +

Core Intel® EPID functionality.

+ +More...

+ + + + + + + + + + + +

+Directories

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

Detailed Description

+

Core Intel® EPID functionality.

+
+
+ + + + + diff --git a/doc/html/dir_512d3e62841a8535b716ec4cf8b9e950.html b/doc/html/dir_512d3e62841a8535b716ec4cf8b9e950.html new file mode 100644 index 0000000000000000000000000000000000000000..f1e699cdc5c7d7458f71707bda8f1f0036164ad1 --- /dev/null +++ b/doc/html/dir_512d3e62841a8535b716ec4cf8b9e950.html @@ -0,0 +1,103 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
member Directory Reference
+
+
+ +

Member functionality.

+ +More...

+ + + + +

+Directories

directory  tiny
 
+ + + + + + + + + + +

+Files

file  api.h
 Intel(R) EPID SDK member API.
 
file  software_member.h
 Member creation parameters for software only implementation.
 
file  tpm_member.h
 Member creation parameters for TPM implementation.
 
+

Detailed Description

+

Member functionality.

+
+
+ + + + + diff --git a/doc/html/dir_5f2fc2cf41db41de2b55e03ffa7a1d16.html b/doc/html/dir_5f2fc2cf41db41de2b55e03ffa7a1d16.html new file mode 100644 index 0000000000000000000000000000000000000000..cb1a6a39894eb6506be27773c9089424e8b60048 --- /dev/null +++ b/doc/html/dir_5f2fc2cf41db41de2b55e03ffa7a1d16.html @@ -0,0 +1,128 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tiny/math Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
math Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  efq.h
 Definition of EFq math.
 
file  efq2.h
 Definition of EFq2 math.
 
file  fp.h
 Definition of Fp math.
 
file  fq.h
 Definition of Fq math.
 
file  fq12.h
 Definition of Fq12 math.
 
file  fq2.h
 Definition of Fq2 math.
 
file  fq6.h
 Definition of Fq6 math.
 
file  hashwrap.h
 Decleration of hash wrap function.
 
file  mathdefs.h
 Common public definitions for math headers.
 
file  mathtypes.h
 Definition of math types in tiny Intel(R) EPID.
 
file  pairing.h
 Definition of pairing math.
 
file  serialize.h
 Definition of de/serialize functionality.
 
file  sha256.h
 Interface to a SHA-256 implementation.
 
file  sha512.h
 Interface to a SHA-512 implementation.
 
file  vli.h
 Definition of Large Integer math.
 
+
+
+ + + + + diff --git a/doc/html/dir_a32be19bc88f3d7aac6b7249da379f26.html b/doc/html/dir_a32be19bc88f3d7aac6b7249da379f26.html new file mode 100644 index 0000000000000000000000000000000000000000..7fd404fc40d2ea7d780b4ec4b41420a9c63ed5ca --- /dev/null +++ b/doc/html/dir_a32be19bc88f3d7aac6b7249da379f26.html @@ -0,0 +1,89 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common/1.1 Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
1.1 Directory Reference
+
+
+ + + + + + + + +

+Files

file  file_parser.h
 Intel(R) EPID 1.1 issuer material parsing utilities.
 
file  types.h
 SDK data types for Intel(R) EPID 1.1.
 
+
+
+ + + + + diff --git a/doc/html/dir_a6a596e2b2b50fb0973c7fe0b17a09e5.html b/doc/html/dir_a6a596e2b2b50fb0973c7fe0b17a09e5.html new file mode 100644 index 0000000000000000000000000000000000000000..114d4ce7f1be74385355c490543ca9d940da231b --- /dev/null +++ b/doc/html/dir_a6a596e2b2b50fb0973c7fe0b17a09e5.html @@ -0,0 +1,89 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tiny/stdlib Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
stdlib Directory Reference
+
+
+ + + + + + + + +

+Files

file  endian.h
 Convert values between host and big-/little-endian byte order.
 
file  tiny_stdlib.h
 Tiny portable implementations of standard library functions.
 
+
+
+ + + + + diff --git a/doc/html/dir_b7525369f2fbc378c6814b573b9a2bc3.html b/doc/html/dir_b7525369f2fbc378c6814b573b9a2bc3.html new file mode 100644 index 0000000000000000000000000000000000000000..b180c6aa7e2070938b9b5bf06edaf391c410c078 --- /dev/null +++ b/doc/html/dir_b7525369f2fbc378c6814b573b9a2bc3.html @@ -0,0 +1,119 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tpm2/ibm_tss Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
ibm_tss Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  commit.c
 Tpm2Commit implementation.
 
file  context.c
 TPM context implementation.
 
file  conversion.c
 TPM-SDK data conversion implementation.
 
file  conversion.h
 TPM-SDK data conversion interface.
 
file  createprimary.c
 TPM2_CreatePrimary command implementation.
 
file  getrandom.c
 TPM2_GetRandom command implementation.
 
file  load_external.c
 TPM2_LoadExternal command implementation.
 
file  nv.c
 TSS NV API implementation.
 
file  printtss.c
 TPM context implementation.
 
file  printtss.h
 TPM log error prints.
 
file  sign.c
 Tpm2Sign implementation.
 
file  state.h
 TPM internal state.
 
+
+
+ + + + + diff --git a/doc/html/dir_ea12d375fc1eb79df248c0adf953af4f.html b/doc/html/dir_ea12d375fc1eb79df248c0adf953af4f.html new file mode 100644 index 0000000000000000000000000000000000000000..9f730579332d169775d77855b6f119e07d05aa61 --- /dev/null +++ b/doc/html/dir_ea12d375fc1eb79df248c0adf953af4f.html @@ -0,0 +1,83 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tiny Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
tiny Directory Reference
+
+
+ + +

+Directories

+
+
+ + + + + diff --git a/doc/html/dir_ef364879bae02db2684040178ed9b186.html b/doc/html/dir_ef364879bae02db2684040178ed9b186.html new file mode 100644 index 0000000000000000000000000000000000000000..6f87ce8eb4c235d183191af6d95e7f337c12202d --- /dev/null +++ b/doc/html/dir_ef364879bae02db2684040178ed9b186.html @@ -0,0 +1,86 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/verifier/1.1 Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
1.1 Directory Reference
+
+
+ + + + + +

+Files

file  api.h
 Intel(R) EPID SDK verifier Intel(R) EPID 1.1 API.
 
+
+
+ + + + + diff --git a/doc/html/dir_f169ebf8da29290a918fa4b3f7151050.html b/doc/html/dir_f169ebf8da29290a918fa4b3f7151050.html new file mode 100644 index 0000000000000000000000000000000000000000..91712ab3010cbc7d349f65918387fba6999437ea --- /dev/null +++ b/doc/html/dir_f169ebf8da29290a918fa4b3f7151050.html @@ -0,0 +1,113 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common/math Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
math Directory Reference
+
+
+ +

Math primitives.

+ +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

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

Detailed Description

+

Math primitives.

+
+
+ + + + + diff --git a/doc/html/dir_f6bef457d5f671b6e774bfccc16651f6.html b/doc/html/dir_f6bef457d5f671b6e774bfccc16651f6.html new file mode 100644 index 0000000000000000000000000000000000000000..366666a42cb8c07a64172b3947a1488906a2b4e8 --- /dev/null +++ b/doc/html/dir_f6bef457d5f671b6e774bfccc16651f6.html @@ -0,0 +1,113 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common Directory Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
common Directory Reference
+
+
+ +

Common code shared between core sub-components.

+ +More...

+ + + + + +

+Directories

directory  math
 Math primitives.
 
+ + + + + + + + + + + + + + + + + + + +

+Files

file  bitsupplier.h
 Random data supplier interface.
 
file  epiddefs.h
 Common SDK macro definitions.
 
file  errors.h
 Error reporting.
 
file  file_parser.h
 Intel(R) EPID issuer material parsing utilities.
 
file  stdtypes.h
 C99 standard data types.
 
file  types.h
 SDK data types.
 
+

Detailed Description

+

Common code shared between core sub-components.

+
+
+ + + + + diff --git a/doc/html/doc.png b/doc/html/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 Binary files /dev/null and b/doc/html/doc.png differ diff --git a/doc/html/doxygen.css b/doc/html/doxygen.css new file mode 100644 index 0000000000000000000000000000000000000000..266c8b3a6b5c21a6c2f8441654463286578f3e56 --- /dev/null +++ b/doc/html/doxygen.css @@ -0,0 +1,1596 @@ +/* The standard CSS for doxygen 1.8.14 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + + +/* @end */ diff --git a/doc/html/doxygen.png b/doc/html/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff17d807fd8aa003bed8bb2a69e8f0909592fd1 Binary files /dev/null and b/doc/html/doxygen.png differ diff --git a/doc/html/dynsections.js b/doc/html/dynsections.js new file mode 100644 index 0000000000000000000000000000000000000000..c1ce12260c1dfc2696ed07506250176fb3269af9 --- /dev/null +++ b/doc/html/dynsections.js @@ -0,0 +1,120 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common/math/ecdsa.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
ecdsa.h File Reference
+
+
+ +

Ecdsa interface. +More...

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

+Functions

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

Detailed Description

+

Ecdsa interface.

+
+
+ + + + + diff --git a/doc/html/ecgroup_8h.html b/doc/html/ecgroup_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..9ee2f8c6c99f3d2861158796dc4e746a5de23f3b --- /dev/null +++ b/doc/html/ecgroup_8h.html @@ -0,0 +1,167 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common/math/ecgroup.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
ecgroup.h File Reference
+
+
+ +

Elliptic curve group interface. +More...

+ + + + + + + + +

+Typedefs

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

+Functions

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

Detailed Description

+

Elliptic curve group interface.

+
+
+ + + + + diff --git a/doc/html/efq2_8h.html b/doc/html/efq2_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..4f9dcee8c38c334ffb699b0d1066bd60477b217b --- /dev/null +++ b/doc/html/efq2_8h.html @@ -0,0 +1,448 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tiny/math/efq2.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
efq2.h File Reference
+
+
+ +

Definition of EFq2 math. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

int EFq2IsInf (EccPointJacobiFq2 const *in)
 Test if a point is infinity. More...
 
void EFq2FromAffine (EccPointJacobiFq2 *result, EccPointFq2 const *in)
 Convert a point from Affine to Jacobi representation. More...
 
int EFq2ToAffine (EccPointFq2 *result, EccPointJacobiFq2 const *in)
 Convert a point from Jacobi to Affine representation. More...
 
void EFq2Dbl (EccPointJacobiFq2 *result, EccPointJacobiFq2 const *in)
 Double a point in EFq2. More...
 
void EFq2Add (EccPointJacobiFq2 *result, EccPointJacobiFq2 const *left, EccPointJacobiFq2 const *right)
 Add two points in EFq2. More...
 
void EFq2Neg (EccPointJacobiFq2 *result, EccPointJacobiFq2 const *in)
 Negate a point on EFq2. More...
 
void EFq2MulSSCM (EccPointJacobiFq2 *result, EccPointJacobiFq2 const *left, FpElem const *right)
 Multiply two points in EFq. More...
 
int EFq2Eq (EccPointJacobiFq2 const *left, EccPointJacobiFq2 const *right)
 Test if two points on EFq2 are equal. More...
 
int EFq2OnCurve (EccPointFq2 const *in)
 Test if a point is in EFq2. More...
 
+

Detailed Description

+

Definition of EFq2 math.

+

Function Documentation

+ +

◆ EFq2Add()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void EFq2Add (EccPointJacobiFq2result,
EccPointJacobiFq2 const * left,
EccPointJacobiFq2 const * right 
)
+
+ +

Add two points in EFq2.

+
Parameters
+ + + + +
[out]resultof adding left and right.
[in]leftThe first operand to be added.
[in]rightThe second operand to be added.
+
+
+ +
+
+ +

◆ EFq2Dbl()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void EFq2Dbl (EccPointJacobiFq2result,
EccPointJacobiFq2 const * in 
)
+
+ +

Double a point in EFq2.

+
Parameters
+ + + +
[out]resulttarget.
[in]inthe value to double.
+
+
+ +
+
+ +

◆ EFq2Eq()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int EFq2Eq (EccPointJacobiFq2 const * left,
EccPointJacobiFq2 const * right 
)
+
+ +

Test if two points on EFq2 are equal.

+
Parameters
+ + + +
[in]leftThe first operand to be tested.
[in]rightThe second operand to be tested.
+
+
+
Returns
A value different from zero (i.e., true) if indeed the values are equal. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ EFq2FromAffine()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void EFq2FromAffine (EccPointJacobiFq2result,
EccPointFq2 const * in 
)
+
+ +

Convert a point from Affine to Jacobi representation.

+
Parameters
+ + + +
[out]resulttarget.
[in]invalue to set.
+
+
+ +
+
+ +

◆ EFq2IsInf()

+ +
+
+ + + + + + + + +
int EFq2IsInf (EccPointJacobiFq2 const * in)
+
+ +

Test if a point is infinity.

+
Parameters
+ + +
[in]inthe point to test.
+
+
+
Returns
A value different from zero (i.e., true) indeed the value is infinity. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ EFq2MulSSCM()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void EFq2MulSSCM (EccPointJacobiFq2result,
EccPointJacobiFq2 const * left,
FpElem const * right 
)
+
+ +

Multiply two points in EFq.

+

This function is mitigated against software side-channel attacks.

+
Parameters
+ + + + +
[out]resultof multiplying left and right.
[in]leftThe first operand to be multiplied.
[in]rightThe second operand to be multiplied.
+
+
+ +
+
+ +

◆ EFq2Neg()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void EFq2Neg (EccPointJacobiFq2result,
EccPointJacobiFq2 const * in 
)
+
+ +

Negate a point on EFq2.

+
Parameters
+ + + +
[out]resultthe negative of the element.
[in]inthe element to negate.
+
+
+ +
+
+ +

◆ EFq2OnCurve()

+ +
+
+ + + + + + + + +
int EFq2OnCurve (EccPointFq2 const * in)
+
+ +

Test if a point is in EFq2.

+
Parameters
+ + +
[in]inthe point to test.
+
+
+
Returns
A value different from zero (i.e., true) indeed the point is on the curve. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ EFq2ToAffine()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int EFq2ToAffine (EccPointFq2result,
EccPointJacobiFq2 const * in 
)
+
+ +

Convert a point from Jacobi to Affine representation.

+
Parameters
+ + + +
[out]resulttarget.
[in]invalue to set.
+
+
+
Returns
1 on success, 0 on failure
+ +
+
+
+
+ + + + + diff --git a/doc/html/efq_8h.html b/doc/html/efq_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..19f3e5dc35cfc5594e6ae038187b8672ce83a44a --- /dev/null +++ b/doc/html/efq_8h.html @@ -0,0 +1,1146 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tiny/math/efq.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
efq.h File Reference
+
+
+ +

Definition of EFq math. +More...

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

+Functions

void EFqMulSSCM (EccPointJacobiFq *result, EccPointJacobiFq const *base, FpElem const *exp)
 Multiply two points in EFq. More...
 
int EFqAffineExp (EccPointFq *result, EccPointFq const *base, FpElem const *exp)
 Exponentiate a point in EFq by an element of Fp. More...
 
int EFqAffineMultiExp (EccPointFq *result, EccPointFq const *base0, FpElem const *exp0, EccPointFq const *base1, FpElem const *exp1)
 Sum the results of exponentiating two points in EFq by elements of Fp. More...
 
void EFqMultiExp (EccPointJacobiFq *result, EccPointJacobiFq const *base0, FpElem const *exp0, EccPointJacobiFq const *base1, FpElem const *exp1)
 Sum the results of exponentiating two points in EFq by elements of Fp. More...
 
int EFqAffineAdd (EccPointFq *result, EccPointFq const *left, EccPointFq const *right)
 Add two points in EFq. More...
 
int EFqAffineDbl (EccPointFq *result, EccPointFq const *in)
 Double a point in EFq. More...
 
void EFqDbl (EccPointJacobiFq *result, EccPointJacobiFq const *in)
 Double a point in EFq. More...
 
void EFqAdd (EccPointJacobiFq *result, EccPointJacobiFq const *left, EccPointJacobiFq const *right)
 Add two points in EFq. More...
 
int EFqRand (EccPointFq *result, BitSupplier rnd_func, void *rnd_param)
 Generate a random point in EFq. More...
 
void EFqSet (EccPointJacobiFq *result, FqElem const *x, FqElem const *y)
 Set a point's value. More...
 
int EFqIsInf (EccPointJacobiFq const *in)
 Test if a point is infinity. More...
 
void EFqFromAffine (EccPointJacobiFq *result, EccPointFq const *in)
 Convert a point from Affine to Jacobi representation. More...
 
int EFqToAffine (EccPointFq *result, EccPointJacobiFq const *in)
 Convert a point from Jacobi to Affine representation. More...
 
void EFqNeg (EccPointJacobiFq *result, EccPointJacobiFq const *in)
 Negate a point on EFq. More...
 
int EFqEq (EccPointJacobiFq const *left, EccPointJacobiFq const *right)
 Test if two points on EFq are equal. More...
 
int EFqHash (EccPointFq *result, unsigned char const *msg, size_t len, HashAlg hashalg)
 Hashes an arbitrary message to a point on EFq. More...
 
void EFqCp (EccPointFq *result, EccPointFq const *in)
 Copy a point's value. More...
 
int EFqEqAffine (EccPointFq const *left, EccPointFq const *right)
 Test if two points on EFq are equal. More...
 
void EFqCondSet (EccPointJacobiFq *result, EccPointJacobiFq const *true_val, EccPointJacobiFq const *false_val, int truth_val)
 Conditionally Set a point's value to one of two values. More...
 
void EFqJCp (EccPointJacobiFq *result, EccPointJacobiFq const *in)
 Copy a point's value. More...
 
void EFqInf (EccPointJacobiFq *result)
 Set an element's value to infinity. More...
 
int EFqOnCurve (EccPointFq const *in)
 Test if a point is on EFq. More...
 
int EFqJOnCurve (EccPointJacobiFq const *in)
 Test if a point is on EFq. More...
 
int EFqJRand (EccPointJacobiFq *result, BitSupplier rnd_func, void *rnd_param)
 Generate a random point in EFq. More...
 
+

Detailed Description

+

Definition of EFq math.

+

Function Documentation

+ +

◆ EFqAdd()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void EFqAdd (EccPointJacobiFqresult,
EccPointJacobiFq const * left,
EccPointJacobiFq const * right 
)
+
+ +

Add two points in EFq.

+
Parameters
+ + + + +
[out]resultof adding left and right.
[in]leftThe first operand to be added.
[in]rightThe second operand to be added.
+
+
+ +
+
+ +

◆ EFqAffineAdd()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int EFqAffineAdd (EccPointFqresult,
EccPointFq const * left,
EccPointFq const * right 
)
+
+ +

Add two points in EFq.

+
Parameters
+ + + + +
[out]resultof adding left and right.
[in]leftThe first operand to be added.
[in]rightThe second operand to be added.
+
+
+
Returns
A value different from zero (i.e., true) if on success. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ EFqAffineDbl()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int EFqAffineDbl (EccPointFqresult,
EccPointFq const * in 
)
+
+ +

Double a point in EFq.

+
Parameters
+ + + +
[out]resulttarget.
[in]inthe value to double.
+
+
+
Returns
A value different from zero (i.e., true) if on success. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ EFqAffineExp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int EFqAffineExp (EccPointFqresult,
EccPointFq const * base,
FpElem const * exp 
)
+
+ +

Exponentiate a point in EFq by an element of Fp.

+
Parameters
+ + + + +
[out]resulttarget.
[in]basethe base.
[in]expthe exponent.
+
+
+
Returns
A value different from zero (i.e., true) if on success. Zero (i.e., false) otherwise.
+
+1 on success, 0 on failure
+ +
+
+ +

◆ EFqAffineMultiExp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int EFqAffineMultiExp (EccPointFqresult,
EccPointFq const * base0,
FpElem const * exp0,
EccPointFq const * base1,
FpElem const * exp1 
)
+
+ +

Sum the results of exponentiating two points in EFq by elements of Fp.

+
Parameters
+ + + + + + +
[out]resulttarget.
[in]base0the first base.
[in]exp0the first exponent.
[in]base1the second base.
[in]exp1the second exponent.
+
+
+
Returns
A value different from zero (i.e., true) if on success. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ EFqCondSet()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void EFqCondSet (EccPointJacobiFqresult,
EccPointJacobiFq const * true_val,
EccPointJacobiFq const * false_val,
int truth_val 
)
+
+ +

Conditionally Set a point's value to one of two values.

+
Parameters
+ + + + + +
[out]resulttarget.
[in]true_valvalue to set if condition is true.
[in]false_valvalue to set if condition is false.
[in]truth_valvalue of condition.
+
+
+ +
+
+ +

◆ EFqCp()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void EFqCp (EccPointFqresult,
EccPointFq const * in 
)
+
+ +

Copy a point's value.

+
Parameters
+ + + +
[out]resultcopy target.
[in]incopy source.
+
+
+ +
+
+ +

◆ EFqDbl()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void EFqDbl (EccPointJacobiFqresult,
EccPointJacobiFq const * in 
)
+
+ +

Double a point in EFq.

+
Parameters
+ + + +
[out]resulttarget.
[in]inthe value to double.
+
+
+ +
+
+ +

◆ EFqEq()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int EFqEq (EccPointJacobiFq const * left,
EccPointJacobiFq const * right 
)
+
+ +

Test if two points on EFq are equal.

+
Parameters
+ + + +
[in]leftThe first operand to be tested.
[in]rightThe second operand to be tested.
+
+
+
Returns
A value different from zero (i.e., true) if indeed the values are equal. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ EFqEqAffine()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int EFqEqAffine (EccPointFq const * left,
EccPointFq const * right 
)
+
+ +

Test if two points on EFq are equal.

+
Parameters
+ + + +
[in]leftThe first operand to be tested.
[in]rightThe second operand to be tested.
+
+
+
Returns
A value different from zero (i.e., true) if indeed the values are equal. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ EFqFromAffine()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void EFqFromAffine (EccPointJacobiFqresult,
EccPointFq const * in 
)
+
+ +

Convert a point from Affine to Jacobi representation.

+
Parameters
+ + + +
[out]resulttarget.
[in]invalue to set.
+
+
+ +
+
+ +

◆ EFqHash()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int EFqHash (EccPointFqresult,
unsigned char const * msg,
size_t len,
HashAlg hashalg 
)
+
+ +

Hashes an arbitrary message to a point on EFq.

+
Parameters
+ + + + + +
[out]resulttarget.
[in]msgbuffer to reinterpret.
[in]lenlength of msg in bytes.
[in]hashalghash algorithm to use.
+
+
+
Returns
A value different from zero (i.e., true) if on success. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ EFqInf()

+ +
+
+ + + + + + + + +
void EFqInf (EccPointJacobiFqresult)
+
+ +

Set an element's value to infinity.

+
Parameters
+ + +
[out]resultelement to set.
+
+
+ +
+
+ +

◆ EFqIsInf()

+ +
+
+ + + + + + + + +
int EFqIsInf (EccPointJacobiFq const * in)
+
+ +

Test if a point is infinity.

+
Parameters
+ + +
[in]inthe point to test.
+
+
+
Returns
A value different from zero (i.e., true) indeed the value is infinity. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ EFqJCp()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void EFqJCp (EccPointJacobiFqresult,
EccPointJacobiFq const * in 
)
+
+ +

Copy a point's value.

+
Parameters
+ + + +
[out]resultcopy target.
[in]incopy source.
+
+
+ +
+
+ +

◆ EFqJOnCurve()

+ +
+
+ + + + + + + + +
int EFqJOnCurve (EccPointJacobiFq const * in)
+
+ +

Test if a point is on EFq.

+
Parameters
+ + +
[in]inthe point to test.
+
+
+
Returns
A value different from zero (i.e., true) indeed the point is on the curve. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ EFqJRand()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int EFqJRand (EccPointJacobiFqresult,
BitSupplier rnd_func,
void * rnd_param 
)
+
+ +

Generate a random point in EFq.

+
Parameters
+ + + + +
[in]resultthe random value.
[in]rnd_funcRandom number generator.
[in]rnd_paramPass through context data for rnd_func.
+
+
+
Returns
A value different from zero (i.e., true) if on success. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ EFqMulSSCM()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void EFqMulSSCM (EccPointJacobiFqresult,
EccPointJacobiFq const * base,
FpElem const * exp 
)
+
+ +

Multiply two points in EFq.

+

This function is mitigated against software side-channel attacks.

+
Parameters
+ + + + +
[out]resultof multiplying left and right.
[in]baseThe first operand to be multiplied.
[in]expThe second operand to be multiplied.
+
+
+ +
+
+ +

◆ EFqMultiExp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void EFqMultiExp (EccPointJacobiFqresult,
EccPointJacobiFq const * base0,
FpElem const * exp0,
EccPointJacobiFq const * base1,
FpElem const * exp1 
)
+
+ +

Sum the results of exponentiating two points in EFq by elements of Fp.

+
Parameters
+ + + + + + +
[out]resulttarget.
[in]base0the first base.
[in]exp0the first exponent.
[in]base1the second base.
[in]exp1the second exponent.
+
+
+
Returns
1 on success, 0 on failure
+ +
+
+ +

◆ EFqNeg()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void EFqNeg (EccPointJacobiFqresult,
EccPointJacobiFq const * in 
)
+
+ +

Negate a point on EFq.

+
Parameters
+ + + +
[out]resultthe negative of the element.
[in]inthe element to negate.
+
+
+ +
+
+ +

◆ EFqOnCurve()

+ +
+
+ + + + + + + + +
int EFqOnCurve (EccPointFq const * in)
+
+ +

Test if a point is on EFq.

+
Parameters
+ + +
[in]inthe point to test.
+
+
+
Returns
A value different from zero (i.e., true) indeed the point is on the curve. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ EFqRand()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int EFqRand (EccPointFqresult,
BitSupplier rnd_func,
void * rnd_param 
)
+
+ +

Generate a random point in EFq.

+
Parameters
+ + + + +
[in]resultthe random value.
[in]rnd_funcRandom number generator.
[in]rnd_paramPass through context data for rnd_func.
+
+
+
Returns
A value different from zero (i.e., true) if on success. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ EFqSet()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void EFqSet (EccPointJacobiFqresult,
FqElem const * x,
FqElem const * y 
)
+
+ +

Set a point's value.

+
Parameters
+ + + + +
[out]resulttarget.
[in]xvalue to set.
[in]yvalue to set.
+
+
+ +
+
+ +

◆ EFqToAffine()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int EFqToAffine (EccPointFqresult,
EccPointJacobiFq const * in 
)
+
+ +

Convert a point from Jacobi to Affine representation.

+
Parameters
+ + + +
[out]resulttarget.
[in]invalue to set.
+
+
+
Returns
A value different from zero (i.e., true) if on success. Zero (i.e., false) otherwise.
+ +
+
+
+
+ + + + + diff --git a/doc/html/endian_8h.html b/doc/html/endian_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..e9ed3a84bf55be9600cbc120db1db0b2f37e48e6 --- /dev/null +++ b/doc/html/endian_8h.html @@ -0,0 +1,138 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tiny/stdlib/endian.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
endian.h File Reference
+
+
+ +

Convert values between host and big-/little-endian byte order. +More...

+
#include <stdint.h>
+
+ + + + + + + +

+Macros

#define be32toh(big_endian_32bits)
 Transform big endian uint32_t to host uint32_t. More...
 
#define htobe32(host_32bits)
 Transform host uint32_t to big endian uint32_t. More...
 
+

Detailed Description

+

Convert values between host and big-/little-endian byte order.

+

Macro Definition Documentation

+ +

◆ be32toh

+ +
+
+ + + + + + + + +
#define be32toh( big_endian_32bits)
+
+Value:
((uint32_t)(((((unsigned char*)&(big_endian_32bits))[0]) << 24) + \
((((unsigned char*)&(big_endian_32bits))[1]) << 16) + \
((((unsigned char*)&(big_endian_32bits))[2]) << 8) + \
(((unsigned char*)&(big_endian_32bits))[3])))
+

Transform big endian uint32_t to host uint32_t.

+ +
+
+ +

◆ htobe32

+ +
+
+ + + + + + + + +
#define htobe32( host_32bits)
+
+Value:
(uint32_t)(((((uint32_t)(host_32bits)) & 0xFF) << 24) | \
((((uint32_t)(host_32bits)) & 0xFF00) << 8) | \
((((uint32_t)(host_32bits)) & 0xFF0000) >> 8) | \
((((uint32_t)(host_32bits)) & 0xFF000000) >> 24))
+

Transform host uint32_t to big endian uint32_t.

+ +
+
+
+
+ + + + + diff --git a/doc/html/epid__overview_8dox.html b/doc/html/epid__overview_8dox.html new file mode 100644 index 0000000000000000000000000000000000000000..0116c6ed4962a793e1c1fe21b26dedf08fb96811 --- /dev/null +++ b/doc/html/epid__overview_8dox.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: doc/docsrc/epid_overview.dox File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
doc/docsrc/epid_overview.dox File Reference
+
+
+ +

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

+

Detailed Description

+

This file is used by Doxygen to generate documentation.

+
+
+ + + + + diff --git a/doc/html/epid_diagram_generating_member_private_keys.png b/doc/html/epid_diagram_generating_member_private_keys.png new file mode 100644 index 0000000000000000000000000000000000000000..6b9276356dae9611460543107bea7d11e5500661 Binary files /dev/null and b/doc/html/epid_diagram_generating_member_private_keys.png differ diff --git a/doc/html/epid_diagram_group.png b/doc/html/epid_diagram_group.png new file mode 100644 index 0000000000000000000000000000000000000000..2caf4411447667679549e0c22663f64af86d9dc4 Binary files /dev/null and b/doc/html/epid_diagram_group.png differ diff --git a/doc/html/epid_diagram_group_public_key_and_issuing_private_key.png b/doc/html/epid_diagram_group_public_key_and_issuing_private_key.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b7ca17229c53750b69868f658f4b40f7992330 Binary files /dev/null and b/doc/html/epid_diagram_group_public_key_and_issuing_private_key.png differ diff --git a/doc/html/epid_diagram_issuer_makes_revocation_lists_available.png b/doc/html/epid_diagram_issuer_makes_revocation_lists_available.png new file mode 100644 index 0000000000000000000000000000000000000000..cd77e5934c5456be8019cc50a4d7ee3228379868 Binary files /dev/null and b/doc/html/epid_diagram_issuer_makes_revocation_lists_available.png differ diff --git a/doc/html/epid_diagram_maintaining_revocation_lists.png b/doc/html/epid_diagram_maintaining_revocation_lists.png new file mode 100644 index 0000000000000000000000000000000000000000..79ddddcb7d827c267886fa076e3804e32befe6d3 Binary files /dev/null and b/doc/html/epid_diagram_maintaining_revocation_lists.png differ diff --git a/doc/html/epid_diagram_provisioning.png b/doc/html/epid_diagram_provisioning.png new file mode 100644 index 0000000000000000000000000000000000000000..40fafd1b066d60cbead06e1748528d878c5080b1 Binary files /dev/null and b/doc/html/epid_diagram_provisioning.png differ diff --git a/doc/html/epid_diagram_roles_summary.png b/doc/html/epid_diagram_roles_summary.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6f42228336d6d7e95c3439dffd5f7a36dd1da0 Binary files /dev/null and b/doc/html/epid_diagram_roles_summary.png differ diff --git a/doc/html/epid_diagram_signing_and_verification.png b/doc/html/epid_diagram_signing_and_verification.png new file mode 100644 index 0000000000000000000000000000000000000000..7eeedbb384b8f957ecf1dd76d949ed407a46f653 Binary files /dev/null and b/doc/html/epid_diagram_signing_and_verification.png differ diff --git a/doc/html/epiddefs_8h.html b/doc/html/epiddefs_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..0137ded1fc3d18717569455f150c3f7b213da82d --- /dev/null +++ b/doc/html/epiddefs_8h.html @@ -0,0 +1,86 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common/epiddefs.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
epiddefs.h File Reference
+
+
+ +

Common SDK macro definitions. +More...

+

Detailed Description

+

Common SDK macro definitions.

+
+
+ + + + + diff --git a/doc/html/epidstyle.css b/doc/html/epidstyle.css new file mode 100644 index 0000000000000000000000000000000000000000..4b51e3fe9bb7cee036d0985005a9daef7bf83097 --- /dev/null +++ b/doc/html/epidstyle.css @@ -0,0 +1,325 @@ +.image { + text-align: left; +} +body { + color: #333333; + background-color: #ffffff; + font-family: Verdana, Arial, sans-serif; + font-size: 10pt; + margin-left: 0px; +} +h1 { + color: #0860a8; + font-size: 15pt; + padding-bottom: 1px; + margin-left: 0pt; + margin-bottom: 0px; + border-bottom: 1px solid #0860A8; + font-weight: normal; +} +h1.title { + border-bottom: 0 none; + margin-left: 0; + font-weight: normal; +} +h2 { + color: #0860a8; + font-weight: lighter; + margin-top: 5pt; + margin-bottom: 0; + font-size: 13pt; +} +h3 { + color: #333333; + font-weight: bold; + margin-top: 5pt; + margin-bottom: 0; + font-size: 11pt; +} +a:link { + color: #0860a8; + text-decoration: none; +} +a:visited { + color: #0860a8; + text-decoration: none; +} +a:active { + color: #0860a8; + text-decoration: underline; +} +a:hover { + color: #0860a8; + text-decoration: underline; +} +p { + font-size: inherit; + line-height: 120%; + margin-top: 0; + margin-bottom: 5pt; + font-family: Verdana, Arial, sans-serif; + font-size: 10pt; +} +blockquote { + margin-top: 0; + margin-bottom: 0; +} +HR { + color: #555555; + border: 0; + background: #555555; + height: 1px; + margin-left: 0; +} +p.Note { + margin-top: 0; + margin-left: 25px; + margin-bottom: 10pt; +} +h3.NoteTipHead { + color: #006699; + margin-top: 11pt; + padding-bottom: 0; + line-height: 18px; + text-transform: uppercase; +} +LI.h3-NoteTipHead { + color: #006699; + line-height: 18px; + text-transform: uppercase; +} +h3.NoteTipHead img { + vertical-align: middle; +} +/* +table { + margin-bottom: 5pt; + border-collapse: collapse; + margin-top: 0.3em; + font-size: 10pt; +} +tr { + vertical-align: top; +} +th { + padding: 4px; + text-align: left; + background-color: #555555; + font-weight: bold; + margin-top: 0; + margin-bottom: 0; + color: #ffffff; + font-size: 11pt; + border: 1px #bababa solid; +} +td { + border: 1px #bababa solid; + vertical-align: top; + font-size: 9pt; + margin-bottom: 0px; + margin-top: 0; + margin-left: 0; + padding: 0px; + text-align: left; +} +P.TableCell { + margin-top: 0; + margin-left: 4px; + padding: 0px; + margin-bottom: 0; + font-size: 9pt; + line-height: 120%; +} +td p { + margin-top: 0; + margin-left: 4; + padding: 0; + margin-bottom: 0; + text-align: left; + font-size: 9pt; + line-height: 120%; +} +td h3 { + margin-top: 0; + margin-left: 0; + padding: 0; + text-align: left; + font-size: inherit; + line-height: 120%; +} +td ul { + font-size: inherit; +} +td ol { + font-size: inherit; +} +td.noBorder { + border: 0px none; +} +h3.TableHead { + padding: 4px; + text-align: left; + background-color: #555555; + font-weight: bold; + margin-top: 0; + margin-bottom: 0; + color: #ffffff; + font-size: 11pt; +} +td table { + margin-left: 0; +} +*/ +ol { + margin-bottom: 1em; + font-size: inherit; + margin-top: 0px; + line-height: 100%; + list-style-type: decimal; +} +ol ol { + list-style: lower-alpha; + margin-bottom: 0em; + font-size: inherit; +} +ol ul { + margin-bottom: 0px; + font-size: inherit; +} +ol p { + margin-bottom: 0.2em; + margin-top: 0.2em; + margin-left: 0; + padding-left: 0; + font-size: inherit; +} +ol.Note { + margin-left: 25px; +} +ul { + margin-bottom: 1em; + font-size: inherit; + margin-top: 0px; + line-height: 100%; +} +ul p { + margin-bottom: 0.2em; + margin-top: 0.2em; + margin-left: 0; + padding-left: 0; + font-size: inherit; +} +ul ol { + margin-bottom: 0em; + font-size: inherit; + list-style-type: decimal; +} +ul ul { + margin-bottom: 0px; + font-size: inherit; +} +ul.Note { + margin-left: 25px; +} +li { + font-size: inherit; + margin-top: 0px; + line-height: 130%; +} +li p { + margin-bottom: 0.2em; + margin-top: 0.2em; + margin-left: 0; + padding-left: 0; + font-size: inherit; +} +p.twoColumnListHead { + color: #000000; + margin-top: 0; + margin-bottom: 0; + font-weight: bold; +} +dl { + margin-bottom: 1em; + font-size: inherit; + margin-top: 0px; +} +dt { + font-weight: bold; + margin-top: 1em; +} +dd { + font-size: inherit; + margin-top: 0; +} +dd p { + margin-bottom: 0.2em; + margin-top: 0.2em; + font-size: inherit; +} +p.pRelatedLink { + margin-top: 0px; + margin-bottom: 0px; +} +SPAN.Code { + font-family: "Courier New", Courier, monospace; +} +span.Variable { + font-family: Courier, monospace; + font-style: italic; +} +SPAN.Superscript { + vertical-align: top; + font-size: 80%; +} +SPAN.Color { + color: #6C9A65; +} +SPAN.Color2 { + color: #0860a8; +} +SPAN.Color3 { + color: #fd0b01; +} +SPAN.Color4 { + color: #f8aa06; +} +.Code { + font-family: "Courier New", Courier, monospace; + background-color: #eeeeee; +} +.link_buttons { + background-color: #EEEEEE; + border-color: #EEEEEE; + border-width: 1px; + padding: 4px; +} +.Color { + color: #6C9A65; +} +.Preformatted { + x-text-tab-stops: repeat 1in; + margin-top: 0; + margin-bottom: 0; + font-size: 10pt; + font-family: "Courier New", Courier, monospace; + background-color: #eeeeee; +} + +/* Hide top level nav-tree node */ +#nav-tree-contents > ul > li > div { + display: none; +} + +/* Shift remaining nav-tree nodes left */ +#nav-tree-contents > ul { + margin: 0; + padding: 0; + margin-left: -16px; + margin-top: -2em; /* nav-tree hack*/ +} + +#projectlink { + color:inherit; + text-decoration:none; +} diff --git a/doc/html/errors_8h.html b/doc/html/errors_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..d5d751727f85404f8772101ceb44e564dfc79f4e --- /dev/null +++ b/doc/html/errors_8h.html @@ -0,0 +1,128 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common/errors.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
errors.h File Reference
+
+
+ +

Error reporting. +More...

+ + + + + +

+Enumerations

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

+Functions

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

Detailed Description

+

Error reporting.

+
+
+ + + + + diff --git a/doc/html/examples_8dox.html b/doc/html/examples_8dox.html new file mode 100644 index 0000000000000000000000000000000000000000..1c1955d45beee17b845f6ecb652a34daa1fd0899 --- /dev/null +++ b/doc/html/examples_8dox.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: doc/docsrc/examples.dox File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
doc/docsrc/examples.dox File Reference
+
+
+ +

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

+

Detailed Description

+

This file is used by Doxygen to generate documentation.

+
+
+ + + + + diff --git a/doc/html/file__parser_8h.html b/doc/html/file__parser_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..f679e44f348a9798f08c56379251ec2eb4cbcedb --- /dev/null +++ b/doc/html/file__parser_8h.html @@ -0,0 +1,156 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common/file_parser.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
file_parser.h File Reference
+
+
+ +

Intel(R) EPID issuer material parsing utilities. +More...

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

+Data Structures

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

+Enumerations

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

+Functions

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

+Variables

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

Detailed Description

+

Intel(R) EPID issuer material parsing utilities.

+
+
+ + + + + diff --git a/doc/html/files.html b/doc/html/files.html new file mode 100644 index 0000000000000000000000000000000000000000..20d93e67dba1dc14184b46fccfc40f8eb512406c --- /dev/null +++ b/doc/html/files.html @@ -0,0 +1,151 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: File List + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 12345]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  epidCore Intel® EPID functionality
  commonCommon code shared between core sub-components
  1.1
 file_parser.hIntel(R) EPID 1.1 issuer material parsing utilities
 types.hSDK data types for Intel(R) EPID 1.1
  mathMath primitives
 bignum.hBig number interface
 ecdsa.hEcdsa interface
 ecgroup.hElliptic curve group interface
 finitefield.hFinite field interface
 hash.hHash primitives
 pairing.hPairing interface
 printutils.hPrint helper interface
 tatepairing.hIntel(R) EPID 1.1 Pairing interface
 bitsupplier.hRandom data supplier interface
 epiddefs.hCommon SDK macro definitions
 errors.hError reporting
 file_parser.hIntel(R) EPID issuer material parsing utilities
 stdtypes.hC99 standard data types
 types.hSDK data types
  memberMember functionality
  tiny
  math
 efq.hDefinition of EFq math
 efq2.hDefinition of EFq2 math
 fp.hDefinition of Fp math
 fq.hDefinition of Fq math
 fq12.hDefinition of Fq12 math
 fq2.hDefinition of Fq2 math
 fq6.hDefinition of Fq6 math
 hashwrap.hDecleration of hash wrap function
 mathdefs.hCommon public definitions for math headers
 mathtypes.hDefinition of math types in tiny Intel(R) EPID
 pairing.hDefinition of pairing math
 serialize.hDefinition of de/serialize functionality
 sha256.hInterface to a SHA-256 implementation
 sha512.hInterface to a SHA-512 implementation
 vli.hDefinition of Large Integer math
  stdlib
 endian.hConvert values between host and big-/little-endian byte order
 tiny_stdlib.hTiny portable implementations of standard library functions
  tpm2
  ibm_tss
 commit.cTpm2Commit implementation
 context.cTPM context implementation
 conversion.cTPM-SDK data conversion implementation
 conversion.hTPM-SDK data conversion interface
 createprimary.cTPM2_CreatePrimary command implementation
 getrandom.cTPM2_GetRandom command implementation
 load_external.cTPM2_LoadExternal command implementation
 nv.cTSS NV API implementation
 printtss.cTPM context implementation
 printtss.hTPM log error prints
 sign.cTpm2Sign implementation
 state.hTPM internal state
 commit.hSDK TPM Commit API
 context.hSDK TPM API
 createprimary.hTPM2_CreatePrimary command interface
 getrandom.hSDK TPM API
 load_external.hSDK TPM API
 nv.hSDK TPM non volatile memory API
 sign.hSDK TPM Sign API
 api.hIntel(R) EPID SDK member API
 software_member.hMember creation parameters for software only implementation
 tpm_member.hMember creation parameters for TPM implementation
  verifierVerifier functionality
  1.1
 api.hIntel(R) EPID SDK verifier Intel(R) EPID 1.1 API
 api.hIntel(R) EPID SDK verifier API
+
+
+
+ + + + + diff --git a/doc/html/finitefield_8h.html b/doc/html/finitefield_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..1a3c88efbe2e9f5dd7272476f3f8ee8b639e7106 --- /dev/null +++ b/doc/html/finitefield_8h.html @@ -0,0 +1,176 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common/math/finitefield.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
finitefield.h File Reference
+
+
+ +

Finite field interface. +More...

+ + + + + + + + +

+Typedefs

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

+Functions

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

Detailed Description

+

Finite field interface.

+
+
+ + + + + diff --git a/doc/html/folderclosed.png b/doc/html/folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 Binary files /dev/null and b/doc/html/folderclosed.png differ diff --git a/doc/html/folderopen.png b/doc/html/folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c7f676a3b3ef8c2c307d319dff3c6a604eb227 Binary files /dev/null and b/doc/html/folderopen.png differ diff --git a/doc/html/fp_8h.html b/doc/html/fp_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..fca00e7d979add0af09e95f16d9461ab0dcb8e50 --- /dev/null +++ b/doc/html/fp_8h.html @@ -0,0 +1,645 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tiny/math/fp.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
fp.h File Reference
+
+
+ +

Definition of Fp math. +More...

+
#include <stddef.h>
+#include <stdint.h>
+#include "epid/common/bitsupplier.h"
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

int FpInField (FpElem const *in)
 Test if an element is in Fp. More...
 
void FpAdd (FpElem *result, FpElem const *left, FpElem const *right)
 Add two elements of Fp. More...
 
void FpMul (FpElem *result, FpElem const *left, FpElem const *right)
 Multiply two elements of Fp. More...
 
void FpSub (FpElem *result, FpElem const *left, FpElem const *right)
 Subtract two elements of Fp. More...
 
void FpExp (FpElem *result, FpElem const *base, VeryLargeInt const *exp)
 Exponentiate an element of Fp by a large integer. More...
 
void FpNeg (FpElem *result, FpElem const *in)
 Negate an element of Fp. More...
 
int FpEq (FpElem const *left, FpElem const *right)
 Test if two elements in Fp are equal. More...
 
void FpInv (FpElem *result, FpElem const *in)
 Invert an element of Fp. More...
 
int FpRand (FpElem *result, BitSupplier rnd_func, void *rnd_param)
 Generate a random element of Fp. More...
 
int FpRandNonzero (FpElem *result, BitSupplier rnd_func, void *rnd_param)
 Generate a non-zero random element of Fp. More...
 
void FpClear (FpElem *result)
 Clear an element of Fp. More...
 
void FpSet (FpElem *result, uint32_t in)
 Set a element of Fp's value. More...
 
void FpFromHash (FpElem *result, unsigned char const *hash, size_t len)
 Reinterpret a buffer as an element of Fp. More...
 
+

Detailed Description

+

Definition of Fp math.

+

Function Documentation

+ +

◆ FpAdd()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void FpAdd (FpElemresult,
FpElem const * left,
FpElem const * right 
)
+
+ +

Add two elements of Fp.

+
Parameters
+ + + + +
[out]resultof adding left and right.
[in]leftThe first operand to be added.
[in]rightThe second operand to be added.
+
+
+ +
+
+ +

◆ FpClear()

+ +
+
+ + + + + + + + +
void FpClear (FpElemresult)
+
+ +

Clear an element of Fp.

+
Parameters
+ + +
[out]resultvalue to clear.
+
+
+ +
+
+ +

◆ FpEq()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int FpEq (FpElem const * left,
FpElem const * right 
)
+
+ +

Test if two elements in Fp are equal.

+
Parameters
+ + + +
[in]leftThe first operand to be tested.
[in]rightThe second operand to be tested.
+
+
+
Returns
A value different from zero (i.e., true) if indeed the values are equal. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ FpExp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void FpExp (FpElemresult,
FpElem const * base,
VeryLargeInt const * exp 
)
+
+ +

Exponentiate an element of Fp by a large integer.

+
Parameters
+ + + + +
[out]resulttarget.
[in]basethe base.
[in]expthe exponent.
+
+
+ +
+
+ +

◆ FpFromHash()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void FpFromHash (FpElemresult,
unsigned char const * hash,
size_t len 
)
+
+ +

Reinterpret a buffer as an element of Fp.

+
Parameters
+ + + + +
[out]resulttarget.
[in]hashbuffer to reinterpret.
[in]lenlength of hash in bytes.
+
+
+ +
+
+ +

◆ FpInField()

+ +
+
+ + + + + + + + +
int FpInField (FpElem const * in)
+
+ +

Test if an element is in Fp.

+
Parameters
+ + +
[in]inthe element to test
+
+
+
Returns
A value different from zero (i.e., true) indeed the value is in the field. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ FpInv()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void FpInv (FpElemresult,
FpElem const * in 
)
+
+ +

Invert an element of Fp.

+
Parameters
+ + + +
[out]resulttarget.
[in]inthe value to invert.
+
+
+ +
+
+ +

◆ FpMul()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void FpMul (FpElemresult,
FpElem const * left,
FpElem const * right 
)
+
+ +

Multiply two elements of Fp.

+
Parameters
+ + + + +
[out]resultof multiplying left and right.
[in]leftThe first operand to be multiplied.
[in]rightThe second operand to be multiplied.
+
+
+ +
+
+ +

◆ FpNeg()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void FpNeg (FpElemresult,
FpElem const * in 
)
+
+ +

Negate an element of Fp.

+
Parameters
+ + + +
[out]resulttarget.
[in]inthe value to negate.
+
+
+ +
+
+ +

◆ FpRand()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int FpRand (FpElemresult,
BitSupplier rnd_func,
void * rnd_param 
)
+
+ +

Generate a random element of Fp.

+
Parameters
+ + + + +
[in]resultthe random value.
[in]rnd_funcRandom number generator.
[in]rnd_paramPass through context data for rnd_func.
+
+
+
Returns
A value different from zero (i.e., true) if on success. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ FpRandNonzero()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int FpRandNonzero (FpElemresult,
BitSupplier rnd_func,
void * rnd_param 
)
+
+ +

Generate a non-zero random element of Fp.

+
Parameters
+ + + + +
[in]resultthe random value.
[in]rnd_funcRandom number generator.
[in]rnd_paramPass through context data for rnd_func.
+
+
+
Returns
A value different from zero (i.e., true) if on success. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ FpSet()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void FpSet (FpElemresult,
uint32_t in 
)
+
+ +

Set a element of Fp's value.

+
Parameters
+ + + +
[out]resulttarget.
[in]invalue to set.
+
+
+ +
+
+ +

◆ FpSub()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void FpSub (FpElemresult,
FpElem const * left,
FpElem const * right 
)
+
+ +

Subtract two elements of Fp.

+
Parameters
+ + + + +
[out]resultof subtracting left from right.
[in]leftThe operand to be subtracted from.
[in]rightThe operand to subtract.
+
+
+ +
+
+
+
+ + + + + diff --git a/doc/html/fq12_8h.html b/doc/html/fq12_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..91f1fa132533f4bb301384d3cc390ef410e2de4b --- /dev/null +++ b/doc/html/fq12_8h.html @@ -0,0 +1,814 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tiny/math/fq12.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
fq12.h File Reference
+
+
+ +

Definition of Fq12 math. +More...

+
#include <stdint.h>
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

void Fq12Add (Fq12Elem *result, Fq12Elem const *left, Fq12Elem const *right)
 Add two elements of Fq12. More...
 
void Fq12Sub (Fq12Elem *result, Fq12Elem const *left, Fq12Elem const *right)
 Subtract two elements of Fq12. More...
 
void Fq12Square (Fq12Elem *result, Fq12Elem const *in)
 Square an element of Fq12. More...
 
void Fq12Mul (Fq12Elem *result, Fq12Elem const *left, Fq12Elem const *right)
 Multiply two elements of Fq12. More...
 
void Fq12Inv (Fq12Elem *result, Fq12Elem const *in)
 Invert an element of Fq12. More...
 
void Fq12Neg (Fq12Elem *result, Fq12Elem const *in)
 Negate an element of Fq12. More...
 
void Fq12Set (Fq12Elem *result, uint32_t val)
 Set an element's value. More...
 
void Fq12Exp (Fq12Elem *result, Fq12Elem const *base, VeryLargeInt const *exp)
 Exponentiate an element of Fq12 by a large integer. More...
 
void Fq12MultiExp (Fq12Elem *result, Fq12Elem const *base0, VeryLargeInt const *exp0, Fq12Elem const *base1, VeryLargeInt const *exp1, Fq12Elem const *base2, VeryLargeInt const *exp2, Fq12Elem const *base3, VeryLargeInt const *exp3)
 Multiply of exponentiation of elements of Fq12 by a large integers. More...
 
int Fq12Eq (Fq12Elem const *left, Fq12Elem const *right)
 Test if two elements in Fq12 are equal. More...
 
void Fq12Conj (Fq12Elem *result, Fq12Elem const *in)
 Calculate the conjugate of an element of Fq2. More...
 
void Fq12ExpCyc (Fq12Elem *result, Fq12Elem const *in, VeryLargeInt const *t)
 Calculate the cyclotomic exponentiation of an element of Fq12 by another element of Fq12. More...
 
void Fq12SqCyc (Fq12Elem *result, Fq12Elem const *in)
 Calculate the cyclotomic square of an element of fq12. More...
 
void Fq12MulSpecial (Fq12Elem *result, Fq12Elem const *left, Fq12Elem const *right)
 Multiply two elements of Fq12. More...
 
void Fq12Cp (Fq12Elem *result, Fq12Elem const *in)
 Copy an element's value. More...
 
void Fq12Clear (Fq12Elem *result)
 Clear an element's value. More...
 
+

Detailed Description

+

Definition of Fq12 math.

+

Function Documentation

+ +

◆ Fq12Add()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq12Add (Fq12Elemresult,
Fq12Elem const * left,
Fq12Elem const * right 
)
+
+ +

Add two elements of Fq12.

+
Parameters
+ + + + +
[out]resultof adding left and right.
[in]leftThe first operand to be added.
[in]rightThe second operand to be added.
+
+
+ +
+
+ +

◆ Fq12Clear()

+ +
+
+ + + + + + + + +
void Fq12Clear (Fq12Elemresult)
+
+ +

Clear an element's value.

+
Parameters
+ + +
[out]resultelement to clear.
+
+
+ +
+
+ +

◆ Fq12Conj()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq12Conj (Fq12Elemresult,
Fq12Elem const * in 
)
+
+ +

Calculate the conjugate of an element of Fq2.

+
Parameters
+ + + +
[out]resultthe conjugate of the element.
[in]inthe element.
+
+
+ +
+
+ +

◆ Fq12Cp()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq12Cp (Fq12Elemresult,
Fq12Elem const * in 
)
+
+ +

Copy an element's value.

+
Parameters
+ + + +
[out]resultcopy target.
[in]incopy source.
+
+
+ +
+
+ +

◆ Fq12Eq()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int Fq12Eq (Fq12Elem const * left,
Fq12Elem const * right 
)
+
+ +

Test if two elements in Fq12 are equal.

+
Parameters
+ + + +
[in]leftThe first operand to be tested.
[in]rightThe second operand to be tested.
+
+
+
Returns
A value different from zero (i.e., true) if indeed the values are equal. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ Fq12Exp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq12Exp (Fq12Elemresult,
Fq12Elem const * base,
VeryLargeInt const * exp 
)
+
+ +

Exponentiate an element of Fq12 by a large integer.

+
Parameters
+ + + + +
[out]resulttarget.
[in]basethe base.
[in]expthe exponent.
+
+
+ +
+
+ +

◆ Fq12ExpCyc()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq12ExpCyc (Fq12Elemresult,
Fq12Elem const * in,
VeryLargeInt const * t 
)
+
+ +

Calculate the cyclotomic exponentiation of an element of Fq12 by another element of Fq12.

+
Parameters
+ + + + +
[in,out]resultthe base of the exponentiation. This will receive the result.
[in]inthe exponent.
[in]tpairing parameter t
+
+
+ +
+
+ +

◆ Fq12Inv()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq12Inv (Fq12Elemresult,
Fq12Elem const * in 
)
+
+ +

Invert an element of Fq12.

+
Parameters
+ + + +
[out]resultthe inverse of the element.
[in]inthe element to invert.
+
+
+ +
+
+ +

◆ Fq12Mul()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq12Mul (Fq12Elemresult,
Fq12Elem const * left,
Fq12Elem const * right 
)
+
+ +

Multiply two elements of Fq12.

+
Parameters
+ + + + +
[out]resultof multiplying left and right.
[in]leftThe first operand to be multiplied.
[in]rightThe second operand to be multiplied.
+
+
+ +
+
+ +

◆ Fq12MulSpecial()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq12MulSpecial (Fq12Elemresult,
Fq12Elem const * left,
Fq12Elem const * right 
)
+
+ +

Multiply two elements of Fq12.

+

Requires that b[2] = b[4] = b[5] = 0. where right = ((b[0], b[2], b[4]), (b[1], b[3], b[5]))

+
Parameters
+ + + + +
[out]resultof multiplying left and right.
[in]leftThe first operand to be multiplied.
[in]rightThe second operand to be multiplied.
+
+
+ +
+
+ +

◆ Fq12MultiExp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void Fq12MultiExp (Fq12Elemresult,
Fq12Elem const * base0,
VeryLargeInt const * exp0,
Fq12Elem const * base1,
VeryLargeInt const * exp1,
Fq12Elem const * base2,
VeryLargeInt const * exp2,
Fq12Elem const * base3,
VeryLargeInt const * exp3 
)
+
+ +

Multiply of exponentiation of elements of Fq12 by a large integers.

+
Parameters
+ + + + + + + + + + +
[out]resulttarget.
[in]base0the base.
[in]exp0the exponent.
[in]base1the base.
[in]exp1the exponent.
[in]base2the base.
[in]exp2the exponent.
[in]base3the base.
[in]exp3the exponent.
+
+
+ +
+
+ +

◆ Fq12Neg()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq12Neg (Fq12Elemresult,
Fq12Elem const * in 
)
+
+ +

Negate an element of Fq12.

+
Parameters
+ + + +
[out]resultthe negative of the element.
[in]inthe element to negate.
+
+
+ +
+
+ +

◆ Fq12Set()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq12Set (Fq12Elemresult,
uint32_t val 
)
+
+ +

Set an element's value.

+
Parameters
+ + + +
[out]resulttarget.
[in]valvalue to set.
+
+
+ +
+
+ +

◆ Fq12SqCyc()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq12SqCyc (Fq12Elemresult,
Fq12Elem const * in 
)
+
+ +

Calculate the cyclotomic square of an element of fq12.

+
Parameters
+ + + +
[in,out]resultresult of the cyclotomic square.
[in]inthe base.
+
+
+ +
+
+ +

◆ Fq12Square()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq12Square (Fq12Elemresult,
Fq12Elem const * in 
)
+
+ +

Square an element of Fq12.

+
Parameters
+ + + +
[out]resultthe square of the element.
[in]inthe element to square.
+
+
+ +
+
+ +

◆ Fq12Sub()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq12Sub (Fq12Elemresult,
Fq12Elem const * left,
Fq12Elem const * right 
)
+
+ +

Subtract two elements of Fq12.

+
Parameters
+ + + + +
[out]resultof subtracting left from right.
[in]leftThe operand to be subtracted from.
[in]rightThe operand to subtract.
+
+
+ +
+
+
+
+ + + + + diff --git a/doc/html/fq2_8h.html b/doc/html/fq2_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..58fce5cbcd1a6c962b5eb92bb3c4063190000a0d --- /dev/null +++ b/doc/html/fq2_8h.html @@ -0,0 +1,762 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tiny/math/fq2.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
fq2.h File Reference
+
+
+ +

Definition of Fq2 math. +More...

+
#include <stdint.h>
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

void Fq2Cp (Fq2Elem *result, Fq2Elem const *in)
 Copy an element's value. More...
 
void Fq2Set (Fq2Elem *result, uint32_t in)
 Set an element's value. More...
 
void Fq2Clear (Fq2Elem *result)
 Clear an element's value. More...
 
void Fq2Add (Fq2Elem *result, Fq2Elem const *left, Fq2Elem const *right)
 Add two elements of Fq2. More...
 
void Fq2Exp (Fq2Elem *result, Fq2Elem const *base, VeryLargeInt const *exp)
 Exponentiate an element of Fq2 by a large integer. More...
 
void Fq2Sub (Fq2Elem *result, Fq2Elem const *left, Fq2Elem const *right)
 Subtract two elements of Fq2. More...
 
void Fq2Mul (Fq2Elem *result, Fq2Elem const *left, Fq2Elem const *right)
 Multiply two elements of Fq2. More...
 
void Fq2Inv (Fq2Elem *result, Fq2Elem const *in)
 Invert an element of Fq2. More...
 
void Fq2Neg (Fq2Elem *result, Fq2Elem const *in)
 Negate an element of Fq2. More...
 
void Fq2Conj (Fq2Elem *result, Fq2Elem const *in)
 Calculate the conjugate of an element of Fq2. More...
 
void Fq2Square (Fq2Elem *result, Fq2Elem const *in)
 Square an element of Fq2. More...
 
void Fq2MulScalar (Fq2Elem *result, Fq2Elem const *left, FqElem const *right)
 Multiply an element of Fq2 by and element of Fq. More...
 
void Fq2CondSet (Fq2Elem *result, Fq2Elem const *true_val, Fq2Elem const *false_val, int truth_val)
 Conditionally Set an element's value to one of two values. More...
 
int Fq2Eq (Fq2Elem const *left, Fq2Elem const *right)
 Test if two elements in Fq2 are equal. More...
 
void Fq2MulXi (Fq2Elem *result, Fq2Elem const *in)
 Multiply an element of Fq2 by xi. More...
 
int Fq2IsZero (Fq2Elem const *value)
 Test if an element is zero. More...
 
+

Detailed Description

+

Definition of Fq2 math.

+

Function Documentation

+ +

◆ Fq2Add()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq2Add (Fq2Elemresult,
Fq2Elem const * left,
Fq2Elem const * right 
)
+
+ +

Add two elements of Fq2.

+
Parameters
+ + + + +
[out]resultof adding left and right.
[in]leftThe first operand to be added.
[in]rightThe second operand to be added.
+
+
+ +
+
+ +

◆ Fq2Clear()

+ +
+
+ + + + + + + + +
void Fq2Clear (Fq2Elemresult)
+
+ +

Clear an element's value.

+
Parameters
+ + +
[out]resultelement to clear.
+
+
+ +
+
+ +

◆ Fq2CondSet()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void Fq2CondSet (Fq2Elemresult,
Fq2Elem const * true_val,
Fq2Elem const * false_val,
int truth_val 
)
+
+ +

Conditionally Set an element's value to one of two values.

+
Parameters
+ + + + + +
[out]resulttarget.
[in]true_valvalue to set if condition is true.
[in]false_valvalue to set if condition is false.
[in]truth_valvalue of condition.
+
+
+ +
+
+ +

◆ Fq2Conj()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq2Conj (Fq2Elemresult,
Fq2Elem const * in 
)
+
+ +

Calculate the conjugate of an element of Fq2.

+
Parameters
+ + + +
[out]resultthe conjugate of the element.
[in]inthe element.
+
+
+ +
+
+ +

◆ Fq2Cp()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq2Cp (Fq2Elemresult,
Fq2Elem const * in 
)
+
+ +

Copy an element's value.

+
Parameters
+ + + +
[out]resultcopy target.
[in]incopy source.
+
+
+ +
+
+ +

◆ Fq2Eq()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int Fq2Eq (Fq2Elem const * left,
Fq2Elem const * right 
)
+
+ +

Test if two elements in Fq2 are equal.

+
Parameters
+ + + +
[in]leftThe first operand to be tested.
[in]rightThe second operand to be tested.
+
+
+
Returns
A value different from zero (i.e., true) if indeed the values are equal. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ Fq2Exp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq2Exp (Fq2Elemresult,
Fq2Elem const * base,
VeryLargeInt const * exp 
)
+
+ +

Exponentiate an element of Fq2 by a large integer.

+
Parameters
+ + + + +
[out]resulttarget.
[in]basethe base.
[in]expthe exponent.
+
+
+ +
+
+ +

◆ Fq2Inv()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq2Inv (Fq2Elemresult,
Fq2Elem const * in 
)
+
+ +

Invert an element of Fq2.

+
Parameters
+ + + +
[out]resultthe inverse of the element.
[in]inthe element to invert.
+
+
+ +
+
+ +

◆ Fq2IsZero()

+ +
+
+ + + + + + + + +
int Fq2IsZero (Fq2Elem const * value)
+
+ +

Test if an element is zero.

+
Parameters
+ + +
[in]valuethe element to test.
+
+
+
Returns
A value different from zero (i.e., true) if indeed the value is zero. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ Fq2Mul()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq2Mul (Fq2Elemresult,
Fq2Elem const * left,
Fq2Elem const * right 
)
+
+ +

Multiply two elements of Fq2.

+
Parameters
+ + + + +
[out]resultof multiplying left and right.
[in]leftThe first operand to be multiplied.
[in]rightThe second operand to be multiplied.
+
+
+ +
+
+ +

◆ Fq2MulScalar()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq2MulScalar (Fq2Elemresult,
Fq2Elem const * left,
FqElem const * right 
)
+
+ +

Multiply an element of Fq2 by and element of Fq.

+
Parameters
+ + + + +
[out]resultof multiplying left and right.
[in]leftThe first operand to be multiplied.
[in]rightThe second operand to be multiplied.
+
+
+ +
+
+ +

◆ Fq2MulXi()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq2MulXi (Fq2Elemresult,
Fq2Elem const * in 
)
+
+ +

Multiply an element of Fq2 by xi.

+

This function was formerly called as Fq2Const.

+
Parameters
+ + + +
[out]resultof multiplying in by xi.
[in]inThe first operand to be multiplied.
+
+
+ +
+
+ +

◆ Fq2Neg()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq2Neg (Fq2Elemresult,
Fq2Elem const * in 
)
+
+ +

Negate an element of Fq2.

+
Parameters
+ + + +
[out]resultthe negative of the element.
[in]inthe element to negate.
+
+
+ +
+
+ +

◆ Fq2Set()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq2Set (Fq2Elemresult,
uint32_t in 
)
+
+ +

Set an element's value.

+
Parameters
+ + + +
[out]resulttarget.
[in]invalue to set.
+
+
+ +
+
+ +

◆ Fq2Square()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq2Square (Fq2Elemresult,
Fq2Elem const * in 
)
+
+ +

Square an element of Fq2.

+
Parameters
+ + + +
[out]resultthe square of the element.
[in]inthe element to square.
+
+
+ +
+
+ +

◆ Fq2Sub()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq2Sub (Fq2Elemresult,
Fq2Elem const * left,
Fq2Elem const * right 
)
+
+ +

Subtract two elements of Fq2.

+
Parameters
+ + + + +
[out]resultof subtracting left from right.
[in]leftThe operand to be subtracted from.
[in]rightThe operand to subtract.
+
+
+ +
+
+
+
+ + + + + diff --git a/doc/html/fq6_8h.html b/doc/html/fq6_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..bfac9f184fa03f5100da51f1cbc648581b784d2f --- /dev/null +++ b/doc/html/fq6_8h.html @@ -0,0 +1,675 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tiny/math/fq6.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
fq6.h File Reference
+
+
+ +

Definition of Fq6 math. +More...

+
#include <stdint.h>
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

void Fq6Add (Fq6Elem *result, Fq6Elem const *left, Fq6Elem const *right)
 Add two elements of Fq6. More...
 
void Fq6Sub (Fq6Elem *result, Fq6Elem const *left, Fq6Elem const *right)
 Subtract two elements of Fq6. More...
 
void Fq6Mul (Fq6Elem *result, Fq6Elem const *left, Fq6Elem const *right)
 Multiply two elements of Fq6. More...
 
void Fq6Inv (Fq6Elem *result, Fq6Elem const *in)
 Invert an element of Fq6. More...
 
void Fq6Neg (Fq6Elem *result, Fq6Elem const *in)
 Negate an element of Fq6. More...
 
void Fq6Clear (Fq6Elem *result)
 Clear an element's value. More...
 
void Fq6MulScalar (Fq6Elem *result, Fq6Elem const *in, Fq2Elem const *scalar)
 Multiply an element of Fq6 by and element of Fq2. More...
 
void Fq6MulV (Fq6Elem *result, Fq6Elem const *in)
 Multiply an element of Fq6 by V. More...
 
int Fq6Eq (Fq6Elem const *left, Fq6Elem const *right)
 Test if two elements in Fq6 are equal. More...
 
int Fq6IsZero (Fq6Elem const *in)
 Test if an element is zero. More...
 
void Fq6Square (Fq6Elem *result, Fq6Elem const *in)
 Square an element of Fq6. More...
 
void Fq6Cp (Fq6Elem *result, Fq6Elem const *in)
 Copy an element's value. More...
 
void Fq6CondSet (Fq6Elem *result, Fq6Elem const *true_val, Fq6Elem const *false_val, int truth_val)
 Conditionally Set an element's value to one of two values. More...
 
void Fq6Set (Fq6Elem *result, uint32_t in)
 Set an element's value. More...
 
+

Detailed Description

+

Definition of Fq6 math.

+

Function Documentation

+ +

◆ Fq6Add()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq6Add (Fq6Elemresult,
Fq6Elem const * left,
Fq6Elem const * right 
)
+
+ +

Add two elements of Fq6.

+
Parameters
+ + + + +
[out]resultof adding left and right.
[in]leftThe first operand to be added.
[in]rightThe second operand to be added.
+
+
+ +
+
+ +

◆ Fq6Clear()

+ +
+
+ + + + + + + + +
void Fq6Clear (Fq6Elemresult)
+
+ +

Clear an element's value.

+
Parameters
+ + +
[out]resultelement to clear.
+
+
+ +
+
+ +

◆ Fq6CondSet()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void Fq6CondSet (Fq6Elemresult,
Fq6Elem const * true_val,
Fq6Elem const * false_val,
int truth_val 
)
+
+ +

Conditionally Set an element's value to one of two values.

+
Parameters
+ + + + + +
[out]resulttarget.
[in]true_valvalue to set if condition is true.
[in]false_valvalue to set if condition is false.
[in]truth_valvalue of condition.
+
+
+ +
+
+ +

◆ Fq6Cp()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq6Cp (Fq6Elemresult,
Fq6Elem const * in 
)
+
+ +

Copy an element's value.

+
Parameters
+ + + +
[out]resultcopy target.
[in]incopy source.
+
+
+ +
+
+ +

◆ Fq6Eq()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int Fq6Eq (Fq6Elem const * left,
Fq6Elem const * right 
)
+
+ +

Test if two elements in Fq6 are equal.

+
Parameters
+ + + +
[in]leftThe first operand to be tested.
[in]rightThe second operand to be tested.
+
+
+
Returns
A value different from zero (i.e., true) if indeed the values are equal. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ Fq6Inv()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq6Inv (Fq6Elemresult,
Fq6Elem const * in 
)
+
+ +

Invert an element of Fq6.

+
Parameters
+ + + +
[out]resultthe inverse of the element.
[in]inthe element to invert.
+
+
+ +
+
+ +

◆ Fq6IsZero()

+ +
+
+ + + + + + + + +
int Fq6IsZero (Fq6Elem const * in)
+
+ +

Test if an element is zero.

+
Parameters
+ + +
[in]inthe element to test.
+
+
+
Returns
A value different from zero (i.e., true) if indeed the value is zero. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ Fq6Mul()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq6Mul (Fq6Elemresult,
Fq6Elem const * left,
Fq6Elem const * right 
)
+
+ +

Multiply two elements of Fq6.

+
Parameters
+ + + + +
[out]resultof multiplying left and right.
[in]leftThe first operand to be multiplied.
[in]rightThe second operand to be multiplied.
+
+
+ +
+
+ +

◆ Fq6MulScalar()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq6MulScalar (Fq6Elemresult,
Fq6Elem const * in,
Fq2Elem const * scalar 
)
+
+ +

Multiply an element of Fq6 by and element of Fq2.

+
Parameters
+ + + + +
[out]resultof multiplying left and right.
[in]inThe first operand to be multiplied.
[in]scalarThe second operand to be multiplied.
+
+
+ +
+
+ +

◆ Fq6MulV()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq6MulV (Fq6Elemresult,
Fq6Elem const * in 
)
+
+ +

Multiply an element of Fq6 by V.

+

This function was formerly called as Fq2Const.

+
Parameters
+ + + +
[out]resultof multiplying in and V.
[in]inThe first operand to be multiplied.
+
+
+ +
+
+ +

◆ Fq6Neg()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq6Neg (Fq6Elemresult,
Fq6Elem const * in 
)
+
+ +

Negate an element of Fq6.

+
Parameters
+ + + +
[out]resultthe negative of the element.
[in]inthe element to negate.
+
+
+ +
+
+ +

◆ Fq6Set()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq6Set (Fq6Elemresult,
uint32_t in 
)
+
+ +

Set an element's value.

+
Parameters
+ + + +
[out]resulttarget.
[in]invalue to set.
+
+
+ +
+
+ +

◆ Fq6Square()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void Fq6Square (Fq6Elemresult,
Fq6Elem const * in 
)
+
+ +

Square an element of Fq6.

+
Parameters
+ + + +
[out]resultthe square of the element.
[in]inthe element to square.
+
+
+ +
+
+ +

◆ Fq6Sub()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Fq6Sub (Fq6Elemresult,
Fq6Elem const * left,
Fq6Elem const * right 
)
+
+ +

Subtract two elements of Fq6.

+
Parameters
+ + + + +
[out]resultof subtracting left from right.
[in]leftThe operand to be subtracted from.
[in]rightThe operand to subtract.
+
+
+ +
+
+
+
+ + + + + diff --git a/doc/html/fq_8h.html b/doc/html/fq_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..352c9385675f49d1c00719998971363f95ebfa1f --- /dev/null +++ b/doc/html/fq_8h.html @@ -0,0 +1,803 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tiny/math/fq.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
fq.h File Reference
+
+
+ +

Definition of Fq math. +More...

+
#include <stddef.h>
+#include <stdint.h>
+#include "epid/common/bitsupplier.h"
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

int FqInField (FqElem const *in)
 Test if an element is in Fq. More...
 
void FqAdd (FqElem *result, FqElem const *left, FqElem const *right)
 Add two elements of Fq. More...
 
void FqSub (FqElem *result, FqElem const *left, FqElem const *right)
 Subtract two elements of Fq. More...
 
void FqMul (FqElem *result, FqElem const *left, FqElem const *right)
 Multiply two elements of Fq. More...
 
void FqExp (FqElem *result, FqElem const *base, VeryLargeInt const *exp)
 Exponentiate an element of Fq by a large integer. More...
 
void FqCp (FqElem *result, FqElem const *in)
 Copy an element's value. More...
 
int FqIsZero (FqElem const *value)
 Test if an element is zero. More...
 
void FqInv (FqElem *result, FqElem const *in)
 Invert an element of Fq. More...
 
void FqNeg (FqElem *result, FqElem const *in)
 Negate an element of Fq. More...
 
void FqSquare (FqElem *result, FqElem const *in)
 Square an element of Fq. More...
 
void FqClear (FqElem *result)
 Clear an element's value. More...
 
void FqSet (FqElem *result, uint32_t in)
 Set an element's value. More...
 
int FqEq (FqElem const *left, FqElem const *right)
 Test if two elements in Fq are equal. More...
 
void FqCondSet (FqElem *result, FqElem const *true_val, FqElem const *false_val, int truth_val)
 Conditionally Set an element's value to one of two values. More...
 
int FqSqrt (FqElem *result, FqElem const *in)
 Compute the Square root of an element of Fq. More...
 
int FqRand (FqElem *result, BitSupplier rnd_func, void *rnd_param)
 Generate a random element of Fq. More...
 
void FqFromHash (FqElem *result, unsigned char const *hash, size_t len)
 Reinterpret a buffer as an element of Fq. More...
 
+

Detailed Description

+

Definition of Fq math.

+

Function Documentation

+ +

◆ FqAdd()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void FqAdd (FqElemresult,
FqElem const * left,
FqElem const * right 
)
+
+ +

Add two elements of Fq.

+
Parameters
+ + + + +
[out]resultof adding left and right.
[in]leftThe first operand to be added.
[in]rightThe second operand to be added.
+
+
+ +
+
+ +

◆ FqClear()

+ +
+
+ + + + + + + + +
void FqClear (FqElemresult)
+
+ +

Clear an element's value.

+
Parameters
+ + +
[out]resultelement to clear.
+
+
+ +
+
+ +

◆ FqCondSet()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void FqCondSet (FqElemresult,
FqElem const * true_val,
FqElem const * false_val,
int truth_val 
)
+
+ +

Conditionally Set an element's value to one of two values.

+
Parameters
+ + + + + +
[out]resulttarget.
[in]true_valvalue to set if condition is true.
[in]false_valvalue to set if condition is false.
[in]truth_valvalue of condition.
+
+
+ +
+
+ +

◆ FqCp()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void FqCp (FqElemresult,
FqElem const * in 
)
+
+ +

Copy an element's value.

+
Parameters
+ + + +
[out]resultcopy target.
[in]incopy source.
+
+
+ +
+
+ +

◆ FqEq()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int FqEq (FqElem const * left,
FqElem const * right 
)
+
+ +

Test if two elements in Fq are equal.

+
Parameters
+ + + +
[in]leftThe first operand to be tested.
[in]rightThe second operand to be tested.
+
+
+
Returns
A value different from zero (i.e., true) if indeed the values are equal. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ FqExp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void FqExp (FqElemresult,
FqElem const * base,
VeryLargeInt const * exp 
)
+
+ +

Exponentiate an element of Fq by a large integer.

+
Parameters
+ + + + +
[out]resulttarget.
[in]basethe base.
[in]expthe exponent.
+
+
+ +
+
+ +

◆ FqFromHash()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void FqFromHash (FqElemresult,
unsigned char const * hash,
size_t len 
)
+
+ +

Reinterpret a buffer as an element of Fq.

+
Parameters
+ + + + +
[out]resulttarget.
[in]hashbuffer to reinterpret.
[in]lenlength of hash in bytes.
+
+
+ +
+
+ +

◆ FqInField()

+ +
+
+ + + + + + + + +
int FqInField (FqElem const * in)
+
+ +

Test if an element is in Fq.

+
Parameters
+ + +
[in]inthe element to test.
+
+
+
Returns
A value different from zero (i.e., true) indeed the value is in the field. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ FqInv()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void FqInv (FqElemresult,
FqElem const * in 
)
+
+ +

Invert an element of Fq.

+
Parameters
+ + + +
[out]resultthe inverse of the element.
[in]inthe element to invert.
+
+
+ +
+
+ +

◆ FqIsZero()

+ +
+
+ + + + + + + + +
int FqIsZero (FqElem const * value)
+
+ +

Test if an element is zero.

+
Parameters
+ + +
[in]valuethe element to test.
+
+
+
Returns
A value different from zero (i.e., true) if indeed the value is zero. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ FqMul()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void FqMul (FqElemresult,
FqElem const * left,
FqElem const * right 
)
+
+ +

Multiply two elements of Fq.

+
Parameters
+ + + + +
[out]resultof multiplying left and right.
[in]leftThe first operand to be multiplied.
[in]rightThe second operand to be multiplied.
+
+
+ +
+
+ +

◆ FqNeg()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void FqNeg (FqElemresult,
FqElem const * in 
)
+
+ +

Negate an element of Fq.

+

This function was formerly called as FqConst.

+
Parameters
+ + + +
[out]resultthe negative of the element.
[in]inthe element to negate.
+
+
+ +
+
+ +

◆ FqRand()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int FqRand (FqElemresult,
BitSupplier rnd_func,
void * rnd_param 
)
+
+ +

Generate a random element of Fq.

+
Parameters
+ + + + +
[in]resultthe random value.
[in]rnd_funcRandom number generator.
[in]rnd_paramPass through context data for rnd_func.
+
+
+
Returns
A value different from zero (i.e., true) if on success. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ FqSet()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void FqSet (FqElemresult,
uint32_t in 
)
+
+ +

Set an element's value.

+
Parameters
+ + + +
[out]resulttarget.
[in]invalue to set.
+
+
+ +
+
+ +

◆ FqSqrt()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int FqSqrt (FqElemresult,
FqElem const * in 
)
+
+ +

Compute the Square root of an element of Fq.

+
Parameters
+ + + +
[out]resultthe square root of the element.
[in]inthe element to find the square root of.
+
+
+
Returns
A value different from zero (i.e., true) if the square root exists. Zero (i.e., false) otherwise.
+ +
+
+ +

◆ FqSquare()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void FqSquare (FqElemresult,
FqElem const * in 
)
+
+ +

Square an element of Fq.

+
Parameters
+ + + +
[out]resultthe square of the element.
[in]inthe element to square.
+
+
+ +
+
+ +

◆ FqSub()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void FqSub (FqElemresult,
FqElem const * left,
FqElem const * right 
)
+
+ +

Subtract two elements of Fq.

+
Parameters
+ + + + +
[out]resultof subtracting left from right.
[in]leftThe operand to be subtracted from.
[in]rightThe operand to subtract.
+
+
+ +
+
+
+
+ + + + + diff --git a/doc/html/functions.html b/doc/html/functions.html new file mode 100644 index 0000000000000000000000000000000000000000..23513c47648c8d55facd5c7d55b1a72ba11d23a6 --- /dev/null +++ b/doc/html/functions.html @@ -0,0 +1,97 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- a -

+
+
+ + + + + diff --git a/doc/html/functions_b.html b/doc/html/functions_b.html new file mode 100644 index 0000000000000000000000000000000000000000..13cf163b711dc0ad23e4aaae94acca688bdad088 --- /dev/null +++ b/doc/html/functions_b.html @@ -0,0 +1,102 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- b -

+
+
+ + + + + diff --git a/doc/html/functions_c.html b/doc/html/functions_c.html new file mode 100644 index 0000000000000000000000000000000000000000..144be22529198be4a8628c153369e888781a46d7 --- /dev/null +++ b/doc/html/functions_c.html @@ -0,0 +1,88 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- c -

+
+
+ + + + + diff --git a/doc/html/functions_d.html b/doc/html/functions_d.html new file mode 100644 index 0000000000000000000000000000000000000000..44be5a3b8b3ea8caaf976970f67d528c26e8642e --- /dev/null +++ b/doc/html/functions_d.html @@ -0,0 +1,98 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- d -

+
+
+ + + + + diff --git a/doc/html/functions_e.html b/doc/html/functions_e.html new file mode 100644 index 0000000000000000000000000000000000000000..933721f2f162d0cd86e7fe2225225ce5511670c1 --- /dev/null +++ b/doc/html/functions_e.html @@ -0,0 +1,105 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- e -

+
+
+ + + + + diff --git a/doc/html/functions_f.html b/doc/html/functions_f.html new file mode 100644 index 0000000000000000000000000000000000000000..81036696c84304b7cbfbcb5c7684cc9704a3dacb --- /dev/null +++ b/doc/html/functions_f.html @@ -0,0 +1,92 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- f -

+
+
+ + + + + diff --git a/doc/html/functions_g.html b/doc/html/functions_g.html new file mode 100644 index 0000000000000000000000000000000000000000..bae120b547e2fdee01ad428f28cf12a037b6437e --- /dev/null +++ b/doc/html/functions_g.html @@ -0,0 +1,112 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- g -

+
+
+ + + + + diff --git a/doc/html/functions_h.html b/doc/html/functions_h.html new file mode 100644 index 0000000000000000000000000000000000000000..8a7b8db9ac71991bd67451b6fb9ed6d2c421434b --- /dev/null +++ b/doc/html/functions_h.html @@ -0,0 +1,99 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- h -

+
+
+ + + + + diff --git a/doc/html/functions_k.html b/doc/html/functions_k.html new file mode 100644 index 0000000000000000000000000000000000000000..dbea068c5bf4fa77d71e02e9e748d7077d281250 --- /dev/null +++ b/doc/html/functions_k.html @@ -0,0 +1,92 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- k -

+
+
+ + + + + diff --git a/doc/html/functions_l.html b/doc/html/functions_l.html new file mode 100644 index 0000000000000000000000000000000000000000..1e582dd4393efa8319474363c5bd4334d449cbde --- /dev/null +++ b/doc/html/functions_l.html @@ -0,0 +1,82 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- l -

+
+
+ + + + + diff --git a/doc/html/functions_n.html b/doc/html/functions_n.html new file mode 100644 index 0000000000000000000000000000000000000000..fea3475e551e2deed9ad7ebfbed9b1538e4b01eb --- /dev/null +++ b/doc/html/functions_n.html @@ -0,0 +1,101 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- n -

+
+
+ + + + + diff --git a/doc/html/functions_o.html b/doc/html/functions_o.html new file mode 100644 index 0000000000000000000000000000000000000000..4dcb73d72e731f69547ffd90b7f8796ad6918dd4 --- /dev/null +++ b/doc/html/functions_o.html @@ -0,0 +1,81 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- o -

+
+
+ + + + + diff --git a/doc/html/functions_p.html b/doc/html/functions_p.html new file mode 100644 index 0000000000000000000000000000000000000000..2c2745c17070181e89ccc32117a7283f61f8c4b8 --- /dev/null +++ b/doc/html/functions_p.html @@ -0,0 +1,91 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- p -

+
+
+ + + + + diff --git a/doc/html/functions_q.html b/doc/html/functions_q.html new file mode 100644 index 0000000000000000000000000000000000000000..b27a0a6c895b6fc092f1df0a1ed47ce1423ca5b8 --- /dev/null +++ b/doc/html/functions_q.html @@ -0,0 +1,88 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- q -

+
+
+ + + + + diff --git a/doc/html/functions_r.html b/doc/html/functions_r.html new file mode 100644 index 0000000000000000000000000000000000000000..f5b3a46d5ee2c2ac6927494c264fc1881360929a --- /dev/null +++ b/doc/html/functions_r.html @@ -0,0 +1,91 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- r -

+
+
+ + + + + diff --git a/doc/html/functions_s.html b/doc/html/functions_s.html new file mode 100644 index 0000000000000000000000000000000000000000..25661a8d29a86bf622f6add4b424882c6062fd0a --- /dev/null +++ b/doc/html/functions_s.html @@ -0,0 +1,143 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- s -

+
+
+ + + + + diff --git a/doc/html/functions_t.html b/doc/html/functions_t.html new file mode 100644 index 0000000000000000000000000000000000000000..b4531270b9d6199e96ea50dce8d0cf4b37af552b --- /dev/null +++ b/doc/html/functions_t.html @@ -0,0 +1,97 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- t -

+
+
+ + + + + diff --git a/doc/html/functions_v.html b/doc/html/functions_v.html new file mode 100644 index 0000000000000000000000000000000000000000..ddbc0de58bac3cde9b53f148cff3176f9ea901c1 --- /dev/null +++ b/doc/html/functions_v.html @@ -0,0 +1,87 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- v -

+
+
+ + + + + diff --git a/doc/html/functions_vars.html b/doc/html/functions_vars.html new file mode 100644 index 0000000000000000000000000000000000000000..f11a0078758cc76d44ce9a56a2a4692e2ff69beb --- /dev/null +++ b/doc/html/functions_vars.html @@ -0,0 +1,97 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ + + + + + + diff --git a/doc/html/functions_vars_b.html b/doc/html/functions_vars_b.html new file mode 100644 index 0000000000000000000000000000000000000000..9cc4b47e1a6b4b61454629919842be94410259f2 --- /dev/null +++ b/doc/html/functions_vars_b.html @@ -0,0 +1,102 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- b -

+
+
+ + + + + diff --git a/doc/html/functions_vars_c.html b/doc/html/functions_vars_c.html new file mode 100644 index 0000000000000000000000000000000000000000..7ca597473f24a2d1ad53d39623242ae18c04b46c --- /dev/null +++ b/doc/html/functions_vars_c.html @@ -0,0 +1,88 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- c -

+
+
+ + + + + diff --git a/doc/html/functions_vars_d.html b/doc/html/functions_vars_d.html new file mode 100644 index 0000000000000000000000000000000000000000..6378e59acf6c486f406b4ec62ab456bbbcbaddcd --- /dev/null +++ b/doc/html/functions_vars_d.html @@ -0,0 +1,98 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- d -

+
+
+ + + + + diff --git a/doc/html/functions_vars_e.html b/doc/html/functions_vars_e.html new file mode 100644 index 0000000000000000000000000000000000000000..7f8237007c48b7060b7ca309a59cf50f444f2d80 --- /dev/null +++ b/doc/html/functions_vars_e.html @@ -0,0 +1,105 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- e -

+
+
+ + + + + diff --git a/doc/html/functions_vars_f.html b/doc/html/functions_vars_f.html new file mode 100644 index 0000000000000000000000000000000000000000..ad5bb4774c6a4d4e5168df923a97200113788696 --- /dev/null +++ b/doc/html/functions_vars_f.html @@ -0,0 +1,92 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- f -

+
+
+ + + + + diff --git a/doc/html/functions_vars_g.html b/doc/html/functions_vars_g.html new file mode 100644 index 0000000000000000000000000000000000000000..64b26fb7c4e38b339b7f9107082ec42d3c918ebd --- /dev/null +++ b/doc/html/functions_vars_g.html @@ -0,0 +1,112 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ + + + + + + diff --git a/doc/html/functions_vars_h.html b/doc/html/functions_vars_h.html new file mode 100644 index 0000000000000000000000000000000000000000..a6c145e005c81e17759482d63fd8285e4a387617 --- /dev/null +++ b/doc/html/functions_vars_h.html @@ -0,0 +1,99 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- h -

+
+
+ + + + + diff --git a/doc/html/functions_vars_k.html b/doc/html/functions_vars_k.html new file mode 100644 index 0000000000000000000000000000000000000000..8aac4651f78232ed344625830dd05fd55fc34bb4 --- /dev/null +++ b/doc/html/functions_vars_k.html @@ -0,0 +1,92 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- k -

+
+
+ + + + + diff --git a/doc/html/functions_vars_l.html b/doc/html/functions_vars_l.html new file mode 100644 index 0000000000000000000000000000000000000000..ff601cd0c19c52d907b58b8f4667c2ee119ab88c --- /dev/null +++ b/doc/html/functions_vars_l.html @@ -0,0 +1,82 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- l -

+
+
+ + + + + diff --git a/doc/html/functions_vars_n.html b/doc/html/functions_vars_n.html new file mode 100644 index 0000000000000000000000000000000000000000..c319c18ad89e8a4ae972416c26e49be2da058820 --- /dev/null +++ b/doc/html/functions_vars_n.html @@ -0,0 +1,101 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- n -

+
+
+ + + + + diff --git a/doc/html/functions_vars_o.html b/doc/html/functions_vars_o.html new file mode 100644 index 0000000000000000000000000000000000000000..bec8f89f1966961d74e81bdae19998127d202015 --- /dev/null +++ b/doc/html/functions_vars_o.html @@ -0,0 +1,81 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- o -

+
+
+ + + + + diff --git a/doc/html/functions_vars_p.html b/doc/html/functions_vars_p.html new file mode 100644 index 0000000000000000000000000000000000000000..a1bf71096cac6dc92f821bed3fc4df97afd26aa5 --- /dev/null +++ b/doc/html/functions_vars_p.html @@ -0,0 +1,91 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- p -

+
+
+ + + + + diff --git a/doc/html/functions_vars_q.html b/doc/html/functions_vars_q.html new file mode 100644 index 0000000000000000000000000000000000000000..c02c157945659bff61c1c90d3209b716be9595bb --- /dev/null +++ b/doc/html/functions_vars_q.html @@ -0,0 +1,88 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- q -

+
+
+ + + + + diff --git a/doc/html/functions_vars_r.html b/doc/html/functions_vars_r.html new file mode 100644 index 0000000000000000000000000000000000000000..a309350f2553cf1cf0e2ad2504367ac5530b9826 --- /dev/null +++ b/doc/html/functions_vars_r.html @@ -0,0 +1,91 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- r -

+
+
+ + + + + diff --git a/doc/html/functions_vars_s.html b/doc/html/functions_vars_s.html new file mode 100644 index 0000000000000000000000000000000000000000..af4c67fc8c369b617274c7ba680974f699ca7919 --- /dev/null +++ b/doc/html/functions_vars_s.html @@ -0,0 +1,143 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- s -

+
+
+ + + + + diff --git a/doc/html/functions_vars_t.html b/doc/html/functions_vars_t.html new file mode 100644 index 0000000000000000000000000000000000000000..2b5fb68739f75c254aeaf96de6f722646001ca66 --- /dev/null +++ b/doc/html/functions_vars_t.html @@ -0,0 +1,97 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- t -

+
+
+ + + + + diff --git a/doc/html/functions_vars_v.html b/doc/html/functions_vars_v.html new file mode 100644 index 0000000000000000000000000000000000000000..ee40f96b0fa3eb7e8b5b62a0755e1890f11ff5f7 --- /dev/null +++ b/doc/html/functions_vars_v.html @@ -0,0 +1,87 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- v -

+
+
+ + + + + diff --git a/doc/html/functions_vars_w.html b/doc/html/functions_vars_w.html new file mode 100644 index 0000000000000000000000000000000000000000..301cacf5daec318a09a7f801178e596c69fed893 --- /dev/null +++ b/doc/html/functions_vars_w.html @@ -0,0 +1,86 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- w -

+
+
+ + + + + diff --git a/doc/html/functions_vars_x.html b/doc/html/functions_vars_x.html new file mode 100644 index 0000000000000000000000000000000000000000..33911adcb5593a6ed7b45e9786d407a7338a3eac --- /dev/null +++ b/doc/html/functions_vars_x.html @@ -0,0 +1,106 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ + + + + + + diff --git a/doc/html/functions_vars_y.html b/doc/html/functions_vars_y.html new file mode 100644 index 0000000000000000000000000000000000000000..1483971d3fac87359b21bd497251d13b95e62609 --- /dev/null +++ b/doc/html/functions_vars_y.html @@ -0,0 +1,103 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- y -

+
+
+ + + + + diff --git a/doc/html/functions_vars_z.html b/doc/html/functions_vars_z.html new file mode 100644 index 0000000000000000000000000000000000000000..a8251f676a0d97425f51117b73ec2360bb7c4a69 --- /dev/null +++ b/doc/html/functions_vars_z.html @@ -0,0 +1,88 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields - Variables + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- z -

+
+
+ + + + + diff --git a/doc/html/functions_w.html b/doc/html/functions_w.html new file mode 100644 index 0000000000000000000000000000000000000000..d37c88ac69fd3bc59fc3e60ce6eec643bbcee2a7 --- /dev/null +++ b/doc/html/functions_w.html @@ -0,0 +1,86 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- w -

+
+
+ + + + + diff --git a/doc/html/functions_x.html b/doc/html/functions_x.html new file mode 100644 index 0000000000000000000000000000000000000000..7a2a1b9a601ab0d2e363e53888fe0d2417c024d7 --- /dev/null +++ b/doc/html/functions_x.html @@ -0,0 +1,106 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- x -

+
+
+ + + + + diff --git a/doc/html/functions_y.html b/doc/html/functions_y.html new file mode 100644 index 0000000000000000000000000000000000000000..f2f7b332be474a5e8f37e1ae0407ce59f6e53312 --- /dev/null +++ b/doc/html/functions_y.html @@ -0,0 +1,103 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- y -

+
+
+ + + + + diff --git a/doc/html/functions_z.html b/doc/html/functions_z.html new file mode 100644 index 0000000000000000000000000000000000000000..61774210759cdd971fe5468add2b2df990232f45 --- /dev/null +++ b/doc/html/functions_z.html @@ -0,0 +1,88 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Data Fields + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- z -

+
+
+ + + + + diff --git a/doc/html/getrandom_8c.html b/doc/html/getrandom_8c.html new file mode 100644 index 0000000000000000000000000000000000000000..2a0a3f39bfd74627f4809d715ab8cd49c3b0c6d6 --- /dev/null +++ b/doc/html/getrandom_8c.html @@ -0,0 +1,100 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tpm2/ibm_tss/getrandom.c File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
getrandom.c File Reference
+
+
+ +

TPM2_GetRandom command implementation. +More...

+
#include <limits.h>
+#include "epid/common/src/memory.h"
+#include "epid/member/tpm2/getrandom.h"
+#include "epid/member/tpm2/ibm_tss/printtss.h"
+#include "epid/member/tpm2/ibm_tss/state.h"
+#include "tss2/TPM_Types.h"
+#include "tss2/tss.h"
+
+ + + + +

+Functions

EpidStatus Tpm2GetRandom (Tpm2Ctx *ctx, int const num_bits, void *random_data)
 Get random data. More...
 
+

Detailed Description

+

TPM2_GetRandom command implementation.

+
+
+ + + + + diff --git a/doc/html/getrandom_8h.html b/doc/html/getrandom_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..bf8753754e0b3443745ddb55864a7c8e78ad8efb --- /dev/null +++ b/doc/html/getrandom_8h.html @@ -0,0 +1,94 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tpm2/getrandom.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
getrandom.h File Reference
+
+
+ +

SDK TPM API. +More...

+ + + + + +

+Functions

EpidStatus Tpm2GetRandom (Tpm2Ctx *ctx, int const num_bits, void *random_data)
 Get random data. More...
 
+

Detailed Description

+

SDK TPM API.

+
+
+ + + + + diff --git a/doc/html/globals.html b/doc/html/globals.html new file mode 100644 index 0000000000000000000000000000000000000000..be2b6d64527b667b0399a1615a48fcd14d3f515d --- /dev/null +++ b/doc/html/globals.html @@ -0,0 +1,81 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- _ -

+
+
+ + + + + diff --git a/doc/html/globals_b.html b/doc/html/globals_b.html new file mode 100644 index 0000000000000000000000000000000000000000..2ef3fbf15cbf44b26d965200aa2ff1ba2b62532d --- /dev/null +++ b/doc/html/globals_b.html @@ -0,0 +1,128 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- b -

+
+
+ + + + + diff --git a/doc/html/globals_c.html b/doc/html/globals_c.html new file mode 100644 index 0000000000000000000000000000000000000000..8f626355f449d7382317a23fdd218f750a400925 --- /dev/null +++ b/doc/html/globals_c.html @@ -0,0 +1,81 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- c -

+
+
+ + + + + diff --git a/doc/html/globals_d.html b/doc/html/globals_d.html new file mode 100644 index 0000000000000000000000000000000000000000..0f994c864c24f0b811307964e0604463eb773397 --- /dev/null +++ b/doc/html/globals_d.html @@ -0,0 +1,99 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- d -

+
+
+ + + + + diff --git a/doc/html/globals_defs.html b/doc/html/globals_defs.html new file mode 100644 index 0000000000000000000000000000000000000000..55a6baa61213a339afc1290e22e0d95127206a8f --- /dev/null +++ b/doc/html/globals_defs.html @@ -0,0 +1,144 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
+ + + + + diff --git a/doc/html/globals_e.html b/doc/html/globals_e.html new file mode 100644 index 0000000000000000000000000000000000000000..a2338892a6f972fd3d5d8323ff31e42b95f22f37 --- /dev/null +++ b/doc/html/globals_e.html @@ -0,0 +1,448 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- e -

+
+
+ + + + + diff --git a/doc/html/globals_enum.html b/doc/html/globals_enum.html new file mode 100644 index 0000000000000000000000000000000000000000..953df2f77a421ea481b0c72a396071755abc9c41 --- /dev/null +++ b/doc/html/globals_enum.html @@ -0,0 +1,91 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
+ + + + + diff --git a/doc/html/globals_eval.html b/doc/html/globals_eval.html new file mode 100644 index 0000000000000000000000000000000000000000..be562cb3249c6a6459ca0ef17242eff87b1880ba --- /dev/null +++ b/doc/html/globals_eval.html @@ -0,0 +1,210 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- k -

+
+
+ + + + + diff --git a/doc/html/globals_f.html b/doc/html/globals_f.html new file mode 100644 index 0000000000000000000000000000000000000000..cbfa61ccc84587ad565d2196250cd85e4a83bd05 --- /dev/null +++ b/doc/html/globals_f.html @@ -0,0 +1,375 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- f -

+
+
+ + + + + diff --git a/doc/html/globals_func.html b/doc/html/globals_func.html new file mode 100644 index 0000000000000000000000000000000000000000..4167909f8e0d5c33f84dd74d27ddfd9939b4d318 --- /dev/null +++ b/doc/html/globals_func.html @@ -0,0 +1,102 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- b -

+
+
+ + + + + diff --git a/doc/html/globals_func_d.html b/doc/html/globals_func_d.html new file mode 100644 index 0000000000000000000000000000000000000000..d26b905f8ccc3b032291256555b13b2f612dd339 --- /dev/null +++ b/doc/html/globals_func_d.html @@ -0,0 +1,99 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- d -

+
+
+ + + + + diff --git a/doc/html/globals_func_e.html b/doc/html/globals_func_e.html new file mode 100644 index 0000000000000000000000000000000000000000..3e023534218a0a4e971d360a3d998b08b000da35 --- /dev/null +++ b/doc/html/globals_func_e.html @@ -0,0 +1,418 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- e -

+
+
+ + + + + diff --git a/doc/html/globals_func_f.html b/doc/html/globals_func_f.html new file mode 100644 index 0000000000000000000000000000000000000000..1448d267242e27256d514ef5ed48f070622e3e94 --- /dev/null +++ b/doc/html/globals_func_f.html @@ -0,0 +1,366 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- f -

+
+
+ + + + + diff --git a/doc/html/globals_func_i.html b/doc/html/globals_func_i.html new file mode 100644 index 0000000000000000000000000000000000000000..7ce49c2423d56bdfb0b6c00a1d915085b370d517 --- /dev/null +++ b/doc/html/globals_func_i.html @@ -0,0 +1,81 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- i -

+
+
+ + + + + diff --git a/doc/html/globals_func_m.html b/doc/html/globals_func_m.html new file mode 100644 index 0000000000000000000000000000000000000000..79bbb517e14877b66decd0118bae2d2d29ba51d6 --- /dev/null +++ b/doc/html/globals_func_m.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- m -

+
+
+ + + + + diff --git a/doc/html/globals_func_n.html b/doc/html/globals_func_n.html new file mode 100644 index 0000000000000000000000000000000000000000..5177de1b1e04f0102200d5c2b14d402b008f9367 --- /dev/null +++ b/doc/html/globals_func_n.html @@ -0,0 +1,105 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- n -

+
+
+ + + + + diff --git a/doc/html/globals_func_p.html b/doc/html/globals_func_p.html new file mode 100644 index 0000000000000000000000000000000000000000..7e272e9601b308c262908d5f94685ec3e7513196 --- /dev/null +++ b/doc/html/globals_func_p.html @@ -0,0 +1,127 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- p -

+
+
+ + + + + diff --git a/doc/html/globals_func_r.html b/doc/html/globals_func_r.html new file mode 100644 index 0000000000000000000000000000000000000000..06be06c05493821c88ba10f84ac8a5b45997e1c1 --- /dev/null +++ b/doc/html/globals_func_r.html @@ -0,0 +1,95 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- r -

+
+
+ + + + + diff --git a/doc/html/globals_func_s.html b/doc/html/globals_func_s.html new file mode 100644 index 0000000000000000000000000000000000000000..51e0831acd248c99424710e46ac4c36ada151f3c --- /dev/null +++ b/doc/html/globals_func_s.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- s -

    +
  • Sha256MessageDigest() +: hash.h +
  • +
  • SwapNativeAndPortableLayout() +: serialize.h +
  • +
+
+
+ + + + + diff --git a/doc/html/globals_func_t.html b/doc/html/globals_func_t.html new file mode 100644 index 0000000000000000000000000000000000000000..0d73af64023804ce499ce342cfffb394a3e109fc --- /dev/null +++ b/doc/html/globals_func_t.html @@ -0,0 +1,171 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- t -

+
+
+ + + + + diff --git a/doc/html/globals_func_u.html b/doc/html/globals_func_u.html new file mode 100644 index 0000000000000000000000000000000000000000..4104806a8777a9182b760523a636fabd282c7859 --- /dev/null +++ b/doc/html/globals_func_u.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- u -

+
+
+ + + + + diff --git a/doc/html/globals_func_v.html b/doc/html/globals_func_v.html new file mode 100644 index 0000000000000000000000000000000000000000..0b13794d711f17b96600a1c995606a11a8309835 --- /dev/null +++ b/doc/html/globals_func_v.html @@ -0,0 +1,138 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- v -

+
+
+ + + + + diff --git a/doc/html/globals_func_w.html b/doc/html/globals_func_w.html new file mode 100644 index 0000000000000000000000000000000000000000..f3d166ccd5bbddcc1bf4071945c8bd8b4935ad84 --- /dev/null +++ b/doc/html/globals_func_w.html @@ -0,0 +1,95 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+  + +

- w -

+
+
+ + + + + diff --git a/doc/html/globals_g.html b/doc/html/globals_g.html new file mode 100644 index 0000000000000000000000000000000000000000..4d4edff2ccc878a5b7bc6e2d1ba4b21261defec1 --- /dev/null +++ b/doc/html/globals_g.html @@ -0,0 +1,81 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- g -

+
+
+ + + + + diff --git a/doc/html/globals_h.html b/doc/html/globals_h.html new file mode 100644 index 0000000000000000000000000000000000000000..1c1f0a69233f813613f3c84b6f37b508d9d48d6d --- /dev/null +++ b/doc/html/globals_h.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- h -

+
+
+ + + + + diff --git a/doc/html/globals_i.html b/doc/html/globals_i.html new file mode 100644 index 0000000000000000000000000000000000000000..e5301755b31da9d7bf2cd6080f4368ddcca92fd6 --- /dev/null +++ b/doc/html/globals_i.html @@ -0,0 +1,87 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- i -

+
+
+ + + + + diff --git a/doc/html/globals_k.html b/doc/html/globals_k.html new file mode 100644 index 0000000000000000000000000000000000000000..54d64bb7f4b43a6060784146734fef3671f5b935 --- /dev/null +++ b/doc/html/globals_k.html @@ -0,0 +1,216 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- k -

+
+
+ + + + + diff --git a/doc/html/globals_m.html b/doc/html/globals_m.html new file mode 100644 index 0000000000000000000000000000000000000000..52e18f857a97c6660cd6ab7eaca92095cc1af795 --- /dev/null +++ b/doc/html/globals_m.html @@ -0,0 +1,93 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- m -

+
+
+ + + + + diff --git a/doc/html/globals_n.html b/doc/html/globals_n.html new file mode 100644 index 0000000000000000000000000000000000000000..1ca020cda09d4629a4f59b54627f220f18dc32c4 --- /dev/null +++ b/doc/html/globals_n.html @@ -0,0 +1,108 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- n -

+
+
+ + + + + diff --git a/doc/html/globals_o.html b/doc/html/globals_o.html new file mode 100644 index 0000000000000000000000000000000000000000..3f55aa7a936d107bf1fbe791f4128c3bdb6c5a84 --- /dev/null +++ b/doc/html/globals_o.html @@ -0,0 +1,81 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- o -

+
+
+ + + + + diff --git a/doc/html/globals_p.html b/doc/html/globals_p.html new file mode 100644 index 0000000000000000000000000000000000000000..1a5c623ddcd028d7879173509ab4a60bcde69b75 --- /dev/null +++ b/doc/html/globals_p.html @@ -0,0 +1,130 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- p -

+
+
+ + + + + diff --git a/doc/html/globals_r.html b/doc/html/globals_r.html new file mode 100644 index 0000000000000000000000000000000000000000..af21993c2092eb7c167c88658bca222b75889fa3 --- /dev/null +++ b/doc/html/globals_r.html @@ -0,0 +1,98 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- r -

+
+
+ + + + + diff --git a/doc/html/globals_s.html b/doc/html/globals_s.html new file mode 100644 index 0000000000000000000000000000000000000000..830344b88170d066ad5ef98f30838f687aa16ec4 --- /dev/null +++ b/doc/html/globals_s.html @@ -0,0 +1,105 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- s -

+
+
+ + + + + diff --git a/doc/html/globals_t.html b/doc/html/globals_t.html new file mode 100644 index 0000000000000000000000000000000000000000..a7c95f71c824ab7e9df687a2dba19546e0102aad --- /dev/null +++ b/doc/html/globals_t.html @@ -0,0 +1,186 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- t -

+
+
+ + + + + diff --git a/doc/html/globals_type.html b/doc/html/globals_type.html new file mode 100644 index 0000000000000000000000000000000000000000..34339f05921a9b7a76f07808a901440010abd31c --- /dev/null +++ b/doc/html/globals_type.html @@ -0,0 +1,136 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
+ + + + + diff --git a/doc/html/globals_u.html b/doc/html/globals_u.html new file mode 100644 index 0000000000000000000000000000000000000000..ce5a775b2a5d66341c2989dacd15b7c07666dd49 --- /dev/null +++ b/doc/html/globals_u.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- u -

+
+
+ + + + + diff --git a/doc/html/globals_v.html b/doc/html/globals_v.html new file mode 100644 index 0000000000000000000000000000000000000000..281fb427a5ca3b0b488ccadce5225d4a9f0f95c9 --- /dev/null +++ b/doc/html/globals_v.html @@ -0,0 +1,141 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- v -

+
+
+ + + + + diff --git a/doc/html/globals_vars.html b/doc/html/globals_vars.html new file mode 100644 index 0000000000000000000000000000000000000000..17979b6ab79d722439a54027bd3c1ea4a3e494fd --- /dev/null +++ b/doc/html/globals_vars.html @@ -0,0 +1,85 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
+ + + + + diff --git a/doc/html/globals_w.html b/doc/html/globals_w.html new file mode 100644 index 0000000000000000000000000000000000000000..0dcf919ad04d29dec2ee426762b4766638f0de51 --- /dev/null +++ b/doc/html/globals_w.html @@ -0,0 +1,95 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Globals + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- w -

+
+
+ + + + + diff --git a/doc/html/glossary_8dox.html b/doc/html/glossary_8dox.html new file mode 100644 index 0000000000000000000000000000000000000000..47ae8d5cc48aad2e6dbdf010ef0b0a6840fc6e29 --- /dev/null +++ b/doc/html/glossary_8dox.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: doc/docsrc/glossary.dox File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
doc/docsrc/glossary.dox File Reference
+
+
+ +

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

+

Detailed Description

+

This file is used by Doxygen to generate documentation.

+
+
+ + + + + diff --git a/doc/html/group___big_num_primitives.html b/doc/html/group___big_num_primitives.html new file mode 100644 index 0000000000000000000000000000000000000000..75217e5adc6a743b174a8b7f3e921e1ba778d0e3 --- /dev/null +++ b/doc/html/group___big_num_primitives.html @@ -0,0 +1,642 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: bignum + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
bignum
+
+
+ +

Big number operations. +More...

+ + + + + +

+Typedefs

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

+Functions

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

Detailed Description

+

Big number operations.

+

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

+

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

+

Function Documentation

+ +

◆ BigNumAdd()

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

Adds two BigNum values.

+
Parameters
+ + + + +
[in]aThe first operand to be added.
[in]bThe second operand to be added.
[out]rThe result of adding a and b.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ BigNumDiv()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus BigNumDiv (BigNum const * a,
BigNum const * b,
BigNumq,
BigNumr 
)
+
+ +

Divides two BigNum values.

+
Note
Only needed for Intel(R) EPID 1.1 verification.
+
Parameters
+ + + + + +
[in]aDividend parameter.
[in]bDivisor parameter.
[out]qQuotient of result.
[out]rRemainder of result.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ BigNumIsEven()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus BigNumIsEven (BigNum const * a,
boolis_even 
)
+
+ +

Checks if a BigNum is even.

+
Parameters
+ + + +
[in]aThe BigNum to check.
[out]is_evenThe result of the check.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ BigNumIsZero()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus BigNumIsZero (BigNum const * a,
boolis_zero 
)
+
+ +

Checks if a BigNum is zero.

+
Parameters
+ + + +
[in]aThe BigNum to check.
[out]is_zeroThe result of the check.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ BigNumMod()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus BigNumMod (BigNum const * a,
BigNum const * b,
BigNumr 
)
+
+ +

Computes modular reduction for BigNum value by specified modulus.

+
Parameters
+ + + + +
[in]aThe BigNum value.
[in]bThe modulus.
[out]rModular reduction result.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ BigNumMul()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus BigNumMul (BigNum const * a,
BigNum const * b,
BigNumr 
)
+
+ +

Multiplies two BigNum values.

+
Parameters
+ + + + +
[in]aThe first operand to be multiplied.
[in]bThe second operand to be multiplied.
[out]rThe result of multiplying a and b.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ BigNumPow2N()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus BigNumPow2N (unsigned int n,
BigNumr 
)
+
+ +

Raises 2 to the given power.

+
Parameters
+ + + +
[in]nThe power.
[out]rThe result of 2^n.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ BigNumSub()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus BigNumSub (BigNum const * a,
BigNum const * b,
BigNumr 
)
+
+ +

Subtracts two BigNum values.

+
Parameters
+ + + + +
[in]aThe first operand to use in subtraction.
[in]bThe second operand to use in subtraction.
[out]rThe result of subtracting a and b.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ DeleteBigNum()

+ +
+
+ + + + + + + + +
void DeleteBigNum (BigNum ** bignum)
+
+ +

Deletes a previously allocated BigNum.

+

Frees memory pointed to by bignum. Nulls the pointer.

+
Parameters
+ + +
[in]bignumThe BigNum. Can be NULL.
+
+
+
See also
NewBigNum
+ +
+
+ +

◆ NewBigNum()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus NewBigNum (size_t data_size_bytes,
BigNum ** bignum 
)
+
+ +

Constructs a new BigNum.

+

Allocates memory and creates a new BigNum.

+

Use DeleteBigNum() to free memory.

+
Parameters
+ + + +
[in]data_size_bytesThe size in bytes of the new number.
[out]bignumThe BigNum.
+
+
+
Returns
EpidStatus
+
See also
DeleteBigNum
+ +
+
+ +

◆ ReadBigNum()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus ReadBigNum (ConstOctStr bn_str,
size_t strlen,
BigNumbn 
)
+
+ +

Deserializes a BigNum from a string.

+
Parameters
+ + + + +
[in]bn_strThe serialized value.
[in]strlenThe size of bn_str in bytes.
[out]bnThe target BigNum.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ WriteBigNum()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus WriteBigNum (BigNum const * bn,
size_t strlen,
OctStr bn_str 
)
+
+ +

Serializes a BigNum to a string.

+
Parameters
+ + + + +
[in]bnThe BigNum to be serialized.
[in]strlenThe size of bn_str in bytes.
[out]bn_strThe target string.
+
+
+
Returns
EpidStatus
+ +
+
+
+
+ + + + + diff --git a/doc/html/group___big_num_primitives.js b/doc/html/group___big_num_primitives.js new file mode 100644 index 0000000000000000000000000000000000000000..63bda6f0d7a4807ebdb084a97e3343fdf737835c --- /dev/null +++ b/doc/html/group___big_num_primitives.js @@ -0,0 +1,16 @@ +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#gabe8e39d5788423f41770a71a4c911fbe", null ], + [ "WriteBigNum", "group___big_num_primitives.html#ga904c16cc020e7196f22ac9abdc31b41f", 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 new file mode 100644 index 0000000000000000000000000000000000000000..429a76302cc5ec59c5e996944670897be6fb2dd4 --- /dev/null +++ b/doc/html/group___ec_group_primitives.html @@ -0,0 +1,1249 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: ecgroup + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
ecgroup
+
+
+ +

Elliptic curve group operations. +More...

+ + + + + + + + +

+Typedefs

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

+Functions

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

Detailed Description

+

Elliptic curve group operations.

+

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

+

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

+

Function Documentation

+ +

◆ DeleteEcGroup()

+ +
+
+ + + + + + + + +
void DeleteEcGroup (EcGroup ** g)
+
+ +

Deletes a previously allocated EcGroup.

+

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

+
Parameters
+ + +
[in]gThe elliptic curve group. Can be NULL.
+
+
+
See also
NewEcGroup
+ +
+
+ +

◆ DeleteEcPoint()

+ +
+
+ + + + + + + + +
void DeleteEcPoint (EcPoint ** p)
+
+ +

Deletes a previously allocated EcPoint.

+

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

+
Parameters
+ + +
[in]pThe EcPoint. Can be NULL.
+
+
+
See also
NewEcPoint
+ +
+
+ +

◆ EcExp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EcExp (EcGroupg,
EcPoint const * a,
BigNumStr const * b,
EcPointr 
)
+
+ +

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

+

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

Parameters
+ + + + + +
[in]gThe elliptic curve group.
[in]aThe base.
[in]bThe power. Power must be less than the order of the elliptic curve group.
[out]rThe result of raising a to the power b.
+
+
+
Returns
EpidStatus
+
See also
NewEcGroup
+
+NewEcPoint
+ +
+
+ +

◆ EcGetRandom()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EcGetRandom (EcGroupg,
BitSupplier rnd_func,
void * rnd_func_param,
EcPointr 
)
+
+ +

Generates a random element from an elliptic curve group.

+

This function is only available for G1 and GT.

+
Parameters
+ + + + + +
[in]gThe elliptic curve group.
[in]rnd_funcRandom number generator.
[in]rnd_func_paramPass through context data for rnd_func.
[in,out]rOutput random elliptic curve element.
+
+
+
Returns
EpidStatus
+
See also
NewEcPoint
+
+BitSupplier
+ +
+
+ +

◆ EcHash()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EcHash (EcGroupg,
ConstOctStr msg,
size_t msg_len,
HashAlg hash_alg,
EcPointr,
uint32_t * iterations 
)
+
+ +

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

+
Parameters
+ + + + + + + +
[in]gThe elliptic curve group.
[in]msgThe message.
[in]msg_lenThe size of msg in bytes.
[in]hash_algThe hash algorithm.
[out]rThe hashed value.
[out]iterationsThe number of hash iterations needed to find a valid hash. Can be NULL.
+
+
+
Returns
EpidStatus
+
See also
NewEcGroup
+
+NewEcPoint
+ +
+
+ +

◆ EcInGroup()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EcInGroup (EcGroupg,
ConstOctStr p_str,
size_t strlen,
boolin_group 
)
+
+ +

Checks if a point is in an elliptic curve group.

+
Parameters
+ + + + + +
[in]gThe elliptic curve group.
[in]p_strA serialized point. Must be a G1ElemStr or G2ElemStr.
[in]strlenThe size of p_str in bytes.
[out]in_groupThe result of the check.
+
+
+
Returns
EpidStatus
+
See also
NewEcPoint
+ +
+
+ +

◆ EcInverse()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EcInverse (EcGroupg,
EcPoint const * p,
EcPointr 
)
+
+ +

Computes the additive inverse of an EcPoint.

+

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

+
Parameters
+ + + + +
[in]gThe elliptic curve group.
[in]pThe point.
[out]rThe inverted point.
+
+
+
Returns
EpidStatus
+
See also
NewEcGroup
+
+NewEcPoint
+ +
+
+ +

◆ EcIsEqual()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EcIsEqual (EcGroupg,
EcPoint const * a,
EcPoint const * b,
boolis_equal 
)
+
+ +

Checks if two EcPoints are equal.

+
Parameters
+ + + + + +
[in]gThe elliptic curve group.
[in]aA point to check.
[in]bAnother point to check.
[out]is_equalThe result of the check.
+
+
+
Returns
EpidStatus
+
See also
NewEcGroup
+
+NewEcPoint
+ +
+
+ +

◆ EcIsIdentity()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EcIsIdentity (EcGroupg,
EcPoint const * p,
boolis_identity 
)
+
+ +

Checks if an EcPoint is the identity element.

+

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

+
Parameters
+ + + + +
[in]gThe elliptic curve group.
[in]pThe point to check.
[out]is_identityThe result of the check.
+
+
+
Returns
EpidStatus
+
See also
NewEcGroup
+
+NewEcPoint
+ +
+
+ +

◆ EcMakePoint()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EcMakePoint (EcGroupg,
FfElement const * x,
EcPointr 
)
+
+ +

Sets an EcPoint variable to a point on a curve.

+

This function is only available for G1.

+
Parameters
+ + + + +
[in]gThe elliptic curve group.
[in]xThe x coordinate.
[out]rThe point.
+
+
+
Returns
EpidStatus
+
See also
NewEcGroup
+
+NewEcPoint
+
+NewFfElement
+ +
+
+ +

◆ EcMul()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EcMul (EcGroupg,
EcPoint const * a,
EcPoint const * b,
EcPointr 
)
+
+ +

Multiplies two elements in an elliptic curve group.

+

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

+
Parameters
+ + + + + +
[in]gThe elliptic curve group.
[in]aThe first operand to be multiplied.
[in]bThe second operand to be multiplied.
[out]rThe result of multiplying a and b.
+
+
+
Returns
EpidStatus
+
See also
NewEcGroup
+
+NewEcPoint
+ +
+
+ +

◆ EcMultiExp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EcMultiExp (EcGroupg,
EcPoint const ** a,
BigNumStr const ** b,
size_t m,
EcPointr 
)
+
+ +

Multi-exponentiates elements in elliptic curve group.

+

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

+
Parameters
+ + + + + + +
[in]gThe elliptic curve group.
[in]aThe bases.
[in]bThe powers. Power must be less than the order of the elliptic curve group.
[in]mNumber of entries in a and b.
[out]rThe result of raising each a to the corresponding power b and multiplying the results.
+
+
+
Returns
EpidStatus
+
See also
NewEcGroup
+
+NewEcPoint
+ +
+
+ +

◆ EcMultiExpBn()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EcMultiExpBn (EcGroupg,
EcPoint const ** a,
BigNum const ** b,
size_t m,
EcPointr 
)
+
+ +

Multi-exponentiates elements in elliptic curve group.

+

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

+
Parameters
+ + + + + + +
[in]gThe elliptic curve group.
[in]aThe bases.
[in]bThe powers. Power must be less than the order of the elliptic curve group.
[in]mNumber of entries in a and b.
[out]rThe result of raising each a to the corresponding power b and multiplying the results.
+
+
+
Returns
EpidStatus
+
See also
NewEcGroup
+
+NewEcPoint
+ +
+
+ +

◆ EcSscmExp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EcSscmExp (EcGroupg,
EcPoint const * a,
BigNumStr const * b,
EcPointr 
)
+
+ +

Software side-channel mitigated implementation of EcExp.

+

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

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

◆ EcSscmMultiExp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EcSscmMultiExp (EcGroupg,
EcPoint const ** a,
BigNumStr const ** b,
size_t m,
EcPointr 
)
+
+ +

Software side-channel mitigated implementation of EcMultiExp.

+

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

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

◆ Epid11EcHash()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Epid11EcHash (EcGroupg,
ConstOctStr msg,
size_t msg_len,
EcPointr 
)
+
+ +

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

+
Parameters
+ + + + + +
[in]gThe elliptic curve group.
[in]msgThe message.
[in]msg_lenThe size of msg in bytes.
[out]rThe hashed value.
+
+
+
Returns
EpidStatus
+
See also
NewEcGroup
+
+NewEcPoint
+ +
+
+ +

◆ NewEcGroup()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus NewEcGroup (FiniteField const * ff,
FfElement const * a,
FfElement const * b,
FfElement const * x,
FfElement const * y,
BigNum const * order,
BigNum const * cofactor,
EcGroup ** g 
)
+
+ +

Constructs a new EcGroup.

+

Allocates memory and creates a new elliptic curve group.

+

Use DeleteFiniteField() to free memory.

+
Parameters
+ + + + + + + + + +
[in]ffThe finite field on which the curve is based.
[in]aThe A value of the elliptic curve.
[in]bThe B value of the elliptic curve.
[in]xThe X-coordinate of the base point of the elliptic curve.
[in]yThe Y-coordinate of the base point of the elliptic curve.
[in]orderThe order of the elliptic curve group.
[in]cofactorThe co-factor of the elliptic curve.
[out]gThe newly constructed elliptic curve group.
+
+
+
Returns
EpidStatus
+
Attention
It is the responsibility of the caller to ensure that ff exists for the entire lifetime of the new EcGroup.
+
See also
DeleteEcGroup
+ +
+
+ +

◆ NewEcPoint()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus NewEcPoint (EcGroup const * g,
EcPoint ** p 
)
+
+ +

Creates a new EcPoint.

+

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

+

Use DeleteEcPoint() to free memory.

+
Parameters
+ + + +
[in]gElliptic curve group.
[out]pNewly constructed point on the elliptic curve group g.
+
+
+
Returns
EpidStatus
+
Attention
It is the responsibility of the caller to ensure that g exists for the entire lifetime of the new EcPoint.
+
See also
NewEcGroup
+
+DeleteEcPoint
+ +
+
+ +

◆ ReadEcPoint()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus ReadEcPoint (EcGroupg,
ConstOctStr p_str,
size_t strlen,
EcPointp 
)
+
+ +

Deserializes an EcPoint from a string.

+
Parameters
+ + + + + +
[in]gThe elliptic curve group.
[in]p_strThe serialized value.
[in]strlenThe size of p_str in bytes.
[out]pThe target EcPoint.
+
+
+
Returns
EpidStatus
+
See also
NewEcPoint
+ +
+
+ +

◆ WriteEcPoint()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus WriteEcPoint (EcGroupg,
EcPoint const * p,
OctStr p_str,
size_t strlen 
)
+
+ +

Serializes an EcPoint to a string.

+
Parameters
+ + + + + +
[in]gThe elliptic curve group.
[in]pThe EcPoint to be serialized.
[out]p_strThe target string.
[in]strlenthe size of p_str in bytes.
+
+
+
Returns
EpidStatus
+
See also
NewEcPoint
+ +
+
+
+
+ + + + + diff --git a/doc/html/group___ec_group_primitives.js b/doc/html/group___ec_group_primitives.js new file mode 100644 index 0000000000000000000000000000000000000000..48bf3ade50e7b6e1e17cf222a8108cf5e671ca88 --- /dev/null +++ b/doc/html/group___ec_group_primitives.js @@ -0,0 +1,25 @@ +var group___ec_group_primitives = +[ + [ "EcGroup", "group___ec_group_primitives.html#gac91c5a7623c17a868dd15b2e9aaf7159", null ], + [ "EcPoint", "group___ec_group_primitives.html#ga85c1d5e106031b385a6e23e598ac98fa", null ], + [ "DeleteEcGroup", "group___ec_group_primitives.html#gab7af276256c27610eda85ff432b846ea", null ], + [ "DeleteEcPoint", "group___ec_group_primitives.html#ga8cb086d792bffb79b3ca07e6ca4ce0e7", null ], + [ "EcExp", "group___ec_group_primitives.html#ga01bf8d6fa60a2e445490966b3a06c270", null ], + [ "EcGetRandom", "group___ec_group_primitives.html#ga3f96c43d14d24de0f7a5e214aef64196", null ], + [ "EcHash", "group___ec_group_primitives.html#gac3067cc899e65e647390bb3bd1cabe4c", null ], + [ "EcInGroup", "group___ec_group_primitives.html#ga48ec5ae951c9f49d8d7d983234eea921", null ], + [ "EcInverse", "group___ec_group_primitives.html#ga0b6d7a3398251e9352fb29ef4abef466", null ], + [ "EcIsEqual", "group___ec_group_primitives.html#gad3b3c63c48fa24e8dea07837b05bc061", null ], + [ "EcIsIdentity", "group___ec_group_primitives.html#ga9cf15b34bc4ff12e58b169dd989d8210", null ], + [ "EcMakePoint", "group___ec_group_primitives.html#ga8a6114a48214a327d4ec04fd25e5940e", null ], + [ "EcMul", "group___ec_group_primitives.html#ga25c9013cc76907d73765eb7a96aa8c96", null ], + [ "EcMultiExp", "group___ec_group_primitives.html#gae96c38e004ccd2211290ad6e66415ec4", null ], + [ "EcMultiExpBn", "group___ec_group_primitives.html#ga76d24378455eb96a3257fe8045c0993a", null ], + [ "EcSscmExp", "group___ec_group_primitives.html#gaf3b6a548aa6f0d4f028a14feca251f57", null ], + [ "EcSscmMultiExp", "group___ec_group_primitives.html#ga40e3431d3dbe8cf7a65ada7b7811cba4", null ], + [ "Epid11EcHash", "group___ec_group_primitives.html#gaad96a1498b85d28f71514b8f7b154d82", null ], + [ "NewEcGroup", "group___ec_group_primitives.html#gaf4e23677dd378ef2e0cf55df79cbdb62", null ], + [ "NewEcPoint", "group___ec_group_primitives.html#ga6417b0ce72ba96de00c329e322fec7fb", null ], + [ "ReadEcPoint", "group___ec_group_primitives.html#gad495a9f91b79984f7533c8ea4f92b3cb", null ], + [ "WriteEcPoint", "group___ec_group_primitives.html#ga7a8bdb9782d065bc32fd102e0ae73ccb", null ] +]; \ No newline at end of file diff --git a/doc/html/group___ecdsa_primitives.html b/doc/html/group___ecdsa_primitives.html new file mode 100644 index 0000000000000000000000000000000000000000..61c9e0779413a1b7795e090f5eef0c17f99d2c99 --- /dev/null +++ b/doc/html/group___ecdsa_primitives.html @@ -0,0 +1,235 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: ecdsa + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
+
+
+ +

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

+ + + + + + + + +

+Functions

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

Detailed Description

+

Elliptic Curve Digital Signature Algorithm Primitives.

+

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

+

Function Documentation

+ +

◆ EcdsaSignBuffer()

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

Creates ECDSA signature of buffer.

+

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

+

The operation is over the standard secp256r1 curve.

+
Parameters
+ + + + + + + +
[in]bufPointer to buffer containing message to sign.
[in]buf_lenThe size of buf in bytes.
[in]privkeyThe ECDSA private key on secp256r1 curve.
[in]rnd_funcRandom number generator.
[in]rnd_paramPass through context data for rnd_func.
[out]sigThe resulting ECDSA signature.
+
+
+
Returns
EpidStatus
+
Return values
+ + +
kEpidRandMaxIterErrFailed to sign after maximum number of iterations due to bad luck in random number generation.
+
+
+
See also
EcdsaSignBuffer
+ +
+
+ +

◆ EcdsaVerifyBuffer()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EcdsaVerifyBuffer (ConstOctStr buf,
size_t buf_len,
EcdsaPublicKey const * pubkey,
EcdsaSignature const * sig 
)
+
+ +

Verifies authenticity of a digital signature over a buffer.

+

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

+

The operation is over the standard secp256r1 curve.

+
Warning
It is the responsibility of the caller to verify the identity of the public key.
+
Parameters
+ + + + + +
[in]bufPointer to buffer containing message to verify.
[in]buf_lenThe size of buf in bytes.
[in]pubkeyThe ECDSA public key on secp256r1 curve.
[in]sigThe ECDSA signature to be verified.
+
+
+
Returns
EpidStatus
+
Return values
+ + + +
kEpidSigValidEcdsaSignature is valid for the given buffer.
kEpidSigInvalidEcdsaSignature is invalid for the given buffer.
+
+
+
See also
EcdsaSignBuffer
+ +
+
+
+
+ + + + + diff --git a/doc/html/group___ecdsa_primitives.js b/doc/html/group___ecdsa_primitives.js new file mode 100644 index 0000000000000000000000000000000000000000..e901408e2c8cef1b1abde561be2a8dad4ca40dc2 --- /dev/null +++ b/doc/html/group___ecdsa_primitives.js @@ -0,0 +1,5 @@ +var group___ecdsa_primitives = +[ + [ "EcdsaSignBuffer", "group___ecdsa_primitives.html#gaef0e8a31e830fe9285b43a0969e6611a", null ], + [ "EcdsaVerifyBuffer", "group___ecdsa_primitives.html#ga07e4ebd3423e1f6f9ae35f0608dde7c0", null ] +]; \ No newline at end of file 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 0000000000000000000000000000000000000000..b88a0f3e7e78834c0ce1e2f662f75bde055df873 --- /dev/null +++ b/doc/html/group___epid11_file_parser_module.html @@ -0,0 +1,372 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Intel(R) EPID 1.1 support + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Intel(R) EPID 1.1 support
+
+
+ +

Parser for 1.1 issuer material. +More...

+ + + + + + + + + + + + + + +

+Functions

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

Detailed Description

+

Parser for 1.1 issuer material.

+

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

+
See also
Intel(R) EPID 1.1 support
+

Function Documentation

+ +

◆ Epid11ParseGroupPubKeyFile()

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

Extracts group public key from buffer in issuer binary format.

+

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

+
Warning
It is the responsibility of the caller to authenticate the EpidCaCertificate.
+
Parameters
+ + + + + +
[in]bufPointer to buffer containing public key to extract.
[in]lenThe size of buf in bytes.
[in]certThe issuing CA public key certificate.
[out]pubkeyThe extracted group public key.
+
+
+
Returns
EpidStatus
+
Return values
+ + +
kEpidSigInvalidParsing failed due to data authentication failure.
+
+
+
See also
Intel(R) EPID 1.1 support
+ +
+
+ +

◆ Epid11ParseGroupRlFile()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Epid11ParseGroupRlFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
Epid11GroupRlrl,
size_t * rl_len 
)
+
+ +

Extracts group revocation list from buffer in issuer binary format.

+

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

+

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

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

◆ Epid11ParsePrivRlFile()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Epid11ParsePrivRlFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
Epid11PrivRlrl,
size_t * rl_len 
)
+
+ +

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

+

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

+

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

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

◆ Epid11ParseSigRlFile()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Epid11ParseSigRlFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
Epid11SigRlrl,
size_t * rl_len 
)
+
+ +

Extracts signature revocation list from buffer in issuer binary format.

+

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

+

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

+
Warning
It is the responsibility of the caller to authenticate the EpidCaCertificate.
+
Parameters
+ + + + + + +
[in]bufPointer to buffer containing the revocation list to extract.
[in]lenThe size of buf in bytes.
[in]certThe issuing CA public key certificate.
[out]rlThe extracted revocation list. If Null, rl_len is filled with the required output buffer size.
[in,out]rl_lenThe size of rl in bytes.
+
+
+
Returns
EpidStatus
+
Return values
+ + +
kEpidSigInvalidParsing failed due to data authentication failure.
+
+
+
See also
Intel(R) EPID 1.1 support
+ +
+
+
+
+ + + + + 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 0000000000000000000000000000000000000000..aacd29088ac579bec080326e8356caf48fd663e0 --- /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 0000000000000000000000000000000000000000..da9e8f8bb30ae16d9d9d49ca4f01306893d3ec1e --- /dev/null +++ b/doc/html/group___epid11_pairing_primitives.html @@ -0,0 +1,254 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Intel(R) EPID 1.1 specific pairing + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Intel(R) EPID 1.1 specific pairing
+
+
+ +

Intel(R) EPID 1.1 pairing operations. +More...

+ + + + + +

+Typedefs

+typedef struct Epid11PairingState Epid11PairingState
 A pairing.
 
+ + + + + + + + + + +

+Functions

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

Detailed Description

+

Intel(R) EPID 1.1 pairing operations.

+

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

+

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

+
See also
Intel(R) EPID 1.1 support
+

Function Documentation

+ +

◆ DeleteEpid11PairingState()

+ +
+
+ + + + + + + + +
void DeleteEpid11PairingState (Epid11PairingState ** ps)
+
+ +

Frees a previously allocated by Epid11PairingState.

+

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

+

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

+
Parameters
+ + +
[in]psThe pairing state. Can be NULL.
+
+
+
See also
NewEpid11PairingState
+
+Intel(R) EPID 1.1 support
+ +
+
+ +

◆ Epid11Pairing()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Epid11Pairing (Epid11PairingStateps,
EcPoint const * a,
EcPoint const * b,
FfElementd 
)
+
+ +

Computes a Tate Pairing for two parameters.

+

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

+
Parameters
+ + + + + +
[in]psThe pairing state.
[in]aThe first value to pair. Must be in ga.
[in]bThe second value to pair. Must be in gb.
[out]dThe result of the pairing. Must be in ff.
+
+
+
Returns
EpidStatus
+
See also
Intel(R) EPID 1.1 support
+ +
+
+ +

◆ NewEpid11PairingState()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus NewEpid11PairingState (EcGroup const * ga,
EcGroup const * gb,
FiniteField const * ff,
Epid11PairingState ** ps 
)
+
+ +

Constructs a new Tate pairing state.

+

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

+

Use DeleteEpid11PairingState() to free memory.

+

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

+
Parameters
+ + + + + +
[in]gaThe EcGroup from which the first parameter of the pairing will be taken.
[in]gbThe EcGroup from which the second parameter of the pairing will be taken.
[in]ffThe result finite field. Must be a Fq12 field.
[out]psNewly constructed pairing state.
+
+
+
Returns
EpidStatus
+
Attention
It is the responsibility of the caller to ensure that ga, gb, and ff exist for the entire lifetime of the new Epid11PairingState.
+
See also
DeleteEpid11PairingState
+
+Intel(R) EPID 1.1 support
+ +
+
+
+
+ + + + + diff --git a/doc/html/group___epid11_pairing_primitives.js b/doc/html/group___epid11_pairing_primitives.js new file mode 100644 index 0000000000000000000000000000000000000000..53b346ae0c204dec839d1afdd3693458e7fee4dd --- /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 0000000000000000000000000000000000000000..ade8e3695f88ceebc4b0af601fd066781cd75fa4 --- /dev/null +++ b/doc/html/group___epid11_types.html @@ -0,0 +1,152 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Intel(R) EPID 1.1 specific types + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Intel(R) EPID 1.1 specific types
+
+
+ +

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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Data Structures

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

+Typedefs

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

Detailed Description

+

Intel(R) EPID 1.1 specific data types.

+

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

+
See also
Intel(R) EPID 1.1 support
+
+
+ + + + + diff --git a/doc/html/group___epid11_types.js b/doc/html/group___epid11_types.js new file mode 100644 index 0000000000000000000000000000000000000000..4d71606d907b7097a16324f77457dff13ca6eb97 --- /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 0000000000000000000000000000000000000000..b75c7f3e6443c7b2b6068bb0c30b1e4440f776ee --- /dev/null +++ b/doc/html/group___epid11_verifier_module.html @@ -0,0 +1,806 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Intel(R) EPID 1.1 support + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
Intel(R) EPID 1.1 support
+
+
+ +

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

+ + + + + +

+Data Structures

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

+Typedefs

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

+Functions

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

Detailed Description

+

Intel(R) EPID 1.1 Verifier functionality.

+

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

+

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

+

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

+

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

+

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

+

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

+

Function Documentation

+ +

◆ Epid11AreSigsLinked()

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

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

+

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

+

This API supports Intel(R) EPID 1.1 verification.

+
Parameters
+ + + +
[in]sig1A basic signature.
[in]sig2A basic signature.
+
+
+
Returns
bool
+
Return values
+ + + +
trueif the signatures were generated by the same member
falseif it couldn't be determined if the signatures were generated by the same member
+
+
+
Note
The input signatures should be verified using Epid11VerifyBasicSig() before invocation. Behavior is undefined if either of the signatures cannot be verified.
+
See also
Epid11VerifyBasicSig
+
+Intel(R) EPID 1.1 support
+ +
+
+ +

◆ Epid11CheckPrivRlEntry()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Epid11CheckPrivRlEntry (Epid11VerifierCtx const * ctx,
Epid11BasicSignature const * sig,
FpElemStr const * f 
)
+
+ +

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

+

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

+

This API supports Intel(R) EPID 1.1 verification.

+
Parameters
+ + + + +
[in]ctxThe verifier context.
[in]sigThe basic signature.
[in]fThe private key based revocation list entry.
+
+
+
Note
Sig should be verified using Epid11VerifyBasicSig() before invocation. Behavior is undefined if sig cannot be verified.
+
+This function should be used in conjunction with Epid11NrVerify() and Epid11VerifyBasicSig().
+
+If the result is not kEpidNoErr the verify should de considered to have failed.
+
Returns
EpidStatus
+
See also
Epid11VerifierCreate
+
+Epid11NrVerify
+
+Epid11VerifyBasicSig
+
+Intel(R) EPID 1.1 support
+ +
+
+ +

◆ Epid11NrVerify()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Epid11NrVerify (Epid11VerifierCtx const * ctx,
Epid11BasicSignature const * sig,
void const * msg,
size_t msg_len,
Epid11SigRlEntry const * sigrl_entry,
Epid11NrProof const * proof 
)
+
+ +

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

+

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

+

This API supports Intel(R) EPID 1.1 verification.

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

◆ Epid11VerifierCreate()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Epid11VerifierCreate (Epid11GroupPubKey const * pub_key,
Epid11VerifierPrecomp const * precomp,
Epid11VerifierCtx ** ctx 
)
+
+ +

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

+

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

+

Allocates memory for the context, then initialize it.

+

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

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

◆ Epid11VerifierDelete()

+ +
+
+ + + + + + + + +
void Epid11VerifierDelete (Epid11VerifierCtx ** ctx)
+
+ +

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

+

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

+

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

+
Parameters
+ + +
[in,out]ctxThe verifier context. Can be NULL.
+
+
+
See also
Epid11VerifierCreate
+
+Intel(R) EPID 1.1 support
+ +
+
+ +

◆ Epid11VerifierSetBasename()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Epid11VerifierSetBasename (Epid11VerifierCtxctx,
void const * basename,
size_t basename_len 
)
+
+ +

Sets the basename to be used by a verifier.

+

This API allows setting a zero length base name.

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

◆ Epid11VerifierSetGroupRl()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Epid11VerifierSetGroupRl (Epid11VerifierCtxctx,
Epid11GroupRl const * grp_rl,
size_t grp_rl_size 
)
+
+ +

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

+

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

+

This API supports Intel(R) EPID 1.1 verification.

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

◆ Epid11VerifierSetPrivRl()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Epid11VerifierSetPrivRl (Epid11VerifierCtxctx,
Epid11PrivRl const * priv_rl,
size_t priv_rl_size 
)
+
+ +

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

+

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

+

This API supports Intel(R) EPID 1.1 verification.

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

◆ Epid11VerifierSetSigRl()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Epid11VerifierSetSigRl (Epid11VerifierCtxctx,
Epid11SigRl const * sig_rl,
size_t sig_rl_size 
)
+
+ +

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

+

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

+

This API supports Intel(R) EPID 1.1 verification.

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

◆ Epid11VerifierWritePrecomp()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus Epid11VerifierWritePrecomp (Epid11VerifierCtx const * ctx,
Epid11VerifierPrecompprecomp 
)
+
+ +

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

+
Parameters
+ + + +
[in]ctxThe verifier context.
[out]precompThe Serialized pre-computed verifier settings.
+
+
+
Returns
EpidStatus
+
Note
If the result is not kEpidNoErr the content of precomp is undefined.
+
See also
Intel(R) EPID 1.1 support
+ +
+
+ +

◆ Epid11Verify()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Epid11Verify (Epid11VerifierCtx const * ctx,
Epid11Signature const * sig,
size_t sig_len,
void const * msg,
size_t msg_len 
)
+
+ +

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

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

◆ Epid11VerifyBasicSig()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Epid11VerifyBasicSig (Epid11VerifierCtx const * ctx,
Epid11BasicSignature const * sig,
void const * msg,
size_t msg_len 
)
+
+ +

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

+

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

+
Parameters
+ + + + + +
[in]ctxThe verifier context.
[in]sigThe basic signature.
[in]msgThe message that was signed.
[in]msg_lenThe size of msg in bytes.
+
+
+
Returns
EpidStatus
+
Note
This function should be used in conjunction with Epid11NrVerify() and Epid11CheckPrivRlEntry().
+
+If the result is not kEpidNoErr the verify should be considered to have failed.
+
See also
Epid11VerifierCreate
+
+Intel(R) EPID 1.1 support
+ +
+
+
+
+ + + + + diff --git a/doc/html/group___epid11_verifier_module.js b/doc/html/group___epid11_verifier_module.js new file mode 100644 index 0000000000000000000000000000000000000000..b6867654d62311d342853496410db48252244509 --- /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 new file mode 100644 index 0000000000000000000000000000000000000000..e32a173488cd17c317190fdf1276f0dae2aac02f --- /dev/null +++ b/doc/html/group___epid_common.html @@ -0,0 +1,141 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: common + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
+
+
+ +

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

+ + + + + + + + + + + + + + + + + +

+Modules

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

+Typedefs

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

Detailed Description

+

Common code shared between core sub-components.

+

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

+

Typedef Documentation

+ +

◆ BitSupplier

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

Generates random data.

+

The SDK provides the BitSupplier as a function prototype so that you will know the requirements for your own implementation of a random number generator.

+

You need to pass a pointer to your implementation of the random number generator into methods that require it.

+

For an example of how a BitSupplier is created, see the signmsg example.

+
Parameters
+ + + + +
[out]rand_datadestination buffer for random data generated by BitSupplier. The buffer will receive num_bits of random data.
[in]num_bitsspecifies the size of the random data, in bits, to be generated.
[in]user_datauser data that will be passed to the random number generator. The usage of this data is specific to the implementation of the BitSupplier. For example, this could be used to pass a pointer to a data structure that maintains state across calls to your BitSupplier.
+
+
+
Returns
zero on success and non-zero value on error.
+ +
+
+
+
+ + + + + diff --git a/doc/html/group___epid_common.js b/doc/html/group___epid_common.js new file mode 100644 index 0000000000000000000000000000000000000000..70dc2de34478c93632522f2f002866d2bf577107 --- /dev/null +++ b/doc/html/group___epid_common.js @@ -0,0 +1,9 @@ +var group___epid_common = +[ + [ "math", "group___epid_math.html", "group___epid_math" ], + [ "errors", "group___error_codes.html", "group___error_codes" ], + [ "fileparser", "group___file_parser.html", "group___file_parser" ], + [ "print_utils", "group___epid_print.html", "group___epid_print" ], + [ "types", "group___epid_types.html", "group___epid_types" ], + [ "BitSupplier", "group___epid_common.html#ga6119a2c0323a3fca9e502b24bc378c2c", null ] +]; \ No newline at end of file diff --git a/doc/html/group___epid_math.html b/doc/html/group___epid_math.html new file mode 100644 index 0000000000000000000000000000000000000000..f6485f7305a2a6dff085668b75d95b9870e0e4d8 --- /dev/null +++ b/doc/html/group___epid_math.html @@ -0,0 +1,108 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: math + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
+
+
+ +

Math Primitives and Group Operations. +More...

+ + + + + + + + + + + + + + + + + + + + +

+Modules

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

Detailed Description

+

Math Primitives and Group Operations.

+

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

+
+
+ + + + + diff --git a/doc/html/group___epid_math.js b/doc/html/group___epid_math.js new file mode 100644 index 0000000000000000000000000000000000000000..c416f5448613d15e3ea78f0acd2212023fd85a77 --- /dev/null +++ b/doc/html/group___epid_math.js @@ -0,0 +1,9 @@ +var group___epid_math = +[ + [ "bignum", "group___big_num_primitives.html", "group___big_num_primitives" ], + [ "ecdsa", "group___ecdsa_primitives.html", "group___ecdsa_primitives" ], + [ "ecgroup", "group___ec_group_primitives.html", "group___ec_group_primitives" ], + [ "finitefield", "group___finite_field_primitives.html", "group___finite_field_primitives" ], + [ "hash", "group___hash_primitives.html", "group___hash_primitives" ], + [ "pairing", "group___pairing_primitives.html", "group___pairing_primitives" ] +]; \ No newline at end of file diff --git a/doc/html/group___epid_member_module.html b/doc/html/group___epid_member_module.html new file mode 100644 index 0000000000000000000000000000000000000000..ff1c0d8f9c47a7b70c9730ec779874721371bf69 --- /dev/null +++ b/doc/html/group___epid_member_module.html @@ -0,0 +1,991 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: member + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+ +
+ +

Member functionality. +More...

+ + + + + +

+Modules

 tpm2
 Internal interface that models TPM 2.0 interfaces.
 
+ + + + +

+Data Structures

struct  MemberParams
 Software only specific member parameters. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

EpidStatus EpidMemberCreate (MemberParams const *params, MemberCtx **ctx)
 Allocates and initializes a new member context. More...
 
EpidStatus EpidMemberGetSize (MemberParams const *params, size_t *context_size)
 Computes the size in bytes required for a member context. More...
 
EpidStatus EpidMemberInit (MemberParams const *params, MemberCtx *ctx)
 Initializes a new member context. More...
 
EpidStatus EpidCreateJoinRequest (MemberCtx *ctx, GroupPubKey const *pub_key, IssuerNonce const *ni, JoinRequest *join_request)
 Creates a request to join a group. More...
 
EpidStatus EpidProvisionCredential (MemberCtx *ctx, GroupPubKey const *pub_key, MembershipCredential const *credential, MemberPrecomp const *precomp_str)
 Provisions a member context from a membership credential. More...
 
EpidStatus EpidProvisionCompressed (MemberCtx *ctx, GroupPubKey const *pub_key, CompressedPrivKey const *compressed_privkey, MemberPrecomp const *precomp_str)
 Provisions a member context from a compressed private key. More...
 
EpidStatus EpidProvisionKey (MemberCtx *ctx, GroupPubKey const *pub_key, PrivKey const *priv_key, MemberPrecomp const *precomp_str)
 Provisions a member context from a private key. More...
 
EpidStatus EpidMemberStartup (MemberCtx *ctx)
 Change member from setup state to normal operation. More...
 
void EpidMemberDeinit (MemberCtx *ctx)
 De-initializes an existing member context buffer. More...
 
void EpidMemberDelete (MemberCtx **ctx)
 Deletes an existing member context. More...
 
EpidStatus EpidMemberSetHashAlg (MemberCtx *ctx, HashAlg hash_alg)
 Sets the hash algorithm to be used by a member. More...
 
EpidStatus EpidMemberSetSigRl (MemberCtx *ctx, SigRl const *sig_rl, size_t sig_rl_size)
 Sets the signature based revocation list to be used by a member. More...
 
size_t EpidGetSigSize (SigRl const *sig_rl)
 Computes the size in bytes required for an Intel(R) EPID signature. More...
 
EpidStatus EpidSign (MemberCtx const *ctx, void const *msg, size_t msg_len, void const *basename, size_t basename_len, EpidSignature *sig, size_t sig_len)
 Writes an Intel(R) EPID signature. More...
 
EpidStatus EpidRegisterBasename (MemberCtx *ctx, void const *basename, size_t basename_len)
 Registers a basename with a member. More...
 
EpidStatus EpidClearRegisteredBasenames (MemberCtx *ctx)
 Clears registered basenames. More...
 
EpidStatus EpidAddPreSigs (MemberCtx *ctx, size_t number_presigs)
 Extends the member's pool of pre-computed signatures. More...
 
size_t EpidGetNumPreSigs (MemberCtx const *ctx)
 Gets the number of pre-computed signatures in the member's pool. More...
 
EpidStatus EpidDecompressPrivKey (GroupPubKey const *pub_key, CompressedPrivKey const *compressed_privkey, PrivKey *priv_key)
 Decompresses compressed member private key. More...
 
+

Detailed Description

+

Member functionality.

+

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

+

To use this module, include the header epid/member/api.h.

+

Function Documentation

+ +

◆ EpidAddPreSigs()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus EpidAddPreSigs (MemberCtxctx,
size_t number_presigs 
)
+
+ +

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

+

Generate new pre-computed signatures and add them to the internal pool.

+
Parameters
+ + + +
[in]ctxThe member context.
[in]number_presigsThe number of pre-computed signatures to add to the internal pool.
+
+
+
Returns
EpidStatus
+
See also
EpidMemberInit
+ +
+
+ +

◆ EpidClearRegisteredBasenames()

+ +
+
+ + + + + + + + +
EpidStatus EpidClearRegisteredBasenames (MemberCtxctx)
+
+ +

Clears registered basenames.

+

Allows clearing registered basenames without recreating member.

+
Parameters
+ + +
[in,out]ctxThe member context.
+
+
+
Returns
EpidStatus
+
See also
EpidRegisterBasename
+ +
+
+ +

◆ EpidCreateJoinRequest()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidCreateJoinRequest (MemberCtxctx,
GroupPubKey const * pub_key,
IssuerNonce const * ni,
JoinRequestjoin_request 
)
+
+ +

Creates a request to join a group.

+

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

+
Parameters
+ + + + + +
[in,out]ctxThe member context.
[in]pub_keyThe group certificate of group to join.
[in]niThe nonce chosen by issuer as part of join protocol.
[out]join_requestThe join request.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ EpidDecompressPrivKey()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidDecompressPrivKey (GroupPubKey const * pub_key,
CompressedPrivKey const * compressed_privkey,
PrivKeypriv_key 
)
+
+ +

Decompresses compressed member private key.

+

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

+
Parameters
+ + + + +
[in]pub_keyThe public key of the group.
[in]compressed_privkeyThe compressed member private key to be decompressed.
[out]priv_keyThe member private key.
+
+
+
Returns
EpidStatus
+

Example

+

Generating an Intel® EPID Signature

+ +
+
+ +

◆ EpidGetNumPreSigs()

+ +
+
+ + + + + + + + +
size_t EpidGetNumPreSigs (MemberCtx const * ctx)
+
+ +

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

+
Parameters
+ + +
[in]ctxThe member context.
+
+
+
Returns
Number of remaining pre-computed signatures. Returns 0 if ctx is NULL.
+
See also
EpidMemberInit
+ +
+
+ +

◆ EpidGetSigSize()

+ +
+
+ + + + + + + + +
size_t EpidGetSigSize (SigRl const * sig_rl)
+
+ +

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

+
Parameters
+ + +
[in]sig_rlThe signature based revocation list that is used. NULL is treated as a zero length list.
+
+
+
Returns
Size in bytes of an Intel(R) EPID signature including proofs for each entry in the signature based revocation list.
+
See also
SigRl
+

Example

+

Generating an Intel® EPID Signature

+ +
+
+ +

◆ EpidMemberCreate()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus EpidMemberCreate (MemberParams const * params,
MemberCtx ** ctx 
)
+
+ +

Allocates and initializes a new member context.

+
Parameters
+ + + +
[in]paramsImplementation specific configuration parameters.
[out]ctxNewly constructed member context.
+
+
+
Warning
buffers allocated using this function should not be initialized with EpidMemberInit.
+
Deprecated:
This API has been superseded by EpidMemberGetSize and EpidMemberInit.
+
Returns
EpidStatus
+ +
+
+ +

◆ EpidMemberDeinit()

+ +
+
+ + + + + + + + +
void EpidMemberDeinit (MemberCtxctx)
+
+ +

De-initializes an existing member context buffer.

+

Must be called to safely release a member context initialized using EpidMemberInit.

+

De-initializes the context.

+
Parameters
+ + +
[in,out]ctxThe member context. Can be NULL.
+
+
+
Warning
This function should not be used on buffers allocated with EpidMemberCreate. Those buffers should be released using EpidMemberDelete
+
See also
EpidMemberInit
+ +
+
+ +

◆ EpidMemberDelete()

+ +
+
+ + + + + + + + +
void EpidMemberDelete (MemberCtx ** ctx)
+
+ +

Deletes an existing member context.

+

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

+

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

+
Parameters
+ + +
[in,out]ctxThe member context. Can be NULL.
+
+
+
Deprecated:
This API has been superseded by EpidMemberDeinit.
+
See also
EpidMemberCreate
+

Example

+

Generating an Intel® EPID Signature

+ +
+
+ +

◆ EpidMemberGetSize()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus EpidMemberGetSize (MemberParams const * params,
size_t * context_size 
)
+
+ +

Computes the size in bytes required for a member context.

+
Parameters
+ + + +
[in]paramsImplementation specific configuration parameters.
[out]context_sizeNumber of bytes required for a MemberCtx buffer
+
+
+
Returns
EpidStatus
+
See also
EpidMemberInit
+ +
+
+ +

◆ EpidMemberInit()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus EpidMemberInit (MemberParams const * params,
MemberCtxctx 
)
+
+ +

Initializes a new member context.

+
Parameters
+ + + +
[in]paramsImplementation specific configuration parameters.
[in,out]ctxAn existing buffer that will be used as a MemberCtx.
+
+
+
Warning
ctx must be a buffer of at least the size reported by EpidMemberGetSize for the same parameters.
+
Returns
EpidStatus
+
See also
EpidMemberGetSize
+ +
+
+ +

◆ EpidMemberSetHashAlg()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus EpidMemberSetHashAlg (MemberCtxctx,
HashAlg hash_alg 
)
+
+ +

Sets the hash algorithm to be used by a member.

+
Parameters
+ + + +
[in]ctxThe member context.
[in]hash_algThe hash algorithm to use.
+
+
+
Returns
EpidStatus
+
Note
If the result is not kEpidNoErr, the hash algorithm used by the member is undefined.
+
See also
EpidMemberInit
+
+HashAlg
+

Example

+

Generating an Intel® EPID Signature

+ +
+
+ +

◆ EpidMemberSetSigRl()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidMemberSetSigRl (MemberCtxctx,
SigRl const * sig_rl,
size_t sig_rl_size 
)
+
+ +

Sets the signature based revocation list to be used by a member.

+

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

+
Attention
The memory pointed to by sig_rl is accessed directly by the member until a new list is set or the member is destroyed. Do not modify the contents of this memory. The behavior of subsequent operations that rely on the revocation list is undefined if the memory is modified.
+
+It is the responsibility of the caller to free the memory pointed to by sig_rl after the member is no longer using it.
+
Parameters
+ + + + +
[in]ctxThe member context.
[in]sig_rlThe signature based revocation list.
[in]sig_rl_sizeThe size of the signature based revocation list in bytes.
+
+
+
Returns
EpidStatus
+
Note
If the result is not kEpidNoErr the signature based revocation list pointed to by the member is not changed.
+
See also
EpidMemberInit
+

Example

+

Generating an Intel® EPID Signature

+ +
+
+ +

◆ EpidMemberStartup()

+ +
+
+ + + + + + + + +
EpidStatus EpidMemberStartup (MemberCtxctx)
+
+ +

Change member from setup state to normal operation.

+
Parameters
+ + +
[in,out]ctxThe member context.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ EpidProvisionCompressed()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidProvisionCompressed (MemberCtxctx,
GroupPubKey const * pub_key,
CompressedPrivKey const * compressed_privkey,
MemberPrecomp const * precomp_str 
)
+
+ +

Provisions a member context from a compressed private key.

+
Parameters
+ + + + + +
[in,out]ctxThe member context.
[in]pub_keyThe group certificate of group to provision.
[in]compressed_privkeyprivate key.
[in]precomp_strPrecomputed state (implementation specific optional)
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ EpidProvisionCredential()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidProvisionCredential (MemberCtxctx,
GroupPubKey const * pub_key,
MembershipCredential const * credential,
MemberPrecomp const * precomp_str 
)
+
+ +

Provisions a member context from a membership credential.

+
Parameters
+ + + + + +
[in,out]ctxThe member context.
[in]pub_keyThe group certificate of group to provision.
[in]credentialmembership credential.
[in]precomp_strPrecomputed state (implementation specific optional)
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ EpidProvisionKey()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidProvisionKey (MemberCtxctx,
GroupPubKey const * pub_key,
PrivKey const * priv_key,
MemberPrecomp const * precomp_str 
)
+
+ +

Provisions a member context from a private key.

+
Parameters
+ + + + + +
[in,out]ctxThe member context.
[in]pub_keyThe group certificate of group to provision.
[in]priv_keyprivate key.
[in]precomp_strPrecomputed state (implementation specific optional)
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ EpidRegisterBasename()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidRegisterBasename (MemberCtxctx,
void const * basename,
size_t basename_len 
)
+
+ +

Registers a basename with a member.

+

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

+
Warning
The use of a name-based signature creates a platform unique pseudonymous identifier. Because it reduces the member's privacy, the user should be notified when it is used and should have control over its use.
+
Parameters
+ + + + +
[in]ctxThe member context.
[in]basenameThe basename.
[in]basename_lenLength of the basename.
+
+
+
Returns
EpidStatus
+
Return values
+ + +
kEpidDuplicateErrThe basename was already registered.
+
+
+
Note
If the result is not kEpidNoErr or kEpidDuplicateErr it is undefined if the basename is registered.
+

Example

+

Generating an Intel® EPID Signature

+ +
+
+ +

◆ EpidSign()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidSign (MemberCtx const * ctx,
void const * msg,
size_t msg_len,
void const * basename,
size_t basename_len,
EpidSignaturesig,
size_t sig_len 
)
+
+ +

Writes an Intel(R) EPID signature.

+
Parameters
+ + + + + + + + +
[in]ctxThe member context.
[in]msgThe message to sign.
[in]msg_lenThe length in bytes of message.
[in]basenameOptional basename. If basename is NULL a random basename is used. Signatures generated using random basenames are anonymous. Signatures generated using the same basename are linkable by the verifier. If a basename is provided, it must already be registered, or kEpidBadArgErr is returned.
[in]basename_lenThe size of basename in bytes. Must be 0 if basename is NULL.
[out]sigThe generated signature
[in]sig_lenThe size of signature in bytes. Must be equal to value returned by EpidGetSigSize().
+
+
+
Returns
EpidStatus
+
Note
If the result is not kEpidNoErr the content of sig is undefined.
+
See also
EpidMemberInit
+
+EpidMemberSetHashAlg
+
+EpidMemberSetSigRl
+
+EpidGetSigSize
+

Example

+

Generating an Intel® EPID Signature

+ +
+
+
+
+ + + + + diff --git a/doc/html/group___epid_member_module.js b/doc/html/group___epid_member_module.js new file mode 100644 index 0000000000000000000000000000000000000000..5896810a83c8bbb24a0bb2ffe1b9ed074de2d3c4 --- /dev/null +++ b/doc/html/group___epid_member_module.js @@ -0,0 +1,28 @@ +var group___epid_member_module = +[ + [ "tpm2", "group___tpm2_module.html", "group___tpm2_module" ], + [ "MemberParams", "struct_member_params.html", [ + [ "f", "struct_member_params.html#ad6782a38fd79477bccf2313c676ea4fc", null ], + [ "rnd_func", "struct_member_params.html#ad844c7a2be20bac70b118e7c08530c0b", null ], + [ "rnd_param", "struct_member_params.html#a7510f05e63328fa13cf2a3a3bd6acd95", null ] + ] ], + [ "EpidAddPreSigs", "group___epid_member_module.html#gacb0547ec085a9ed324d323416bce4a78", null ], + [ "EpidClearRegisteredBasenames", "group___epid_member_module.html#ga4f3a464f14581ef3e5a50719cb4709c3", null ], + [ "EpidCreateJoinRequest", "group___epid_member_module.html#gac10008d8c9ba7bc5e5be899ed03c61c3", null ], + [ "EpidDecompressPrivKey", "group___epid_member_module.html#gaf8cd05388f017486f14da2ee48d067ef", null ], + [ "EpidGetNumPreSigs", "group___epid_member_module.html#gad78ca056dfea2565bbacd5734d9dc075", null ], + [ "EpidGetSigSize", "group___epid_member_module.html#ga76e535722467af7c16809b5b521e0000", null ], + [ "EpidMemberCreate", "group___epid_member_module.html#gae7a7b01bc0a84c44c9d14e6c311c1ba7", null ], + [ "EpidMemberDeinit", "group___epid_member_module.html#ga98b4d990a885339b83cd0513fedcc76d", null ], + [ "EpidMemberDelete", "group___epid_member_module.html#ga3824589c683c5e0e59d483462fce65d6", null ], + [ "EpidMemberGetSize", "group___epid_member_module.html#ga2b3c0cc1d8d4e50190ca94656fa36e24", null ], + [ "EpidMemberInit", "group___epid_member_module.html#ga35273b8e75d51e312f0d2fd3aa094efb", null ], + [ "EpidMemberSetHashAlg", "group___epid_member_module.html#ga9998eb454838ff5d232ff22ecbab31bf", null ], + [ "EpidMemberSetSigRl", "group___epid_member_module.html#gaaae6f21f58c22fce58076f10d68159f4", null ], + [ "EpidMemberStartup", "group___epid_member_module.html#gaa2c85b1f0ea17a11ac5d297b21aa30f6", null ], + [ "EpidProvisionCompressed", "group___epid_member_module.html#ga76cddb8e20afc43de2c30d5e4addb2ea", null ], + [ "EpidProvisionCredential", "group___epid_member_module.html#ga788ebc9d1ba6153c637b762484ca1140", null ], + [ "EpidProvisionKey", "group___epid_member_module.html#ga07094399c1e040b95ae3e58a74e7c302", null ], + [ "EpidRegisterBasename", "group___epid_member_module.html#ga8c6f097ba89542664375bd5e0f205220", null ], + [ "EpidSign", "group___epid_member_module.html#ga74d1409a816cb52633564b793072da5f", null ] +]; \ No newline at end of file diff --git a/doc/html/group___epid_module.html b/doc/html/group___epid_module.html new file mode 100644 index 0000000000000000000000000000000000000000..f8fe5cb3ba6f73ed72432ad3afed209082323c46 --- /dev/null +++ b/doc/html/group___epid_module.html @@ -0,0 +1,99 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid  + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
epid 
+
+
+ +

Core Intel® EPID functionality. +More...

+ + + + + + + + + + + +

+Modules

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

Detailed Description

+

Core Intel® EPID functionality.

+

Contains core functionality used to provide or implement APIs in the Intel® EPID SDK.

+
+
+ + + + + diff --git a/doc/html/group___epid_module.js b/doc/html/group___epid_module.js new file mode 100644 index 0000000000000000000000000000000000000000..892eddf409c8cc091d3660ef20401cb4999942e5 --- /dev/null +++ b/doc/html/group___epid_module.js @@ -0,0 +1,6 @@ +var group___epid_module = +[ + [ "common", "group___epid_common.html", "group___epid_common" ], + [ "member", "group___epid_member_module.html", "group___epid_member_module" ], + [ "verifier", "group___epid_verifier_module.html", "group___epid_verifier_module" ] +]; \ No newline at end of file diff --git a/doc/html/group___epid_print.html b/doc/html/group___epid_print.html new file mode 100644 index 0000000000000000000000000000000000000000..25e5d29c18ba8b6554342a6a4c2d6e506382dde5 --- /dev/null +++ b/doc/html/group___epid_print.html @@ -0,0 +1,689 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: print_utils + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
print_utils
+
+
+ +

Debug print routines. +More...

+ + + + + +

+Enumerations

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

+Functions

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

Detailed Description

+

Debug print routines.

+

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

+

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

+

Enumeration Type Documentation

+ +

◆ PrintUtilFormat

+ +
+
+ + + + +
enum PrintUtilFormat
+
+ +

Print format.

+ + + + +
Enumerator
kPrintUtilUnannotated 

Unannotated output format.

+
kPrintUtilAnnotated 

Annotated output format.

+
kPrintUtilFormatCount 

Count of print formats.

+
+ +
+
+

Function Documentation

+ +

◆ PrintBigNum()

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

Prints BigNum.

+

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

+
Parameters
+ + + +
[in]big_numBigNum to be printed
[in]var_nameResult variable name
+
+
+ +
+
+ +

◆ PrintBigNumStr()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void PrintBigNumStr (BigNumStr const * big_num_str,
char const * var_name 
)
+
+ +

Prints serialized BigNum.

+

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

+
Parameters
+ + + +
[in]big_num_strSerialized BigNum to be printed
[in]var_nameResult variable name
+
+
+ +
+
+ +

◆ PrintEcPoint()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void PrintEcPoint (EcGroup const * g,
EcPoint const * ec_point,
char const * var_name,
PrintUtilFormat format 
)
+
+ +

Prints elliptic curve group element.

+

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

+
Parameters
+ + + + + +
[in]gElliptic curve group that element to be printed belongs to
[in]ec_pointElliptic curve group element to be printed
[in]var_nameResult variable name
[in]formatOutput format
+
+
+ +
+
+ +

◆ PrintFfElement()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void PrintFfElement (FiniteField const * ff,
FfElement const * ff_element,
char const * var_name,
PrintUtilFormat format 
)
+
+ +

Prints finite field element.

+

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

+
Parameters
+ + + + + +
[in]ffFinite field that element to be printed belongs to
[in]ff_elementFinite field element to be printed
[in]var_nameResult variable name
[in]formatOutput format
+
+
+ +
+
+ +

◆ PrintFpElemStr()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void PrintFpElemStr (FpElemStr const * fp_elem_str,
char const * var_name 
)
+
+ +

Prints serialized Fp element.

+

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

+
Parameters
+ + + +
[in]fp_elem_strSerialized Fp element to be printed
[in]var_nameResult variable name
+
+
+ +
+
+ +

◆ PrintFq12ElemStr()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void PrintFq12ElemStr (Fq12ElemStr const * fq12_elem_str,
char const * var_name,
PrintUtilFormat format 
)
+
+ +

Prints serialized Fq12 element.

+

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

+
Parameters
+ + + + +
[in]fq12_elem_strSerialized Intel(R) EPID Fq12 element to be printed
[in]var_nameResult variable name
[in]formatOutput format
+
+
+ +
+
+ +

◆ PrintFq2ElemStr()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void PrintFq2ElemStr (Fq2ElemStr const * fq2_elem_str,
char const * var_name,
PrintUtilFormat format 
)
+
+ +

Prints serialized Fq2 element.

+

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

+
Parameters
+ + + + +
[in]fq2_elem_strSerialized Fq2 element to be printed
[in]var_nameResult variable name
[in]formatOutput format
+
+
+ +
+
+ +

◆ PrintFq6ElemStr()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void PrintFq6ElemStr (Fq6ElemStr const * fq6_elem_str,
char const * var_name,
PrintUtilFormat format 
)
+
+ +

Prints serialized Fq6 element.

+

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

+
Parameters
+ + + + +
[in]fq6_elem_strSerialized Fq6 element to be printed
[in]var_nameResult variable name
[in]formatOutput format
+
+
+ +
+
+ +

◆ PrintFqElemStr()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void PrintFqElemStr (FqElemStr const * fq_elem_str,
char const * var_name 
)
+
+ +

Prints serialized Fq element.

+

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

+
Parameters
+ + + +
[in]fq_elem_strSerialized Fq element to be printed
[in]var_nameResult variable name
+
+
+ +
+
+ +

◆ PrintG1ElemStr()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void PrintG1ElemStr (G1ElemStr const * g1_elem_str,
char const * var_name,
PrintUtilFormat format 
)
+
+ +

Prints serialized G1 element.

+

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

+
Parameters
+ + + + +
[in]g1_elem_strSerialized G1 element to be printed
[in]var_nameResult variable name
[in]formatOutput format
+
+
+ +
+
+ +

◆ PrintG2ElemStr()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void PrintG2ElemStr (G2ElemStr const * g2_elem_str,
char const * var_name,
PrintUtilFormat format 
)
+
+ +

Prints serialized G2 element.

+

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

+
Parameters
+ + + + +
[in]g2_elem_strSerialized G2 element to be printed
[in]var_nameResult variable name
[in]formatOutput format
+
+
+ +
+
+ +

◆ PrintGtElemStr()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void PrintGtElemStr (GtElemStr const * gt_elem_str,
char const * var_name,
PrintUtilFormat format 
)
+
+ +

Prints serialized Gt element.

+

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

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

SDK data types. +More...

+ + + + + +

+Modules

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

+Data Structures

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

+Typedefs

+typedef void * OctStr
 Generic Octet String Style Number.
 
+typedef void const * ConstOctStr
 Generic Const Octet String Style Number.
 
+typedef OctStr128 GroupId
 group ID
 
+typedef OctStr256 Seed
 256 bit seed derived from fuse key
 
+typedef OctStr256 IssuerNonce
 256 bit nonce chosen by issuer
 
+typedef G1ElemStr ReKeySeed
 element to store seed values for later rekey
 
+ + + + +

+Enumerations

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

Detailed Description

+

SDK data types.

+

Defines serialized data types used by the SDK.

+

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

+

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

+

Enumeration Type Documentation

+ +

◆ HashAlg

+ +
+
+ + + + +
enum HashAlg
+
+ +

Recognized hash algorithms.

+ + + + + + + + + +
Enumerator
kInvalidHashAlg 

Invalid.

+
kSha256 

SHA-256.

+
kSha384 

SHA-384.

+
kSha512 

SHA-512.

+
kSha512_256 

SHA-512/256.

+
kSha3_256 

Reserved for SHA3/256.

+
kSha3_384 

Reserved for SHA3/384.

+
kSha3_512 

Reserved for SHA3/512.

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

Verifier functionality. +More...

+ + + + + +

+Modules

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

+Data Structures

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

+Typedefs

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

+Functions

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

Detailed Description

+

Verifier functionality.

+

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

+

To use this module, include the header epid/verifier/api.h.

+

Function Documentation

+ +

◆ EpidAreSigsLinked()

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

Determines if two signatures are linked.

+

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

+
Parameters
+ + + +
[in]sig1A basic signature.
[in]sig2A basic signature.
+
+
+
Returns
bool
+
Return values
+ + + +
trueif the signatures were generated by the same member
falseif it couldn't be determined if the signatures were generated by the same member
+
+
+
Note
The input signatures should be verified using EpidVerifyBasicSig() before invocation. Behavior is undefined if either of the signatures cannot be verified.
+
See also
EpidVerifyBasicSig
+
+EpidSignBasic
+
+EpidSign
+ +
+
+ +

◆ EpidBlacklistSig()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidBlacklistSig (VerifierCtxctx,
EpidSignature const * sig,
size_t sig_len,
void const * msg,
size_t msg_len 
)
+
+ +

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

+

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

+
Parameters
+ + + + + + +
[in]ctxThe verifier context.
[in]sigThe name-based signature to revoke.
[in]sig_lenThe size of sig in bytes.
[in]msgThe message that was signed.
[in]msg_lenThe size of msg in bytes.
+
+
+
Returns
EpidStatus
+
See also
EpidVerifierCreate
+
+EpidVerifierSetVerifierRl
+
+EpidWriteVerifierRl
+ +
+
+ +

◆ EpidCheckPrivRlEntry()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidCheckPrivRlEntry (VerifierCtx const * ctx,
BasicSignature const * sig,
FpElemStr const * f 
)
+
+ +

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

+

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

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

◆ EpidGetVerifierRlSize()

+ +
+
+ + + + + + + + +
size_t EpidGetVerifierRlSize (VerifierCtx const * ctx)
+
+ +

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

+

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

+
Parameters
+ + +
[in]ctxThe verifier context.
+
+
+
Returns
Size in bytes required to serialize the verifier blacklist
+
See also
EpidVerifierCreate
+
+EpidVerifierSetVerifierRl
+
+EpidBlacklistSig
+
+EpidWriteVerifierRl
+ +
+
+ +

◆ EpidNrVerify()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidNrVerify (VerifierCtx const * ctx,
BasicSignature const * sig,
void const * msg,
size_t msg_len,
SigRlEntry const * sigrl_entry,
NrProof const * proof 
)
+
+ +

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

+

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

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

◆ EpidVerifierCreate()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidVerifierCreate (GroupPubKey const * pub_key,
VerifierPrecomp const * precomp,
VerifierCtx ** ctx 
)
+
+ +

Creates a new verifier context.

+

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

+

Allocates memory for the context, then initializes it.

+

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

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

Example

+

Verifying an Intel® EPID Signature

+ +
+
+ +

◆ EpidVerifierDelete()

+ +
+
+ + + + + + + + +
void EpidVerifierDelete (VerifierCtx ** ctx)
+
+ +

Deletes an existing verifier context.

+

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

+

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

+
Parameters
+ + +
[in,out]ctxThe verifier context. Can be NULL.
+
+
+
See also
EpidVerifierCreate
+

Example

+

Verifying an Intel® EPID Signature

+ +
+
+ +

◆ EpidVerifierSetBasename()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidVerifierSetBasename (VerifierCtxctx,
void const * basename,
size_t basename_len 
)
+
+ +

Sets the basename to be used by a verifier.

+
Note
A successful call to this function will clear the current verifier blacklist.
+
Parameters
+ + + + +
[in,out]ctxThe verifier context.
[in]basenameThe basename. Pass NULL for random base.
[in]basename_lenNumber of bytes in basename buffer. Must be 0 if basename is NULL.
+
+
+
Returns
EpidStatus
+
See also
EpidVerifierCreate
+

Example

+

Verifying an Intel® EPID Signature

+ +
+
+ +

◆ EpidVerifierSetGroupRl()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidVerifierSetGroupRl (VerifierCtxctx,
GroupRl const * grp_rl,
size_t grp_rl_size 
)
+
+ +

Sets the group based revocation list.

+

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

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

Example

+

Verifying an Intel® EPID Signature

+ +
+
+ +

◆ EpidVerifierSetHashAlg()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus EpidVerifierSetHashAlg (VerifierCtxctx,
HashAlg hash_alg 
)
+
+ +

Sets the hash algorithm to be used by a verifier.

+
Parameters
+ + + +
[in]ctxThe verifier context.
[in]hash_algThe hash algorithm to use.
+
+
+
Returns
EpidStatus
+
Note
If the result is not kEpidNoErr, the hash algorithm used by the verifier is undefined.
+
See also
EpidVerifierCreate
+
+HashAlg
+

Example

+

Verifying an Intel® EPID Signature

+ +
+
+ +

◆ EpidVerifierSetPrivRl()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidVerifierSetPrivRl (VerifierCtxctx,
PrivRl const * priv_rl,
size_t priv_rl_size 
)
+
+ +

Sets the private key based revocation list.

+

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

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

Example

+

Verifying an Intel® EPID Signature

+ +
+
+ +

◆ EpidVerifierSetSigRl()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidVerifierSetSigRl (VerifierCtxctx,
SigRl const * sig_rl,
size_t sig_rl_size 
)
+
+ +

Sets the signature based revocation list.

+

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

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

Example

+

Verifying an Intel® EPID Signature

+ +
+
+ +

◆ EpidVerifierSetVerifierRl()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidVerifierSetVerifierRl (VerifierCtxctx,
VerifierRl const * ver_rl,
size_t ver_rl_size 
)
+
+ +

Sets the verifier revocation list.

+

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

+

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

+
Parameters
+ + + + +
[in,out]ctxThe verifier context.
[in]ver_rlThe verifier revocation list.
[in]ver_rl_sizeThe size of the verifier revocation list in bytes.
+
+
+
Returns
EpidStatus
+
Note
If the result is not kEpidNoErr the verifier revocation list pointed to by the verifier is undefined.
+
See also
EpidVerifierCreate
+
+EpidBlacklistSig
+
+EpidWriteVerifierRl
+

Example

+

Verifying an Intel® EPID Signature

+ +
+
+ +

◆ EpidVerifierWritePrecomp()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus EpidVerifierWritePrecomp (VerifierCtx const * ctx,
VerifierPrecompprecomp 
)
+
+ +

Serializes the pre-computed verifier settings.

+
Parameters
+ + + +
[in]ctxThe verifier context.
[out]precompThe Serialized pre-computed verifier settings.
+
+
+
Returns
EpidStatus
+
Note
If the result is not kEpidNoErr the content of precomp is undefined.
+

Example

+

Verifying an Intel® EPID Signature

+ +
+
+ +

◆ EpidVerify()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidVerify (VerifierCtx const * ctx,
EpidSignature const * sig,
size_t sig_len,
void const * msg,
size_t msg_len 
)
+
+ +

Verifies a signature and checks revocation status.

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

Example

+

Verifying an Intel® EPID Signature

+ +
+
+ +

◆ EpidVerifyBasicSig()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidVerifyBasicSig (VerifierCtx const * ctx,
BasicSignature const * sig,
void const * msg,
size_t msg_len 
)
+
+ +

Verifies a member signature without revocation checks.

+

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

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

◆ EpidWriteVerifierRl()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidWriteVerifierRl (VerifierCtx const * ctx,
VerifierRlver_rl,
size_t ver_rl_size 
)
+
+ +

Serializes the verifier blacklist to a buffer.

+

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

+

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

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

Error reporting interface. +More...

+ + + + + +

+Enumerations

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

+Functions

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

Detailed Description

+

Error reporting interface.

+

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

+

Enumeration Type Documentation

+ +

◆ EpidStatus

+ +
+
+ + + + +
enum EpidStatus
+
+ +

Return status for SDK functions.

+

Convention for status values is as follows:

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

no error

+
kEpidSigValid 

Signature is valid.

+
kEpidSigInvalid 

Signature is invalid.

+
kEpidSigRevokedInGroupRl 

Signature revoked in GroupRl.

+
kEpidSigRevokedInPrivRl 

Signature revoked in PrivRl.

+
kEpidSigRevokedInSigRl 

Signature revoked in SigRl.

+
kEpidSigRevokedInVerifierRl 

Signature revoked in VerifierRl.

+
kEpidErr 

unspecified error

+
kEpidNotImpl 

not implemented error

+
kEpidBadArgErr 

incorrect arg to function

+
kEpidNoMemErr 

not enough memory for the operation

+
kEpidMemAllocErr 

insufficient memory allocated for operation

+
kEpidMathErr 

internal math error

+
kEpidDivByZeroErr 

an attempt to divide by zero

+
kEpidUnderflowErr 

a value became less than minimum supported level

+
kEpidHashAlgorithmNotSupported 

unsupported hash algorithm type

+
kEpidRandMaxIterErr 

reached max iteration for random number generation

+
kEpidDuplicateErr 

argument would add duplicate entry

+
kEpidInconsistentBasenameSetErr 

set basename conflicts with arguments

+
kEpidMathQuadraticNonResidueError 

quadratic Non-Residue Error

+
kEpidOutOfSequenceError 

operation was performed out of sequence

+
+ +
+
+

Function Documentation

+ +

◆ EpidStatusToString()

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

Returns string representation of error code.

+
Parameters
+ + +
eThe status value.
+
+
+
Returns
The string describing the status.
+ +
+
+
+
+ + + + + diff --git a/doc/html/group___error_codes.js b/doc/html/group___error_codes.js new file mode 100644 index 0000000000000000000000000000000000000000..84205b4f99c15c196bf817942c031687531fad2a --- /dev/null +++ b/doc/html/group___error_codes.js @@ -0,0 +1,27 @@ +var group___error_codes = +[ + [ "EpidStatus", "group___error_codes.html#gafdb27c77c2c4b32c807e326a8a0da360", [ + [ "kEpidNoErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a8a6861e14322ca9193498ffc955537f9", null ], + [ "kEpidSigValid", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab45ad60085d03c03ea30b40a0519897e", null ], + [ "kEpidSigInvalid", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aeedd19b8a1cbdecf963f90b4860e02b8", null ], + [ "kEpidSigRevokedInGroupRl", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aedd43fb4043bef3b515fc23f1d9a5fe5", null ], + [ "kEpidSigRevokedInPrivRl", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1dc7b7e6ff97c7ed9ff4191d76ebd6e1", null ], + [ "kEpidSigRevokedInSigRl", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a43c658cbf0d156850d71ce3f8efd461c", null ], + [ "kEpidSigRevokedInVerifierRl", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a486e052baa99c6c25ae5d5cc710de298", null ], + [ "kEpidErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360aa08f0d2e394b37694117a6a32bc71e6e", null ], + [ "kEpidNotImpl", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a5252da1ff519a098446723e9edd30cc7", null ], + [ "kEpidBadArgErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad134d6cc95a9dcb1b1a9f9c358047cbf", null ], + [ "kEpidNoMemErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab7dfec784192a827a91a4b8a6054d01c", null ], + [ "kEpidMemAllocErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a11a4d2f1c37064eb663de08dc57bcda8", null ], + [ "kEpidMathErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a1739ecb620f4bede2e1b84e52a96cee6", null ], + [ "kEpidDivByZeroErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a893cd0d417b139bb376d09c93695c3f3", null ], + [ "kEpidUnderflowErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a83a867b4f71ee13edbfca2f1b72abbec", null ], + [ "kEpidHashAlgorithmNotSupported", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ad4d4ff24a7ef2cd7a50b8082265e9ff4", null ], + [ "kEpidRandMaxIterErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a61234ad9610406da6bf7977afd72a357", null ], + [ "kEpidDuplicateErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a3706f895a660260033b5b91890516c0f", null ], + [ "kEpidInconsistentBasenameSetErr", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a94ae9c9b9337afd2fefd3b4f9c3160df", null ], + [ "kEpidMathQuadraticNonResidueError", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360ab2768a1a5c4374cb1ac6175c09c73129", null ], + [ "kEpidOutOfSequenceError", "group___error_codes.html#ggafdb27c77c2c4b32c807e326a8a0da360a700953ded1af35781948e8ada6dedf43", 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 new file mode 100644 index 0000000000000000000000000000000000000000..22e9357c724fbf837b0ab15a068caced628785a4 --- /dev/null +++ b/doc/html/group___file_parser.html @@ -0,0 +1,547 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: fileparser + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+ +
+ +

Parser for issuer material. +More...

+ + + + + +

+Modules

 Intel(R) EPID 1.1 support
 Parser for 1.1 issuer material.
 
+ + + + + + + +

+Data Structures

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

+Enumerations

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

+Functions

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

+Variables

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

Detailed Description

+

Parser for issuer material.

+

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

+

To use this module, include the header epid/common/file_parser.h.

+

Enumeration Type Documentation

+ +

◆ EpidFileType

+ +
+
+ + + + +
enum EpidFileType
+
+ +

Recognized Intel(R) EPID file types.

+ + + + + + + + + + +
Enumerator
kIssuingCaPubKeyFile 

IoT Issuing CA public key file.

+
kGroupPubKeyFile 

Group Public Key Output File Format.

+
kPrivRlFile 

Binary Private Key Revocation List.

+
kSigRlFile 

Binary Signature Revocation List.

+
kGroupRlFile 

Binary Group Revocation List.

+
kPrivRlRequestFile 

Binary Private Key Revocation Request.

+
kSigRlRequestFile 

Binary Signature Revocation Request.

+
kGroupRlRequestFile 

Binary Group Revocation Request.

+
kNumFileTypes 

Maximum number of file types.

+
+ +
+
+ +

◆ EpidVersion

+ +
+
+ + + + +
enum EpidVersion
+
+ +

Recognized Intel(R) EPID versions.

+ + + + +
Enumerator
kEpid1x 

Intel(R) EPID version 1.x.

+
kEpid2x 

Intel(R) EPID version 2.x.

+
kNumEpidVersions 

Maximum number of versions.

+
+ +
+
+

Function Documentation

+ +

◆ EpidParseFileHeader()

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

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

+
Parameters
+ + + + + +
[in]bufPointer to buffer containing Intel(R) EPID Binary Output File to parse.
[in]lenThe size of buf in bytes.
[out]epid_versionThe extracted Intel(R) EPID version or kNumEpidVersions if Intel(R) EPID version is unknown. Pass NULL to not extract.
[out]file_typeThe extracted Intel(R) EPID file type or kNumFileTypes if file type is unknown. Pass NULL to not extract.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ EpidParseGroupPubKeyFile()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidParseGroupPubKeyFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
GroupPubKeypubkey 
)
+
+ +

Extracts group public key from buffer in issuer binary format.

+

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

+
Warning
It is the responsibility of the caller to authenticate the EpidCaCertificate.
+
Parameters
+ + + + + +
[in]bufPointer to buffer containing public key to extract.
[in]lenThe size of buf in bytes.
[in]certThe issuing CA public key certificate.
[out]pubkeyThe extracted group public key.
+
+
+
Returns
EpidStatus
+
Return values
+ + +
kEpidSigInvalidParsing failed due to data authentication failure.
+
+
+

Examples

+

Generating an Intel® EPID Signature

+ +
+
+ +

◆ EpidParseGroupRlFile()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidParseGroupRlFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
GroupRlrl,
size_t * rl_len 
)
+
+ +

Extracts group revocation list from buffer in issuer binary format.

+

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

+

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

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

Example

+

Verifying an Intel® EPID Signature

+ +
+
+ +

◆ EpidParsePrivRlFile()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidParsePrivRlFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
PrivRlrl,
size_t * rl_len 
)
+
+ +

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

+

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

+

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

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

Example

+

Verifying an Intel® EPID Signature

+ +
+
+ +

◆ EpidParseSigRlFile()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus EpidParseSigRlFile (void const * buf,
size_t len,
EpidCaCertificate const * cert,
SigRlrl,
size_t * rl_len 
)
+
+ +

Extracts signature revocation list from buffer in issuer binary format.

+

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

+

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

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

Examples

+

Generating an Intel® EPID Signature

+ +
+
+
+
+ + + + + diff --git a/doc/html/group___file_parser.js b/doc/html/group___file_parser.js new file mode 100644 index 0000000000000000000000000000000000000000..1fe5f8320011de59ef5e59a0cde18a6e2d56c54d --- /dev/null +++ b/doc/html/group___file_parser.js @@ -0,0 +1,42 @@ +var group___file_parser = +[ + [ "Intel(R) EPID 1.1 support", "group___epid11_file_parser_module.html", "group___epid11_file_parser_module" ], + [ "EpidFileHeader", "struct_epid_file_header.html", [ + [ "epid_version", "struct_epid_file_header.html#a35d43c51c1739940381e4898ca87b824", null ], + [ "file_type", "struct_epid_file_header.html#af5d48c739cc6c00c6e1ce35abf4f1473", null ] + ] ], + [ "EpidCaCertificate", "struct_epid_ca_certificate.html", [ + [ "a", "struct_epid_ca_certificate.html#a2811c1914ffae913820f13da914c8f01", null ], + [ "b", "struct_epid_ca_certificate.html#a280e0b0238cf45834c21849ab8a7e124", null ], + [ "header", "struct_epid_ca_certificate.html#ac03cf7257c52ad14e3dd3201b930dd50", null ], + [ "prime", "struct_epid_ca_certificate.html#a3a44e8050ca2f5085652b2b4e15b779c", null ], + [ "pubkey", "struct_epid_ca_certificate.html#a9d2fc21f46cf9fc96e2ea557b70e5356", null ], + [ "r", "struct_epid_ca_certificate.html#ab9d4c318b1fc8d38d3ce53b29f2dfee2", null ], + [ "signature", "struct_epid_ca_certificate.html#a2f8f09ae02919c379c38386668b47418", null ], + [ "x", "struct_epid_ca_certificate.html#a4f77996f90ed7da1d0503c4236b2c9d1", null ], + [ "y", "struct_epid_ca_certificate.html#abd69cce8d5e3940787ee0d17f72184ab", null ] + ] ], + [ "EpidFileType", "group___file_parser.html#ga9a33be7edc6b4c7a867fb07bd2bddecb", [ + [ "kIssuingCaPubKeyFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac24554caafe2db01e2daed413188cd92", null ], + [ "kGroupPubKeyFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba1f8d8c4b253403a35c51e05d34a7ca1e", null ], + [ "kPrivRlFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba692b4141bff8225bee6000750b0da322", null ], + [ "kSigRlFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba8aead4b6aab87a1efb2d7e8c77a9b710", null ], + [ "kGroupRlFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecba8e5247daee3999540e6cb24d4c2b3770", null ], + [ "kPrivRlRequestFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac708ba9e56eaeac0f1256457cbd45911", null ], + [ "kSigRlRequestFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac52e5fe24a12424316f655b9b7c62600", null ], + [ "kGroupRlRequestFile", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbab772fa1e3f221af125ffb34b86b3f24c", null ], + [ "kNumFileTypes", "group___file_parser.html#gga9a33be7edc6b4c7a867fb07bd2bddecbac6d742ea3dd3b17f6d763970ac84b811", null ] + ] ], + [ "EpidVersion", "group___file_parser.html#ga1562efc7c1891875d6b2b9180d65de9d", [ + [ "kEpid1x", "group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da5f270e2e8c2412bc07de293023f425cc", null ], + [ "kEpid2x", "group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da6af0ee9d9689f1d4325bdd0beb8a89e2", null ], + [ "kNumEpidVersions", "group___file_parser.html#gga1562efc7c1891875d6b2b9180d65de9da8bbd27765997dd10f1c0378dbecef01d", null ] + ] ], + [ "EpidParseFileHeader", "group___file_parser.html#ga8e38d1102eb1dd9b5af2e2f79236da55", null ], + [ "EpidParseGroupPubKeyFile", "group___file_parser.html#ga43fdbc1bf2edd3695d21cb457365afbb", null ], + [ "EpidParseGroupRlFile", "group___file_parser.html#gad767f72dc55307b872a8b5600da3fd6f", null ], + [ "EpidParsePrivRlFile", "group___file_parser.html#gadc033fb23e3cbda56aa7e3d412060b7e", null ], + [ "EpidParseSigRlFile", "group___file_parser.html#ga237ef5a43076aa6fc6eb18829a93da3f", null ], + [ "kEpidFileTypeCode", "group___file_parser.html#ga3770c39a0546c79447c9d4159d794c33", null ], + [ "kEpidVersionCode", "group___file_parser.html#gaae808987ce82188dff42baa4e43cab82", null ] +]; \ No newline at end of file diff --git a/doc/html/group___finite_field_primitives.html b/doc/html/group___finite_field_primitives.html new file mode 100644 index 0000000000000000000000000000000000000000..6e1ec2f5bfe3c42b36cdb04c7f8c73ed117fc646 --- /dev/null +++ b/doc/html/group___finite_field_primitives.html @@ -0,0 +1,1379 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: finitefield + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
finitefield
+
+
+ +

Finite field operations. +More...

+ + + + + + + + +

+Typedefs

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

+Functions

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

Detailed Description

+

Finite field operations.

+

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

+

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

+

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

+

Function Documentation

+ +

◆ DeleteFfElement()

+ +
+
+ + + + + + + + +
void DeleteFfElement (FfElement ** ff_elem)
+
+ +

Frees a previously allocated FfElement.

+

Frees memory pointed to by ff_elem. Nulls the pointer.

+
Parameters
+ + +
[in]ff_elemThe finite field element. Can be NULL.
+
+
+
See also
NewFfElement
+ +
+
+ +

◆ DeleteFiniteField()

+ +
+
+ + + + + + + + +
void DeleteFiniteField (FiniteField ** ff)
+
+ +

Frees a previously allocated FiniteField.

+

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

+
Parameters
+ + +
[in]ffThe Finite field. Can be NULL.
+
+
+
See also
NewFiniteField
+ +
+
+ +

◆ FfAdd()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus FfAdd (FiniteFieldff,
FfElement const * a,
FfElement const * b,
FfElementr 
)
+
+ +

Adds two finite field elements.

+
Parameters
+ + + + + +
[in]ffThe finite field.
[out]aThe first operand to be added.
[out]bThe second operand to be added.
[out]rThe result of adding a and b.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ FfExp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus FfExp (FiniteFieldff,
FfElement const * a,
BigNum const * b,
FfElementr 
)
+
+ +

Raises an element of a finite field to a power.

+
Parameters
+ + + + + +
[in]ffThe finite field in which to perform the operation
[in]aThe base.
[in]bThe power.
[out]rThe result of raising a to the power b.
+
+
+
Returns
EpidStatus
+
See also
NewFiniteField
+
+NewFfElement
+ +
+
+ +

◆ FfGetRandom()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus FfGetRandom (FiniteFieldff,
BigNumStr const * low_bound,
BitSupplier rnd_func,
void * rnd_param,
FfElementr 
)
+
+ +

Generate random finite field element.

+
Parameters
+ + + + + + +
[in]ffThe finite field associated with the random finite field element.
[in]low_boundLower bound of the random finite field to be generated.
[in]rnd_funcRandom number generator.
[in]rnd_paramPass through context data for rnd_func.
[in,out]rThe random finite field element.
+
+
+
Returns
EpidStatus
+
Return values
+ + +
kEpidRandMaxIterErrthe function should be called again with different random data.
+
+
+
See also
NewFfElement
+
+BitSupplier
+ +
+
+ +

◆ FfHash()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus FfHash (FiniteFieldff,
ConstOctStr msg,
size_t msg_len,
HashAlg hash_alg,
FfElementr 
)
+
+ +

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

+
Parameters
+ + + + + + +
[in]ffThe finite field.
[in]msgThe message.
[in]msg_lenThe size of msg in bytes.
[in]hash_algThe hash algorithm.
[out]rThe hashed value.
+
+
+
Returns
EpidStatus
+
See also
NewFiniteField
+
+NewFfElement
+ +
+
+ +

◆ FfInv()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus FfInv (FiniteFieldff,
FfElement const * a,
FfElementr 
)
+
+ +

Calculates the multiplicative inverse of a finite field element.

+
Parameters
+ + + + +
[in]ffThe finite field.
[in]aThe element.
[out]rThe inverted element.
+
+
+
Returns
EpidStatus
+
See also
NewFiniteField
+
+NewFfElement
+ +
+
+ +

◆ FfIsEqual()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus FfIsEqual (FiniteFieldff,
FfElement const * a,
FfElement const * b,
boolis_equal 
)
+
+ +

Checks if two finite field elements are equal.

+
Parameters
+ + + + + +
[in]ffThe finite field.
[in]aAn element to check.
[in]bAnother element to check.
[out]is_equalThe result of the check.
+
+
+
Returns
EpidStatus
+
See also
NewEcGroup
+
+NewEcPoint
+ +
+
+ +

◆ FfIsZero()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus FfIsZero (FiniteFieldff,
FfElement const * a,
boolis_zero 
)
+
+ +

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

+
Parameters
+ + + + +
[in]ffThe finite field.
[out]aThe element.
[out]is_zeroThe result of the check.
+
+
+
Returns
EpidStatus
+
See also
NewFiniteField
+
+NewFfElement
+ +
+
+ +

◆ FfMul()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus FfMul (FiniteFieldff,
FfElement const * a,
FfElement const * b,
FfElementr 
)
+
+ +

Multiplies two finite field elements.

+
Parameters
+ + + + + +
[in]ffThe finite field.
[out]aThe first operand to be multplied.
[out]bThe second operand to be multiplied. If ff is an extension field of a field F then this parameter may be an element of either ff or F.
[out]rThe result of multiplying a and b.
+
+
+
Returns
EpidStatus
+
See also
NewFiniteField
+
+NewFfElement
+ +
+
+ +

◆ FfMultiExp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus FfMultiExp (FiniteFieldff,
FfElement const ** a,
BigNumStr const ** b,
size_t m,
FfElementr 
)
+
+ +

Multi-exponentiates finite field elements.

+

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

+
Parameters
+ + + + + + +
[in]ffThe finite field in which to perform the operation
[in]aThe bases.
[in]bThe powers.
[in]mNumber of entries in a and b.
[out]rThe result of raising each a to the corresponding power b and multiplying the results.
+
+
+
Returns
EpidStatus
+
See also
NewFiniteField
+
+NewFfElement
+ +
+
+ +

◆ FfMultiExpBn()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus FfMultiExpBn (FiniteFieldff,
FfElement const ** a,
BigNum const ** b,
size_t m,
FfElementr 
)
+
+ +

Multi-exponentiates finite field elements.

+

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

+
Parameters
+ + + + + + +
[in]ffThe finite field in which to perform the operation
[in]aThe bases.
[in]bThe powers.
[in]mNumber of entries in a and b.
[out]rThe result of raising each a to the corresponding power b and multiplying the results.
+
+
+
Returns
EpidStatus
+
See also
NewFiniteField
+
+NewFfElement
+ +
+
+ +

◆ FfNeg()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus FfNeg (FiniteFieldff,
FfElement const * a,
FfElementr 
)
+
+ +

Calculates the additive inverse of a finite field element.

+
Parameters
+ + + + +
[in]ffThe finite field.
[in]aThe element.
[out]rThe inverted element.
+
+
+
Returns
EpidStatus
+
See also
NewFiniteField
+
+NewFfElement
+ +
+
+ +

◆ FfSqrt()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus FfSqrt (FiniteFieldff,
FfElement const * a,
FfElementr 
)
+
+ +

Finds a square root of a finite field element.

+

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

+
Parameters
+ + + + +
[in]ffThe finite field in which to perform the operation
[in]aThe bases.
[out]rThe result of raising each a to the corresponding power b and multiplying the results.
+
+
+
Return values
+ + +
kEpidMathQuadraticNonResidueErrorNo square root could be found.
+
+
+
Returns
EpidStatus
+
See also
NewFiniteField
+
+NewFfElement
+ +
+
+ +

◆ FfSscmMultiExp()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus FfSscmMultiExp (FiniteFieldff,
FfElement const ** a,
BigNumStr const ** b,
size_t m,
FfElementr 
)
+
+ +

Software side-channel mitigated implementation of FfMultiExp.

+

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

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

◆ FfSub()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus FfSub (FiniteFieldff,
FfElement const * a,
FfElement const * b,
FfElementr 
)
+
+ +

Subtracts two finite field elements.

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

◆ InitFfElementFromBn()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus InitFfElementFromBn (FiniteFieldff,
BigNumbn,
FfElementff_elem 
)
+
+ +

Initializes an existing FfElement from a BigNum.

+
Parameters
+ + + + +
[in]ffThe finite field. Must be a Prime Field.
[in]bnThe value to read.
[out]ff_elemThe target FfElement.
+
+
+
Returns
EpidStatus
+
See also
NewFfElement
+
+WriteFfElement
+ +
+
+ +

◆ NewFfElement()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus NewFfElement (FiniteField const * ff,
FfElement ** new_ff_elem 
)
+
+ +

Creates a new finite field element.

+

Allocates memory and creates a new finite field element.

+

Use DeleteFfElement() to free memory.

+
Parameters
+ + + +
[in]ffThe finite field.
[out]new_ff_elemThe Newly constructed finite field element.
+
+
+
Returns
EpidStatus
+
Attention
It is the responsibility of the caller to ensure that ff exists for the entire lifetime of the new FfElement.
+
See also
NewFiniteField
+
+DeleteFfElement
+ +
+
+ +

◆ NewFiniteField()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus NewFiniteField (BigNumStr const * prime,
FiniteField ** ff 
)
+
+ +

Creates new finite field.

+

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

+

Use DeleteFiniteField() to free memory.

+
Parameters
+ + + +
[in]primeThe order of the finite field.
[out]ffThe newly constructed finite field.
+
+
+
Returns
EpidStatus
+
See also
DeleteFiniteField
+ +
+
+ +

◆ NewFiniteFieldViaBinomalExtension()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus NewFiniteFieldViaBinomalExtension (FiniteField const * ground_field,
FfElement const * ground_element,
int degree,
FiniteField ** ff 
)
+
+ +

Creates a new finite field using binomial extension.

+

Allocates memory and creates a finite field using binomial extension.

+

Use DeleteFiniteField() to free memory.

+
Parameters
+ + + + + +
[in]ground_fieldThe ground field.
[in]ground_elementThe low-order term of the extension.
[in]degreeThe degree of the extension.
[out]ffThe newly constructed finite field.
+
+
+
Returns
EpidStatus
+
Attention
It is the responsibility of the caller to ensure that ground_field exists for the entire lifetime of the new FiniteField.
+
See also
DeleteFiniteField
+ +
+
+ +

◆ NewFiniteFieldViaPolynomialExtension()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus NewFiniteFieldViaPolynomialExtension (FiniteField const * ground_field,
BigNumStr const * irr_polynomial,
int degree,
FiniteField ** ff 
)
+
+ +

Creates a new finite field using polynomial extension.

+

Allocates memory and creates a finite field using polynomial extension.

+

Use DeleteFiniteField() to free memory.

+
Note
Only needed for Intel(R) EPID 1.1 verification.
+
Parameters
+ + + + + +
[in]ground_fieldThe ground field.
[in]irr_polynomialArray with coefficients of the irreducible polynomial. Number of elements must be equal to the degree of the extension.
[in]degreeThe degree of the extension.
[out]ffThe newly constructed finite field.
+
+
+
Returns
EpidStatus
+
Attention
It is the responsibility of the caller to ensure that ground_field exists for the entire lifetime of the new FiniteField.
+
See also
DeleteFiniteField
+ +
+
+ +

◆ ReadFfElement()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus ReadFfElement (FiniteFieldff,
ConstOctStr ff_elem_str,
size_t strlen,
FfElementff_elem 
)
+
+ +

Deserializes a FfElement from a string.

+
Parameters
+ + + + + +
[in]ffThe finite field.
[in]ff_elem_strThe serialized value.
[in]strlenThe size of ff_elem_str in bytes.
[out]ff_elemThe target FfElement.
+
+
+
Returns
EpidStatus
+
See also
NewFfElement
+
+WriteFfElement
+ +
+
+ +

◆ WriteFfElement()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus WriteFfElement (FiniteFieldff,
FfElement const * ff_elem,
OctStr ff_elem_str,
size_t strlen 
)
+
+ +

Serializes a finite field element to a string.

+
Parameters
+ + + + + +
[in]ffThe finite field.
[in]ff_elemThe FfElement to be serialized.
[out]ff_elem_strThe target string.
[in]strlenThe size of ff_elem_str in bytes.
+
+
+
Returns
EpidStatus
+
See also
NewFfElement
+
+FpElemStr
+
+FqElemStr
+
+GtElemStr
+ +
+
+
+
+ + + + + diff --git a/doc/html/group___finite_field_primitives.js b/doc/html/group___finite_field_primitives.js new file mode 100644 index 0000000000000000000000000000000000000000..e199c19c5b70f2a796bdbffe489ecdd05761228b --- /dev/null +++ b/doc/html/group___finite_field_primitives.js @@ -0,0 +1,28 @@ +var group___finite_field_primitives = +[ + [ "FfElement", "group___finite_field_primitives.html#ga6cff5c7c06b07a87442b810ccc0a86fa", null ], + [ "FiniteField", "group___finite_field_primitives.html#gab281b24e336a8b3d7d90079d862d969e", null ], + [ "DeleteFfElement", "group___finite_field_primitives.html#ga1bad3c6945d1d709fceb07a1dd03000e", null ], + [ "DeleteFiniteField", "group___finite_field_primitives.html#gacbdd2871ecf93dadaac9d2c5b16e1e5f", null ], + [ "FfAdd", "group___finite_field_primitives.html#ga1a6e6d3c2319bb24eae8670b021e223b", null ], + [ "FfExp", "group___finite_field_primitives.html#gaf0ddbc1bad048d67771cba119eb44a6c", null ], + [ "FfGetRandom", "group___finite_field_primitives.html#ga6622db072782fd9e53b4d59dd3dbd8e8", null ], + [ "FfHash", "group___finite_field_primitives.html#gabd511d79d9cbd1899e59258f149102c5", null ], + [ "FfInv", "group___finite_field_primitives.html#ga26069d035d0f6ade33af2b5d5c14949a", null ], + [ "FfIsEqual", "group___finite_field_primitives.html#gaed2acb8583e9c9f6b49fdb660c672625", null ], + [ "FfIsZero", "group___finite_field_primitives.html#ga20d9140e5670d679ef8183d9b5115f53", null ], + [ "FfMul", "group___finite_field_primitives.html#ga4613a75bd001a974b3e3e494c3a112a5", null ], + [ "FfMultiExp", "group___finite_field_primitives.html#ga84d21decc1c957bcf6e98e1492eb2ac3", null ], + [ "FfMultiExpBn", "group___finite_field_primitives.html#ga1ef46fc83f9c11263a2aa1ec906c9144", null ], + [ "FfNeg", "group___finite_field_primitives.html#gae7a8c7503b6fc7a41bcaab4d45ca37b2", null ], + [ "FfSqrt", "group___finite_field_primitives.html#ga39892fe2ab431e166dbbcf57756660f6", null ], + [ "FfSscmMultiExp", "group___finite_field_primitives.html#ga0d0c31a22bbfb665a16b2d25b0cd2634", null ], + [ "FfSub", "group___finite_field_primitives.html#ga59d20610f245ff4bc3a17b7bfe289991", null ], + [ "InitFfElementFromBn", "group___finite_field_primitives.html#ga90b2c192708973b54b7a3e82b34536ed", null ], + [ "NewFfElement", "group___finite_field_primitives.html#gacc54f315ede2dbeb8c5990c024a0de6c", null ], + [ "NewFiniteField", "group___finite_field_primitives.html#ga7d99fdc5e4573668a5744e49df7ab67c", null ], + [ "NewFiniteFieldViaBinomalExtension", "group___finite_field_primitives.html#ga83041e3be9984a4bd8f1021934bfa3a2", null ], + [ "NewFiniteFieldViaPolynomialExtension", "group___finite_field_primitives.html#gae69af62a03179718cac81b004549c598", null ], + [ "ReadFfElement", "group___finite_field_primitives.html#ga8a143a5a815a62f4947be2de1653c50f", null ], + [ "WriteFfElement", "group___finite_field_primitives.html#gaa3c1f7515dd823ddad8764091ebc665f", null ] +]; \ No newline at end of file diff --git a/doc/html/group___hash_primitives.html b/doc/html/group___hash_primitives.html new file mode 100644 index 0000000000000000000000000000000000000000..ad3f5dde753937e9b3760771f25d92b317ea3ace --- /dev/null +++ b/doc/html/group___hash_primitives.html @@ -0,0 +1,146 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: hash + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+ +
+ +

Hash primitives. +More...

+ + + + + +

+Data Structures

struct  Sha256Digest
 SHA256 digest. More...
 
+ + + + +

+Functions

EpidStatus Sha256MessageDigest (void const *msg, size_t len, Sha256Digest *digest)
 Computes SHA256 digest of a message. More...
 
+

Detailed Description

+

Hash primitives.

+

Provides APIs for computing digests of messages.

+

Function Documentation

+ +

◆ Sha256MessageDigest()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Sha256MessageDigest (void const * msg,
size_t len,
Sha256Digestdigest 
)
+
+ +

Computes SHA256 digest of a message.

+
Parameters
+ + + + +
[in]msgMessage to compute digest for.
[in]lenThe size of msg in bytes.
[out]digestThe resulting message digest.
+
+
+
Returns
EpidStatus
+ +
+
+
+
+ + + + + diff --git a/doc/html/group___hash_primitives.js b/doc/html/group___hash_primitives.js new file mode 100644 index 0000000000000000000000000000000000000000..14b92829cfb9f41a87c729e435bd35b543f02a8e --- /dev/null +++ b/doc/html/group___hash_primitives.js @@ -0,0 +1,7 @@ +var group___hash_primitives = +[ + [ "Sha256Digest", "struct_sha256_digest.html", [ + [ "data", "struct_sha256_digest.html#a4b6462ddd3f89e4c40220ceb6b1c7f28", null ] + ] ], + [ "Sha256MessageDigest", "group___hash_primitives.html#ga86d62aac9efd7445acee311b41846c6c", null ] +]; \ No newline at end of file diff --git a/doc/html/group___pairing_primitives.html b/doc/html/group___pairing_primitives.html new file mode 100644 index 0000000000000000000000000000000000000000..db8f244d9ba2256f2430895b5d2bf76d7f35154f --- /dev/null +++ b/doc/html/group___pairing_primitives.html @@ -0,0 +1,257 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: pairing + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
pairing
+
+
+ +

Pairing operations. +More...

+ + + + + +

+Modules

 Intel(R) EPID 1.1 specific pairing
 Intel(R) EPID 1.1 pairing operations.
 
+ + + + + + + + + + +

+Functions

EpidStatus NewPairingState (EcGroup const *ga, EcGroup const *gb, FiniteField *ff, BigNumStr const *t, bool neg, PairingState **ps)
 Constructs a new pairing state. More...
 
void DeletePairingState (PairingState **ps)
 Frees a previously allocated by PairingState. More...
 
EpidStatus Pairing (PairingState *ps, EcPoint const *a, EcPoint const *b, FfElement *d)
 Computes an Optimal Ate Pairing for two parameters. More...
 
+

Detailed Description

+

Pairing operations.

+

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

+

Function Documentation

+ +

◆ DeletePairingState()

+ +
+
+ + + + + + + + +
void DeletePairingState (PairingState ** ps)
+
+ +

Frees a previously allocated by PairingState.

+

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

+
Parameters
+ + +
[in]psThe pairing state. Can be NULL.
+
+
+
See also
NewPairingState
+ +
+
+ +

◆ NewPairingState()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus NewPairingState (EcGroup const * ga,
EcGroup const * gb,
FiniteFieldff,
BigNumStr const * t,
bool neg,
PairingState ** ps 
)
+
+ +

Constructs a new pairing state.

+

Allocates memory and creates a new pairing state for Optimal Ate Pairing.

+

Use DeletePairingState() to free memory.

+
Parameters
+ + + + + + + +
[in]gaThe EcGroup from which the first parameter of the pairing is taken.
[in]gbThe EcGroup from which the second parameter of the pairing is taken.
[in]ffThe result finite field. Must be a Fq12 field.
[in]tA positive integer such that 6(t^2) == q - p, where p and q are parameters of G1.
[in]negSelect the alternate "negate" processing path for Optimal Ate Pairing.
[out]psNewly constructed pairing state.
+
+
+
Returns
EpidStatus
+
Attention
It is the responsibility of the caller to ensure that ga, gb, and ff exist for the entire lifetime of the new PairingState.
+
See also
DeletePairingState
+ +
+
+ +

◆ Pairing()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Pairing (PairingStateps,
EcPoint const * a,
EcPoint const * b,
FfElementd 
)
+
+ +

Computes an Optimal Ate Pairing for two parameters.

+
Parameters
+ + + + + +
[in]psThe pairing state.
[in]aThe first value to pair. Must be in ga used to create ps.
[in]bThe second value to pair. Must be in gb used to create ps
[out]dThe result of the pairing. Will be in ff used to create the pairing state.
+
+
+
Returns
EpidStatus
+ +
+
+
+
+ + + + + diff --git a/doc/html/group___pairing_primitives.js b/doc/html/group___pairing_primitives.js new file mode 100644 index 0000000000000000000000000000000000000000..fad5c07a85e39e26926bd943a8c0a2990214ce9d --- /dev/null +++ b/doc/html/group___pairing_primitives.js @@ -0,0 +1,7 @@ +var group___pairing_primitives = +[ + [ "Intel(R) EPID 1.1 specific pairing", "group___epid11_pairing_primitives.html", "group___epid11_pairing_primitives" ], + [ "DeletePairingState", "group___pairing_primitives.html#gad54aebdc331d39b73000fdca9e04f94d", null ], + [ "NewPairingState", "group___pairing_primitives.html#ga29f79a645871830754d396b9b4a2a0cc", null ], + [ "Pairing", "group___pairing_primitives.html#ga58a9d3cb6129274a04c72a35a52f768d", null ] +]; \ No newline at end of file diff --git a/doc/html/group___tpm2_module.html b/doc/html/group___tpm2_module.html new file mode 100644 index 0000000000000000000000000000000000000000..45dc05d68ec537032efb3ef6a6095d8b4b87d7a0 --- /dev/null +++ b/doc/html/group___tpm2_module.html @@ -0,0 +1,790 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: tpm2 + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
+
+
+ +

Internal interface that models TPM 2.0 interfaces. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

EpidStatus Tpm2Commit (Tpm2Ctx *ctx, EcPoint const *p1, void const *s2, size_t s2_len, FfElement const *y2, EcPoint *k, EcPoint *l, EcPoint *e, uint16_t *counter)
 Performs TPM2_Commit TPM operation. More...
 
EpidStatus Tpm2CreateContext (MemberParams const *params, Epid2Params_ const *epid2_params, BitSupplier *rnd_func, void **rnd_param, const FpElemStr **f, Tpm2Ctx **ctx)
 Creates a new Tpm context. More...
 
void Tpm2DeleteContext (Tpm2Ctx **ctx)
 Deletes an existing Tpm context. More...
 
EpidStatus Tpm2SetHashAlg (Tpm2Ctx *ctx, HashAlg hash_alg)
 Sets the hash algorithm to be used by a TPM2. More...
 
void Tpm2ResetContext (Tpm2Ctx **ctx)
 Reset an existing Tpm context. More...
 
EpidStatus Tpm2GetRandom (Tpm2Ctx *ctx, int const num_bits, void *random_data)
 Get random data. More...
 
EpidStatus Tpm2LoadExternal (Tpm2Ctx *ctx, FpElemStr const *f_str)
 Invokes TPM2_LoadExternal command. More...
 
EpidStatus Tpm2NvDefineSpace (Tpm2Ctx *ctx, uint32_t nv_index, size_t size)
 Performs TPM2_NV_DefineSpace TPM command. More...
 
EpidStatus Tpm2NvUndefineSpace (Tpm2Ctx *ctx, uint32_t nv_index)
 Performs TPM2_NV_UndefineSpace TPM command. More...
 
EpidStatus Tpm2NvWrite (Tpm2Ctx *ctx, uint32_t nv_index, size_t size, uint16_t offset, void const *data)
 Performs TPM2_NV_Write TPM command. More...
 
EpidStatus Tpm2NvRead (Tpm2Ctx *ctx, uint32_t nv_index, size_t size, uint16_t offset, void *data)
 Performs TPM2_NV_Read TPM command. More...
 
EpidStatus Tpm2Sign (Tpm2Ctx *ctx, void const *digest, size_t digest_len, uint16_t counter, FfElement *k, FfElement *s)
 Performs TPM2_Sign TPM command. More...
 
EpidStatus Tpm2ReleaseCounter (Tpm2Ctx *ctx, uint16_t counter)
 Erases random r value assosiated with counter. More...
 
+

Detailed Description

+

Internal interface that models TPM 2.0 interfaces.

+

Provides an interface that represents operations that can be directly translated to operations on TPM 2.0 devices.

+

Function Documentation

+ +

◆ Tpm2Commit()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Tpm2Commit (Tpm2Ctxctx,
EcPoint const * p1,
void const * s2,
size_t s2_len,
FfElement const * y2,
EcPointk,
EcPointl,
EcPointe,
uint16_t * counter 
)
+
+ +

Performs TPM2_Commit TPM operation.

+

Generates random r and compute K, L and E points.

+
Parameters
+ + + + + + + + + + +
[in]ctxThe TPM context.
[in]p1A point P1 on G1 curve.
[in]s2Octet array used to derive x-coordinate of a point P2.
[in]s2_lenLength of s2 buffer.
[in]y2y coordinate of the point associated with s2.
[out]kResult of G1.exp(P2, private key f).
[out]lResult of G1.exp(P2, random r).
[out]eResult of G1.exp(P1, random r).
[out]counterA value associated with the random r. Should be initialized with zero.
+
+
+
Returns
EpidStatus
+
See also
Tpm2CreateContext
+ +
+
+ +

◆ Tpm2CreateContext()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Tpm2CreateContext (MemberParams const * params,
Epid2Params_ const * epid2_params,
BitSupplierrnd_func,
void ** rnd_param,
const FpElemStr ** f,
Tpm2Ctx ** ctx 
)
+
+ +

Creates a new Tpm context.

+

Must be called to create the TPM context that is used by other TPM APIs.

+

You need to use a cryptographically secure random number generator to create a TPM context. The BitSupplier is provided as a function prototype for your own implementation of the random number generator.

+

Tpm2DeleteContext must be called to safely release the TPM context.

+
Parameters
+ + + + + + + +
[in]paramsmember parameters to initialize rnd_func, rnd_param, ff_elem, ctx.
[in]epid2_paramsThe field and group parameters.
[out]rnd_funcrandom function if exists in MemberParms
[out]rnd_paramrandom parameters if exists in MemberParms
[out]fseed f if exists in MemberParams
[out]ctxNewly constructed TPM context.
+
+
+
Returns
EpidStatus
+
See also
Tpm2DeleteContext
+ +
+
+ +

◆ Tpm2DeleteContext()

+ +
+
+ + + + + + + + +
void Tpm2DeleteContext (Tpm2Ctx ** ctx)
+
+ +

Deletes an existing Tpm context.

+

Must be called to safely release a TPM context created using Tpm2CreateContext.

+

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

+
Parameters
+ + +
[in,out]ctxThe TPM context. Can be NULL.
+
+
+
See also
Tpm2CreateContext
+ +
+
+ +

◆ Tpm2GetRandom()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Tpm2GetRandom (Tpm2Ctxctx,
int const num_bits,
void * random_data 
)
+
+ +

Get random data.

+

This command returns the next num_bits from the random number generator (RNG).

+
Parameters
+ + + + +
[in,out]ctxTPM context.
[in]num_bitsNumber of bits to return.
[out]random_dataOutput random bits.
+
+
+
Returns
EpidStatus
+
See also
Tpm2CreateContext
+ +
+
+ +

◆ Tpm2LoadExternal()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus Tpm2LoadExternal (Tpm2Ctxctx,
FpElemStr const * f_str 
)
+
+ +

Invokes TPM2_LoadExternal command.

+

This command is used to load an object that is not a Protected Object into the TPM. The command allows loading of a public area or both a public and sensitive area.

+
Parameters
+ + + +
[in,out]ctxTPM context.
[in]f_strThe f value of the member private key.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ Tpm2NvDefineSpace()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Tpm2NvDefineSpace (Tpm2Ctxctx,
uint32_t nv_index,
size_t size 
)
+
+ +

Performs TPM2_NV_DefineSpace TPM command.

+
Parameters
+ + + + +
[in]ctxThe TPM context.
[in]nv_indexHandle of the data area.
[in]sizeSize of the data area.
+
+
+
Returns
EpidStatus
+
See also
Tpm2NvRead
+
+Tpm2NvWrite
+ +
+
+ +

◆ Tpm2NvRead()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Tpm2NvRead (Tpm2Ctxctx,
uint32_t nv_index,
size_t size,
uint16_t offset,
void * data 
)
+
+ +

Performs TPM2_NV_Read TPM command.

+
Parameters
+ + + + + + +
[in]ctxThe TPM context.
[in]nv_indexNV Index to be read.
[in]sizeNumber of bytes to read.
[in]offsetOffset into the area.
[out]dataData read.
+
+
+
Returns
EpidStatus
+
See also
Tpm2NvWrite
+ +
+
+ +

◆ Tpm2NvUndefineSpace()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus Tpm2NvUndefineSpace (Tpm2Ctxctx,
uint32_t nv_index 
)
+
+ +

Performs TPM2_NV_UndefineSpace TPM command.

+
Parameters
+ + + +
[in]ctxThe TPM context.
[in]nv_indexHandle of the data area to undefine.
+
+
+
Returns
EpidStatus
+
See also
Tpm2NvDefineSpace
+ +
+
+ +

◆ Tpm2NvWrite()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Tpm2NvWrite (Tpm2Ctxctx,
uint32_t nv_index,
size_t size,
uint16_t offset,
void const * data 
)
+
+ +

Performs TPM2_NV_Write TPM command.

+

An area in NV memory must be defined prior writing.

+
Parameters
+ + + + + + +
[in]ctxThe TPM context.
[in]nv_indexNV Index to be write.
[in]sizeNumber of bytes to write.
[in]offsetOffset into the area.
[in]dataData to write.
+
+
+
Returns
EpidStatus
+
See also
Tpm2NvDefineSpace
+ +
+
+ +

◆ Tpm2ReleaseCounter()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus Tpm2ReleaseCounter (Tpm2Ctxctx,
uint16_t counter 
)
+
+ +

Erases random r value assosiated with counter.

+
Parameters
+ + + +
[in]ctxThe TPM context.
[in]counterTo be released value associated with the random r generated during TPM2_Commit.
+
+
+
Note
This function should be used if Tpm2Sign wasn't called after Tpm2Commit which created counter.
+
Returns
EpidStatus
+
See also
Tpm2Commit
+ +
+
+ +

◆ Tpm2ResetContext()

+ +
+
+ + + + + + + + +
void Tpm2ResetContext (Tpm2Ctx ** ctx)
+
+ +

Reset an existing Tpm context.

+

Must be called to reset a TPM context created using Tpm2CreateContext.

+

Re-initializes the context, reset memory used for primary key.

+
Parameters
+ + +
[in,out]ctxThe TPM context. Can be NULL.
+
+
+
See also
Tpm2CreateContext
+ +
+
+ +

◆ Tpm2SetHashAlg()

+ +
+
+ + + + + + + + + + + + + + + + + + +
EpidStatus Tpm2SetHashAlg (Tpm2Ctxctx,
HashAlg hash_alg 
)
+
+ +

Sets the hash algorithm to be used by a TPM2.

+
Parameters
+ + + +
[in]ctxThe TPM2 context.
[in]hash_algThe hash algorithm to use.
+
+
+
Returns
EpidStatus
+ +
+
+ +

◆ Tpm2Sign()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EpidStatus Tpm2Sign (Tpm2Ctxctx,
void const * digest,
size_t digest_len,
uint16_t counter,
FfElementk,
FfElements 
)
+
+ +

Performs TPM2_Sign TPM command.

+

Calculate a pair (k, s) an ECDAA signature.

+

Private key f must exist in the TPM context.

+
Parameters
+ + + + + + + +
[in]ctxThe TPM context.
[in]digestDigest to be signed.
[in]digest_lenThe size of digest in bytes.
[in]counterA value associated with the random r generated during TPM2_Commit.
[out]kThe ECDAA signature k value. Nonce produced by the TPM during signing.
[out]sThe ECDAA signature s value.
+
+
+
Returns
EpidStatus
+
See also
Tpm2CreateContext
+
+Tpm2Commit
+ +
+
+
+
+ + + + + diff --git a/doc/html/group___tpm2_module.js b/doc/html/group___tpm2_module.js new file mode 100644 index 0000000000000000000000000000000000000000..6f085a0e046b2de9f6300d792bec761687238407 --- /dev/null +++ b/doc/html/group___tpm2_module.js @@ -0,0 +1,16 @@ +var group___tpm2_module = +[ + [ "Tpm2Commit", "group___tpm2_module.html#ga750e38b6d6cea1b05f605e476df065d9", null ], + [ "Tpm2CreateContext", "group___tpm2_module.html#ga11a523e65eee3c7ad1ab21239329ce3e", null ], + [ "Tpm2DeleteContext", "group___tpm2_module.html#ga38f47cba4c26320db06aa50a77590ef4", null ], + [ "Tpm2GetRandom", "group___tpm2_module.html#gae7f35aaf9045e4e21bc2ec56e384fcf6", null ], + [ "Tpm2LoadExternal", "group___tpm2_module.html#gac2507260f635a9c7abd9113cda6918f9", null ], + [ "Tpm2NvDefineSpace", "group___tpm2_module.html#gadee3a48d63f03d55ea5f02e48d169326", null ], + [ "Tpm2NvRead", "group___tpm2_module.html#ga2ec34e65adaf46a14a78f24a7fd0e4dd", null ], + [ "Tpm2NvUndefineSpace", "group___tpm2_module.html#ga38ca781a9a0126223456e677f40e1d22", null ], + [ "Tpm2NvWrite", "group___tpm2_module.html#gabfe5ccf53b8ecb8e2f2b367a39f6e5cc", null ], + [ "Tpm2ReleaseCounter", "group___tpm2_module.html#gac3735163276efa0da4b793ba935513bb", null ], + [ "Tpm2ResetContext", "group___tpm2_module.html#ga8ee4fed3e1a4dd0c910102430fca8c81", null ], + [ "Tpm2SetHashAlg", "group___tpm2_module.html#ga11cc131debbca60c0de7e53d48330b69", null ], + [ "Tpm2Sign", "group___tpm2_module.html#ga035c8ffba3182ba75a38131e23bb31c7", null ] +]; \ No newline at end of file diff --git a/doc/html/hash_8h.html b/doc/html/hash_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..4bb18117efd2b55601cca3c66373186d54f04f13 --- /dev/null +++ b/doc/html/hash_8h.html @@ -0,0 +1,104 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/common/math/hash.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
hash.h File Reference
+
+
+ +

Hash primitives. +More...

+
#include <limits.h>
+#include <stddef.h>
+#include <stdint.h>
+#include "epid/common/errors.h"
+
+ + + + +

+Data Structures

struct  Sha256Digest
 SHA256 digest. More...
 
+ + + + +

+Functions

EpidStatus Sha256MessageDigest (void const *msg, size_t len, Sha256Digest *digest)
 Computes SHA256 digest of a message. More...
 
+

Detailed Description

+

Hash primitives.

+
+
+ + + + + diff --git a/doc/html/hashwrap_8h.html b/doc/html/hashwrap_8h.html new file mode 100644 index 0000000000000000000000000000000000000000..57e22e7a6cefc15c45a34fc2667619734767016a --- /dev/null +++ b/doc/html/hashwrap_8h.html @@ -0,0 +1,264 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: epid/member/tiny/math/hashwrap.h File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+ +
+
hashwrap.h File Reference
+
+
+ +

Decleration of hash wrap function. +More...

+ + + + + + + + +

+Data Structures

union  sha_digest
 Sha Digest Element. More...
 
struct  tiny_sha
 Tiny Sha wrapper Element. More...
 
+ + + + + + + + + + + + + +

+Functions

void tinysha_init (HashAlg sha_type, tiny_sha *s)
 Initializes the hash state. More...
 
void tinysha_update (tiny_sha *s, void const *data, size_t data_length)
 Hashes data into state using a chosen hash algorithm. More...
 
void tinysha_final (unsigned char *digest, tiny_sha *s)
 Computes the hash algorithm in the digest buffer. More...
 
size_t tinysha_digest_size (tiny_sha *s)
 Returns size of digest depending on hash algorithm. More...
 
+

Detailed Description

+

Decleration of hash wrap function.

+

Function Documentation

+ +

◆ tinysha_digest_size()

+ +
+
+ + + + + + + + +
size_t tinysha_digest_size (tiny_shas)
+
+ +

Returns size of digest depending on hash algorithm.

+
Parameters
+ + +
[in]sThe hash state. Must be non-null or behavior is undefined.
+
+
+
Returns
Size of digest
+ +
+
+ +

◆ tinysha_final()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void tinysha_final (unsigned char * digest,
tiny_shas 
)
+
+ +

Computes the hash algorithm in the digest buffer.

+
Parameters
+ + + +
[out]digestThe computed digest. Must be non-null or behavior is undefined.
[in]sThe hash state. Must be non-null or behavior is undefined.
+
+
+ +
+
+ +

◆ tinysha_init()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void tinysha_init (HashAlg sha_type,
tiny_shas 
)
+
+ +

Initializes the hash state.

+
Parameters
+ + + +
[in]sha_typeType of hash algorithm
[in,out]sThe hash state to initialize.
+
+
+ +
+
+ +

◆ tinysha_update()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void tinysha_update (tiny_shas,
void const * data,
size_t data_length 
)
+
+ +

Hashes data into state using a chosen hash algorithm.

+
Parameters
+ + + + +
[in,out]sThe hash state. Must be non-null or behavior is undefined.
[in]dataThe data to hash into s.
[in]data_lengthThe size of data in bytes.
+
+
+ +
+
+
+
+ + + + + diff --git a/doc/html/how__validated_8dox.html b/doc/html/how__validated_8dox.html new file mode 100644 index 0000000000000000000000000000000000000000..d24119dd590b66a9aa2d09eb27c51db4646c298d --- /dev/null +++ b/doc/html/how__validated_8dox.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: doc/docsrc/how_validated.dox File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
doc/docsrc/how_validated.dox File Reference
+
+
+ +

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

+

Detailed Description

+

This file is used by Doxygen to generate documentation.

+
+
+ + + + + diff --git a/doc/html/implementation__notes_8dox.html b/doc/html/implementation__notes_8dox.html new file mode 100644 index 0000000000000000000000000000000000000000..01caf4f4a89dfc394efe733a3a82d65ff9b43546 --- /dev/null +++ b/doc/html/implementation__notes_8dox.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: doc/docsrc/implementation_notes.dox File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
doc/docsrc/implementation_notes.dox File Reference
+
+
+ +

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

+

Detailed Description

+

This file is used by Doxygen to generate documentation.

+
+
+ + + + + diff --git a/doc/html/implementing_member.png b/doc/html/implementing_member.png new file mode 100644 index 0000000000000000000000000000000000000000..ceb8bbb4cbaf0fe776dc51a0fc58648d41bcd8ee Binary files /dev/null and b/doc/html/implementing_member.png differ diff --git a/doc/html/index.html b/doc/html/index.html new file mode 100644 index 0000000000000000000000000000000000000000..bbf8a5872f0e1f236ee7ef36d80ec72aff083b55 --- /dev/null +++ b/doc/html/index.html @@ -0,0 +1,90 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: Introducing the Intel® EPID SDK + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
Introducing the Intel® EPID SDK
+
+
+

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

+

The Intel® EPID Software Development Kit provides an implementation of the Intel® EPID specification that developers can use when developing their own applications using Intel® EPID technology.

+

+Getting Started

+

If you are learning to use the SDK, we recommend the following approach:

+
    +
  1. Get the Big Picture The Introduction to the Intel® EPID Scheme provides a non-implementation-specific overview of the interactions between the issuer, member, and verifier.
  2. +
  3. Build the SDK For instructions, refer to Building from Source. For help installing the prerequisite build tools, refer to Guide to Installing Build Tools.
  4. +
  5. Run the SDK Samples with Test Data After you build the SDK, you can follow along with the commands in the implementation specific Signing and Verification Tutorial, using the provided samples and the test data from Test Data.
  6. +
  7. Check out the Code Examples Refer to Generating an Intel® EPID Signature and Verifying an Intel® EPID Signature to see how SDK APIs are used by the code examples signmsg and verifysig.
  8. +
  9. Check out the API Reference The API reference shows you how to use all APIs included in the SDK.
  10. +
+
+
+ + + + + diff --git a/doc/html/issuer__material_8dox.html b/doc/html/issuer__material_8dox.html new file mode 100644 index 0000000000000000000000000000000000000000..6312fb24521ec112f82936d46a8421e31ae9e556 --- /dev/null +++ b/doc/html/issuer__material_8dox.html @@ -0,0 +1,84 @@ + + + + + + + +Intel® Enhanced Privacy ID SDK: doc/docsrc/issuer_material.dox File Reference + + + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+
doc/docsrc/issuer_material.dox File Reference
+
+
+ +

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

+

Detailed Description

+

This file is used by Doxygen to generate documentation.

+
+
+ + + + + diff --git a/doc/html/jquery.js b/doc/html/jquery.js new file mode 100644 index 0000000000000000000000000000000000000000..2771c749a4f4e12b7d824f08fc514d6fd1f52605 --- /dev/null +++ b/doc/html/jquery.js @@ -0,0 +1,115 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('