<?xml version="1.0" encoding="utf-8"?>
<refentry xml:id="function.rnp-op-generate-key" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
 <refnamediv>
  <refname>rnp_op_generate_key</refname>
  <refpurpose>Generate key</refpurpose>
 </refnamediv>

 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <type class="union"><type>string</type><type>false</type></type><methodname>rnp_op_generate_key</methodname>
   <methodparam><type>RnpFFI</type><parameter>ffi</parameter></methodparam>
   <methodparam><type>string</type><parameter>userid</parameter></methodparam>
   <methodparam><type>string</type><parameter>key_alg</parameter></methodparam>
   <methodparam choice="opt"><type>string</type><parameter>sub_alg</parameter></methodparam>
   <methodparam choice="opt"><type>array</type><parameter>options</parameter></methodparam>
  </methodsynopsis>
  <para>

  </para>


 </refsect1>

 <refsect1 role="parameters">
  &reftitle.parameters;
  <variablelist>
   <varlistentry>
    <term><parameter>ffi</parameter></term>
    <listitem>
     <para>
      &rnp.parameter.ffi-description;
     </para>
    </listitem>
   </varlistentry>
   <varlistentry>
    <term><parameter>userid</parameter></term>
    <listitem>
     <para>
      PGP User ID - text that is intended to represent
      the name and email address of the key holder.
     </para>
    </listitem>
   </varlistentry>
   <varlistentry>
    <term><parameter>key_alg</parameter></term>
    <listitem>
     <para>
      Primary key algorithm (i.e. 'RSA', 'DSA', etc).
     </para>
    </listitem>
   </varlistentry>
   <varlistentry>
    <term><parameter>sub_alg</parameter></term>
    <listitem>
     <para>
      Subkey algorithm. If not set, subkey will not be generated.
     </para>
    </listitem>
   </varlistentry>
   <varlistentry>
    <term><parameter>options</parameter></term>
    <listitem>
     <para>
      An associative array with options.
     </para>
     <informaltable>
      <tgroup cols="2">
       <thead>
        <row>
         <entry>Key</entry>
         <entry>Data type</entry>
         <entry>&Description;</entry>
        </row>
       </thead>
       <tbody>
        <row>
         <entry><literal>"bits"</literal></entry>
         <entry>integer</entry>
         <entry>Primary key size in bits. Applicable only to RSA, DSA and El-Gamal keys.</entry>
        </row>
        <row>
         <entry><literal>"hash"</literal></entry>
         <entry>string</entry>
         <entry>Hash algorithm used in self signature or subkey binding signature.</entry>
        </row>
        <row>
         <entry><literal>"dsa_qbits"</literal></entry>
         <entry>integer</entry>
         <entry>Set size of a <literal>q</literal> parameter for DSA key.
          Note: appropriate default value will be set, depending on key bits. However you may
          override it if needed.</entry>
        </row>
        <row>
         <entry><literal>"curve"</literal></entry>
         <entry>string</entry>
         <entry>Set the curve used for ECC key. Note: this is only applicable for ECDSA, ECDH and SM2 keys.</entry>
        </row>
        <row>
         <entry><literal>"request_password"</literal></entry>
         <entry>boolean</entry>
         <entry>Enable requesting password via password provider. This password
          will be used for key encryption. Password provider callback function should be set in
	  advance by calling <function>rnp_ffi_set_pass_provider</function>.
          Note: this setting will be ignored if password was set via<literal>"password"</literal></entry>
        </row>
        <row>
         <entry><literal>"password"</literal></entry>
         <entry>string</entry>
         <entry>Set the password used to encrypt the secret key data.</entry>
        </row>
        <row>
         <entry><literal>"expiration"</literal></entry>
         <entry>integer</entry>
         <entry>Set the key and subkey expiration time in seconds.</entry>
        </row>
        <row>
         <entry><literal>"sub_bits"</literal></entry>
         <entry>integer</entry>
         <entry>Subkey size in bits. Applicable only to RSA, DSA and El-Gamal keys.</entry>
        </row>
        <row>
         <entry><literal>"sub_hash"</literal></entry>
         <entry>string</entry>
         <entry>Hash algorithm used in subkey self signature or subkey binding signature.</entry>
        </row>
        <row>
         <entry><literal>"sub_curve"</literal></entry>
         <entry>string</entry>
         <entry>Set the curve used for ECC subkey. Note: this is only applicable for ECDSA, ECDH and SM2 keys.</entry>
        </row>
       </tbody>
      </tgroup>
     </informaltable>
    </listitem>
   </varlistentry>
  </variablelist>
 </refsect1>

 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
   Fingerprint of the generated primary key&return.falseforfailure;. This fingerprint can be used
   later to reference the key in sign and encrypt operations. The key data is stored in FFI
   memory context and can be saved using
   <function>rnp_save_keys</function> or <function>rnp_save_keys_to_path</function>.
  </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
-->
