<!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>Crypto++: SAFER::Enc 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.1 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="annotated.html"><span>Class List</span></a></li> <li><a href="classes.html"><span>Class Index</span></a></li> <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> <li><a href="functions.html"><span>Class Members</span></a></li> </ul> </div> <div class="navpath"><a class="el" href="class_s_a_f_e_r.html">SAFER</a>::<a class="el" href="class_s_a_f_e_r_1_1_enc.html">Enc</a> </div> </div> <div class="contents"> <h1>SAFER::Enc Class Reference</h1><!-- doxytag: class="SAFER::Enc" --><!-- doxytag: inherits="SAFER::Base" --><div class="dynheader"> Inheritance diagram for SAFER::Enc:</div> <div class="dynsection"> <div class="center"> <img src="class_s_a_f_e_r_1_1_enc.gif" usemap="#SAFER::Enc_map" alt=""/> <map id="SAFER::Enc_map" name="SAFER::Enc_map"> <area href="class_s_a_f_e_r_1_1_base.html" alt="SAFER::Base" shape="rect" coords="74,224,212,248"/> <area href="class_block_cipher.html" alt="BlockCipher" shape="rect" coords="74,168,212,192"/> <area href="class_simple_keying_interface.html" alt="SimpleKeyingInterface" shape="rect" coords="0,112,138,136"/> <area href="class_block_transformation.html" alt="BlockTransformation" shape="rect" coords="148,112,286,136"/> <area href="class_algorithm.html" alt="Algorithm" shape="rect" coords="148,56,286,80"/> <area href="class_clonable.html" alt="Clonable" shape="rect" coords="148,0,286,24"/> </map> </div> </div> <p><a href="class_s_a_f_e_r_1_1_enc-members.html">List of all members.</a></p> <table border="0" cellpadding="0" cellspacing="0"> <tr><td colspan="2"><h2>Public Types</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom"><b>IV_Requirement</b> { <br/> <b>UNIQUE_IV</b> = 0, <b>RANDOM_IV</b>, <b>UNPREDICTABLE_RANDOM_IV</b>, <b>INTERNALLY_GENERATED_IV</b>, <br/> <b>NOT_RESYNCHRONIZABLE</b> <br/> }</td></tr> <tr><td class="memItemLeft" align="right" valign="top">enum </td><td class="memItemRight" valign="bottom">{ <b>BT_InBlockIsCounter</b> = 1, <b>BT_DontIncrementInOutPointers</b> = 2, <b>BT_XorInput</b> = 4, <b>BT_ReverseDirection</b> = 8 }</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="a300fcdad081a887bcd9c37bb6e950b0d"></a><!-- doxytag: member="SAFER::Enc::ProcessAndXorBlock" ref="a300fcdad081a887bcd9c37bb6e950b0d" args="(const byte *inBlock, const byte *xorBlock, byte *outBlock) const " --> void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_a_f_e_r_1_1_enc.html#a300fcdad081a887bcd9c37bb6e950b0d">ProcessAndXorBlock</a> (const byte *inBlock, const byte *xorBlock, byte *outBlock) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">encrypt or decrypt inBlock, xor with xorBlock, and write to outBlock <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab76d562df30b5419ed2025b663b1c974"></a><!-- doxytag: member="SAFER::Enc::OptimalDataAlignment" ref="ab76d562df30b5419ed2025b663b1c974" args="() const " --> unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_s_a_f_e_r_1_1_base.html#ab76d562df30b5419ed2025b663b1c974">OptimalDataAlignment</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns how inputs and outputs should be aligned for optimal performance <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad403227c3c5f82315dbb3f13dd2ec868"></a><!-- doxytag: member="SAFER::Enc::UncheckedSetKey" ref="ad403227c3c5f82315dbb3f13dd2ec868" args="(const byte *userkey, unsigned int length, const NameValuePairs &params)" --> void </td><td class="memItemRight" valign="bottom"><b>UncheckedSetKey</b> (const byte *userkey, unsigned int length, const <a class="el" href="class_name_value_pairs.html">NameValuePairs</a> &params)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2631c49dac4d5ec055c5dc88c6243578"></a><!-- doxytag: member="SAFER::Enc::MinKeyLength" ref="a2631c49dac4d5ec055c5dc88c6243578" args="() const =0" --> virtual size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#a2631c49dac4d5ec055c5dc88c6243578">MinKeyLength</a> () const =0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns smallest valid key length in bytes */ <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae02fcb4e1f6141e728ae37612cde6fff"></a><!-- doxytag: member="SAFER::Enc::MaxKeyLength" ref="ae02fcb4e1f6141e728ae37612cde6fff" args="() const =0" --> virtual size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#ae02fcb4e1f6141e728ae37612cde6fff">MaxKeyLength</a> () const =0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns largest valid key length in bytes */ <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae90dfc0bdfd13e214fd46e357ef64e98"></a><!-- doxytag: member="SAFER::Enc::DefaultKeyLength" ref="ae90dfc0bdfd13e214fd46e357ef64e98" args="() const =0" --> virtual size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#ae90dfc0bdfd13e214fd46e357ef64e98">DefaultKeyLength</a> () const =0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns default (recommended) key length in bytes */ <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad8810586aaa034729b6db24e593a0ade"></a><!-- doxytag: member="SAFER::Enc::GetValidKeyLength" ref="ad8810586aaa034729b6db24e593a0ade" args="(size_t n) const =0" --> virtual size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#ad8810586aaa034729b6db24e593a0ade">GetValidKeyLength</a> (size_t n) const =0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns the smallest valid key length in bytes that is >= min(n, GetMaxKeyLength()) <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a024f23c0a094ee46094f69ffefb91d17"></a><!-- doxytag: member="SAFER::Enc::IsValidKeyLength" ref="a024f23c0a094ee46094f69ffefb91d17" args="(size_t n) const " --> virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#a024f23c0a094ee46094f69ffefb91d17">IsValidKeyLength</a> (size_t n) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns whether n is a valid key length <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#adf3c29b3ef3af74788a58c7c49887fd7">SetKey</a> (const byte *key, size_t length, const <a class="el" href="class_name_value_pairs.html">NameValuePairs</a> &params=<a class="el" href="cryptlib_8h.html#ad3205973dd1afa14090a683154c1109c">g_nullNameValuePairs</a>)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">set or reset the key of this object <a href="#adf3c29b3ef3af74788a58c7c49887fd7"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0401f9c67930805180964bc02ae0ac1c"></a><!-- doxytag: member="SAFER::Enc::SetKeyWithRounds" ref="a0401f9c67930805180964bc02ae0ac1c" args="(const byte *key, size_t length, int rounds)" --> void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#a0401f9c67930805180964bc02ae0ac1c">SetKeyWithRounds</a> (const byte *key, size_t length, int rounds)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">calls <a class="el" href="class_simple_keying_interface.html#adf3c29b3ef3af74788a58c7c49887fd7" title="set or reset the key of this object">SetKey()</a> with an <a class="el" href="class_name_value_pairs.html" title="interface for retrieving values given their names">NameValuePairs</a> object that just specifies "Rounds" <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b4e358c514fd743840967bc595a34c2"></a><!-- doxytag: member="SAFER::Enc::SetKeyWithIV" ref="a5b4e358c514fd743840967bc595a34c2" args="(const byte *key, size_t length, const byte *iv, size_t ivLength)" --> void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#a5b4e358c514fd743840967bc595a34c2">SetKeyWithIV</a> (const byte *key, size_t length, const byte *iv, size_t ivLength)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">calls <a class="el" href="class_simple_keying_interface.html#adf3c29b3ef3af74788a58c7c49887fd7" title="set or reset the key of this object">SetKey()</a> with an <a class="el" href="class_name_value_pairs.html" title="interface for retrieving values given their names">NameValuePairs</a> object that just specifies "IV" <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac25e27eaeae2e909741c07de93caef49"></a><!-- doxytag: member="SAFER::Enc::SetKeyWithIV" ref="ac25e27eaeae2e909741c07de93caef49" args="(const byte *key, size_t length, const byte *iv)" --> void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#ac25e27eaeae2e909741c07de93caef49">SetKeyWithIV</a> (const byte *key, size_t length, const byte *iv)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">calls <a class="el" href="class_simple_keying_interface.html#adf3c29b3ef3af74788a58c7c49887fd7" title="set or reset the key of this object">SetKey()</a> with an <a class="el" href="class_name_value_pairs.html" title="interface for retrieving values given their names">NameValuePairs</a> object that just specifies "IV" <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a867b535e5c4a11704d0645272e8b03f9"></a><!-- doxytag: member="SAFER::Enc::IVRequirement" ref="a867b535e5c4a11704d0645272e8b03f9" args="() const =0" --> virtual IV_Requirement </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#a867b535e5c4a11704d0645272e8b03f9">IVRequirement</a> () const =0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns the minimal requirement for secure IVs <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#ad263f4a96fa8b4e7d01fea8ccaae9d3b">IsResynchronizable</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns whether this object can be resynchronized (i.e. supports initialization vectors) <a href="#ad263f4a96fa8b4e7d01fea8ccaae9d3b"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a26680fc02b91534a522b5754cdcdcb46"></a><!-- doxytag: member="SAFER::Enc::CanUseRandomIVs" ref="a26680fc02b91534a522b5754cdcdcb46" args="() const " --> bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#a26680fc02b91534a522b5754cdcdcb46">CanUseRandomIVs</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns whether this object can use random IVs (in addition to ones returned by GetNextIV) <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a307463503d7a4400ffafe03a683e1dbb"></a><!-- doxytag: member="SAFER::Enc::CanUsePredictableIVs" ref="a307463503d7a4400ffafe03a683e1dbb" args="() const " --> bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#a307463503d7a4400ffafe03a683e1dbb">CanUsePredictableIVs</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns whether this object can use random but possibly predictable IVs (in addition to ones returned by GetNextIV) <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9c47590ef06335b34bdaf272fd37ef4d"></a><!-- doxytag: member="SAFER::Enc::CanUseStructuredIVs" ref="a9c47590ef06335b34bdaf272fd37ef4d" args="() const " --> bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#a9c47590ef06335b34bdaf272fd37ef4d">CanUseStructuredIVs</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns whether this object can use structured IVs, for example a counter (in addition to ones returned by GetNextIV) <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac1b39967f6fac32188f9eeea81896c0c"></a><!-- doxytag: member="SAFER::Enc::IVSize" ref="ac1b39967f6fac32188f9eeea81896c0c" args="() const " --> virtual unsigned int </td><td class="memItemRight" valign="bottom"><b>IVSize</b> () const </td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5b2090b3c27540aa3db0281406fedb38"></a><!-- doxytag: member="SAFER::Enc::DefaultIVLength" ref="a5b2090b3c27540aa3db0281406fedb38" args="() const " --> unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#a5b2090b3c27540aa3db0281406fedb38">DefaultIVLength</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns default length of IVs accepted by this object <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4450efa449a2e04a31b6371821e650f9"></a><!-- doxytag: member="SAFER::Enc::MinIVLength" ref="a4450efa449a2e04a31b6371821e650f9" args="() const " --> virtual unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#a4450efa449a2e04a31b6371821e650f9">MinIVLength</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns minimal length of IVs accepted by this object <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a308799c135440e57a583defe3860f02e"></a><!-- doxytag: member="SAFER::Enc::MaxIVLength" ref="a308799c135440e57a583defe3860f02e" args="() const " --> virtual unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#a308799c135440e57a583defe3860f02e">MaxIVLength</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns maximal length of IVs accepted by this object <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae576137a46ca56005e82f1505cf3cccc"></a><!-- doxytag: member="SAFER::Enc::Resynchronize" ref="ae576137a46ca56005e82f1505cf3cccc" args="(const byte *iv, int ivLength=-1)" --> virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#ae576137a46ca56005e82f1505cf3cccc">Resynchronize</a> (const byte *iv, int ivLength=-1)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">resynchronize with an IV. ivLength=-1 means use IVSize() <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_simple_keying_interface.html#a917224bb6df7431d6469e7a10feac5fa">GetNextIV</a> (<a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, byte *IV)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">get a secure IV for the next message <a href="#a917224bb6df7431d6469e7a10feac5fa"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_block_transformation.html#a2fefb3f4c6c6297c0c91fcbba9e4f4f3">ProcessBlock</a> (const byte *inBlock, byte *outBlock) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">encrypt or decrypt one block <a href="#a2fefb3f4c6c6297c0c91fcbba9e4f4f3"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a12cc1846de571557be0f82471e8904bf"></a><!-- doxytag: member="SAFER::Enc::ProcessBlock" ref="a12cc1846de571557be0f82471e8904bf" args="(byte *inoutBlock) const " --> void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_block_transformation.html#a12cc1846de571557be0f82471e8904bf">ProcessBlock</a> (byte *inoutBlock) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">encrypt or decrypt one block in place <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adfdb78b033996020435c3dcffdca76ce"></a><!-- doxytag: member="SAFER::Enc::BlockSize" ref="adfdb78b033996020435c3dcffdca76ce" args="() const =0" --> virtual unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_block_transformation.html#adfdb78b033996020435c3dcffdca76ce">BlockSize</a> () const =0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">block size of the cipher in bytes <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8d154fdac89307d9edbd2a5ab97fa080"></a><!-- doxytag: member="SAFER::Enc::IsPermutation" ref="a8d154fdac89307d9edbd2a5ab97fa080" args="() const " --> virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_block_transformation.html#a8d154fdac89307d9edbd2a5ab97fa080">IsPermutation</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns true if this is a permutation (i.e. there is an inverse transformation) <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a50f2565057bc9ba7bb70a98d9c9b39cd"></a><!-- doxytag: member="SAFER::Enc::IsForwardTransformation" ref="a50f2565057bc9ba7bb70a98d9c9b39cd" args="() const =0" --> virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_block_transformation.html#a50f2565057bc9ba7bb70a98d9c9b39cd">IsForwardTransformation</a> () const =0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns true if this is an encryption object <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7aceb4c214d901e9cc416b05d40eb282"></a><!-- doxytag: member="SAFER::Enc::OptimalNumberOfParallelBlocks" ref="a7aceb4c214d901e9cc416b05d40eb282" args="() const " --> virtual unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_block_transformation.html#a7aceb4c214d901e9cc416b05d40eb282">OptimalNumberOfParallelBlocks</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">return number of blocks that can be processed in parallel, for bit-slicing implementations <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">virtual size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="class_block_transformation.html#adcff119bb709c84bfaaab8d1871b018c">AdvancedProcessBlocks</a> (const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">encrypt and xor blocks according to flags (see FlagsForAdvancedProcessBlocks) <a href="#adcff119bb709c84bfaaab8d1871b018c"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abf4c2e7cf9a5c3bb1729e9d1126f0d7c"></a><!-- doxytag: member="SAFER::Enc::GetCipherDirection" ref="abf4c2e7cf9a5c3bb1729e9d1126f0d7c" args="() const " --> <a class="el" href="cryptlib_8h.html#a353ccabf5ddc119a6a33e92f7b9961c7">CipherDir</a> </td><td class="memItemRight" valign="bottom"><b>GetCipherDirection</b> () const </td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acd21c6715add4884fa043eaf51655039"></a><!-- doxytag: member="SAFER::Enc::AlgorithmName" ref="acd21c6715add4884fa043eaf51655039" args="() const " --> virtual std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="class_algorithm.html#acd21c6715add4884fa043eaf51655039">AlgorithmName</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">returns name of this algorithm, not universally implemented yet <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a24b43349a71e1f98508eeb10b31a0a62"></a><!-- doxytag: member="SAFER::Enc::Clone" ref="a24b43349a71e1f98508eeb10b31a0a62" args="() const " --> virtual <a class="el" href="class_clonable.html">Clonable</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="class_clonable.html#a24b43349a71e1f98508eeb10b31a0a62">Clone</a> () const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">this is not implemented by most classes yet <br/></td></tr> <tr><td colspan="2"><h2>Public Attributes</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbdffb84a7518cb2b44378111a6ee69b"></a><!-- doxytag: member="SAFER::Enc::FlagsForAdvancedProcessBlocks" ref="adbdffb84a7518cb2b44378111a6ee69b" args="" --> enum BlockTransformation:: { ... } </td><td class="memItemRight" valign="bottom"><b>FlagsForAdvancedProcessBlocks</b></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="adb59675642f7dc5b55941ea1f6b03750"></a><!-- doxytag: member="SAFER::Enc::Strengthened" ref="adb59675642f7dc5b55941ea1f6b03750" args="() const =0" --> virtual bool </td><td class="memItemRight" valign="bottom"><b>Strengthened</b> () const =0</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad91b5765499a85e5914d8401e28ffe2e"></a><!-- doxytag: member="SAFER::Enc::GetAlgorithm" ref="ad91b5765499a85e5914d8401e28ffe2e" args="() const " --> const <a class="el" href="class_algorithm.html">Algorithm</a> & </td><td class="memItemRight" valign="bottom"><b>GetAlgorithm</b> () const </td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a32b2095542b18025814118734bf34da2"></a><!-- doxytag: member="SAFER::Enc::ThrowIfInvalidKeyLength" ref="a32b2095542b18025814118734bf34da2" args="(size_t length)" --> void </td><td class="memItemRight" valign="bottom"><b>ThrowIfInvalidKeyLength</b> (size_t length)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae60d9774af66fc673fe6139f5880c477"></a><!-- doxytag: member="SAFER::Enc::ThrowIfResynchronizable" ref="ae60d9774af66fc673fe6139f5880c477" args="()" --> void </td><td class="memItemRight" valign="bottom"><b>ThrowIfResynchronizable</b> ()</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac687add7d0a09c626d85b77714bbd114"></a><!-- doxytag: member="SAFER::Enc::ThrowIfInvalidIV" ref="ac687add7d0a09c626d85b77714bbd114" args="(const byte *iv)" --> void </td><td class="memItemRight" valign="bottom"><b>ThrowIfInvalidIV</b> (const byte *iv)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aaae6c529f861c47193f3498719e2dc48"></a><!-- doxytag: member="SAFER::Enc::ThrowIfInvalidIVLength" ref="aaae6c529f861c47193f3498719e2dc48" args="(int size)" --> size_t </td><td class="memItemRight" valign="bottom"><b>ThrowIfInvalidIVLength</b> (int size)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66ce967c9b8717baa10b4bdb2312d08d"></a><!-- doxytag: member="SAFER::Enc::GetIVAndThrowIfInvalid" ref="a66ce967c9b8717baa10b4bdb2312d08d" args="(const NameValuePairs &params, size_t &size)" --> const byte * </td><td class="memItemRight" valign="bottom"><b>GetIVAndThrowIfInvalid</b> (const <a class="el" href="class_name_value_pairs.html">NameValuePairs</a> &params, size_t &size)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a719efcf12f0de461b951830b8131b36a"></a><!-- doxytag: member="SAFER::Enc::AssertValidKeyLength" ref="a719efcf12f0de461b951830b8131b36a" args="(size_t length) const " --> void </td><td class="memItemRight" valign="bottom"><b>AssertValidKeyLength</b> (size_t length) const </td></tr> <tr><td colspan="2"><h2>Protected Attributes</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7a0b1cf722b42cbadc175cf6ff93366d"></a><!-- doxytag: member="SAFER::Enc::keySchedule" ref="a7a0b1cf722b42cbadc175cf6ff93366d" args="" --> <a class="el" href="class_sec_block.html">SecByteBlock</a> </td><td class="memItemRight" valign="bottom"><b>keySchedule</b></td></tr> <tr><td colspan="2"><h2>Static Protected Attributes</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">static const byte </td><td class="memItemRight" valign="bottom"><b>exp_tab</b> [256]</td></tr> <tr><td class="memItemLeft" align="right" valign="top">static const byte </td><td class="memItemRight" valign="bottom"><b>log_tab</b> [256]</td></tr> </table> <hr/><a name="_details"></a><h2>Detailed Description</h2> <p>Definition at line <a class="el" href="safer_8h_source.html#l00030">30</a> of file <a class="el" href="safer_8h_source.html">safer.h</a>.</p> <hr/><h2>Member Function Documentation</h2> <a class="anchor" id="adf3c29b3ef3af74788a58c7c49887fd7"></a><!-- doxytag: member="SAFER::Enc::SetKey" ref="adf3c29b3ef3af74788a58c7c49887fd7" args="(const byte *key, size_t length, const NameValuePairs &params=g_nullNameValuePairs)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void SimpleKeyingInterface::SetKey </td> <td>(</td> <td class="paramtype">const byte * </td> <td class="paramname"> <em>key</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>length</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="class_name_value_pairs.html">NameValuePairs</a> & </td> <td class="paramname"> <em>params</em> = <code><a class="el" href="cryptlib_8h.html#ad3205973dd1afa14090a683154c1109c">g_nullNameValuePairs</a></code></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [virtual, inherited]</code></td> </tr> </table> </div> <div class="memdoc"> <p>set or reset the key of this object </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>params</em> </td><td>is used to specify Rounds, BlockSize, etc. </td></tr> </table> </dd> </dl> <p>Reimplemented in <a class="el" href="class_authenticated_symmetric_cipher_base.html#aea1353c1d0a94c3f81ebcf53f6b7ea57">AuthenticatedSymmetricCipherBase</a>, and <a class="el" href="class_e_c_b___one_way.html#aea389c964114b73390dd81d836124461">ECB_OneWay</a>.</p> <p>Definition at line <a class="el" href="cryptlib_8cpp_source.html#l00053">53</a> of file <a class="el" href="cryptlib_8cpp_source.html">cryptlib.cpp</a>.</p> <p>Referenced by <a class="el" href="cryptlib_8cpp_source.html#l00064">SimpleKeyingInterface::SetKeyWithIV()</a>, and <a class="el" href="cryptlib_8cpp_source.html#l00059">SimpleKeyingInterface::SetKeyWithRounds()</a>.</p> </div> </div> <a class="anchor" id="ad263f4a96fa8b4e7d01fea8ccaae9d3b"></a><!-- doxytag: member="SAFER::Enc::IsResynchronizable" ref="ad263f4a96fa8b4e7d01fea8ccaae9d3b" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">bool SimpleKeyingInterface::IsResynchronizable </td> <td>(</td> <td class="paramname"></td> <td> ) </td> <td> const<code> [inline, inherited]</code></td> </tr> </table> </div> <div class="memdoc"> <p>returns whether this object can be resynchronized (i.e. supports initialization vectors) </p> <p>If this function returns true, and no IV is passed to <a class="el" href="class_simple_keying_interface.html#adf3c29b3ef3af74788a58c7c49887fd7" title="set or reset the key of this object">SetKey()</a> and <a class="el" href="class_simple_keying_interface.html#a9c47590ef06335b34bdaf272fd37ef4d" title="returns whether this object can use structured IVs, for example a counter (in addition...">CanUseStructuredIVs()</a>==true, an IV of all 0's will be assumed. </p> <p>Definition at line <a class="el" href="cryptlib_8h_source.html#l00393">393</a> of file <a class="el" href="cryptlib_8h_source.html">cryptlib.h</a>.</p> </div> </div> <a class="anchor" id="a917224bb6df7431d6469e7a10feac5fa"></a><!-- doxytag: member="SAFER::Enc::GetNextIV" ref="a917224bb6df7431d6469e7a10feac5fa" args="(RandomNumberGenerator &rng, byte *IV)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void SimpleKeyingInterface::GetNextIV </td> <td>(</td> <td class="paramtype"><a class="el" href="class_random_number_generator.html">RandomNumberGenerator</a> & </td> <td class="paramname"> <em>rng</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">byte * </td> <td class="paramname"> <em>IV</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [virtual, inherited]</code></td> </tr> </table> </div> <div class="memdoc"> <p>get a secure IV for the next message </p> <p>This method should be called after you finish encrypting one message and are ready to start the next one. After calling it, you must call <a class="el" href="class_simple_keying_interface.html#adf3c29b3ef3af74788a58c7c49887fd7" title="set or reset the key of this object">SetKey()</a> or <a class="el" href="class_simple_keying_interface.html#ae576137a46ca56005e82f1505cf3cccc" title="resynchronize with an IV. ivLength=-1 means use IVSize()">Resynchronize()</a> before using this object again. This method is not implemented on decryption objects. </p> <p>Reimplemented in <a class="el" href="class_v_m_a_c___base.html#abd5685ab3eaf6ec272f7e062c3194c6c">VMAC_Base</a>.</p> <p>Definition at line <a class="el" href="cryptlib_8cpp_source.html#l00129">129</a> of file <a class="el" href="cryptlib_8cpp_source.html">cryptlib.cpp</a>.</p> <p>References <a class="el" href="cryptlib_8cpp_source.html#l00257">RandomNumberGenerator::GenerateBlock()</a>.</p> </div> </div> <a class="anchor" id="a2fefb3f4c6c6297c0c91fcbba9e4f4f3"></a><!-- doxytag: member="SAFER::Enc::ProcessBlock" ref="a2fefb3f4c6c6297c0c91fcbba9e4f4f3" args="(const byte *inBlock, byte *outBlock) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void BlockTransformation::ProcessBlock </td> <td>(</td> <td class="paramtype">const byte * </td> <td class="paramname"> <em>inBlock</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">byte * </td> <td class="paramname"> <em>outBlock</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td> const<code> [inline, inherited]</code></td> </tr> </table> </div> <div class="memdoc"> <p>encrypt or decrypt one block </p> <dl class="pre"><dt><b>Precondition:</b></dt><dd>size of inBlock and outBlock == <a class="el" href="class_block_transformation.html#adfdb78b033996020435c3dcffdca76ce" title="block size of the cipher in bytes">BlockSize()</a> </dd></dl> <p>Definition at line <a class="el" href="cryptlib_8h_source.html#l00444">444</a> of file <a class="el" href="cryptlib_8h_source.html">cryptlib.h</a>.</p> <p>Referenced by <a class="el" href="cryptlib_8cpp_source.html#l00134">BlockTransformation::AdvancedProcessBlocks()</a>, <a class="el" href="modes_8cpp_source.html#l00207">CBC_CTS_Decryption::ProcessLastBlock()</a>, <a class="el" href="modes_8cpp_source.html#l00166">CBC_CTS_Encryption::ProcessLastBlock()</a>, <a class="el" href="vmac_8cpp_source.html#l00099">VMAC_Base::Resynchronize()</a>, and <a class="el" href="cmac_8cpp_source.html#l00058">CMAC_Base::Update()</a>.</p> </div> </div> <a class="anchor" id="adcff119bb709c84bfaaab8d1871b018c"></a><!-- doxytag: member="SAFER::Enc::AdvancedProcessBlocks" ref="adcff119bb709c84bfaaab8d1871b018c" args="(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, size_t length, word32 flags) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">size_t BlockTransformation::AdvancedProcessBlocks </td> <td>(</td> <td class="paramtype">const byte * </td> <td class="paramname"> <em>inBlocks</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const byte * </td> <td class="paramname"> <em>xorBlocks</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">byte * </td> <td class="paramname"> <em>outBlocks</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>length</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">word32 </td> <td class="paramname"> <em>flags</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td> const<code> [virtual, inherited]</code></td> </tr> </table> </div> <div class="memdoc"> <p>encrypt and xor blocks according to flags (see FlagsForAdvancedProcessBlocks) </p> <p>/note If BT_InBlockIsCounter is set, last byte of inBlocks may be modified. </p> <p>Definition at line <a class="el" href="cryptlib_8cpp_source.html#l00134">134</a> of file <a class="el" href="cryptlib_8cpp_source.html">cryptlib.cpp</a>.</p> <p>References <a class="el" href="class_block_transformation.html#adfdb78b033996020435c3dcffdca76ce">BlockTransformation::BlockSize()</a>, <a class="el" href="class_block_transformation.html#a1904cf145e4c5c650dd7aff32f54e153">BlockTransformation::ProcessAndXorBlock()</a>, and <a class="el" href="cryptlib_8h_source.html#l00444">BlockTransformation::ProcessBlock()</a>.</p> <p>Referenced by <a class="el" href="modes_8cpp_source.html#l00193">CBC_Decryption::ProcessData()</a>, <a class="el" href="modes_8cpp_source.html#l00153">CBC_Encryption::ProcessData()</a>, <a class="el" href="modes_8cpp_source.html#l00147">ECB_OneWay::ProcessData()</a>, <a class="el" href="cmac_8cpp_source.html#l00099">CMAC_Base::TruncatedFinal()</a>, <a class="el" href="cmac_8cpp_source.html#l00058">CMAC_Base::Update()</a>, and <a class="el" href="cbcmac_8cpp_source.html#l00016">CBC_MAC_Base::Update()</a>.</p> </div> </div> <hr/><h2>Member Data Documentation</h2> <a class="anchor" id="afc85e8b4c25fa113bfd17e030b376b33"></a><!-- doxytag: member="SAFER::Enc::exp_tab" ref="afc85e8b4c25fa113bfd17e030b376b33" args="[256]" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">const byte SAFER::Base::exp_tab<code> [static, protected, inherited]</code></td> </tr> </table> </div> <div class="memdoc"> <b>Initial value:</b><div class="fragment"><pre class="fragment"> {1, 45, 226, 147, 190, 69, 21, 174, 120, 3, 135, 164, 184, 56, 207, 63, 8, 103, 9, 148, 235, 38, 168, 107, 189, 24, 52, 27, 187, 191, 114, 247, 64, 53, 72, 156, 81, 47, 59, 85, 227, 192, 159, 216, 211, 243, 141, 177, 255, 167, 62, 220, 134, 119, 215, 166, 17, 251, 244, 186, 146, 145, 100, 131, 241, 51, 239, 218, 44, 181, 178, 43, 136, 209, 153, 203, 140, 132, 29, 20, 129, 151, 113, 202, 95, 163, 139, 87, 60, 130, 196, 82, 92, 28, 232, 160, 4, 180, 133, 74, 246, 19, 84, 182, 223, 12, 26, 142, 222, 224, 57, 252, 32, 155, 36, 78, 169, 152, 158, 171, 242, 96, 208, 108, 234, 250, 199, 217, 0, 212, 31, 110, 67, 188, 236, 83, 137, 254, 122, 93, 73, 201, 50, 194, 249, 154, 248, 109, 22, 219, 89, 150, 68, 233, 205, 230, 70, 66, 143, 10, 193, 204, 185, 101, 176, 210, 198, 172, 30, 65, 98, 41, 46, 14, 116, 80, 2, 90, 195, 37, 123, 138, 42, 91, 240, 6, 13, 71, 111, 112, 157, 126, 16, 206, 18, 39, 213, 76, 79, 214, 121, 48, 104, 54, 117, 125, 228, 237, 128, 106, 144, 55, 162, 94, 118, 170, 197, 127, 61, 175, 165, 229, 25, 97, 253, 77, 124, 183, 11, 238, 173, 75, 34, 245, 231, 115, 35, 33, 200, 5, 225, 102, 221, 179, 88, 105, 99, 86, 15, 161, 49, 149, 23, 7, 58, 40} </pre></div> <p>Definition at line <a class="el" href="safer_8h_source.html#l00026">26</a> of file <a class="el" href="safer_8h_source.html">safer.h</a>.</p> </div> </div> <a class="anchor" id="a4d810b8ff6a4970e23aa5fc1d7bc932b"></a><!-- doxytag: member="SAFER::Enc::log_tab" ref="a4d810b8ff6a4970e23aa5fc1d7bc932b" args="[256]" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">const byte SAFER::Base::log_tab<code> [static, protected, inherited]</code></td> </tr> </table> </div> <div class="memdoc"> <b>Initial value:</b><div class="fragment"><pre class="fragment"> {128, 0, 176, 9, 96, 239, 185, 253, 16, 18, 159, 228, 105, 186, 173, 248, 192, 56, 194, 101, 79, 6, 148, 252, 25, 222, 106, 27, 93, 78, 168, 130, 112, 237, 232, 236, 114, 179, 21, 195, 255, 171, 182, 71, 68, 1, 172, 37, 201, 250, 142, 65, 26, 33, 203, 211, 13, 110, 254, 38, 88, 218, 50, 15, 32, 169, 157, 132, 152, 5, 156, 187, 34, 140, 99, 231, 197, 225, 115, 198, 175, 36, 91, 135, 102, 39, 247, 87, 244, 150, 177, 183, 92, 139, 213, 84, 121, 223, 170, 246, 62, 163, 241, 17, 202, 245, 209, 23, 123, 147, 131, 188, 189, 82, 30, 235, 174, 204, 214, 53, 8, 200, 138, 180, 226, 205, 191, 217, 208, 80, 89, 63, 77, 98, 52, 10, 72, 136, 181, 86, 76, 46, 107, 158, 210, 61, 60, 3, 19, 251, 151, 81, 117, 74, 145, 113, 35, 190, 118, 42, 95, 249, 212, 85, 11, 220, 55, 49, 22, 116, 215, 119, 167, 230, 7, 219, 164, 47, 70, 243, 97, 69, 103, 227, 12, 162, 59, 28, 133, 24, 4, 29, 41, 160, 143, 178, 90, 216, 166, 126, 238, 141, 83, 75, 161, 154, 193, 14, 122, 73, 165, 44, 129, 196, 199, 54, 43, 127, 67, 149, 51, 242, 108, 104, 109, 240, 2, 40, 206, 221, 155, 234, 94, 153, 124, 20, 134, 207, 229, 66, 184, 64, 120, 45, 58, 233, 100, 31, 146, 144, 125, 57, 111, 224, 137, 48} </pre></div> <p>Definition at line <a class="el" href="safer_8h_source.html#l00027">27</a> of file <a class="el" href="safer_8h_source.html">safer.h</a>.</p> </div> </div> <hr/>The documentation for this class was generated from the following files:<ul> <li><a class="el" href="safer_8h_source.html">safer.h</a></li> <li><a class="el" href="safer_8cpp_source.html">safer.cpp</a></li> </ul> </div> <hr size="1"/><address style="text-align: right;"><small>Generated on 9 Dec 2009 for Crypto++ by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address> </body> </html>