contrib/cap_sasl.pl: whitespace, error msglevels

ref: atheme/atheme@3591032
contrib/cap_sasl.pl: use Crypt::PK::ECC instead of ecdsatool

ref: atheme/atheme@b134884
contrib/cap_sasl.pl: require challenge to always be 32 bytes

ref: atheme/atheme@1ab485c
contrib/cap_sasl.pl: properly abort authentication

ref: atheme/atheme@934450a
contrib/cap_sasl.pl: don't use global filehandles (no functional changes)

ref: atheme/atheme@50a206f
contrib/cap_sasl.pl: allow key paths to be relative to ~/.irssi

ref: atheme/atheme@2fd2e4d
contrib/cap_sasl.pl: update contact information

ref: atheme/atheme@8fb1bc9
contrib/cap_sasl.pl: disconnect on failure

ref: atheme/atheme@78b3328
contrib/cap_sasl.pl: implement ECDSA key generation

ref: atheme/atheme@585d5d0
contrib/cap_sasl.pl: use relative path for a shorter command

ref: atheme/atheme@5cdcbd2
contrib/cap_sasl.pl: use relative path in sasl.auth as well

ref: atheme/atheme@80a63f8
contrib/cap_sasl.pl: bump the version number

ref: atheme/atheme@639c3b3
contrib/cap_sasl.pl: strip slashes from the file name just in case

ref: atheme/atheme@1cf2afb
contrib/cap_sasl.pl: ./foo is a relative path

ref: atheme/atheme@518619f
nickserv/enforce: fix unimportant bug

ref: atheme/atheme@4cce39f
operserv/clones: Fix some corner cases in ADDEXEMPT mask validity checking.

ref: atheme/atheme@7fca191
Correctly call <ctype.h> functions using (unsigned char) casts.

ref: atheme/atheme@4d7df1c
contrib/cap_sasl.pl: clarify license

ref: atheme/atheme@cc57e72
contrib/cap_sasl.pl: don't assume cmdchar = /

This avoids breaking on an irssi instance that does not consider / as a
command prefix.

ref: atheme/atheme@3ac70dd
contrib/cap_sasl.pl: show the real cmdchar instead of none

ref: atheme/atheme@0cc7f6a