| 1 |
<?xml version="1.0" encoding="iso-8859-1"?> |
|---|
| 2 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
|---|
| 3 |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> |
|---|
| 4 |
<head> |
|---|
| 5 |
<title>CL+SSL</title> |
|---|
| 6 |
<link rel="stylesheet" type="text/css" href="index.css"/> |
|---|
| 7 |
</head> |
|---|
| 8 |
<body> |
|---|
| 9 |
<h1>CL+SSL</h1> |
|---|
| 10 |
|
|---|
| 11 |
<p> |
|---|
| 12 |
A Common Lisp interface to OpenSSL. |
|---|
| 13 |
</p> |
|---|
| 14 |
|
|---|
| 15 |
<h3>About</h3> |
|---|
| 16 |
|
|---|
| 17 |
<p> |
|---|
| 18 |
This library is a fork |
|---|
| 19 |
of <a href="http://www.cliki.net/SSL-CMUCL">SSL-CMUCL</a>. The |
|---|
| 20 |
original SSL-CMUCL source code was written by Eric Marsden and |
|---|
| 21 |
includes contributions by Jochen Schmidt. Development into CL+SSL |
|---|
| 22 |
was done by David Lichteblau. License: MIT-style. |
|---|
| 23 |
</p> |
|---|
| 24 |
|
|---|
| 25 |
<p> |
|---|
| 26 |
Distinguishing features: CL+SSL is portable code based on CFFI and |
|---|
| 27 |
gray streams. It defines its own libssl BIO method, so that SSL |
|---|
| 28 |
I/O can be written over portable Lisp streams instead of bypassing |
|---|
| 29 |
the streams and sending data over Unix file descriptors directly. |
|---|
| 30 |
(But the traditional approach is still used if possible.) |
|---|
| 31 |
</p> |
|---|
| 32 |
|
|---|
| 33 |
<h3>Download</h3> |
|---|
| 34 |
<p> |
|---|
| 35 |
Anonymous CVS (<a href="http://common-lisp.net/cgi-bin/viewcvs.cgi/?cvsroot=cl-plus-ssl">browse</a>): |
|---|
| 36 |
</p> |
|---|
| 37 |
<pre>$ cvs -d :pserver:anonymous:anonymous@common-lisp.net:/project/cl-plus-ssl/cvsroot cl+ssl</pre> |
|---|
| 38 |
<p> |
|---|
| 39 |
<a |
|---|
| 40 |
href="http://common-lisp.net/project/cl-plus-ssl/download/">Tarballs</a> |
|---|
| 41 |
are also available (but not always up-to-date). |
|---|
| 42 |
</p> |
|---|
| 43 |
<p> |
|---|
| 44 |
Note that you need the <tt>libssl-dev</tt> package on Debian to |
|---|
| 45 |
load this package without manual configuration. |
|---|
| 46 |
</p> |
|---|
| 47 |
|
|---|
| 48 |
<p> |
|---|
| 49 |
Send bug reports to <a |
|---|
| 50 |
href="mailto:cl-plus-ssl-devel@common-lisp.net">cl-plus-ssl-devel@common-lisp.net</a> |
|---|
| 51 |
(<a |
|---|
| 52 |
href="http://common-lisp.net/cgi-bin/mailman/listinfo/cl-plus-ssl-devel">list |
|---|
| 53 |
information</a>). |
|---|
| 54 |
</p> |
|---|
| 55 |
|
|---|
| 56 |
|
|---|
| 57 |
|
|---|
| 58 |
|
|---|
| 59 |
|
|---|
| 60 |
|
|---|
| 61 |
|
|---|
| 62 |
|
|---|
| 63 |
|
|---|
| 64 |
|
|---|
| 65 |
|
|---|
| 66 |
|
|---|
| 67 |
|
|---|
| 68 |
|
|---|
| 69 |
|
|---|
| 70 |
|
|---|
| 71 |
|
|---|
| 72 |
|
|---|
| 73 |
|
|---|
| 74 |
|
|---|
| 75 |
|
|---|
| 76 |
|
|---|
| 77 |
|
|---|
| 78 |
|
|---|
| 79 |
|
|---|
| 80 |
|
|---|
| 81 |
|
|---|
| 82 |
|
|---|
| 83 |
|
|---|
| 84 |
|
|---|
| 85 |
|
|---|
| 86 |
|
|---|
| 87 |
|
|---|
| 88 |
|
|---|
| 89 |
|
|---|
| 90 |
|
|---|
| 91 |
|
|---|
| 92 |
|
|---|
| 93 |
|
|---|
| 94 |
|
|---|
| 95 |
<h3>API functions</h3> |
|---|
| 96 |
<p> |
|---|
| 97 |
<div class="def">Function CL+SSL:MAKE-SSL-CLIENT-STREAM (fd-or-stream &key external-format certificate key close-callback (unwrap-streams-p t))<br/><br/> |
|---|
| 98 |
Function CL+SSL:MAKE-SSL-SERVER-STREAM (fd-or-stream &key external-format certificate key close-callback (unwrap-streams-p t))</div> |
|---|
| 99 |
Return an SSL stream for the client (server) |
|---|
| 100 |
socket <tt>fd-or-stream</tt>. All reads and writes to this |
|---|
| 101 |
stream will be pushed through the OpenSSL library. |
|---|
| 102 |
</p> |
|---|
| 103 |
<p> |
|---|
| 104 |
Keyword arguments: |
|---|
| 105 |
</p> |
|---|
| 106 |
<p> |
|---|
| 107 |
If <tt>fd-or-stream</tt> is a lisp stream, the SSL stream will |
|---|
| 108 |
close it automatically. File descriptors are not closed |
|---|
| 109 |
automatically. However, if <tt>close-callback</tt> is non-nil, it |
|---|
| 110 |
will be called with zero arguments when the SSL stream is closed. |
|---|
| 111 |
</p> |
|---|
| 112 |
<p> |
|---|
| 113 |
If <tt>unwrap-stream-p</tt> is true (the default), a stream for a |
|---|
| 114 |
file descriptor will be replaced by that file descriptor |
|---|
| 115 |
automatically. This is similar to passing the result |
|---|
| 116 |
of <tt>stream-fd</tt> as an argument, except that a deadline |
|---|
| 117 |
associated with the stream object will be taken into account, and |
|---|
| 118 |
that the stream will be closed automatically. As with file |
|---|
| 119 |
descriptor arguments, no I/O will actually be done on the stream |
|---|
| 120 |
object. |
|---|
| 121 |
</p> |
|---|
| 122 |
<p> |
|---|
| 123 |
<tt>certificate</tt> is the path to a file containing the PEM-encoded |
|---|
| 124 |
certificate for your client. <tt>key</tt> is the path to the PEM-encoded |
|---|
| 125 |
key for the client, which must not be associated with a passphrase. |
|---|
| 126 |
</p> |
|---|
| 127 |
<p> |
|---|
| 128 |
If <tt>external-format</tt> is <tt>nil</tt> (the default), a plain |
|---|
| 129 |
<tt>(unsigned-byte 8)</tt> SSL stream is returned. With a |
|---|
| 130 |
non-null <tt>external-format</tt>, a flexi-stream capable of |
|---|
| 131 |
character I/O will be returned instead, with the specified value |
|---|
| 132 |
as its initial external format. |
|---|
| 133 |
</p> |
|---|
| 134 |
<p> |
|---|
| 135 |
<div class="def">Function CL+SSL:RELOAD ()</div> |
|---|
| 136 |
Reload <tt>libssl</tt>. Call this function after restarting a Lisp |
|---|
| 137 |
core with CL+SSL dumped into it on Lisp implementations that do |
|---|
| 138 |
not reload shared libraries automatically. |
|---|
| 139 |
</p> |
|---|
| 140 |
<p> |
|---|
| 141 |
<div class="def">Function CL+SSL:STREAM-FD (stream)</div> |
|---|
| 142 |
Return <tt>stream</tt>'s file descriptor as an integer, if known. |
|---|
| 143 |
Otherwise return <tt>stream</tt> itself. The result of this |
|---|
| 144 |
function can be passed to <tt>make-ssl-client-stream</tt> |
|---|
| 145 |
and <tt>make-ssl-server-stream</tt>. |
|---|
| 146 |
</p> |
|---|
| 147 |
|
|---|
| 148 |
<h3>Portability</h3> |
|---|
| 149 |
<p> |
|---|
| 150 |
CL+SSL requires CFFI with callback support. |
|---|
| 151 |
</p> |
|---|
| 152 |
<p> |
|---|
| 153 |
Test results for Linux/x86, except OpenMCL which was tested on |
|---|
| 154 |
Linux/PPC: |
|---|
| 155 |
</p> |
|---|
| 156 |
<table border="1" cellpadding="2" cellspacing="0"> |
|---|
| 157 |
<thead> |
|---|
| 158 |
<tr> |
|---|
| 159 |
<th><b>Lisp Implementation</b></th> |
|---|
| 160 |
<th><b>Status</b></th> |
|---|
| 161 |
<th><b>Comments</b></th> |
|---|
| 162 |
</tr> |
|---|
| 163 |
</thead> |
|---|
| 164 |
<tr><td>OpenMCL</td><td class="working">Working</td></tr> |
|---|
| 165 |
<tr><td>SBCL</td><td class="working">Working</td></tr> |
|---|
| 166 |
<tr><td>CMU CL</td><td class="working">Working</td></tr> |
|---|
| 167 |
<tr><td>CLISP</td><td class="working">Working</td></tr> |
|---|
| 168 |
<tr><td>LispWorks</td><td class="working">Working</td></tr> |
|---|
| 169 |
<tr> |
|---|
| 170 |
<td>Allegro</td> |
|---|
| 171 |
<td class="broken">Broken</td> |
|---|
| 172 |
<td>segfault</td> |
|---|
| 173 |
</tr> |
|---|
| 174 |
<tr><td>Corman CL</td><td class="unknown">Unknown</td></tr> |
|---|
| 175 |
<tr><td>Digitool MCL</td><td class="unknown">Unknown</td></tr> |
|---|
| 176 |
<tr><td>Scieneer CL</td><td class="unknown">Unknown</td></tr> |
|---|
| 177 |
<tr><td>ECL</td><td class="unknown">Unknown</td></tr> |
|---|
| 178 |
<tr><td>GCL</td><td class="unknown">Unknown</td></tr> |
|---|
| 179 |
</table> |
|---|
| 180 |
|
|---|
| 181 |
<h3>TODO</h3> |
|---|
| 182 |
<ul> |
|---|
| 183 |
<li>CNAME checking</li> |
|---|
| 184 |
<li>session caching</li> |
|---|
| 185 |
<li>The FFI code for all platforms except clisp needs to be |
|---|
| 186 |
rewritten.</li> |
|---|
| 187 |
</ul> |
|---|
| 188 |
|
|---|
| 189 |
<h3>News</h3> |
|---|
| 190 |
<p> |
|---|
| 191 |
2008-xx-yy |
|---|
| 192 |
</p> |
|---|
| 193 |
<ul> |
|---|
| 194 |
<li> |
|---|
| 195 |
Support for I/O deadlines (Clozure CL and SBCL). |
|---|
| 196 |
</li> |
|---|
| 197 |
</ul> |
|---|
| 198 |
<p> |
|---|
| 199 |
2007-xx-yy |
|---|
| 200 |
</p> |
|---|
| 201 |
<ul> |
|---|
| 202 |
<li> |
|---|
| 203 |
Fixed windows support, thanks to Matthew Kennedy and Vodonosov Anton. |
|---|
| 204 |
</li> |
|---|
| 205 |
</ul> |
|---|
| 206 |
<p> |
|---|
| 207 |
2007-07-07 |
|---|
| 208 |
</p> |
|---|
| 209 |
<ul> |
|---|
| 210 |
<li> |
|---|
| 211 |
Improved clisp support, thanks |
|---|
| 212 |
to <a |
|---|
| 213 |
href="http://web.kepibu.org/code/lisp/cl+ssl/">Pixel |
|---|
| 214 |
// pinterface</a>, as well as client certificate support. |
|---|
| 215 |
</li> |
|---|
| 216 |
<li> |
|---|
| 217 |
Re-introduced support for direct access to file descriptors as |
|---|
| 218 |
an optimization. New function <tt>stream-fd</tt>. New keyword |
|---|
| 219 |
argument <tt>close-callback</tt>. |
|---|
| 220 |
</li> |
|---|
| 221 |
</ul> |
|---|
| 222 |
<p> |
|---|
| 223 |
2007-01-16: CL+SSL is now available under an MIT-style license. |
|---|
| 224 |
</p> |
|---|
| 225 |
</body> |
|---|
| 226 |
</html> |
|---|