DIGEST-MD5 README -- Notes on the implementation
Copyright (C) 2004-2024 Simon Josefsson
See the end for copying conditions.

This directory hold an implementation of DIGEST-MD5.

This module is written in portable C89.  It may be used as a
stand-alone implementation, outside of the framework that GNU SASL
provide.  It needs two external symbols, gc_md5 and gc_hmac_md5, which
should be easy to re-implement, if you are not using libgc.

The files CLIENT.C and SERVER.C contain the glue between GNU SASL and
the stand-alone implementation.  Currently it is the best (only)
example on how to use the module.

For updates to the project, see <http://www.gnu.org/software/gsasl/>.

Random notes follow.

* I initialled wanted to use abnf2perl from
  <http://www.cs.columbia.edu/sip/syntax/abnfperl/> to build a
  Flex/Yacc grammar for DIGEST-MD5, instead of parser.c.  However, the
  perl script did not seem to handle several required construct, and
  did not generally seem finished.  Secondly, the Yacc generated code
  was difficult to read, and hence difficult to review.  I still wish
  to explore this way, because the current parser is too permissive,
  but don't have time now.

* It intentionally do not implement sub-sequent authentication.  If
  you believe that saving one round-trip in some, for most users
  uncommon situations, make up for the added code complexity, hire me
  to implement the missing pieces.

----------------------------------------------------------------------
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
