<!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 <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 Page</span></a></li> <li><a href="annotated.html"><span>Data 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 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 <okir@lst.de></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 <openssl/bio.h></span> <a name="l00028"></a>00028 <span class="preprocessor">#include <openssl/err.h></span> <a name="l00029"></a>00029 <span class="preprocessor">#include <openssl/x509.h></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">"C"</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 <okir@lst.de></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>