<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<refentry xml:id="function.mcrypt-module-open" xmlns="http://docbook.org/ns/docbook">
 <refnamediv>
  <refname>mcrypt_module_open</refname>
  <refpurpose>Opens the module of the algorithm and the mode to be used</refpurpose>
 </refnamediv>

 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <type>resource</type><methodname>mcrypt_module_open</methodname>
   <methodparam><type>string</type><parameter>algorithm</parameter></methodparam>
   <methodparam><type>string</type><parameter>algorithm_directory</parameter></methodparam>
   <methodparam><type>string</type><parameter>mode</parameter></methodparam>
   <methodparam><type>string</type><parameter>mode_directory</parameter></methodparam>
  </methodsynopsis>
  <para>
   This function opens the module of the algorithm and the mode to be used.
   The name of the algorithm is specified in algorithm, e.g. <literal>"twofish"</literal> or is
   one of the <constant>MCRYPT_ciphername</constant> constants.  The module is closed by calling
   <function>mcrypt_module_close</function>.
  </para>
 </refsect1>

 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
    <varlistentry>
     <term><parameter>algorithm</parameter></term>
     <listitem>
      &mcrypt.parameter.cipher;
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>algorithm_directory</parameter></term>
     <listitem>
      <para>
       The <parameter>algorithm_directory</parameter> parameter is used to locate
       the encryption module. When you supply a directory name, it is used.  When
       you set it to an empty string (<literal>""</literal>), the value set by the
       <literal>mcrypt.algorithms_dir</literal> &php.ini; directive is used. When
       it is not set, the default directory that is used is the one that was compiled
       into libmcrypt (usually <filename>/usr/local/lib/libmcrypt</filename>).
      </para>
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>mode</parameter></term>
     <listitem>
      &mcrypt.parameter.mode;
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>mode_directory</parameter></term>
     <listitem>
      <para>
       The <parameter>mode_directory</parameter> parameter is used to locate
       the encryption module. When you supply a directory name, it is used.  When
       you set it to an empty string (<literal>""</literal>), the value set by the
       <literal>mcrypt.modes_dir</literal> &php.ini; directive is used. When
       it is not set, the default directory that is used is the one that was compiled-in
       into libmcrypt (usually <filename>/usr/local/lib/libmcrypt</filename>).
      </para>
     </listitem>
    </varlistentry>
   </variablelist>
  </para>
 </refsect1>

 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
   Normally it returns an encryption descriptor, or &false; on error.
  </para>
 </refsect1>

 <refsect1 role="examples">
  &reftitle.examples;
  <para>
   <example>
    <title><function>mcrypt_module_open</function> Examples</title>
    <programlisting role="php">
<![CDATA[
<?php
    $td = mcrypt_module_open(MCRYPT_DES, '',
        MCRYPT_MODE_ECB, '/usr/lib/mcrypt-modes');

    $td = mcrypt_module_open('rijndael-256', '', 'ofb', '');
?>
]]>
    </programlisting>
   </example>
  </para>
  <para>
   The first line in the example above will try to open the <literal>DES</literal> cipher from
   the default directory and the <literal>ECB</literal> mode from the directory
   <filename>/usr/lib/mcrypt-modes</filename>. The second example uses
   strings as name for the cipher and mode, this only works when the
   extension is linked against libmcrypt 2.4.x or 2.5.x.
  </para>

  <para>
   <example>
    <title>Using <function>mcrypt_module_open</function> in encryption</title>
    <programlisting role="php">
<![CDATA[
<?php
    /* Open the cipher */
    $td = mcrypt_module_open('rijndael-256', '', 'ofb', '');

    /* Create the IV and determine the keysize length, use MCRYPT_RAND
     * on Windows instead */
    $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
    $ks = mcrypt_enc_get_key_size($td);

    /* Create key */
    $key = substr(md5('very secret key'), 0, $ks);

    /* Intialize encryption */
    mcrypt_generic_init($td, $key, $iv);

    /* Encrypt data */
    $encrypted = mcrypt_generic($td, 'This is very important data');

    /* Terminate encryption handler */
    mcrypt_generic_deinit($td);

    /* Initialize encryption module for decryption */
    mcrypt_generic_init($td, $key, $iv);

    /* Decrypt encrypted string */
    $decrypted = mdecrypt_generic($td, $encrypted);

    /* Terminate decryption handle and close module */
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);

    /* Show string */
    echo trim($decrypted) . "\n";
?>
]]>
    </programlisting>
   </example>
  </para>
 </refsect1>

 <refsect1 role="seealso">
  &reftitle.seealso;
  <para>
   <simplelist>
    <member><function>mcrypt_module_close</function></member>
    <member><function>mcrypt_generic</function></member>
    <member><function>mdecrypt_generic</function></member>
    <member><function>mcrypt_generic_init</function></member>
    <member><function>mcrypt_generic_deinit</function></member>
   </simplelist>
  </para>
 </refsect1>
</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->