Important modules:

	  module		behaviour	children
	  ------		---------
	  ssl_app		application	ssl_sup
	  ssl_sup		supervisor	ssl_server, ssl_broker_sup
	  ssl_server		gen_server	-
	  ssl_broker_sup	supervisor	ssl_broker
	  ssl_broker		gen_server	-

The ssl_server controls a port program that implements the SSL functionality.
That port program uses the OpenSSL package.

Each socket has a corresponding broker (listen, accept or connect). A broker
is created and supervised by the ssl_broker_sup. 

All communication is between a user and a broker. The broker communicates
with the ssl_server, that sends its commands to the port program and handles
the port program responses, that are distributed to users through the
brokers. 

There is a distinction between commands and data flow between the ssl_server
and the port program. Each established connection between the user and the
outside world consists of a local erlang socket (owned by the broker) that
is read from and written to by the broker. At the other end of the local
connection is a local socket in the port program.
 
The "real" socket that connects to the outside world is in the port program
(including listen sockets). The main purpose of the port program is to 
shuffle data between local sockets and outside world sockets, and detect and
propagate read and write errors (including detection of closed sockets) to
the ssl_server. 

There is documentation in the ssl_broker.erl module. 

There is also documentation in the esock.c and esock_openssl.c files.  

The ssl_pem.erl, ssl_pkix.erl and ssl_base64.erl modules are support
modules for reading SSL certificates. Modules for parsing certificates
are generated from ASN.1 modules in the `pkix' directory. 

The `examples' directory contains functions for generating certificates. 
Those certificates are used in the test suites.