<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <link rel="stylesheet" href="style.css" type="text/css"> <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"> <link rel="Start" href="index.html"> <link rel="previous" href="Rpc_auth_dh.html"> <link rel="next" href="Rpc_time.html"> <link rel="Up" href="index.html"> <link title="Index of types" rel=Appendix href="index_types.html"> <link title="Index of exceptions" rel=Appendix href="index_exceptions.html"> <link title="Index of values" rel=Appendix href="index_values.html"> <link title="Index of class attributes" rel=Appendix href="index_attributes.html"> <link title="Index of class methods" rel=Appendix href="index_methods.html"> <link title="Index of classes" rel=Appendix href="index_classes.html"> <link title="Index of class types" rel=Appendix href="index_class_types.html"> <link title="Index of modules" rel=Appendix href="index_modules.html"> <link title="Index of module types" rel=Appendix href="index_module_types.html"> <link title="Uq_gtk" rel="Chapter" href="Uq_gtk.html"> <link title="Equeue" rel="Chapter" href="Equeue.html"> <link title="Unixqueue" rel="Chapter" href="Unixqueue.html"> <link title="Uq_engines" rel="Chapter" href="Uq_engines.html"> <link title="Uq_socks5" rel="Chapter" href="Uq_socks5.html"> <link title="Unixqueue_mt" rel="Chapter" href="Unixqueue_mt.html"> <link title="Equeue_intro" rel="Chapter" href="Equeue_intro.html"> <link title="Uq_ssl" rel="Chapter" href="Uq_ssl.html"> <link title="Uq_tcl" rel="Chapter" href="Uq_tcl.html"> <link title="Netcgi_common" rel="Chapter" href="Netcgi_common.html"> <link title="Netcgi" rel="Chapter" href="Netcgi.html"> <link title="Netcgi_ajp" rel="Chapter" href="Netcgi_ajp.html"> <link title="Netcgi_scgi" rel="Chapter" href="Netcgi_scgi.html"> <link title="Netcgi_cgi" rel="Chapter" href="Netcgi_cgi.html"> <link title="Netcgi_fcgi" rel="Chapter" href="Netcgi_fcgi.html"> <link title="Netcgi_dbi" rel="Chapter" href="Netcgi_dbi.html"> <link title="Netcgi1_compat" rel="Chapter" href="Netcgi1_compat.html"> <link title="Netcgi_test" rel="Chapter" href="Netcgi_test.html"> <link title="Netcgi_porting" rel="Chapter" href="Netcgi_porting.html"> <link title="Netcgi_plex" rel="Chapter" href="Netcgi_plex.html"> <link title="Http_client" rel="Chapter" href="Http_client.html"> <link title="Telnet_client" rel="Chapter" href="Telnet_client.html"> <link title="Ftp_data_endpoint" rel="Chapter" href="Ftp_data_endpoint.html"> <link title="Ftp_client" rel="Chapter" href="Ftp_client.html"> <link title="Nethttpd_types" rel="Chapter" href="Nethttpd_types.html"> <link title="Nethttpd_kernel" rel="Chapter" href="Nethttpd_kernel.html"> <link title="Nethttpd_reactor" rel="Chapter" href="Nethttpd_reactor.html"> <link title="Nethttpd_engine" rel="Chapter" href="Nethttpd_engine.html"> <link title="Nethttpd_services" rel="Chapter" href="Nethttpd_services.html"> <link title="Nethttpd_plex" rel="Chapter" href="Nethttpd_plex.html"> <link title="Nethttpd_intro" rel="Chapter" href="Nethttpd_intro.html"> <link title="Netplex_types" rel="Chapter" href="Netplex_types.html"> <link title="Netplex_mp" rel="Chapter" href="Netplex_mp.html"> <link title="Netplex_mt" rel="Chapter" href="Netplex_mt.html"> <link title="Netplex_log" rel="Chapter" href="Netplex_log.html"> <link title="Netplex_controller" rel="Chapter" href="Netplex_controller.html"> <link title="Netplex_container" rel="Chapter" href="Netplex_container.html"> <link title="Netplex_sockserv" rel="Chapter" href="Netplex_sockserv.html"> <link title="Netplex_workload" rel="Chapter" href="Netplex_workload.html"> <link title="Netplex_main" rel="Chapter" href="Netplex_main.html"> <link title="Netplex_config" rel="Chapter" href="Netplex_config.html"> <link title="Netplex_kit" rel="Chapter" href="Netplex_kit.html"> <link title="Rpc_netplex" rel="Chapter" href="Rpc_netplex.html"> <link title="Netplex_cenv" rel="Chapter" href="Netplex_cenv.html"> <link title="Netplex_intro" rel="Chapter" href="Netplex_intro.html"> <link title="Netshm" rel="Chapter" href="Netshm.html"> <link title="Netshm_data" rel="Chapter" href="Netshm_data.html"> <link title="Netshm_hashtbl" rel="Chapter" href="Netshm_hashtbl.html"> <link title="Netshm_array" rel="Chapter" href="Netshm_array.html"> <link title="Netshm_intro" rel="Chapter" href="Netshm_intro.html"> <link title="Netconversion" rel="Chapter" href="Netconversion.html"> <link title="Netchannels" rel="Chapter" href="Netchannels.html"> <link title="Netstream" rel="Chapter" href="Netstream.html"> <link title="Mimestring" rel="Chapter" href="Mimestring.html"> <link title="Netmime" rel="Chapter" href="Netmime.html"> <link title="Netsendmail" rel="Chapter" href="Netsendmail.html"> <link title="Neturl" rel="Chapter" href="Neturl.html"> <link title="Netaddress" rel="Chapter" href="Netaddress.html"> <link title="Netbuffer" rel="Chapter" href="Netbuffer.html"> <link title="Netdate" rel="Chapter" href="Netdate.html"> <link title="Netencoding" rel="Chapter" href="Netencoding.html"> <link title="Netulex" rel="Chapter" href="Netulex.html"> <link title="Netaccel" rel="Chapter" href="Netaccel.html"> <link title="Netaccel_link" rel="Chapter" href="Netaccel_link.html"> <link title="Nethtml" rel="Chapter" href="Nethtml.html"> <link title="Netstring_str" rel="Chapter" href="Netstring_str.html"> <link title="Netstring_pcre" rel="Chapter" href="Netstring_pcre.html"> <link title="Netstring_mt" rel="Chapter" href="Netstring_mt.html"> <link title="Netmappings" rel="Chapter" href="Netmappings.html"> <link title="Netaux" rel="Chapter" href="Netaux.html"> <link title="Nethttp" rel="Chapter" href="Nethttp.html"> <link title="Netchannels_tut" rel="Chapter" href="Netchannels_tut.html"> <link title="Netmime_tut" rel="Chapter" href="Netmime_tut.html"> <link title="Netsendmail_tut" rel="Chapter" href="Netsendmail_tut.html"> <link title="Netulex_tut" rel="Chapter" href="Netulex_tut.html"> <link title="Neturl_tut" rel="Chapter" href="Neturl_tut.html"> <link title="Netsys" rel="Chapter" href="Netsys.html"> <link title="Netpop" rel="Chapter" href="Netpop.html"> <link title="Rpc_auth_dh" rel="Chapter" href="Rpc_auth_dh.html"> <link title="Rpc_key_service" rel="Chapter" href="Rpc_key_service.html"> <link title="Rpc_time" rel="Chapter" href="Rpc_time.html"> <link title="Rpc_auth_local" rel="Chapter" href="Rpc_auth_local.html"> <link title="Rtypes" rel="Chapter" href="Rtypes.html"> <link title="Xdr" rel="Chapter" href="Xdr.html"> <link title="Rpc" rel="Chapter" href="Rpc.html"> <link title="Rpc_program" rel="Chapter" href="Rpc_program.html"> <link title="Rpc_portmapper_aux" rel="Chapter" href="Rpc_portmapper_aux.html"> <link title="Rpc_packer" rel="Chapter" href="Rpc_packer.html"> <link title="Rpc_transport" rel="Chapter" href="Rpc_transport.html"> <link title="Rpc_client" rel="Chapter" href="Rpc_client.html"> <link title="Rpc_simple_client" rel="Chapter" href="Rpc_simple_client.html"> <link title="Rpc_portmapper_clnt" rel="Chapter" href="Rpc_portmapper_clnt.html"> <link title="Rpc_portmapper" rel="Chapter" href="Rpc_portmapper.html"> <link title="Rpc_server" rel="Chapter" href="Rpc_server.html"> <link title="Rpc_auth_sys" rel="Chapter" href="Rpc_auth_sys.html"> <link title="Rpc_intro" rel="Chapter" href="Rpc_intro.html"> <link title="Rpc_mapping_ref" rel="Chapter" href="Rpc_mapping_ref.html"> <link title="Rpc_ssl" rel="Chapter" href="Rpc_ssl.html"> <link title="Rpc_xti_client" rel="Chapter" href="Rpc_xti_client.html"> <link title="Shell_sys" rel="Chapter" href="Shell_sys.html"> <link title="Shell" rel="Chapter" href="Shell.html"> <link title="Shell_uq" rel="Chapter" href="Shell_uq.html"> <link title="Shell_mt" rel="Chapter" href="Shell_mt.html"> <link title="Shell_intro" rel="Chapter" href="Shell_intro.html"> <link title="Netsmtp" rel="Chapter" href="Netsmtp.html"><link title="Example" rel="Section" href="#2_Example"> <title>Ocamlnet 2 Reference Manual : Rpc_key_service</title> </head> <body> <div class="navbar"><a href="Rpc_auth_dh.html">Previous</a> <a href="index.html">Up</a> <a href="Rpc_time.html">Next</a> </div> <center><h1>Module <a href="type_Rpc_key_service.html">Rpc_key_service</a></h1></center> <br> <pre><span class="keyword">module</span> Rpc_key_service: <code class="code">sig</code> <a href="Rpc_key_service.html">..</a> <code class="code">end</code></pre>Contact the keyserv daemon to encrypt/decrypt data with the common key. <p> If the keyserv crashes, the current call will raise an exception (e.g. broken pipe), but the next call will try to reconnect. <p> This module works fully synchronous, i.e. waits until the keyserv responds. This is normally not a problem, because the keyserv daemon runs on the same system, and no network latencies can occur.<br> <hr width="100%"> <pre><span class="keyword">exception</span> <a name="EXCEPTIONNetname_unknown"></a>Netname_unknown</pre> <div class="info"> The netname is invalid<br> </div> <pre><span class="keyword">exception</span> <a name="EXCEPTIONNo_secret_key"></a>No_secret_key</pre> <div class="info"> The user does not have a secret key for the netname<br> </div> <pre><span class="keyword">exception</span> <a name="EXCEPTIONKey_service_problem"></a>Key_service_problem <span class="keyword">of</span> <code class="type">exn</code></pre> <div class="info"> All exceptions (except the exceptions defined above) are wrapped into <code class="code">Key_service_problem</code>.<br> </div> <pre><span class="keyword">type</span> <a name="TYPEt"></a><code class="type"></code>t </pre> <div class="info"> represents a client of the keyserv daemon<br> </div> <pre><span class="keyword">type</span> <a name="TYPEconnector"></a><code class="type"></code>connector = <code class="type">[ `Direct of <a href="Rpc_client.html#TYPEconnector">Rpc_client.connector</a> * <a href="Rpc.html#TYPEprotocol">Rpc.protocol</a> | `Keyenvoy of string ]</code> </pre> <div class="info"> How to connect to keyserv:<ul> <li><code class="code">`Direct(c,p)</code>: Create a direct RPC connection to the keyserv program listening at <code class="code">c</code> using protocol <code class="code">p</code>. This usually only works if <code class="code">c</code> is a local transport like Unix Domain.</li> <li><code class="code">`Keyenvoy path</code>: Call the <code class="code">keyenvoy</code> program installed at <code class="code">path</code></li> </ul> <br> </div> <pre><span class="keyword">val</span> <a name="VALcreate"></a>create : <code class="type">?connector:<a href="Rpc_key_service.html#TYPEconnector">connector</a> -> unit -> <a href="Rpc_key_service.html#TYPEt">t</a></code></pre><div class="info"> Connects to the keyserv daemon. By default (no <code class="code">connector</code>), the local keyserv daemon is contacted in an OS-specific way.<br> </div> <pre><span class="keyword">val</span> <a name="VALgenerate"></a>generate : <code class="type"><a href="Rpc_key_service.html#TYPEt">t</a> -> string</code></pre><div class="info"> Generates a new conversation key (a 64 bit random number)<br> </div> <pre><span class="keyword">val</span> <a name="VALencrypt"></a>encrypt : <code class="type"><a href="Rpc_key_service.html#TYPEt">t</a> -> string -> string -> string</code></pre><div class="info"> This function is used if this program is a client and wants to contact a server. The first passed string is the netname of the server. Furthermore, the keyserv daemon automatically determines the netname of this process. The daemon looks up the public key of the server and the secret key of the client, and computes the common key using the Diffie Hellman scheme. The second passed string (exactly 8 characters) is DES-encrypted with the common key in ECB mode, and returned (again 8 characters).<br> </div> <pre><span class="keyword">val</span> <a name="VALdecrypt"></a>decrypt : <code class="type"><a href="Rpc_key_service.html#TYPEt">t</a> -> string -> string -> string</code></pre><div class="info"> This function is used if this program is a server and wants to check the identity of a contacting client. The first passed string is the netname of the client. Furthermore, the keyserv daemon automatically determines the netname of this process. The daemon looks up the public key of the client and the secret key of the server, and computes the common key using the Diffie Hellman scheme. The second passed string (exactly 8 characters) is DES-decrypted with the common key in ECB mode, and returned (again 8 characters).<br> </div> <br> <a name="2_Example"></a> <h2>Example</h2><ul> <li>The client is: "unix.100@domain"</li> <li>The server is: "unix.mercury@domain" (* i.e. root@mercury *)</li> </ul> The client encrypts with <pre><code class="code"> let enc_data = encrypt "unix.mercury@domain" data </code></pre> This works because the keyserv daemon knows from the OS that the current process is run by "unix.100<br> <pre><span class="keyword">val</span> <a name="VALnet_get"></a>net_get : <code class="type"><a href="Rpc_key_service.html#TYPEt">t</a> -> string * string * string</code></pre><pre><span class="keyword">val</span> <a name="VALshut_down"></a>shut_down : <code class="type"><a href="Rpc_key_service.html#TYPEt">t</a> -> unit</code></pre></body></html>