<!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="Netglob.html"> <link rel="next" href="Netsockaddr.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="Unixqueue_pollset" rel="Chapter" href="Unixqueue_pollset.html"> <link title="Unixqueue_select" rel="Chapter" href="Unixqueue_select.html"> <link title="Uq_resolver" rel="Chapter" href="Uq_resolver.html"> <link title="Uq_engines" rel="Chapter" href="Uq_engines.html"> <link title="Uq_socks5" rel="Chapter" href="Uq_socks5.html"> <link title="Uq_io" rel="Chapter" href="Uq_io.html"> <link title="Uq_lwt" rel="Chapter" href="Uq_lwt.html"> <link title="Uq_libevent" rel="Chapter" href="Uq_libevent.html"> <link title="Uq_mt" rel="Chapter" href="Uq_mt.html"> <link title="Equeue_intro" rel="Chapter" href="Equeue_intro.html"> <link title="Equeue_howto" rel="Chapter" href="Equeue_howto.html"> <link title="Uq_ssl" rel="Chapter" href="Uq_ssl.html"> <link title="Https_client" rel="Chapter" href="Https_client.html"> <link title="Uq_tcl" rel="Chapter" href="Uq_tcl.html"> <link title="Netcamlbox" rel="Chapter" href="Netcamlbox.html"> <link title="Netcgi_apache" rel="Chapter" href="Netcgi_apache.html"> <link title="Netcgi_modtpl" rel="Chapter" href="Netcgi_modtpl.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_conncache" rel="Chapter" href="Http_client_conncache.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="Http_fs" rel="Chapter" href="Http_fs.html"> <link title="Ftp_fs" rel="Chapter" href="Ftp_fs.html"> <link title="Netclient_tut" rel="Chapter" href="Netclient_tut.html"> <link title="Netgssapi" rel="Chapter" href="Netgssapi.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_util" rel="Chapter" href="Nethttpd_util.html"> <link title="Nethttpd_intro" rel="Chapter" href="Nethttpd_intro.html"> <link title="Netmech_scram" rel="Chapter" href="Netmech_scram.html"> <link title="Netmech_scram_gssapi" rel="Chapter" href="Netmech_scram_gssapi.html"> <link title="Netmcore" rel="Chapter" href="Netmcore.html"> <link title="Netmcore_camlbox" rel="Chapter" href="Netmcore_camlbox.html"> <link title="Netmcore_mempool" rel="Chapter" href="Netmcore_mempool.html"> <link title="Netmcore_heap" rel="Chapter" href="Netmcore_heap.html"> <link title="Netmcore_ref" rel="Chapter" href="Netmcore_ref.html"> <link title="Netmcore_array" rel="Chapter" href="Netmcore_array.html"> <link title="Netmcore_sem" rel="Chapter" href="Netmcore_sem.html"> <link title="Netmcore_mutex" rel="Chapter" href="Netmcore_mutex.html"> <link title="Netmcore_condition" rel="Chapter" href="Netmcore_condition.html"> <link title="Netmcore_queue" rel="Chapter" href="Netmcore_queue.html"> <link title="Netmcore_buffer" rel="Chapter" href="Netmcore_buffer.html"> <link title="Netmcore_matrix" rel="Chapter" href="Netmcore_matrix.html"> <link title="Netmcore_hashtbl" rel="Chapter" href="Netmcore_hashtbl.html"> <link title="Netmcore_process" rel="Chapter" href="Netmcore_process.html"> <link title="Netmcore_tut" rel="Chapter" href="Netmcore_tut.html"> <link title="Netmcore_basics" rel="Chapter" href="Netmcore_basics.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_semaphore" rel="Chapter" href="Netplex_semaphore.html"> <link title="Netplex_sharedvar" rel="Chapter" href="Netplex_sharedvar.html"> <link title="Netplex_mutex" rel="Chapter" href="Netplex_mutex.html"> <link title="Netplex_encap" rel="Chapter" href="Netplex_encap.html"> <link title="Netplex_mbox" rel="Chapter" href="Netplex_mbox.html"> <link title="Netplex_intro" rel="Chapter" href="Netplex_intro.html"> <link title="Netplex_advanced" rel="Chapter" href="Netplex_advanced.html"> <link title="Netplex_admin" rel="Chapter" href="Netplex_admin.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="Netmappings" rel="Chapter" href="Netmappings.html"> <link title="Netaux" rel="Chapter" href="Netaux.html"> <link title="Nethttp" rel="Chapter" href="Nethttp.html"> <link title="Netpagebuffer" rel="Chapter" href="Netpagebuffer.html"> <link title="Netfs" rel="Chapter" href="Netfs.html"> <link title="Netglob" rel="Chapter" href="Netglob.html"> <link title="Netauth" rel="Chapter" href="Netauth.html"> <link title="Netsockaddr" rel="Chapter" href="Netsockaddr.html"> <link title="Netnumber" rel="Chapter" href="Netnumber.html"> <link title="Rtypes" rel="Chapter" href="Rtypes.html"> <link title="Xdr_mstring" rel="Chapter" href="Xdr_mstring.html"> <link title="Xdr" rel="Chapter" href="Xdr.html"> <link title="Netcompression" rel="Chapter" href="Netcompression.html"> <link title="Netunichar" rel="Chapter" href="Netunichar.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="Netstring_pcre" rel="Chapter" href="Netstring_pcre.html"> <link title="Netsys" rel="Chapter" href="Netsys.html"> <link title="Netsys_posix" rel="Chapter" href="Netsys_posix.html"> <link title="Netsys_pollset" rel="Chapter" href="Netsys_pollset.html"> <link title="Netlog" rel="Chapter" href="Netlog.html"> <link title="Netexn" rel="Chapter" href="Netexn.html"> <link title="Netsys_win32" rel="Chapter" href="Netsys_win32.html"> <link title="Netsys_pollset_posix" rel="Chapter" href="Netsys_pollset_posix.html"> <link title="Netsys_pollset_win32" rel="Chapter" href="Netsys_pollset_win32.html"> <link title="Netsys_pollset_generic" rel="Chapter" href="Netsys_pollset_generic.html"> <link title="Netsys_signal" rel="Chapter" href="Netsys_signal.html"> <link title="Netsys_oothr" rel="Chapter" href="Netsys_oothr.html"> <link title="Netsys_xdr" rel="Chapter" href="Netsys_xdr.html"> <link title="Netsys_rng" rel="Chapter" href="Netsys_rng.html"> <link title="Netsys_types" rel="Chapter" href="Netsys_types.html"> <link title="Netsys_mem" rel="Chapter" href="Netsys_mem.html"> <link title="Netsys_tmp" rel="Chapter" href="Netsys_tmp.html"> <link title="Netsys_sem" rel="Chapter" href="Netsys_sem.html"> <link title="Netsys_pmanage" rel="Chapter" href="Netsys_pmanage.html"> <link title="Netgzip" rel="Chapter" href="Netgzip.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="Rpc" rel="Chapter" href="Rpc.html"> <link title="Rpc_program" rel="Chapter" href="Rpc_program.html"> <link title="Rpc_util" rel="Chapter" href="Rpc_util.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_auth_gssapi" rel="Chapter" href="Rpc_auth_gssapi.html"> <link title="Rpc_proxy" rel="Chapter" href="Rpc_proxy.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_intro_gss" rel="Chapter" href="Rpc_intro_gss.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_fs" rel="Chapter" href="Shell_fs.html"> <link title="Shell_intro" rel="Chapter" href="Shell_intro.html"> <link title="Netsmtp" rel="Chapter" href="Netsmtp.html"> <link title="Intro" rel="Chapter" href="Intro.html"> <link title="Platform" rel="Chapter" href="Platform.html"> <link title="Foreword" rel="Chapter" href="Foreword.html"> <link title="Ipv6" rel="Chapter" href="Ipv6.html"> <link title="Regexp" rel="Chapter" href="Regexp.html"><link title="Bitstring operations" rel="Section" href="#2_Bitstringoperations"> <title>Ocamlnet 3 Reference Manual : Netauth</title> </head> <body> <div class="navbar"><a class="pre" href="Netglob.html" title="Netglob">Previous</a> <a class="up" href="index.html" title="Index">Up</a> <a class="post" href="Netsockaddr.html" title="Netsockaddr">Next</a> </div> <h1>Module <a href="type_Netauth.html">Netauth</a></h1> <pre><span class="keyword">module</span> Netauth: <code class="code">sig</code> <a href="Netauth.html">..</a> <code class="code">end</code></pre><div class="info"> Some primitives for authentication<br> </div> <hr width="100%"> <pre><span id="VALhmac"><span class="keyword">val</span> hmac</span> : <code class="type">h:(string -> string) -><br> b:int -> l:int -> k:string -> message:string -> string</code></pre><div class="info"> The HMAC algorithm of RFC 2104. The function <code class="code">h</code> is the hash function. <code class="code">b</code> and <code class="code">l</code> are properties of <code class="code">h</code> (see the RFC or below). The string <code class="code">k</code> is the key, up to <code class="code">b</code> bytes. The <code class="code">message</code> is authenticated. <p> The key <code class="code">k</code> should ideally have length <code class="code">l</code>. If this cannot be ensured by other means, one should pass <code class="code">k = h any_k</code>. <p> Common values of <code class="code">b</code> and <code class="code">l</code>:<ul> <li>For <code class="code">h=MD5</code>: <code class="code">b=64</code>, <code class="code">l=16</code></li> <li>For <code class="code">h=SHA-1</code>: <code class="code">b=64</code>, <code class="code">l=20</code></li> </ul> <br> </div> <pre><span id="TYPEkey_type"><span class="keyword">type</span> <code class="type"></code>key_type</span> = <code class="type">[ `Kc | `Ke | `Ki ]</code> </pre> <div class="info"> Key types:<ul> <li><code class="code">`Kc</code> is used for computing checksums</li> <li><code class="code">`Ke</code> is used for encrypting confidential messages</li> <li><code class="code">`Ki</code> is used for computing integrity checksums for encrypted messages</li> </ul> <br> </div> <pre><span id="VALderive_key_rfc3961_simplified"><span class="keyword">val</span> derive_key_rfc3961_simplified</span> : <code class="type">encrypt:(string -> string) -><br> random_to_key:(string -> string) -><br> block_size:int -> k:int -> usage:int -> key_type:<a href="Netauth.html#TYPEkey_type">key_type</a> -> string</code></pre><div class="info"> Derives a special key from a base key, as described in RFC 3961. <p> <ul> <li><code class="code">encrypt</code>: Encrypts the argument with the base key and the initial cipher state.</li> <li><code class="code">random_to_key</code>: Converts a random string of size <code class="code">k</code> to a key</li> <li><code class="code">block_size</code>: The block size of the cipher underlying <code class="code">encrypt</code>. It is ensured that <code class="code">encrypt</code> is called with strings having exactly this many bits. (The <code class="code">c</code> parameter in the RFC text.) Minimum: 40.</li> <li><code class="code">k</code>: The input size for <code class="code">random_to_key</code> in bits. Must be divisible by 8.</li> <li><code class="code">usage</code>: The usage number (here restricted to 0-255, although the RFC would allow 32 bits). Examples for usage numbers can be found in RFC 4121 section 2.</li> <li><code class="code">key_type</code>: Which key type to derive</li> </ul> The output is a key as produced by <code class="code">random_to_key</code>.<br> </div> <br> <h2 id="2_Bitstringoperations">Bitstring operations</h2><br> <pre><span id="VALxor_s"><span class="keyword">val</span> xor_s</span> : <code class="type">string -> string -> string</code></pre><div class="info"> Performs the bitwise XOR of these strings (which must have the same length)<br> </div> <pre><span id="VALadd_1_complement"><span class="keyword">val</span> add_1_complement</span> : <code class="type">string -> string -> string</code></pre><div class="info"> The addition algorithm for 1's-complement numbers. The two numbers to add are given as bitstrings (big endian), and must have the same length<br> </div> <pre><span id="VALrotate_right"><span class="keyword">val</span> rotate_right</span> : <code class="type">int -> string -> string</code></pre><div class="info"> Rotate the (big-endian) bitstring to the right by n bits. This also works for negative n (left rotation), and for n whose absolute value is greater or equal than the bit length of the string.<br> </div> <pre><span id="VALn_fold"><span class="keyword">val</span> n_fold</span> : <code class="type">int -> string -> string</code></pre><div class="info"> Blumenthal's n-fold algorithm for an n that is divisible by 8. (RFC 3961, section 5.1)<br> </div> </body></html>