<!-- HTML header for doxygen 1.8.10-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.14"/>
<title>Intel&reg; Enhanced Privacy ID SDK: Introducing the Intel&reg; EPID SDK</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  $(document).ready(initResizable);
/* @license-end */</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="epidstyle.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname"><a 
                            onclick="storeLink('index.html')"
                            id="projectlink" 
                            class="index.html" 
                            href="index.html">Intel&reg; Enhanced Privacy ID SDK</a>
&#160;<span id="projectnumber">6.0.1</span>
</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.14 -->
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('index.html','');});
/* @license-end */
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">Introducing the Intel&reg; EPID SDK </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Intel&reg; EPID is a cryptographic protocol which enables the remote authentication of a trusted platform whilst preserving the user's privacy.</p>
<p>The Intel&reg; EPID Software Development Kit provides an implementation of the Intel&reg; EPID specification that developers can use when developing their own applications using Intel&reg; EPID technology.</p>
<h1><a class="anchor" id="mainpage_roadmap"></a>
Getting Started</h1>
<p>If you are learning to use the SDK, we recommend the following approach:</p>
<ol type="1">
<li><b>Get the Big Picture</b> The <a class="el" href="_epid_overview.html">Introduction to the Intel&reg; EPID Scheme</a> provides a non-implementation-specific overview of the interactions between the issuer, member, and verifier.</li>
<li><b>Build the SDK</b> For instructions, refer to <a class="el" href="_building_sdk.html">Building from Source</a>. For help installing the prerequisite build tools, refer to <a class="el" href="_build_tools_installation.html">Guide to Installing Build Tools</a>.</li>
<li><b>Run the SDK Samples with Test Data</b> After you build the SDK, you can follow along with the commands in the implementation specific <a class="el" href="_sign_verify_tutorial.html">Signing and Verification Tutorial</a>, using the provided samples and the test data from <a class="el" href="_issuer_material.html">Test Data</a>.</li>
<li><b>Check out the Code Examples</b> Refer to <a class="el" href="_user_manual__generating_an_intel_epid_signature.html">Generating an Intel&reg; EPID Signature</a> and <a class="el" href="_user_manual__verifying_an_intel_epid_signature.html">Verifying an Intel&reg; EPID Signature</a> to see how SDK APIs are used by the code examples <code>signmsg</code> and <code>verifysig</code>.</li>
<li><b>Check out the API Reference</b> The API reference shows you how to use all APIs included in the SDK. </li>
</ol>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.10-->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">
      &copy; 2016-2017 Intel Corporation
    </li>
  </ul>
</div>
</body>
</html>
