Sophie

Sophie

distrib > Fedora > 16 > i386 > by-pkgid > 2960693a094bda8c46295e1ed789379a > files > 21

libp11-devel-0.2.8-1.fc16.i686.rpm

<!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"/>
<title>libp11: libp11.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.4 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">libp11&#160;<span id="projectnumber">0.2.8</span></div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">libp11.h</div>  </div>
</div>
<div class="contents">
<a href="libp11_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* libp11, a simple layer on to of PKCS#11 API</span>
<a name="l00002"></a>00002 <span class="comment"> * Copyright (C) 2005 Olaf Kirch &lt;okir@lst.de&gt;</span>
<a name="l00003"></a>00003 <span class="comment"> *</span>
<a name="l00004"></a>00004 <span class="comment"> *  This library is free software; you can redistribute it and/or</span>
<a name="l00005"></a>00005 <span class="comment"> *  modify it under the terms of the GNU Lesser General Public</span>
<a name="l00006"></a>00006 <span class="comment"> *  License as published by the Free Software Foundation; either</span>
<a name="l00007"></a>00007 <span class="comment"> *  version 2.1 of the License, or (at your option) any later version.</span>
<a name="l00008"></a>00008 <span class="comment"> *</span>
<a name="l00009"></a>00009 <span class="comment"> *  This library is distributed in the hope that it will be useful,</span>
<a name="l00010"></a>00010 <span class="comment"> *  but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00011"></a>00011 <span class="comment"> *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
<a name="l00012"></a>00012 <span class="comment"> *  Lesser General Public License for more details.</span>
<a name="l00013"></a>00013 <span class="comment"> *</span>
<a name="l00014"></a>00014 <span class="comment"> *  You should have received a copy of the GNU Lesser General Public</span>
<a name="l00015"></a>00015 <span class="comment"> *  License along with this library; if not, write to the Free Software</span>
<a name="l00016"></a>00016 <span class="comment"> *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA</span>
<a name="l00017"></a>00017 <span class="comment"> */</span>
<a name="l00018"></a>00018 
<a name="l00024"></a>00024 <span class="preprocessor">#ifndef _LIB11_H</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#define _LIB11_H</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span>
<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;openssl/bio.h&gt;</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;openssl/err.h&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;openssl/x509.h&gt;</span>
<a name="l00030"></a>00030 
<a name="l00031"></a>00031 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {
<a name="l00033"></a>00033 <span class="preprocessor">#endif</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span>
<a name="l00035"></a>00035 <span class="comment">/* get some structures for local code to handle pkcs11 data readily */</span>
<a name="l00036"></a>00036 <span class="preprocessor">#define ERR_LIB_PKCS11  ERR_LIB_USER</span>
<a name="l00037"></a>00037 <span class="preprocessor"></span>
<a name="l00038"></a>00038 <span class="preprocessor">#define PKCS11err(f,r) \</span>
<a name="l00039"></a>00039 <span class="preprocessor">ERR_PUT_error(ERR_LIB_PKCS11,(f),(r),__FILE__,__LINE__)</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span>
<a name="l00041"></a>00041 <span class="comment">/*</span>
<a name="l00042"></a>00042 <span class="comment"> * The purpose of this library is to provide a simple PKCS11</span>
<a name="l00043"></a>00043 <span class="comment"> * interface to OpenSSL application that wish to use a previously</span>
<a name="l00044"></a>00044 <span class="comment"> * initialized card (as opposed to initializing it, etc).</span>
<a name="l00045"></a>00045 <span class="comment"> *</span>
<a name="l00046"></a>00046 <span class="comment"> * I am therefore making some simplifying assumptions:</span>
<a name="l00047"></a>00047 <span class="comment"> *</span>
<a name="l00048"></a>00048 <span class="comment"> *  -   no support for any operations that alter the card,</span>
<a name="l00049"></a>00049 <span class="comment"> *      i.e. readonly-login</span>
<a name="l00050"></a>00050 <span class="comment"> */</span>
<a name="l00051"></a>00051 
<a name="l00053"></a><a class="code" href="structPKCS11__key__st.html">00053</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structPKCS11__key__st.html" title="PKCS11 key object (public or private)">PKCS11_key_st</a> {
<a name="l00054"></a>00054         <span class="keywordtype">char</span> *label;
<a name="l00055"></a>00055         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *id;
<a name="l00056"></a>00056         <span class="keywordtype">size_t</span> id_len;
<a name="l00057"></a><a class="code" href="structPKCS11__key__st.html#a5b9e2aa40bd8546c2f3d0110165f3927">00057</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="structPKCS11__key__st.html#a5b9e2aa40bd8546c2f3d0110165f3927" title="private key present?">isPrivate</a>;        
<a name="l00058"></a><a class="code" href="structPKCS11__key__st.html#ab1656226389010feadc03348f1c832e2">00058</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="structPKCS11__key__st.html#ab1656226389010feadc03348f1c832e2" title="login to read private key?">needLogin</a>;        
<a name="l00059"></a><a class="code" href="structPKCS11__key__st.html#a42020737d705e28bdf80fc3d0a596ec4">00059</a>         EVP_PKEY *<a class="code" href="structPKCS11__key__st.html#a42020737d705e28bdf80fc3d0a596ec4" title="initially NULL, need to call PKCS11_load_key">evp_key</a>;              
<a name="l00060"></a>00060         <span class="keywordtype">void</span> *_private;
<a name="l00061"></a>00061 } <a class="code" href="libp11_8h.html#a2739b52617b9de6366d0ff5942d50a3c" title="PKCS11 key object (public or private)">PKCS11_KEY</a>;
<a name="l00062"></a>00062 
<a name="l00064"></a><a class="code" href="structPKCS11__cert__st.html">00064</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structPKCS11__cert__st.html" title="PKCS11 certificate object.">PKCS11_cert_st</a> {
<a name="l00065"></a>00065         <span class="keywordtype">char</span> *label;
<a name="l00066"></a>00066         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *id;
<a name="l00067"></a>00067         <span class="keywordtype">size_t</span> id_len;
<a name="l00068"></a>00068         X509 *x509;
<a name="l00069"></a>00069         <span class="keywordtype">void</span> *_private;
<a name="l00070"></a>00070 } <a class="code" href="libp11_8h.html#a022695b6b9ac716e3a6c013c4a69ad5f" title="PKCS11 certificate object.">PKCS11_CERT</a>;
<a name="l00071"></a>00071 
<a name="l00073"></a><a class="code" href="structPKCS11__token__st.html">00073</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structPKCS11__token__st.html" title="PKCS11 token: smart card or USB key.">PKCS11_token_st</a> {
<a name="l00074"></a>00074         <span class="keywordtype">char</span> *label;
<a name="l00075"></a>00075         <span class="keywordtype">char</span> *manufacturer;
<a name="l00076"></a>00076         <span class="keywordtype">char</span> *model;
<a name="l00077"></a>00077         <span class="keywordtype">char</span> *serialnr;
<a name="l00078"></a>00078         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> initialized;
<a name="l00079"></a>00079         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> loginRequired;
<a name="l00080"></a>00080         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> secureLogin;
<a name="l00081"></a>00081         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> userPinSet;
<a name="l00082"></a>00082         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> readOnly;
<a name="l00083"></a>00083         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> hasRng;
<a name="l00084"></a>00084         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> userPinCountLow;
<a name="l00085"></a>00085         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> userPinFinalTry;
<a name="l00086"></a>00086         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> userPinLocked;
<a name="l00087"></a>00087         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> userPinToBeChanged;
<a name="l00088"></a>00088         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> soPinCountLow;
<a name="l00089"></a>00089         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> soPinFinalTry;
<a name="l00090"></a>00090         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> soPinLocked;
<a name="l00091"></a>00091         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> soPinToBeChanged;
<a name="l00092"></a>00092         <span class="keywordtype">void</span> *_private;
<a name="l00093"></a>00093 } <a class="code" href="libp11_8h.html#a00e358ca0e95d6845a5f4f3e64d9edc3" title="PKCS11 token: smart card or USB key.">PKCS11_TOKEN</a>;
<a name="l00094"></a>00094 
<a name="l00096"></a><a class="code" href="structPKCS11__slot__st.html">00096</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structPKCS11__slot__st.html" title="PKCS11 slot: card reader.">PKCS11_slot_st</a> {
<a name="l00097"></a>00097         <span class="keywordtype">char</span> *manufacturer;
<a name="l00098"></a>00098         <span class="keywordtype">char</span> *description;
<a name="l00099"></a>00099         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> removable;
<a name="l00100"></a><a class="code" href="structPKCS11__slot__st.html#a45bfe32154f2d90876ba4b8f9ce193f0">00100</a>         <a class="code" href="structPKCS11__token__st.html" title="PKCS11 token: smart card or USB key.">PKCS11_TOKEN</a> *<a class="code" href="structPKCS11__slot__st.html#a45bfe32154f2d90876ba4b8f9ce193f0" title="NULL if no token present.">token</a>;    
<a name="l00101"></a>00101         <span class="keywordtype">void</span> *_private;
<a name="l00102"></a>00102 } <a class="code" href="libp11_8h.html#a61c0040c249eadb219fbadb5a02bd1c6" title="PKCS11 slot: card reader.">PKCS11_SLOT</a>;
<a name="l00103"></a>00103 
<a name="l00105"></a><a class="code" href="structPKCS11__ctx__st.html">00105</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structPKCS11__ctx__st.html" title="PKCS11 context.">PKCS11_ctx_st</a> {
<a name="l00106"></a>00106         <span class="keywordtype">char</span> *manufacturer;
<a name="l00107"></a>00107         <span class="keywordtype">char</span> *description;
<a name="l00108"></a>00108         <span class="keywordtype">void</span> *_private;
<a name="l00109"></a>00109 } <a class="code" href="libp11_8h.html#aac0a9aa96d0ea1b27c685f766b5eb395" title="PKCS11 context.">PKCS11_CTX</a>;
<a name="l00110"></a>00110 
<a name="l00117"></a>00117 <span class="keyword">extern</span> <a class="code" href="structPKCS11__ctx__st.html" title="PKCS11 context.">PKCS11_CTX</a> *<a class="code" href="libp11_8h.html#a49b91ca17a5ef832582ad75b3fa2cf95" title="Create a new libp11 context.">PKCS11_CTX_new</a>(<span class="keywordtype">void</span>);
<a name="l00118"></a>00118 
<a name="l00124"></a>00124 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="libp11_8h.html#ab9f413f6367beff7140d4c065e76c032" title="Specify any private PKCS#11 module initializtion args, if necessary.">PKCS11_CTX_init_args</a>(<a class="code" href="structPKCS11__ctx__st.html" title="PKCS11 context.">PKCS11_CTX</a> * ctx, <span class="keyword">const</span> <span class="keywordtype">char</span> * init_args);
<a name="l00125"></a>00125 
<a name="l00134"></a>00134 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="libp11_8h.html#acc706b0400ae759a21c8522d6a0b48af" title="Load a PKCS#11 module.">PKCS11_CTX_load</a>(<a class="code" href="structPKCS11__ctx__st.html" title="PKCS11 context.">PKCS11_CTX</a> * ctx, <span class="keyword">const</span> <span class="keywordtype">char</span> * ident);
<a name="l00135"></a>00135 
<a name="l00141"></a>00141 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="libp11_8h.html#a6a798ab2361de5e5823b58eca38bd464" title="Unload a PKCS#11 module.">PKCS11_CTX_unload</a>(<a class="code" href="structPKCS11__ctx__st.html" title="PKCS11 context.">PKCS11_CTX</a> * ctx);
<a name="l00142"></a>00142 
<a name="l00148"></a>00148 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="libp11_8h.html#a13f672d0022b00601ccf97b8c5856b1e" title="Free a libp11 context.">PKCS11_CTX_free</a>(<a class="code" href="structPKCS11__ctx__st.html" title="PKCS11 context.">PKCS11_CTX</a> * ctx);
<a name="l00149"></a>00149 
<a name="l00157"></a>00157 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="libp11_8h.html#adf4c7d6a3378e442df1d0cb1bd036d7f" title="Open a session in RO or RW mode.">PKCS11_open_session</a>(<a class="code" href="structPKCS11__slot__st.html" title="PKCS11 slot: card reader.">PKCS11_SLOT</a> * slot, <span class="keywordtype">int</span> rw);
<a name="l00158"></a>00158 
<a name="l00168"></a>00168 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="libp11_8h.html#a8e47e93e634e3c6bb900b4bbf81a990c" title="Get a list of all slots.">PKCS11_enumerate_slots</a>(<a class="code" href="structPKCS11__ctx__st.html" title="PKCS11 context.">PKCS11_CTX</a> * ctx,
<a name="l00169"></a>00169                         <a class="code" href="structPKCS11__slot__st.html" title="PKCS11 slot: card reader.">PKCS11_SLOT</a> **slotsp, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *nslotsp);
<a name="l00170"></a>00170 
<a name="l00177"></a>00177 <span class="keyword">extern</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="libp11_8h.html#a07bfde5c325cd03a63db1fcbc05f74fe" title="Get the slot_id from a slot as it is stored in private.">PKCS11_get_slotid_from_slot</a>(<a class="code" href="structPKCS11__slot__st.html" title="PKCS11 slot: card reader.">PKCS11_SLOT</a> *slotp);
<a name="l00178"></a>00178 
<a name="l00186"></a>00186 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="libp11_8h.html#ad67b35aba341a80d5c7f6c8a06eaa762" title="Free the list of slots allocated by PKCS11_enumerate_slots()">PKCS11_release_all_slots</a>(<a class="code" href="structPKCS11__ctx__st.html" title="PKCS11 context.">PKCS11_CTX</a> * ctx,
<a name="l00187"></a>00187                         <a class="code" href="structPKCS11__slot__st.html" title="PKCS11 slot: card reader.">PKCS11_SLOT</a> *slots, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nslots);
<a name="l00188"></a>00188 
<a name="l00198"></a>00198 <a class="code" href="structPKCS11__slot__st.html" title="PKCS11 slot: card reader.">PKCS11_SLOT</a> *<a class="code" href="libp11_8h.html#afe380f5197afb04cf1b1430b50d58eed" title="Find the first slot with a token.">PKCS11_find_token</a>(<a class="code" href="structPKCS11__ctx__st.html" title="PKCS11 context.">PKCS11_CTX</a> * ctx, 
<a name="l00199"></a>00199                         <a class="code" href="structPKCS11__slot__st.html" title="PKCS11 slot: card reader.">PKCS11_SLOT</a> *slots, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nslots);
<a name="l00200"></a>00200 
<a name="l00210"></a>00210 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="libp11_8h.html#a59e897cb7af9e5e645552f0738fae162" title="Authenticate to the card.">PKCS11_login</a>(<a class="code" href="structPKCS11__slot__st.html" title="PKCS11 slot: card reader.">PKCS11_SLOT</a> * slot, <span class="keywordtype">int</span> so, <span class="keyword">const</span> <span class="keywordtype">char</span> *pin);
<a name="l00211"></a>00211 
<a name="l00219"></a>00219 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="libp11_8h.html#afeec15512293e545c9984d8f7fdeef51" title="De-authenticate from the card.">PKCS11_logout</a>(<a class="code" href="structPKCS11__slot__st.html" title="PKCS11 slot: card reader.">PKCS11_SLOT</a> * slot);
<a name="l00220"></a>00220 
<a name="l00221"></a>00221 <span class="comment">/* Get a list of all keys associated with this token */</span>
<a name="l00222"></a>00222 <span class="keyword">extern</span> <span class="keywordtype">int</span> PKCS11_enumerate_keys(<a class="code" href="structPKCS11__token__st.html" title="PKCS11 token: smart card or USB key.">PKCS11_TOKEN</a> *, <a class="code" href="structPKCS11__key__st.html" title="PKCS11 key object (public or private)">PKCS11_KEY</a> **, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *);
<a name="l00223"></a>00223 
<a name="l00224"></a>00224 <span class="comment">/* Get the key type (as EVP_PKEY_XXX) */</span>
<a name="l00225"></a>00225 <span class="keyword">extern</span> <span class="keywordtype">int</span> PKCS11_get_key_type(<a class="code" href="structPKCS11__key__st.html" title="PKCS11 key object (public or private)">PKCS11_KEY</a> *);
<a name="l00226"></a>00226 
<a name="l00227"></a>00227 <span class="comment">/* Get size of key modulus in number of bytes */</span>
<a name="l00228"></a>00228 <span class="keyword">extern</span> <span class="keywordtype">int</span> PKCS11_get_key_size(<span class="keyword">const</span> <a class="code" href="structPKCS11__key__st.html" title="PKCS11 key object (public or private)">PKCS11_KEY</a> *);
<a name="l00229"></a>00229 <span class="comment">/* Get actual modules and public exponent as BIGNUM */</span>
<a name="l00230"></a>00230 <span class="keyword">extern</span> <span class="keywordtype">int</span> PKCS11_get_key_modulus(<a class="code" href="structPKCS11__key__st.html" title="PKCS11 key object (public or private)">PKCS11_KEY</a> *, BIGNUM **);
<a name="l00231"></a>00231 <span class="keyword">extern</span> <span class="keywordtype">int</span> PKCS11_get_key_exponent(<a class="code" href="structPKCS11__key__st.html" title="PKCS11 key object (public or private)">PKCS11_KEY</a> *, BIGNUM **);
<a name="l00232"></a>00232 
<a name="l00233"></a>00233 <span class="comment">/* Get the enveloped private key */</span>
<a name="l00243"></a>00243 <span class="keyword">extern</span> EVP_PKEY *<a class="code" href="libp11_8h.html#a030d908a0b000fa101409ba24a784d18" title="Returns a EVP_PKEY object for the private key.">PKCS11_get_private_key</a>(<a class="code" href="structPKCS11__key__st.html" title="PKCS11 key object (public or private)">PKCS11_KEY</a> *key);
<a name="l00253"></a>00253 <span class="keyword">extern</span> EVP_PKEY *<a class="code" href="libp11_8h.html#a4875d0a8867b3ccc821517a55b48991d" title="Returns a EVP_PKEY object with the public key.">PKCS11_get_public_key</a>(<a class="code" href="structPKCS11__key__st.html" title="PKCS11 key object (public or private)">PKCS11_KEY</a> *key);
<a name="l00254"></a>00254 
<a name="l00255"></a>00255 <span class="comment">/* Find the corresponding certificate (if any) */</span>
<a name="l00256"></a>00256 <span class="keyword">extern</span> <a class="code" href="structPKCS11__cert__st.html" title="PKCS11 certificate object.">PKCS11_CERT</a> *PKCS11_find_certificate(<a class="code" href="structPKCS11__key__st.html" title="PKCS11 key object (public or private)">PKCS11_KEY</a> *);
<a name="l00257"></a>00257 
<a name="l00258"></a>00258 <span class="comment">/* Find the corresponding key (if any) */</span>
<a name="l00259"></a>00259 <span class="keyword">extern</span> <a class="code" href="structPKCS11__key__st.html" title="PKCS11 key object (public or private)">PKCS11_KEY</a> *PKCS11_find_key(<a class="code" href="structPKCS11__cert__st.html" title="PKCS11 certificate object.">PKCS11_CERT</a> *);
<a name="l00260"></a>00260 
<a name="l00261"></a>00261 <span class="comment">/* Get a list of all certificates associated with this token */</span>
<a name="l00262"></a>00262 <span class="keyword">extern</span> <span class="keywordtype">int</span> PKCS11_enumerate_certs(<a class="code" href="structPKCS11__token__st.html" title="PKCS11 token: smart card or USB key.">PKCS11_TOKEN</a> *, <a class="code" href="structPKCS11__cert__st.html" title="PKCS11 certificate object.">PKCS11_CERT</a> **, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *);
<a name="l00263"></a>00263 
<a name="l00273"></a>00273 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="libp11_8h.html#a766d89edea4624ddd47cf8c0fb001ab6" title="Initialize a token.">PKCS11_init_token</a>(<a class="code" href="structPKCS11__token__st.html" title="PKCS11 token: smart card or USB key.">PKCS11_TOKEN</a> * token, <span class="keyword">const</span> <span class="keywordtype">char</span> *pin,
<a name="l00274"></a>00274         <span class="keyword">const</span> <span class="keywordtype">char</span> *label);
<a name="l00275"></a>00275 
<a name="l00284"></a>00284 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="libp11_8h.html#a3918c1e173faee47e9126047af0fbf0d" title="Initialize the user PIN on a token.">PKCS11_init_pin</a>(<a class="code" href="structPKCS11__token__st.html" title="PKCS11 token: smart card or USB key.">PKCS11_TOKEN</a> * token, <span class="keyword">const</span> <span class="keywordtype">char</span> *pin);
<a name="l00285"></a>00285 
<a name="l00295"></a>00295 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="libp11_8h.html#a2e1e08029004500ceb7b45c621d4e019" title="Change the user PIN on a token.">PKCS11_change_pin</a>(<a class="code" href="structPKCS11__slot__st.html" title="PKCS11 slot: card reader.">PKCS11_SLOT</a> * slot, <span class="keyword">const</span> <span class="keywordtype">char</span> *old_pin,
<a name="l00296"></a>00296         <span class="keyword">const</span> <span class="keywordtype">char</span> *new_pin);
<a name="l00297"></a>00297 
<a name="l00311"></a>00311 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="libp11_8h.html#a48f81883c2d557099c102553544e9edc" title="Generate and store a private key on the token.">PKCS11_generate_key</a>(<a class="code" href="structPKCS11__token__st.html" title="PKCS11 token: smart card or USB key.">PKCS11_TOKEN</a> * token, <span class="keywordtype">int</span> algorithm, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bits, <span class="keywordtype">char</span> *label, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* <span class="keywordtype">id</span>, <span class="keywordtype">size_t</span> id_len);
<a name="l00312"></a>00312 
<a name="l00324"></a>00324 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="libp11_8h.html#af85502d566c59c60a5542fbc38b5d430" title="Store private key on a token.">PKCS11_store_private_key</a>(<a class="code" href="structPKCS11__token__st.html" title="PKCS11 token: smart card or USB key.">PKCS11_TOKEN</a> * token, EVP_PKEY * pk, <span class="keywordtype">char</span> *label, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *<span class="keywordtype">id</span>, <span class="keywordtype">size_t</span> id_len);
<a name="l00325"></a>00325 
<a name="l00337"></a>00337 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="libp11_8h.html#a0cb818884d9422e6ddce77a21ea43af1" title="Store public key on a token.">PKCS11_store_public_key</a>(<a class="code" href="structPKCS11__token__st.html" title="PKCS11 token: smart card or USB key.">PKCS11_TOKEN</a> * token, EVP_PKEY * pk, <span class="keywordtype">char</span> *label, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *<span class="keywordtype">id</span>, <span class="keywordtype">size_t</span> id_len);
<a name="l00338"></a>00338 
<a name="l00351"></a>00351 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="libp11_8h.html#a3bcd902b6b42b4f011bdafb2a299fbc7" title="Store certificate on a token.">PKCS11_store_certificate</a>(<a class="code" href="structPKCS11__token__st.html" title="PKCS11 token: smart card or USB key.">PKCS11_TOKEN</a> * token, X509 * x509,
<a name="l00352"></a>00352                 <span class="keywordtype">char</span> *label, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *<span class="keywordtype">id</span>, <span class="keywordtype">size_t</span> id_len,
<a name="l00353"></a>00353                 <a class="code" href="structPKCS11__cert__st.html" title="PKCS11 certificate object.">PKCS11_CERT</a> **ret_cert);
<a name="l00354"></a>00354 
<a name="l00355"></a>00355 <span class="comment">/* rsa private key operations */</span>
<a name="l00356"></a>00356 <span class="keyword">extern</span> <span class="keywordtype">int</span> PKCS11_sign(<span class="keywordtype">int</span> type, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *m, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_len,
<a name="l00357"></a>00357         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *sigret, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *siglen, <span class="keyword">const</span> <a class="code" href="structPKCS11__key__st.html" title="PKCS11 key object (public or private)">PKCS11_KEY</a> * key);
<a name="l00358"></a>00358 <span class="keyword">extern</span> <span class="keywordtype">int</span> PKCS11_private_encrypt(<span class="keywordtype">int</span> flen, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *from,
<a name="l00359"></a>00359         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *to, <span class="keyword">const</span> <a class="code" href="structPKCS11__key__st.html" title="PKCS11 key object (public or private)">PKCS11_KEY</a> * rsa, <span class="keywordtype">int</span> padding);
<a name="l00370"></a>00370 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="libp11_8h.html#ae341c01eccd0ff12fca3233a92829812" title="Decrypts data using the private key.">PKCS11_private_decrypt</a>(<span class="keywordtype">int</span> flen, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *from,
<a name="l00371"></a>00371         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *to, <a class="code" href="structPKCS11__key__st.html" title="PKCS11 key object (public or private)">PKCS11_KEY</a> * key, <span class="keywordtype">int</span> padding);
<a name="l00372"></a>00372 <span class="keyword">extern</span> <span class="keywordtype">int</span> PKCS11_verify(<span class="keywordtype">int</span> type, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *m, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_len,
<a name="l00373"></a>00373         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *signature, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> siglen, <a class="code" href="structPKCS11__key__st.html" title="PKCS11 key object (public or private)">PKCS11_KEY</a> * key);
<a name="l00374"></a>00374 
<a name="l00375"></a>00375 <span class="comment">/* access random number generator */</span>
<a name="l00376"></a>00376 <span class="keyword">extern</span> <span class="keywordtype">int</span> PKCS11_seed_random(<a class="code" href="structPKCS11__slot__st.html" title="PKCS11 slot: card reader.">PKCS11_SLOT</a> *, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *s, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> s_len);
<a name="l00377"></a>00377 <span class="keyword">extern</span> <span class="keywordtype">int</span> PKCS11_generate_random(<a class="code" href="structPKCS11__slot__st.html" title="PKCS11 slot: card reader.">PKCS11_SLOT</a> *, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *r, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> r_len);
<a name="l00378"></a>00378 
<a name="l00379"></a>00379 <span class="comment">/* using with openssl method mechanism */</span>
<a name="l00380"></a>00380 RSA_METHOD *PKCS11_get_rsa_method(<span class="keywordtype">void</span>);
<a name="l00381"></a>00381 
<a name="l00388"></a>00388 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="libp11_8h.html#afd178da387c9784af8fd23f45091a901" title="Load PKCS11 error strings.">ERR_load_PKCS11_strings</a>(<span class="keywordtype">void</span>);
<a name="l00389"></a>00389 
<a name="l00390"></a>00390 <span class="comment">/*</span>
<a name="l00391"></a>00391 <span class="comment"> * Function and reason codes</span>
<a name="l00392"></a>00392 <span class="comment"> */</span>
<a name="l00393"></a>00393 <span class="preprocessor">#define PKCS11_F_PKCS11_CTX_LOAD                1</span>
<a name="l00394"></a>00394 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_ENUM_SLOTS              2</span>
<a name="l00395"></a>00395 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_CHECK_TOKEN             3</span>
<a name="l00396"></a>00396 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_OPEN_SESSION            4</span>
<a name="l00397"></a>00397 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_LOGIN                   5</span>
<a name="l00398"></a>00398 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_ENUM_KEYS               6</span>
<a name="l00399"></a>00399 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_GET_KEY                 7</span>
<a name="l00400"></a>00400 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_RSA_DECRYPT             8</span>
<a name="l00401"></a>00401 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_RSA_ENCRYPT             9</span>
<a name="l00402"></a>00402 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_RSA_SIGN                10</span>
<a name="l00403"></a>00403 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_RSA_VERIFY              11</span>
<a name="l00404"></a>00404 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_ENUM_CERTS              12</span>
<a name="l00405"></a>00405 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_INIT_TOKEN              13</span>
<a name="l00406"></a>00406 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_INIT_PIN                14</span>
<a name="l00407"></a>00407 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_LOGOUT                  15</span>
<a name="l00408"></a>00408 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_STORE_PRIVATE_KEY       16</span>
<a name="l00409"></a>00409 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_GENERATE_KEY            17</span>
<a name="l00410"></a>00410 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_STORE_PUBLIC_KEY        18</span>
<a name="l00411"></a>00411 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_STORE_CERTIFICATE       19</span>
<a name="l00412"></a>00412 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_SEED_RANDOM             20</span>
<a name="l00413"></a>00413 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_GENERATE_RANDOM         21</span>
<a name="l00414"></a>00414 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_CHANGE_PIN              22</span>
<a name="l00415"></a>00415 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_GETATTR                 40</span>
<a name="l00416"></a>00416 <span class="preprocessor"></span>
<a name="l00417"></a>00417 <span class="preprocessor">#define PKCS11_ERR_BASE                         1024</span>
<a name="l00418"></a>00418 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_LOAD_MODULE_ERROR                (PKCS11_ERR_BASE+1)</span>
<a name="l00419"></a>00419 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_MODULE_LOADED_ERROR              (PKCS11_ERR_BASE+2)</span>
<a name="l00420"></a>00420 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_SYMBOL_NOT_FOUND_ERROR           (PKCS11_ERR_BASE+3)</span>
<a name="l00421"></a>00421 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_NOT_SUPPORTED                    (PKCS11_ERR_BASE+4)</span>
<a name="l00422"></a>00422 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_NO_SESSION                       (PKCS11_ERR_BASE+5)</span>
<a name="l00423"></a>00423 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_KEYGEN_FAILED                    (PKCS11_ERR_BASE+6)</span>
<a name="l00424"></a>00424 <span class="preprocessor"></span>
<a name="l00425"></a>00425 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00426"></a>00426 <span class="preprocessor"></span>}
<a name="l00427"></a>00427 <span class="preprocessor">#endif</span>
<a name="l00428"></a>00428 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
</pre></div></div>
</div>
<hr>
<table width="100%"><tr><td>libp11, Copyright (C) 2005 Olaf Kirch &lt;okir@lst.de&gt;</td><td align="right"><a href="http://www.opensc-project.org"><img src="opensc-logo.gif" alt="OpenSC-Project.org Logo" border="0"/></a></td></tr></table>