Sophie

Sophie

distrib > Fedora > 14 > i386 > by-pkgid > 2bb02846ae452de27c23cd6e903775d3 > files > 18

libp11-devel-0.2.7-2.fc14.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.6.2-20100208 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
<h1>libp11.h</h1><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="structPKCS11__key__st.html" 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="structPKCS11__cert__st.html" 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">void</span> *_private;
<a name="l00084"></a>00084 } <a class="code" href="structPKCS11__token__st.html" title="PKCS11 token: smart card or USB key.">PKCS11_TOKEN</a>;
<a name="l00085"></a>00085 
<a name="l00087"></a><a class="code" href="structPKCS11__slot__st.html">00087</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="l00088"></a>00088         <span class="keywordtype">char</span> *manufacturer;
<a name="l00089"></a>00089         <span class="keywordtype">char</span> *description;
<a name="l00090"></a>00090         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> removable;
<a name="l00091"></a><a class="code" href="structPKCS11__slot__st.html#a45bfe32154f2d90876ba4b8f9ce193f0">00091</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="l00092"></a>00092         <span class="keywordtype">void</span> *_private;
<a name="l00093"></a>00093 } <a class="code" href="structPKCS11__slot__st.html" title="PKCS11 slot: card reader.">PKCS11_SLOT</a>;
<a name="l00094"></a>00094 
<a name="l00096"></a><a class="code" href="structPKCS11__ctx__st.html">00096</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="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">void</span> *_private;
<a name="l00100"></a>00100 } <a class="code" href="structPKCS11__ctx__st.html" title="PKCS11 context.">PKCS11_CTX</a>;
<a name="l00101"></a>00101 
<a name="l00108"></a>00108 <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="l00109"></a>00109 
<a name="l00115"></a>00115 <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="l00116"></a>00116 
<a name="l00125"></a>00125 <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="l00126"></a>00126 
<a name="l00132"></a>00132 <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="l00133"></a>00133 
<a name="l00139"></a>00139 <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="l00140"></a>00140 
<a name="l00148"></a>00148 <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="l00149"></a>00149 
<a name="l00159"></a>00159 <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="l00160"></a>00160                         <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="l00161"></a>00161 
<a name="l00168"></a>00168 <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="l00169"></a>00169 
<a name="l00177"></a>00177 <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="l00178"></a>00178                         <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="l00179"></a>00179 
<a name="l00189"></a>00189 <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="l00190"></a>00190                         <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="l00191"></a>00191 
<a name="l00201"></a>00201 <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="l00202"></a>00202 
<a name="l00210"></a>00210 <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="l00211"></a>00211 
<a name="l00212"></a>00212 <span class="comment">/* Get a list of all keys associated with this token */</span>
<a name="l00213"></a>00213 <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="l00214"></a>00214 
<a name="l00215"></a>00215 <span class="comment">/* Get the key type (as EVP_PKEY_XXX) */</span>
<a name="l00216"></a>00216 <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="l00217"></a>00217 
<a name="l00218"></a>00218 <span class="comment">/* Get size of key modulus in number of bytes */</span>
<a name="l00219"></a>00219 <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="l00220"></a>00220 <span class="comment">/* Get actual modules and public exponent as BIGNUM */</span>
<a name="l00221"></a>00221 <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="l00222"></a>00222 <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="l00223"></a>00223 
<a name="l00224"></a>00224 <span class="comment">/* Get the enveloped private key */</span>
<a name="l00234"></a>00234 <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="l00244"></a>00244 <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="l00245"></a>00245 
<a name="l00246"></a>00246 <span class="comment">/* Find the corresponding certificate (if any) */</span>
<a name="l00247"></a>00247 <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="l00248"></a>00248 
<a name="l00249"></a>00249 <span class="comment">/* Find the corresponding key (if any) */</span>
<a name="l00250"></a>00250 <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="l00251"></a>00251 
<a name="l00252"></a>00252 <span class="comment">/* Get a list of all certificates associated with this token */</span>
<a name="l00253"></a>00253 <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="l00254"></a>00254 
<a name="l00264"></a>00264 <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="l00265"></a>00265         <span class="keyword">const</span> <span class="keywordtype">char</span> *label);
<a name="l00266"></a>00266 
<a name="l00275"></a>00275 <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="l00276"></a>00276 
<a name="l00286"></a>00286 <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="l00287"></a>00287         <span class="keyword">const</span> <span class="keywordtype">char</span> *new_pin);
<a name="l00288"></a>00288 
<a name="l00302"></a>00302 <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="l00303"></a>00303 
<a name="l00315"></a>00315 <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="l00316"></a>00316 
<a name="l00328"></a>00328 <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="l00329"></a>00329 
<a name="l00342"></a>00342 <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="l00343"></a>00343                 <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="l00344"></a>00344                 <a class="code" href="structPKCS11__cert__st.html" title="PKCS11 certificate object.">PKCS11_CERT</a> **ret_cert);
<a name="l00345"></a>00345 
<a name="l00346"></a>00346 <span class="comment">/* rsa private key operations */</span>
<a name="l00347"></a>00347 <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="l00348"></a>00348         <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="l00349"></a>00349 <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="l00350"></a>00350         <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="l00361"></a>00361 <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="l00362"></a>00362         <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="l00363"></a>00363 <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="l00364"></a>00364         <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="l00365"></a>00365 
<a name="l00366"></a>00366 <span class="comment">/* access random number generator */</span>
<a name="l00367"></a>00367 <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="l00368"></a>00368 <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="l00369"></a>00369 
<a name="l00370"></a>00370 <span class="comment">/* using with openssl method mechanism */</span>
<a name="l00371"></a>00371 RSA_METHOD *PKCS11_get_rsa_method(<span class="keywordtype">void</span>);
<a name="l00372"></a>00372 
<a name="l00379"></a>00379 <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="l00380"></a>00380 
<a name="l00381"></a>00381 <span class="comment">/*</span>
<a name="l00382"></a>00382 <span class="comment"> * Function and reason codes</span>
<a name="l00383"></a>00383 <span class="comment"> */</span>
<a name="l00384"></a>00384 <span class="preprocessor">#define PKCS11_F_PKCS11_CTX_LOAD                1</span>
<a name="l00385"></a>00385 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_ENUM_SLOTS              2</span>
<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_CHECK_TOKEN             3</span>
<a name="l00387"></a>00387 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_OPEN_SESSION            4</span>
<a name="l00388"></a>00388 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_LOGIN                   5</span>
<a name="l00389"></a>00389 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_ENUM_KEYS               6</span>
<a name="l00390"></a>00390 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_GET_KEY                 7</span>
<a name="l00391"></a>00391 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_RSA_DECRYPT             8</span>
<a name="l00392"></a>00392 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_RSA_ENCRYPT             9</span>
<a name="l00393"></a>00393 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_RSA_SIGN                10</span>
<a name="l00394"></a>00394 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_RSA_VERIFY              11</span>
<a name="l00395"></a>00395 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_ENUM_CERTS              12</span>
<a name="l00396"></a>00396 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_INIT_TOKEN              13</span>
<a name="l00397"></a>00397 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_INIT_PIN                14</span>
<a name="l00398"></a>00398 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_LOGOUT                  15</span>
<a name="l00399"></a>00399 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_STORE_PRIVATE_KEY       16</span>
<a name="l00400"></a>00400 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_GENERATE_KEY            17</span>
<a name="l00401"></a>00401 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_STORE_PUBLIC_KEY        18</span>
<a name="l00402"></a>00402 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_STORE_CERTIFICATE       19</span>
<a name="l00403"></a>00403 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_SEED_RANDOM             20</span>
<a name="l00404"></a>00404 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_GENERATE_RANDOM         21</span>
<a name="l00405"></a>00405 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_CHANGE_PIN              22</span>
<a name="l00406"></a>00406 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_F_PKCS11_GETATTR                 40</span>
<a name="l00407"></a>00407 <span class="preprocessor"></span>
<a name="l00408"></a>00408 <span class="preprocessor">#define PKCS11_ERR_BASE                         1024</span>
<a name="l00409"></a>00409 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_LOAD_MODULE_ERROR                (PKCS11_ERR_BASE+1)</span>
<a name="l00410"></a>00410 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_MODULE_LOADED_ERROR              (PKCS11_ERR_BASE+2)</span>
<a name="l00411"></a>00411 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_SYMBOL_NOT_FOUND_ERROR           (PKCS11_ERR_BASE+3)</span>
<a name="l00412"></a>00412 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_NOT_SUPPORTED                    (PKCS11_ERR_BASE+4)</span>
<a name="l00413"></a>00413 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_NO_SESSION                       (PKCS11_ERR_BASE+5)</span>
<a name="l00414"></a>00414 <span class="preprocessor"></span><span class="preprocessor">#define PKCS11_KEYGEN_FAILED                    (PKCS11_ERR_BASE+6)</span>
<a name="l00415"></a>00415 <span class="preprocessor"></span>
<a name="l00416"></a>00416 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00417"></a>00417 <span class="preprocessor"></span>}
<a name="l00418"></a>00418 <span class="preprocessor">#endif</span>
<a name="l00419"></a>00419 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
</pre></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>