S-BASE64 is an open source Common Lisp implementation of Base64 Encoding and Decoding. Base64 encoding is a technique to encode binary data in a portable, safe printable, 7-bit ASCII format. For a general introduction, please consult the Wikipedia article on Base64. This simple package is used as a building block in a number of other open source projects, as can be seen from this description of some other Open Source Common Lisp packages.
S-BASE64 is considered stable code.
October 2005 - Created as a seperate project.
S-BASE64 is written in ANSI standard Common Lisp and should be portable across any CL implementation.
You can download the latested released tarball of the S-BASE64 package from http://homepage.mac.com/svc/s-base64/s-base64.tar.gz. This archive is signed on release by Sven Van Caekenberghe, whose public key is published at http://homepage.mac.com/svc/sven-public-ascii.gpg, the signature is in http://homepage.mac.com/svc/s-base64/s-base64.tar.gz.asc.
Alternatively you can access the DARCS repository at http://www.beta9.be/darcs/s-base64. For a good description on how to use DARCS see http://dirkgerrits.com/programming/erlisp/download/.
$ darcs get http://www.beta9.be/darcs/s-base64 Welcome to S-BASE64, a Common Lisp implementation of Base64 Encoding/Decoding ********************** Copying patch 6 of 6... done! Applying patches to the "working" directory... ............ Finished getting. $ cd s-base64/ $ darcs pull Pulling from "http://www.beta9.be/darcs/s-base64"... Welcome to S-BASE64, a Common Lisp implementation of Base64 Encoding/Decoding ********************** No remote changes to pull in!
The S-BASE64 package is loaded using ASDF. There is an excellent tutorial on ASDF to get you started. Alternatively you can use ASDF-INSTALL. There is an great tutorial on ASDF-INSTALL to get you on the way.
$ cd apps/asdf/systems/ $ ln -s ~/darcs/s-base64/s-base64.asd . $ cd ~ $ /Applications/LispWorks/lispworks-tty LispWorks(R): The Common Lisp Programming Environment Copyright (C) 1987-2005 LispWorks Ltd. All rights reserved. Version 4.4.5 Saved by sven as lispworks-tty, at 26 Oct 2005 11:53 User sven on voyager.local ; Loading text file /Applications/LispWorks/Library/lib/4-4-0-0/config/siteinit.lisp ; Loading text file /Applications/LispWorks/Library/lib/4-4-0-0/private-patches/load.lisp ; Loading text file /Users/sven/.lispworks ; Loading text file /Users/sven/apps/asdf/init-asdf.lisp ; Loading fasl file /Users/sven/apps/asdf/asdf.nfasl ;Pushed #P"/Users/sven/apps/asdf/systems/" onto ASDF central registry CL-USER 1 > (asdf:oos 'asdf:load-op :s-base64) ; Loading /Applications/LispWorks/Library/lib/4-4-0-0/load-on-demand/ccl/xp-fancyformat.nfasl on demand... ; loading system definition from ; /Users/sven/apps/asdf/systems/s-base64.asd into ; #<The ASDF787 package, 0/16 internal, 0/16 external> ; Loading text file /Users/sven/darcs/s-base64/s-base64.asd ; registering #
as S-BASE64 ;;; Compiling file /Users/sven/darcs/s-base64/src/package.lisp ... ... ; Loading fasl file /Users/sven/darcs/s-base64/src/package.nfasl ;;; Compiling file /Users/sven/darcs/s-base64/src/base64.lisp ... ... ; Loading fasl file /Users/sven/darcs/s-base64/src/base64.nfasl
To encode you start with either a binary input stream or a byte array and write to a character output stream. To decode you start from a character input stream and write to a binary output stream or return a byte array. You can use the standard CL marcros WITH-OUTPUT-TO-STRING of WITH-INPUT-FROM-STRING to convert to and from a string. The following listener transcript show how to compute the second example from RFC 3548, section 7:
CL-USER 1 > (in-package :s-base64) #<The S-BASE64 package, 50/128 internal, 4/16 external> S-BASE64 2 > (setf bytes #(#x14 #xfb #x9c #x03 #xd9)) #(20 251 156 3 217) S-BASE64 3 > (with-output-to-string (out) (encode-base64-bytes bytes out)) "FPucA9k=" S-BASE64 4 > (with-input-from-string (in *) (decode-base64-bytes in)) #(20 251 156 3 217)
There is automatically generated API Reference documentation available for the S-BASE64 package.
The KPAX mailing list is used for this project.
There is a variant of Base64 encoding used for URL's and filenames that could be implemented.
Illegal input results in generic low-level CL conditions rather than a more meaningful high-level application specific condition.
S-BASE64 was written by Sven Van Caekenberghe.
S-BASE64 is being maintained by Sven Van Caekenberghe.
You are granted the rights to distribute and use this software as governed by the terms of the Lisp Lesser General Public License (http://opensource.franz.com/preamble.html), also known as the LLGPL.
S-BASE64 was originally part of KPAX and became a seperate project in October 2005.
The following RFC's can be considered as definitions of Base64 Encoding: