Sophie

Sophie

distrib > Mandriva > 2010.1 > i586 > by-pkgid > 4f5f2dc0f55b453456458df885792b0b > files > 69

ucommon-doc-5.0.4-1mdv2010.2.i586.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>ucommon: ucommon::Cipher Class Reference</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.3 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li><a href="classes.html"><span>Data&nbsp;Structure&nbsp;Index</span></a></li>
      <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
    </ul>
  </div>
  <div class="navpath"><a class="el" href="a00208.html">ucommon</a>::<a class="el" href="a00034.html">Cipher</a>
  </div>
</div>
<div class="contents">
<h1>ucommon::Cipher Class Reference</h1><!-- doxytag: class="ucommon::Cipher" -->
<p>A generic data ciphering class.  
<a href="#_details">More...</a></p>

<p><code>#include &lt;<a class="el" href="a00196_source.html">secure.h</a>&gt;</code></p>
<div class="dynheader">
Collaboration diagram for ucommon::Cipher:</div>
<div class="dynsection">
<div class="center"><img src="a00357.png" border="0" usemap="#ucommon_1_1_cipher_coll__map" alt="Collaboration graph"/></div>
<map name="ucommon_1_1_cipher_coll__map" id="ucommon_1_1_cipher_coll__map">
<area shape="rect" id="node2" href="a00035.html" title="Cipher key formed by hash algorithm." alt="" coords="5,5,227,32"/></map>
<center><span class="legend">[<a target="top" href="graph_legend.html">legend</a>]</span></center></div>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00035.html">Key</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="a00034.html" title="A generic data ciphering class.">Cipher</a> key formed by hash algorithm.  <a href="a00035.html#_details">More...</a><br/></td></tr>
<tr><td colspan="2"><h2>Public Types</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a10c8328e3525eb2818bb640697fb315d"></a><!-- doxytag: member="ucommon::Cipher::key_t" ref="a10c8328e3525eb2818bb640697fb315d" args="" -->
typedef <a class="el" href="a00035.html">Key</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>key_t</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><b>mode_t</b> { <b>ENCRYPT</b> =  1, 
<b>DECRYPT</b> =  0
 }</td></tr>
<tr><td colspan="2"><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a994585ba2934947d0ccf827b1c298542"></a><!-- doxytag: member="ucommon::Cipher::align" ref="a994585ba2934947d0ccf827b1c298542" args="(void)" -->
size_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>align</b> (void)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7141909afe2a0f15d443d9e221fc794a"></a><!-- doxytag: member="ucommon::Cipher::Cipher" ref="a7141909afe2a0f15d443d9e221fc794a" args="(key_t key, mode_t mode, unsigned char *address=NULL, size_t size=0)" -->
&nbsp;</td><td class="memItemRight" valign="bottom"><b>Cipher</b> (<a class="el" href="a00035.html">key_t</a> key, mode_t mode, unsigned char *address=NULL, size_t size=0)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00034.html#a829388ff43015c9bf10ce2b56aaa7279">flush</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Push a final cipher block.  <a href="#a829388ff43015c9bf10ce2b56aaa7279"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00034.html#a838f7021bf96e669b3221544eb2bf103">pad</a> (const unsigned char *address, size_t size)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is used to process any data unaligned to the blocksize at the end of a cipher session.  <a href="#a838f7021bf96e669b3221544eb2bf103"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a78aae04e3e3df830e8882b22ba8f77ec"></a><!-- doxytag: member="ucommon::Cipher::pos" ref="a78aae04e3e3df830e8882b22ba8f77ec" args="(void)" -->
size_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>pos</b> (void)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00034.html#a736a2c49835230ac006789076da8de0f">process</a> (unsigned char *address, size_t size, bool flag=false)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Process encrypted data in-place.  <a href="#a736a2c49835230ac006789076da8de0f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00034.html#a60428be20b9d7ae4a59ba02d34bfd932">put</a> (const unsigned char *data, size_t size)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Process cipher data.  <a href="#a60428be20b9d7ae4a59ba02d34bfd932"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00034.html#a45060f47850877bd3eb01cd8866c9069">puts</a> (const char *<a class="el" href="a00148.html">string</a>)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This essentially encrypts a single string and pads with NULL bytes as needed.  <a href="#a45060f47850877bd3eb01cd8866c9069"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a859ecbfe3d2fb6b11e30475e6b2c2e20"></a><!-- doxytag: member="ucommon::Cipher::set" ref="a859ecbfe3d2fb6b11e30475e6b2c2e20" args="(key_t key, mode_t mode, unsigned char *address, size_t size=0)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>set</b> (<a class="el" href="a00035.html">key_t</a> key, mode_t mode, unsigned char *address, size_t size=0)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a924eb5220684539851c6359d32d34faf"></a><!-- doxytag: member="ucommon::Cipher::set" ref="a924eb5220684539851c6359d32d34faf" args="(unsigned char *address, size_t size=0)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>set</b> (unsigned char *address, size_t size=0)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c2587233225dae511c58a54c9ea4806"></a><!-- doxytag: member="ucommon::Cipher::size" ref="a1c2587233225dae511c58a54c9ea4806" args="(void)" -->
size_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>size</b> (void)</td></tr>
<tr><td colspan="2"><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00034.html#a267d335db1d953e5d3303245561fa63c">is</a> (const char *name)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if a specific cipher is supported.  <a href="#a267d335db1d953e5d3303245561fa63c"></a><br/></td></tr>
<tr><td colspan="2"><h2>Protected Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c15824b45d6e72e30ee1487793e23ed"></a><!-- doxytag: member="ucommon::Cipher::push" ref="a4c15824b45d6e72e30ee1487793e23ed" args="(unsigned char *address, size_t size)" -->
virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><b>push</b> (unsigned char *address, size_t size)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8778c3e1a007bb5079f6d2bf7071c772"></a><!-- doxytag: member="ucommon::Cipher::release" ref="a8778c3e1a007bb5079f6d2bf7071c772" args="(void)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>release</b> (void)</td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>A generic data ciphering class. </p>
<p>This is used to construct cryptographic ciphers to encode and decode data as needed. The cipher type is specified by the key object. This class can be used to send output streaming to memory or in a fixed size buffer. If the latter is used, a <a class="el" href="a00208.html#a36870182251dc08e9a3eac56452d6218" title="Convenience function to push an object onto a stack.">push()</a> method is called through a virtual when the buffer is full. Since block ciphers are used, buffers should be aligned to the block size. </p>
<dl class="author"><dt><b>Author:</b></dt><dd>David Sugar &lt;<a href="mailto:dyfet@gnutelephony.org">dyfet@gnutelephony.org</a>&gt; </dd></dl>

<p>Definition at line <a class="el" href="a00196_source.html#l00263">263</a> of file <a class="el" href="a00196_source.html">secure.h</a>.</p>
<hr/><h2>Member Function Documentation</h2>
<a class="anchor" id="a829388ff43015c9bf10ce2b56aaa7279"></a><!-- doxytag: member="ucommon::Cipher::flush" ref="a829388ff43015c9bf10ce2b56aaa7279" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t ucommon::Cipher::flush </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Push a final cipher block. </p>
<p>This is used to push the final buffer into the push method for any remaining data. </p>

</div>
</div>
<a class="anchor" id="a267d335db1d953e5d3303245561fa63c"></a><!-- doxytag: member="ucommon::Cipher::is" ref="a267d335db1d953e5d3303245561fa63c" args="(const char *name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static bool ucommon::Cipher::is </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Check if a specific cipher is supported. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>of cipher to check. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if supported, false if not. </dd></dl>

</div>
</div>
<a class="anchor" id="a838f7021bf96e669b3221544eb2bf103"></a><!-- doxytag: member="ucommon::Cipher::pad" ref="a838f7021bf96e669b3221544eb2bf103" args="(const unsigned char *address, size_t size)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t ucommon::Cipher::pad </td>
          <td>(</td>
          <td class="paramtype">const unsigned char *&nbsp;</td>
          <td class="paramname"> <em>address</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>size</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>This is used to process any data unaligned to the blocksize at the end of a cipher session. </p>
<p>On an encryption, it will add padding or an entire padding block with the number of bytes to strip. On decryption it will remove padding at the end. The pkcs5 method of padding with removal count is used. This also sets the address buffer to NULL to prevent further puts until reset. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>address</em>&nbsp;</td><td>of data to add before final pad. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>of data to add before final pad. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>actual bytes encrypted or decrypted. </dd></dl>

</div>
</div>
<a class="anchor" id="a736a2c49835230ac006789076da8de0f"></a><!-- doxytag: member="ucommon::Cipher::process" ref="a736a2c49835230ac006789076da8de0f" args="(unsigned char *address, size_t size, bool flag=false)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t ucommon::Cipher::process </td>
          <td>(</td>
          <td class="paramtype">unsigned char *&nbsp;</td>
          <td class="paramname"> <em>address</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&nbsp;</td>
          <td class="paramname"> <em>flag</em> = <code>false</code></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Process encrypted data in-place. </p>
<p>This assumes no need to set the address buffer. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>address</em>&nbsp;</td><td>of data to process. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>of data to process. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>flag</em>&nbsp;</td><td>if to pad data. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>bytes processed and written back to buffer. </dd></dl>

</div>
</div>
<a class="anchor" id="a60428be20b9d7ae4a59ba02d34bfd932"></a><!-- doxytag: member="ucommon::Cipher::put" ref="a60428be20b9d7ae4a59ba02d34bfd932" args="(const unsigned char *data, size_t size)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t ucommon::Cipher::put </td>
          <td>(</td>
          <td class="paramtype">const unsigned char *&nbsp;</td>
          <td class="paramname"> <em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>size</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Process cipher data. </p>
<p>This requires the size to be a multiple of the cipher block size. If an unaligned sized block of data is used, it will be ignored and the size returned will be 0. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>to process. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>of data to process. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>size of processed output, should be same as size or 0 if error. </dd></dl>

</div>
</div>
<a class="anchor" id="a45060f47850877bd3eb01cd8866c9069"></a><!-- doxytag: member="ucommon::Cipher::puts" ref="a45060f47850877bd3eb01cd8866c9069" args="(const char *string)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t ucommon::Cipher::puts </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>string</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>This essentially encrypts a single string and pads with NULL bytes as needed. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>string</em>&nbsp;</td><td>to encrypt. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>total encrypted size. </dd></dl>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>ucommon/<a class="el" href="a00196_source.html">secure.h</a></li>
</ul>
</div>
<hr class="footer"/><address style="text-align: right;"><small>Generated on Thu Jul 14 16:39:31 2011 for ucommon by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.3 </small></address>
</body>
</html>