Judge Kaplan subsequently issued a memorandum order in which he indicated that executable source code was not subject to First Amendment protection against prior restraint of speech. This finding is contrary to that of the 9th Circuit US Court of Appeals, who ruled in the Bernstein cryptography case that source code is indeed protected speech. In their decision, The 9th Circuit even quoted some Scheme code from the declaration of MIT Professor Harold Abelson, explaining why source code is an effective and sometimes preferred means of human communication. Professor Andrew Appel of Princeton University also filed a declaration explaining the importance for computer science of being able to publish source code. More recently, the 6th Circuit US Court of Appeals ruled in the Junger cryptography case that, independent of its functional significance, the expressive nature of source code affords it First Amendment protection.
If code that can be directly compiled and executed may be suppressed
under the DMCA, as Judge Kaplan asserts in his preliminary ruling, but
a textual description of the same algorithm may not be suppressed,
then where exactly should the line be drawn? This web site was
created to explore this issue, and point out the absurdity of Judge
Kaplan's position that source code can be legally differentiated from
other forms of written expression.
The code was subsequently included in an unsealed (whoops!) legal filing by John Hoy, president of the DVD-CCA, in the California trade secret lawsuit against Andrew McLaughlin and 92 other defendants. Guess it's not a trade secret anymore. More about that here.
or
or
or
vobdec.cpp These are different C implementations of the descrambling algorithm. css_descramble.c, by Derek Fawcus, is part of the css-auth package, which is a component of LiViD, a Linux DVD player. It is interesting to compare this implementation with the anonymous C source code to see how they differ in strategy. Fawcus' version uses fewer tables, and unrolls one of the loops. Such a comparison is only possible by examining the source code. Yet another implemenation, with only a single table, was produced by Frank Stevenson, and is less than 2,000 characters long.
A group of computer scientists from the ノcole Centrale Paris have produced an open source DVD player called Videolan; its decryption module is here.
This work grew out of Keith's preparation for a 6-hour seminar on DVD decryption taught at MIT in Jan-Feb 2001. Suggestions for further shortening the code should be sent to sipb-iap-dvd@mit.edu. Recently featured in Wired, Slashdot, The Register, and ZDNet / USA Today / MSNBC. And now you can order the t-shirt.
ASCII art
efdtt.c as a
DVD
logo This tiniest known C implementation, now
just 434 bytes (discounting newlines), is also plenty fast. It
originated with Charles M. Hannum,
who then shrunk it further, and got additional suggestions for
shrinkage from Phil Carmody.
Mr. Hannum writes: "on my Mac G4 cube (running NetBSD, not MacOS),
it can descramble in excess of 15MB/s [better than 10 times
maximum DVD bit rate], ... without even particularly trying to
optimize the I/O. This makes it pretty insignificant compared to the
rest of the decoding process." He performed these measurements
using artificial data; he would of course be in violation of 17 USC
1201(a)(1) if he used the code to watch a movie he had lawfully
purchased. Author
interview; article in The
Register.
Here's an ASCII art version of efdtt.c by Alex Bowley.
and
Mathematical
proof
Another mathematical
description of the decryption algorithm, by Charles M. Hannum, who writes:
"The mathematical description ... is very similar to how things
like FFT algorithms are presented in journals. These are clearly
scholarly works, and are vital to progress -- e.g. in the area of
signal processing. And yet, even an average programmer can easily
translate such a description directly into code."
Hannum's description inspired Ralph Loader to use the LEGO proof development system to generate a proof that any CSS-encrypted text can be decrypted. According to Loader: "a deep mathematical result called the Curry-Howard isomorphism ... relates mathematical proofs and computer programs. Applied to the theorem I proved, Curry-Howard states that any proof of that theorem is in fact a program implementing CSS. The theorem proving tool I used (LEGO) can actually run this program - albeit very inefficiently." Maybe theorem provers should be illegal too.
css_descramble.java
DiatriBe's Java code
css_descramble.js
css_descramble.php
css-auth.pascal.zip
or
descrambler written
in Brainfuck
This translation of
css_descramble.c into the Scheme programming
language was contributed by John R. Hall. Scheme is a
variant of Lisp popular among academic computer scientists. Here
is a Java version
contributed by Gavin Hall,
and another Java version by anonymous author DiatriBe.
And here is a JavaScript version by
Shlomi Fish and Chen Shapira of Hackers-IL,
along with some HTML code to activate it.
This PHP version, based on their work,
was sent in by Tom Stepleton.
And Bruce Christensen
sent in a Pascal translation of
the css-auth routines.
An anonymous author contributed a CSS descrambler in pure lambda calculus, where even integers are represented as functions. Is this "code"? Or is it pure mathematics?
The same author also produced a descrambler written in Brainfuck, a Turing machine-like language with only eight operators. A truly minimalist description of the algorithm.
This is not the source code; it's a picture of the source code. These GIF files are not directly readable by a C compiler.
However, a human looking at these images could certainly type the C code into a text file. Or the files could perhaps be converted automatically, by an OCR program.
Are these page images considered an illegal "circumvention device" under the DMCA? Or, since they're not executable, are they protected speech?
If natural language processing technology advances to the point that a machine could translate this English text into executable code, could the text then be suppressed under the DMCA?
and
css-auth.babel-eng In October, 2000, Omri Schwarz released Perl scripts for automatically translating C to English, and English back to C. Here is the English version of css-auth.c that it produces, called css-auth.eng.
Another C-to-English-to-C tool, called BabelBuster, has been released by Jonathan M. Baccash of Princeton University in April, 2001. This work was Jonathan's senior thesis. Here is his version of css-auth in English.
And here is a more accessible tutorial on CSS by Gregory Kesden. Should these lecture notes, taken from a course taught at Carnegie Mellon University, be declared illegal? What about this case study on CSS by Jason Cherry?
The source code for css_descramble.c was available on the back of this t-shirt from CopyLeft. (Don't try ordering from them now.) Copyleft was sued for their trouble. Also offered: "I am a circumvention device" t-shirt with the qrpff Perl code on the front.
The Digital Goroup was offering this qrpff tie, with the Perl decryption code. Click here for a close-up view.
Are sales of these clothing items banned under the DMCA?
Would merely wearing one of these in public constitute "trafficking in a circumvention device" as defined in section 1201 of the DMCA?
or
or
Code as music:
Schrepfer
Castleman
MP3 file A dramatic
reading of the file css_descramble.c, read by Xader Vartec. This is a
3.5Mbyte MP3 file; it runs 7 minutes and 20 seconds.
Joe Wecker of the band Don't Eat Pete recorded a musical version of my "plain English" rendition of the source code, with musical accompaniment. This is a 7.2Mbyte MP3 file that runs 7 minutes 28 seconds. Transcript courtesy of Keith Dawson of tbtf.com. Shane Killian later did a hilarious square dance version. Both songs have been banned from MP3.com. Are these kinds of "artistic performances" covered by Judge Kaplan's injunction?
Jeff Schrepfer turned the code directly into music, as a MIDI file. The file was created by starting with the source code and "removing all the white space, then transforming each ASCII character into a single 32nd note of its midi equivalent (midi notes, like ASCII characters, are coded into values ranging from 1 to 127.)" Mike Castleman improved on this by encoding whitespace and newlines in the note lengths.
and
Stairs of Freedom Left: DeCSS The Movie, by Samuel Hocevar and friends. Watch the code scroll by in a Star Wars-like MPEG animation. This is method #40 in Hocevar's list of 42 ways to distribute DeCSS. Right: Stairs of Freedom, by Anders Sandberg, another DeCSS animation.
To view the entire source, click on "Select All" from your browser's Edit menu.
Highly optimized
implementation
(very few gates)
Verilog
is a hardware description language. Here is the Verilog
source for an actual circumvention device, contributed by
anonymous author DAH, who writes: "not only can a human read the
source, and a simulator interpret it, but with other quasi-pushbutton
tools you could configure an FPGA (or fab
an ASIC)
with it. The README.txt explains
more." This is not a device; it's just a description of a
device. Should it be illegal to distribute this circuit description?
Here's another Verilog
implementation by an anonymous author.
Tony Bybell contributed a highly optimized Verilog implementation based on the mathematical formulation of the decryption algorithm by Charles Hannum.
USA TODAY AWARD Return to the main DeCSS page
The Gallery is a scholarly publication. Cite it as follows:
Touretzky, D. S. (2000) Gallery of CSS Descramblers. Available: <http://www.cs.cmu.edu/~dst/DeCSS/Gallery>, (access date).
For more information on citation of web sites in scholarly publications, see How to Cite a Website or visit APAStyle.org.
Also visit the Gallery of Adobe Remedies.
Last modified: Wed Feb 13 21:39:39 EST 2008