Chunga is a web/networking library which implements portable chunked HTTP streams as described in RFC 2616.It's written by Edi Weitz and can be found at http://weitz.de/chunga/.
Base64 encoding and decoding with URI support.
A library for decompressing deflate, zlib, and gzip data
Ironclad is a Common Lisp Cryptography package; several block encryption algorithms and hash functions are included with the initial release. Its initial impetus was to unify several of the cryptographic packages for Common Lisp (such as the MD5 and SHA1 implementations floating around), but it aims at providing a cryptographic toolkit similar in scope to something like OpenSSL or Crypto++.
Supported ciphers: AES, DES, 3DES, Blowfish, Twofish, RC5, RC6, Arcfour (RC4)
Supported hash functions: MD4, MD5, SHA1, SHA256, Tiger, Adler32, CRC32 (also supports tree hashes)
RFC 2104 HMACs and RFC 4493 CMACs
Public key schemes: DSA signing and verification
Key derivation functions: PBKDF1, PBKDF2 (RFC 2898)
The Ironclad homepage and package documentation can be found at:http://method-combination.net/lisp/ironclad/Ironclad can be downloaded from:An ASDF package-definition file is included.The SHA-1 and SHA-256 hash functions do not work under CLISP versions earlier than 2.34. Please upgrade your CLISP installation. (The failures are related to CLISP's handling of (LOOP ... FINALLY ...).)Ironclad is distributed under a liberal X11/MIT-like license.Debian packageIronclad has been packaged for Debian. You can just apt-get install it.The latest Debian package sources can be found among the CL-Debian repositories.Note however that the Debian package lacks some cryptographic algorithms, removed due to patent issues. More information here.Using IroncladRSA With Ironclad—The Missing Manual is an article about using the RSA functionality that is currently implemented in Ironclad.Tell us how you are using Ironclad:
To encrypt passwords for a web site, for that I created the following function:
(defun hash-password (password)
Very simple example of encrypting and decrypting a message using the blowfish algorithm:(push "/home/mcarter/ironclad_0.20.1/" asdf:*central-registry*) ; or something similar
(asdf:oos 'asdf:load-op 'ironclad)
(defun cipher-example (message password)
(let* ((iv (ironclad:ascii-string-to-byte-array password))
(cipher (ironclad:make-cipher :blowfish :mode :ecb :key iv)))
(setf message (ironclad:ascii-string-to-byte-array message))
(format t "original message as bytes:~A~%" message)
(ironclad:encrypt-in-place cipher message)
(format t "encrypted message as bytes:~A~%" message)
(ironclad:decrypt-in-place cipher message)
;; convert the message back to a string
(setf message (coerce message 'list))
(setf message (mapcar #'code-char message))
(setf message (coerce message 'string))
(format t "your original message was:*~A*~%" message)))
* (cipher-example "ironclad is a way of encrypting and decrypting messages" "my password")
original message as bytes:#(105 114 111 110 99 108 97 100 32 105 115 32 97 32
119 97 121 32 111 102 32 101 110 99 114 121 112
116 105 110 103 32 97 110 100 32 100 101 99 114
121 112 116 105 110 103 32 109 101 115 115 97 103
encrypted message as bytes:#(206 106 66 158 68 233 4 198 157 196 72 39 13 110
140 102 0 27 7 177 80 46 144 203 187 69 89 95 208
51 206 149 172 158 127 210 90 210 19 240 224 252
137 13 19 206 188 20 101 115 115 97 103 101 115)
your original message was:*ironclad is a way of encrypting and decrypting messages*
NIL A more functional (hopefully simpler) example(ql:quickload :ironclad)
(defun get-cipher (key)
:key (ironclad:ascii-string-to-byte-array key)))
(defun encrypt (plaintext key)
(let ((cipher (get-cipher key))
(msg (ironclad:ascii-string-to-byte-array plaintext)))
(ironclad:encrypt-in-place cipher msg)
(defun decrypt (ciphertext-int key)
(let ((cipher (get-cipher key))
(msg (ironclad:integer-to-octets ciphertext-int)))
(ironclad:decrypt-in-place cipher msg)
(coerce (mapcar #'code-char (coerce msg 'list)) 'string)))
* (defvar test (encrypt "A simple test message" "pass"))
* (decrypt test "pass")
"A simple test message"
The MD5 Message-Digest Algorithm RFC 1321
A library for generation of universally unique identifiers (UUIDs) as described by RFC 4122. UUID provides methods for the generation of uuids version 1 (time based), 3 (name based with MD5 hashing), 5 (name based with SHA1 hashing) and 4 (random uuids).Project page at https://github.com/dardoria/uuidLicense: LLGPL
Implementation of RFC 2388
CL-Base32 is a Common Lisp library for encoding / decoding bytes to / from base32 strings (RFC 4648).Homepage: http://haphazardhouse.net/projects/cl-base32Source: https://github.com/hargettp/cl-base32License: MIT
Topics: data format
CL-POP is a lisp networking library that provides a POP email client based on RFC 1939 Homepage: http://www.common-lisp.net/project/cl-pop/License: LLGPL/LGPL
Implemntation of RFC2047.
cl-xmpp is an XMPP client implementation of RFCs 3920 and 3921 which can be thought of as the basis of any Jabber-compliant client. It provides messaging, roster, contact and presence management.Please find more information at the common-lisp.net project page.
net-telent-date consists of the time parsing routines from CMUCL and a universal-time to RFC 822 date converter.net-telent-date is deprecated! Please use other date/time libraries instead!
rfc2109 (aka cookies1) is a package for dealing with cookies in an RFC-compliant way. This is often needed with Web programming.It is BSD licensed.DARCS repository:
http://www.common-lisp.net/project/rfc2109/rfc2109/Browse the DARCS repository:
(cookie1:cookie-string "mycookie" "42" :max-age (* 6 24 60 60))
(cookie1:parse-cookies "thisis=\"an old netscape cookie\"")
(cookie1:parse-cookies "$Version=1;thisis=\"An RFC 2109-style cookie\";domain=\"fake.domain.name\"")
An araneida example is here:It parses old netscape cookies as well as RFC 2109 cookies.- Alan ShieldsThe function cookie-string in this package does not accept a value of zero, even though RFC2109 says it should. Is this a bug or a feature?After receiving no reply from Alan, I'm putting up a separate darcs repo that adds two things to the official one:
Allow zero max-age to allow expiring a cookie.
Add Netscape's "Expires" attribute which some browsers require for
setting a persistent cookie.
Support parsing cookie values that contain equals signs ('='). Though against the spec, these exist in the wild, used in e.g. Google AdSense/Analytics.
There are no other changes. Ideally these changes would be merged to the main tree.Sasha Kovar
TRIVIAL-LDAP is a one file, all Common Lisp client implementation of parts of RFC 2261.
Unicly is a Common Lisp library for generation of UUIDs (Universally Unique
Identifiers) as described by RFC 4122.Unicly is derived from UUID.Homepage: https://github.com/mon-key/uniclyLicense: ???
ZLIB is a compression format described by RFC1950. It is also the name of the de-facto canonical C-language implementation of the format (http://zlib.net/).There are several native Common Lisp implementations, as well as FFI bindings:
Chipz is a decompression library for decompressing DEFLATE (RFC 1951) data such as ZLIB (RFC 1950), GZIP (RFC 1952), as well as bzip2
cl-z is a set of CFFI bindings to the zlib compression library
hu.dwim.zlib is a set of CFFI bindings to the zlib compression library
Salza2 is a native Common Lisp compression library for creating data in the DEFLATE, ZLIB, or GZIP compression formats
To make it more annoying, there are at least two Common Lisp libraries also named "zlib":
Franz zlib (native CL)
common-lisp.net zlib (also native CL)
In addition, CLisp has a module also called "zlib". It is part of the default "full" module linking set.
A Common Lisp implementation of timestamps as defined by RFC3339
minimal parsing of rfc-1123 date-time strings
A Common Lisp implementation of XML-RPC using best of breed libraries