Needs
=====

  Before trying to compile genhash tool you need to install
  OpenSSL 0.9.6b (http://www.openssl.org).

Installation
============

  Simply 'make' & 'make install'

Utilisation
===========

  The genhash tool give you the ability to generate MD5 digest
  from remote HTTP/HTTPS server connected.

  The global synopsis for the tool is :

  [user@lvs]$ genhash --help
  genhash v1.0.0 (18/11, 2002)
  Usage:
    genhash -s server-address -p port -u url
    genhash -S -s server-address -p port -u url
    genhash -h
    genhash -r

  Commands:
  Either long or short options are allowed.
    genhash --use-ssl         -S       Use SSL connection to remote server.
    genhash --server          -s       Use the specified remote server address.
    genhash --port            -p       Use the specified remote server port.
    genhash --url             -u       Use the specified remote server url.
    genhash --use-virtualhost -V       Use the specified virtualhost in GET query.
    genhash --verbose         -v       Use verbose mode output.
    genhash --help            -h       Display this short inlined help screen.
    genhash --release         -r       Display the release number

  Imagine we have a remote HTTP/HTTPS server owning the IP address 192.168.200.10.
  We want to generate a MD5SUM over the server root url (/).
  To proceed, simply use :

  [user@lvs]$ genhash -s 192.168.200.10 -p 80 -u /
  -----------------------[    HTTP Header Buffer    ]-----------------------
  0000  48 54 54 50 2f 31 2e 31 - 20 32 30 30 20 4f 4b 0d   HTTP/1.1 200 OK.
  0010  0a 44 61 74 65 3a 20 57 - 65 64 2c 20 32 38 20 4e   .Date: Wed, 28 N
  ..........................................................................
  -----------------------[ HTTP Header Ascii Buffer ]-----------------------
  HTTP/1.1 200 OK
  ..............
  -----------------------[       HTML Buffer        ]-----------------------
  0000  3c 21 44 4f 43 54 59 50 - 45 20 48 54 4d 4c 20 50   <!DOCTYPE HTML P
  0010  55 42 4c 49 43 20 22 2d - 2f 2f 57 33 43 2f 2f 44   UBLIC "-//W3C//D
  ..........................................................................
  -----------------------[    HTML MD5 resulting    ]-----------------------
  0000  ff 20 ad 24 81 f9 7b 17 - 54 ef 3e 12 ec d3 a9 cc   . .$..{.T.>.....
  -----------------------[ HTML MD5 final resulting ]-----------------------
  FF20AD2481F97B1754EF3E12ECD3A9CC

  => So the Hash value generated for the remote HTTP root URL is :
     http://192.168.200.10/ is FF20AD2481F97B1754EF3E12ECD3A9CC

  Genhash can generate hash values over SSL content. Using the same sample
  we will obtain :
  [user@lvs]$ genhash -S -s 192.168.200.10 -p 443 -u /
  -----------------------[    HTTP Header Buffer    ]-----------------------
  0000  48 54 54 50 2f 31 2e 31 - 20 32 30 30 20 4f 4b 0d   HTTP/1.1 200 OK.
  0010  0a 44 61 74 65 3a 20 57 - 65 64 2c 20 32 38 20 4e   .Date: Wed, 28 N
  ..........................................................................
  -----------------------[ HTTP Header Ascii Buffer ]-----------------------
  HTTP/1.1 200 OK
  ..............
  -----------------------[       HTML Buffer        ]-----------------------
  0000  3c 21 44 4f 43 54 59 50 - 45 20 48 54 4d 4c 20 50   <!DOCTYPE HTML P
  0010  55 42 4c 49 43 20 22 2d - 2f 2f 57 33 43 2f 2f 44   UBLIC "-//W3C//D
  ..........................................................................
  -----------------------[    HTML MD5 resulting    ]-----------------------
  0000  ff 20 ad 24 81 f9 7b 17 - 54 ef 3e 12 ec d3 a9 cc   . .$..{.T.>.....
  -----------------------[ HTML MD5 final resulting ]-----------------------
  FF20AD2481F97B1754EF3E12ECD3A9CC

  => So the Hash value generated for the remote HTTP root URL is :
     https://192.168.200.10/ is FF20AD2481F97B1754EF3E12ECD3A9CC

  => The same as http since the document root is a common location for
     HTTP & HTTPS (in our sample).


  In addition with this SSL support, we have added the capability to use
  specific ssl private key and ssl certificate. Note that the private key
  need to be generated into the PEM format. In our sample we have generated
  the SSL file using the following openssl command lines :

  [user@lvs]$ openssl genrsa -des3 -out ssl.key 1024
    => we use the PEM password : password (really secure :) )
  [user@lvs]$ openssl req -new -key ssl.key -out ssl.csr
  [user@lvs]$ openssl req -x509 -key ssl.key -in ssl.csr -out ssl.crt
  [user@lvs]$ cat ssl.key ssl.crt > ssl.pem

  Then we perform a hash computation using this specific SSL file :

  [user@lvs]$ genhash --use-ssl \
                      --server=192.168.201.100 --port=443 --url=/ \
                      --use-private-key=ssl.pem \
                      --use-password=password \
                      --use-certificate=ssl.crt
  ..........................................................................
  -----------------------[ HTML MD5 final resulting ]-----------------------
  FF20AD2481F97B1754EF3E12ECD3A9CC


Have fun with it !
Alexandre
