
Hollywood Dealt Setback in California DeCSS Case 123
AxsDeny writes "The motion picture industry's effort to ban computer code that subverts its DVD encryption scheme has suffered a setback in California, with the state's high court issuing an order that could see many of the defendants dropped from the closely watched case." Basically they may have to drop non Californians from the case, which happens to be almost all of them.
Re:Not a good thing. (Score:1)
Re:Where have I seen this before?? (Score:2)
http://www.osopinion.com/Opinions/DeanPannell/Dean Pannell5.html [osopinion.com]
Information wants to be free (Score:5)
* Copyright (C) 1999 Derek Fawcus <derek@spider.com>
*
* This code may be used under the terms of Version 2 of the GPL,
* read the file COPYING for details.
*
*/
/*
* These routines do some reordering of the supplied data before
* calling engine() to do the main work.
*
* The reordering seems similar to that done by the initial stages of
* the DES algorithm, in that it looks like it's just been done to
* try and make software decoding slower. I'm not sure that it
* actually adds anything to the security.
*
* The nature of the shuffling is that the bits of the supplied
* parameter 'varient' are reorganised (and some inverted), and
* the bytes of the parameter 'challenge' are reorganised.
*
* The reorganisation in each routine is different, and the first
* (CryptKey1) does not bother of play with the 'varient' parameter.
*
* Since this code is only run once per disk change, I've made the
* code table driven in order to improve readability.
*
* Since these routines are so similar to each other, one could even
* abstract them all to one routine supplied a parameter determining
* the nature of the reordering it has to do.
*/
#include "css-auth.h"
typedef unsigned long u32;
static void engine(int varient, byte const *input, struct block *output);
void CryptKey1(int varient, byte const *challenge, struct block *key)
{
static byte perm_challenge[] = {1,3,0,7,5, 2,9,6,4,8};
byte scratch[10];
int i;
for(i = 9; i >= 0; --i)
scratch[i] = challenge[perm_challenge[i]];
engine(varient, scratch, key); }
/* This shuffles the bits in varient to make perm_varient such that
* 4 -> !3
* 3 -> 4
* varient bits: 2 -> 0 perm_varient bits
* 1 -> 2
* 0 -> !1
*/
void CryptKey2(int varient, byte const *challenge, struct block *key)
{
static byte perm_challenge[] = {6,1,9,3,8, 5,7,4,0,2};
static byte perm_varient[] = {
0x0a, 0x08, 0x0e, 0x0c, 0x0b, 0x09, 0x0f, 0x0d,
0x1a, 0x18, 0x1e, 0x1c, 0x1b, 0x19, 0x1f, 0x1d,
0x02, 0x00, 0x06, 0x04, 0x03, 0x01, 0x07, 0x05,
0x12, 0x10, 0x16, 0x14, 0x13, 0x11, 0x17, 0x15};
byte scratch[10];
int i;
for(i = 9; i >= 0; --i)
scratch[i] = challenge[perm_challenge[i]];
engine(perm_varient[varient], scratch, key); }
/* This shuffles the bits in varient to make perm_varient such that
* 4 -> 0
* 3 -> !1
* varient bits: 2 -> !4 perm_varient bits
* 1 -> 2
* 0 -> 3
*/
void CryptBusKey(int varient, byte const *challenge, struct block *key)
{
static byte perm_challenge[] = {4,0,3,5,7, 2,8,6,1,9};
static byte perm_varient[] = {
0x12, 0x1a, 0x16, 0x1e, 0x02, 0x0a, 0x06, 0x0e,
0x10, 0x18, 0x14, 0x1c, 0x00, 0x08, 0x04, 0x0c,
0x13, 0x1b, 0x17, 0x1f, 0x03, 0x0b, 0x07, 0x0f,
0x11, 0x19, 0x15, 0x1d, 0x01, 0x09, 0x05, 0x0d};
byte scratch[10];
int i;
for(i = 9; i >= 0; --i)
scratch[i] = challenge[perm_challenge[i]];
engine(perm_varient[varient], scratch, key); }
/*
* We use two LFSR's (seeded from some of the input data bytes) to
* generate two streams of pseudo-random bits. These two bit streams
* are then combined by simply adding with carry to generate a final
* sequence of pseudo-random bits which is stored in the buffer that
* 'output' points to the end of - len is the size of this buffer.
*
* The first LFSR is of degree 25, and has a polynomial of:
* x^13 + x^5 + x^4 + x^1 + 1
*
* The second LSFR is of degree 17, and has a (primitive) polynomial of: * x^15 + x^1 + 1
*
* I don't know if these polynomials are primitive modulo 2, and thus
* represent maximal-period LFSR's.
*
*
* Note that we take the output of each LFSR from the new shifted in
* bit, not the old shifted out bit. Thus for ease of use the LFSR's
* are implemented in bit reversed order.
*
*/
static void generate_bits(byte *output, int len, struct block const *s)
{
u32 lfsr0, lfsr1;
byte carry;
/* In order to ensure that the LFSR works we need to ensure that the * initial values are non-zero. Thus when we initialise them from
* the seed, we ensure that a bit is set.
*/
lfsr0 = (s->b[0] << 17) | (s->b[1] << 9) | ((s->b[2] & ~7) < < 1) | 8 | (s->b[2] & 7); lfsr1 = (s->b[3] << 9) | 0x100 | s->b[4];
++output;
carry = 0;
do {
int bit;
byte val;
for(bit = 0, val = 0; bit < 8; ++bit) {
byte o_lfsr0, o_lfsr1;
o_lfsr0 = ((lfsr0 >> 24) ^ (lfsr0 >> 21) ^ (lfsr0 >> 20) ^ (lfsr0 >> 12)) & 1; lfsr0 = (lfsr0 << 1) | o_lfsr0;
o_lfsr1 = ((lfsr1 >> 16) ^ (lfsr1 >> 2)) & 1; lfsr1 = (lfsr1 << 1) | o_lfsr1;
#define BIT0(x) ((x) & 1)
#define BIT1(x) (((x) >> 1) & 1)
combined = !o_lfsr1 + carry + !o_lfsr0;
carry = BIT1(combined);
val |= BIT0(combined) << bit;
}
*--output = val; } while (--len > 0);
}
static byte Secret[];
static byte Varients[];
static byte Table0[];
static byte Table1[];
static byte Table2[];
static byte Table3[];
/*
* This encryption engine implements one of 32 variations
* one the same theme depending upon the choice in the
* varient parameter (0 - 31).
*
* The algorithm itself manipulates a 40 bit input into
* a 40 bit output.
* The parameter 'input' is 80 bits. It consists of
* the 40 bit input value that is to be encrypted followed
* by a 40 bit seed value for the pseudo random number
* generators.
*/
static void engine(int varient, byte const *input, struct block *output) {
byte cse, term, index;
struct block temp1;
struct block temp2;
byte bits[30];
int i;
/* Feed the secret into the input values such that
* we alter the seed to the LFSR's used above, then
* generate the bits to play with.
*/
for (i = 5; --i >= 0; )
temp1.b[i] = input[5 + i] ^ Secret[i] ^ Table2[i];
generate_bits(&bits[29], sizeof bits, &temp1);
/* This term is used throughout the following to
* select one of 32 different variations on the
* algorithm.
*/
cse = Varients[varient] ^ Table2[varient];
/* Now the actual blocks doing the encryption. Each
* of these works on 40 bits at a time and are quite
* similar.
*/
for (i = 5, term = 0; --i >= 0; term = input[i]) {
index = bits[25 + i] ^ input[i];
index = Table1[index] ^ ~Table2[index] ^ cse;
temp1.b[i] = Table2[index] ^ Table3[index] ^ term; }
temp1.b[4] ^= temp1.b[0];
for(i = 5, term = 0; --i >= 0; term = temp1.b[i]) {
index = bits[20 + i] ^ temp1.b[i]; index = Table1[index] ^ ~Table2[index] ^ cse;
temp2.b[i] = Table2[index] ^ Table3[index] ^ term; }
temp2.b[4] ^= temp2.b[0];
for(i = 5, term = 0; --i >= 0; term = temp2.b[i]) {
index = bits[15 + i] ^ temp2.b[i]; index = Table1[index] ^ ~Table2[index] ^ cse; index = Table2[index] ^ Table3[index] ^ term;
temp1.b[i] = Table0[index] ^ Table2[index]; }
temp1.b[4] ^= temp1.b[0];
for(i = 5, term = 0; --i >= 0; term = temp1.b[i]) {
index = bits[10 + i] ^ temp1.b[i]; index = Table1[index] ^ ~Table2[index] ^ cse;
index = Table2[index] ^ Table3[index] ^ term;
temp2.b[i] = Table0[index] ^ Table2[index]; }
temp2.b[4] ^= temp2.b[0];
for(i = 5, term = 0; --i >= 0; term = temp2.b[i]) {
index = bits[5 + i] ^ temp2.b[i]; index = Table1[index] ^ ~Table2[index] ^ cse;
temp1.b[i] = Table2[index] ^ Table3[index] ^ term; }
temp1.b[4] ^= temp1.b[0];
for(i = 5, term = 0; --i >= 0; term = temp1.b[i]) {
index = bits[i] ^ temp1.b[i]; index = Table1[index] ^ ~Table2[index] ^ cse;
output->b[i] = Table2[index] ^ Table3[index] ^ term; }
}
static byte Varients[] = {
0xB7, 0x74, 0x85, 0xD0, 0xCC, 0xDB, 0xCA, 0x73,
0x03, 0xFE, 0x31, 0x03, 0x52, 0xE0, 0xB7, 0x42,
0x63, 0x16, 0xF2, 0x2A, 0x79, 0x52, 0xFF, 0x1B,
0x7A, 0x11, 0xCA, 0x1A, 0x9B, 0x40, 0xAD, 0x01};
static byte Secret[] = {0x55, 0xD6, 0xC4, 0xC5, 0x28};
static byte Table0[] = {
0xB7, 0xF4, 0x82, 0x57, 0xDA, 0x4D, 0xDB, 0xE2,
0x2F, 0x52, 0x1A, 0xA8, 0x68, 0x5A, 0x8A, 0xFF,
0xFB, 0x0E, 0x6D, 0x35, 0xF7, 0x5C, 0x76, 0x12,
0xCE, 0x25, 0x79, 0x29, 0x39, 0x62, 0x08, 0x24,
0xA5, 0x85, 0x7B, 0x56, 0x01, 0x23, 0x68, 0xCF,
0x0A, 0xE2, 0x5A, 0xED, 0x3D, 0x59, 0xB0, 0xA9,
0xB0, 0x2C, 0xF2, 0xB8, 0xEF, 0x32, 0xA9, 0x40,
0x80, 0x71, 0xAF, 0x1E, 0xDE, 0x8F, 0x58, 0x88,
0xB8, 0x3A, 0xD0, 0xFC, 0xC4, 0x1E, 0xB5, 0xA0,
0xBB, 0x3B, 0x0F, 0x01, 0x7E, 0x1F, 0x9F, 0xD9,
0xAA, 0xB8, 0x3D, 0x9D, 0x74, 0x1E, 0x25, 0xDB,
0x37, 0x56, 0x8F, 0x16, 0xBA, 0x49, 0x2B, 0xAC,
0xD0, 0xBD, 0x95, 0x20, 0xBE, 0x7A, 0x28, 0xD0,
0x51, 0x64, 0x63, 0x1C, 0x7F, 0x66, 0x10, 0xBB,
0xC4, 0x56, 0x1A, 0x04, 0x6E, 0x0A, 0xEC, 0x9C,
0xD6, 0xE8, 0x9A, 0x7A, 0xCF, 0x8C, 0xDB, 0xB1,
0xEF, 0x71, 0xDE, 0x31, 0xFF, 0x54, 0x3E, 0x5E,
0x07, 0x69, 0x96, 0xB0, 0xCF, 0xDD, 0x9E, 0x47,
0xC7, 0x96, 0x8F, 0xE4, 0x2B, 0x59, 0xC6, 0xEE,
0xB9, 0x86, 0x9A, 0x64, 0x84, 0x72, 0xE2, 0x5B,
0xA2, 0x96, 0x58, 0x99, 0x50, 0x03, 0xF5, 0x38,
0x4D, 0x02, 0x7D, 0xE7, 0x7D, 0x75, 0xA7, 0xB8,
0x67, 0x87, 0x84, 0x3F, 0x1D, 0x11, 0xE5, 0xFC,
0x1E, 0xD3, 0x83, 0x16, 0xA5, 0x29, 0xF6, 0xC7,
0x15, 0x61, 0x29, 0x1A, 0x43, 0x4F, 0x9B, 0xAF,
0xC5, 0x87, 0x34, 0x6C, 0x0F, 0x3B, 0xA8, 0x1D,
0x45, 0x58, 0x25, 0xDC, 0xA8, 0xA3, 0x3B, 0xD1,
0x79, 0x1B, 0x48, 0xF2, 0xE9, 0x93, 0x1F, 0xFC,
0xDB, 0x2A, 0x90, 0xA9, 0x8A, 0x3D, 0x39, 0x18,
0xA3, 0x8E, 0x58, 0x6C, 0xE0, 0x12, 0xBB, 0x25,
0xCD, 0x71, 0x22, 0xA2, 0x64, 0xC6, 0xE7, 0xFB,
0xAD, 0x94, 0x77, 0x04, 0x9A, 0x39, 0xCF, 0x7C};
static byte Table1[] = {
0x8C, 0x47, 0xB0, 0xE1, 0xEB, 0xFC, 0xEB, 0x56,
0x10, 0xE5, 0x2C, 0x1A, 0x5D, 0xEF, 0xBE, 0x4F,
0x08, 0x75, 0x97, 0x4B, 0x0E, 0x25, 0x8E, 0x6E,
0x39, 0x5A, 0x87, 0x53, 0xC4, 0x1F, 0xF4, 0x5C,
0x4E, 0xE6, 0x99, 0x30, 0xE0, 0x42, 0x88, 0xAB,
0xE5, 0x85, 0xBC, 0x8F, 0xD8, 0x3C, 0x54, 0xC9,
0x53, 0x47, 0x18, 0xD6, 0x06, 0x5B, 0x41, 0x2C,
0x67, 0x1E, 0x41, 0x74, 0x33, 0xE2, 0xB4, 0xE0,
0x23, 0x29, 0x42, 0xEA, 0x55, 0x0F, 0x25, 0xB4,
0x24, 0x2C, 0x99, 0x13, 0xEB, 0x0A, 0x0B, 0xC9,
0xF9, 0x63, 0x67, 0x43, 0x2D, 0xC7, 0x7D, 0x07,
0x60, 0x89, 0xD1, 0xCC, 0xE7, 0x94, 0x77, 0x74,
0x9B, 0x7E, 0xD7, 0xE6, 0xFF, 0xBB, 0x68, 0x14,
0x1E, 0xA3, 0x25, 0xDE, 0x3A, 0xA3, 0x54, 0x7B,
0x87, 0x9D, 0x50, 0xCA, 0x27, 0xC3, 0xA4, 0x50,
0x91, 0x27, 0xD4, 0xB0, 0x82, 0x41, 0x97, 0x79,
0x94, 0x82, 0xAC, 0xC7, 0x8E, 0xA5, 0x4E, 0xAA,
0x78, 0x9E, 0xE0, 0x42, 0xBA, 0x28, 0xEA, 0xB7,
0x74, 0xAD, 0x35, 0xDA, 0x92, 0x60, 0x7E, 0xD2,
0x0E, 0xB9, 0x24, 0x5E, 0x39, 0x4F, 0x5E, 0x63,
0x09, 0xB5, 0xFA, 0xBF, 0xF1, 0x22, 0x55, 0x1C,
0xE2, 0x25, 0xDB, 0xC5, 0xD8, 0x50, 0x03, 0x98,
0xC4, 0xAC, 0x2E, 0x11, 0xB4, 0x38, 0x4D, 0xD0,
0xB9, 0xFC, 0x2D, 0x3C, 0x08, 0x04, 0x5A, 0xEF,
0xCE, 0x32, 0xFB, 0x4C, 0x92, 0x1E, 0x4B, 0xFB,
0x1A, 0xD0, 0xE2, 0x3E, 0xDA, 0x6E, 0x7C, 0x4D,
0x56, 0xC3, 0x3F, 0x42, 0xB1, 0x3A, 0x23, 0x4D,
0x6E, 0x84, 0x56, 0x68, 0xF4, 0x0E, 0x03, 0x64,
0xD0, 0xA9, 0x92, 0x2F, 0x8B, 0xBC, 0x39, 0x9C,
0xAC, 0x09, 0x5E, 0xEE, 0xE5, 0x97, 0xBF, 0xA5,
0xCE, 0xFA, 0x28, 0x2C, 0x6D, 0x4F, 0xEF, 0x77,
0xAA, 0x1B, 0x79, 0x8E, 0x97, 0xB4, 0xC3, 0xF4};
static byte Table2[] = {
0xB7, 0x75, 0x81, 0xD5, 0xDC, 0xCA, 0xDE, 0x66,
0x23, 0xDF, 0x15, 0x26, 0x62, 0xD1, 0x83, 0x77,
0xE3, 0x97, 0x76, 0xAF, 0xE9, 0xC3, 0x6B, 0x8E,
0xDA, 0xB0, 0x6E, 0xBF, 0x2B, 0xF1, 0x19, 0xB4,
0x95, 0x34, 0x48, 0xE4, 0x37, 0x94, 0x5D, 0x7B,
0x36, 0x5F, 0x65, 0x53, 0x07, 0xE2, 0x89, 0x11,
0x98, 0x85, 0xD9, 0x12, 0xC1, 0x9D, 0x84, 0xEC,
0xA4, 0xD4, 0x88, 0xB8, 0xFC, 0x2C, 0x79, 0x28,
0xD8, 0xDB, 0xB3, 0x1E, 0xA2, 0xF9, 0xD0, 0x44,
0xD7, 0xD6, 0x60, 0xEF, 0x14, 0xF4, 0xF6, 0x31,
0xD2, 0x41, 0x46, 0x67, 0x0A, 0xE1, 0x58, 0x27,
0x43, 0xA3, 0xF8, 0xE0, 0xC8, 0xBA, 0x5A, 0x5C,
0x80, 0x6C, 0xC6, 0xF2, 0xE8, 0xAD, 0x7D, 0x04,
0x0D, 0xB9, 0x3C, 0xC2, 0x25, 0xBD, 0x49, 0x63,
0x8C, 0x9F, 0x51, 0xCE, 0x20, 0xC5, 0xA1, 0x50,
0x92, 0x2D, 0xDD, 0xBC, 0x8D, 0x4F, 0x9A, 0x71,
0x2F, 0x30, 0x1D, 0x73, 0x39, 0x13, 0xFB, 0x1A,
0xCB, 0x24, 0x59, 0xFE, 0x05, 0x96, 0x57, 0x0F,
0x1F, 0xCF, 0x54, 0xBE, 0xF5, 0x06, 0x1B, 0xB2,
0x6D, 0xD3, 0x4D, 0x32, 0x56, 0x21, 0x33, 0x0B,
0x52, 0xE7, 0xAB, 0xEB, 0xA6, 0x74, 0x00, 0x4C,
0xB1, 0x7F, 0x82, 0x99, 0x87, 0x0E, 0x5E, 0xC0,
0x8F, 0xEE, 0x6F, 0x55, 0xF3, 0x7E, 0x08, 0x90,
0xFA, 0xB6, 0x64, 0x70, 0x47, 0x4A, 0x17, 0xA7,
0xB5, 0x40, 0x8A, 0x38, 0xE5, 0x68, 0x3E, 0x8B,
0x69, 0xAA, 0x9B, 0x42, 0xA5, 0x10, 0x01, 0x35,
0xFD, 0x61, 0x9E, 0xE6, 0x16, 0x9C, 0x86, 0xED,
0xCD, 0x2E, 0xFF, 0xC4, 0x5B, 0xA0, 0xAE, 0xCC,
0x4B, 0x3B, 0x03, 0xBB, 0x1C, 0x2A, 0xAC, 0x0C,
0x3F, 0x93, 0xC7, 0x72, 0x7A, 0x09, 0x22, 0x3D,
0x45, 0x78, 0xA9, 0xA8, 0xEA, 0xC9, 0x6A, 0xF7,
0x29, 0x91, 0xF0, 0x02, 0x18, 0x3A, 0x4E, 0x7C};
static byte Table3[] = {
0x73, 0x51, 0x95, 0xE1, 0x12, 0xE4, 0xC0, 0x58,
0xEE, 0xF2, 0x08, 0x1B, 0xA9, 0xFA, 0x98, 0x4C,
0xA7, 0x33, 0xE2, 0x1B, 0xA7, 0x6D, 0xF5, 0x30,
0x97, 0x1D, 0xF3, 0x02, 0x60, 0x5A, 0x82, 0x0F,
0x91, 0xD0, 0x9C, 0x10, 0x39, 0x7A, 0x83, 0x85,
0x3B, 0xB2, 0xB8, 0xAE, 0x0C, 0x09, 0x52, 0xEA,
0x1C, 0xE1, 0x8D, 0x66, 0x4F, 0xF3, 0xDA, 0x92,
0x29, 0xB9, 0xD5, 0xC5, 0x77, 0x47, 0x22, 0x53,
0x14, 0xF7, 0xAF, 0x22, 0x64, 0xDF, 0xC6, 0x72,
0x12, 0xF3, 0x75, 0xDA, 0xD7, 0xD7, 0xE5, 0x02,
0x9E, 0xED, 0xDA, 0xDB, 0x4C, 0x47, 0xCE, 0x91,
0x06, 0x06, 0x6D, 0x55, 0x8B, 0x19, 0xC9, 0xEF,
0x8C, 0x80, 0x1A, 0x0E, 0xEE, 0x4B, 0xAB, 0xF2,
0x08, 0x5C, 0xE9, 0x37, 0x26, 0x5E, 0x9A, 0x90,
0x00, 0xF3, 0x0D, 0xB2, 0xA6, 0xA3, 0xF7, 0x26,
0x17, 0x48, 0x88, 0xC9, 0x0E, 0x2C, 0xC9, 0x02,
0xE7, 0x18, 0x05, 0x4B, 0xF3, 0x39, 0xE1, 0x20,
0x02, 0x0D, 0x40, 0xC7, 0xCA, 0xB9, 0x48, 0x30,
0x57, 0x67, 0xCC, 0x06, 0xBF, 0xAC, 0x81, 0x08,
0x24, 0x7A, 0xD4, 0x8B, 0x19, 0x8E, 0xAC, 0xB4,
0x5A, 0x0F, 0x73, 0x13, 0xAC, 0x9E, 0xDA, 0xB6,
0xB8, 0x96, 0x5B, 0x60, 0x88, 0xE1, 0x81, 0x3F,
0x07, 0x86, 0x37, 0x2D, 0x79, 0x14, 0x52, 0xEA,
0x73, 0xDF, 0x3D, 0x09, 0xC8, 0x25, 0x48, 0xD8,
0x75, 0x60, 0x9A, 0x08, 0x27, 0x4A, 0x2C, 0xB9,
0xA8, 0x8B, 0x8A, 0x73, 0x62, 0x37, 0x16, 0x02,
0xBD, 0xC1, 0x0E, 0x56, 0x54, 0x3E, 0x14, 0x5F,
0x8C, 0x8F, 0x6E, 0x75, 0x1C, 0x07, 0x39, 0x7B,
0x4B, 0xDB, 0xD3, 0x4B, 0x1E, 0xC8, 0x7E, 0xFE,
0x3E, 0x72, 0x16, 0x83, 0x7D, 0xEE, 0xF5, 0xCA,
0xC5, 0x18, 0xF9, 0xD8, 0x68, 0xAB, 0x38, 0x85,
0xA8, 0xF0, 0xA1, 0x73, 0x9F, 0x5D, 0x19, 0x0B,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x33, 0x72, 0x39, 0x25, 0x67, 0x26, 0x6D, 0x71,
0x36, 0x77, 0x3C, 0x20, 0x62, 0x23, 0x68, 0x74,
0xC3, 0x82, 0xC9, 0x15, 0x57, 0x16, 0x5D, 0x81};
/*
* css-cat.c
*
* Copyright 1999 Derek Fawcus.
*
* Released under version 2 of the GPL.
*
* Decode selected sector types from a CSS encoded DVD to stdout. Use as a * filter on the input to mpeg2player or ac3dec.
*
*/
#include <stdio.h>
#include <stdlib.h>
#if defined(__linux__)
# include <getopt.h>
#endif
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include "css-descramble.h"
static struct playkey pkey1a1 = {0x36b, {0x51,0x67,0x67,0xc5,0xe0}};
static struct playkey pkey2a1 = {0x762, {0x2c,0xb2,0xc1,0x09,0xee}};
static struct playkey pkey1b1 = {0x36b, {0x90,0xc1,0xd7,0x84,0x48}};
static struct playkey pkey1a2 = {0x2f3, {0x51,0x67,0x67,0xc5,0xe0}};
static struct playkey pkey2a2 = {0x730, {0x2c,0xb2,0xc1,0x09,0xee}};
static struct playkey pkey1b2 = {0x2f3, {0x90,0xc1,0xd7,0x84,0x48}};
static struct playkey pkey1a3 = {0x235, {0x51,0x67,0x67,0xc5,0xe0}};
static struct playkey pkey1b3 = {0x235, {0x90,0xc1,0xd7,0x84,0x48}};
static struct playkey pkey3a1 = {0x249, {0xb7,0x3f,0xd4,0xaa,0x14}};
static struct playkey *playkeys[] = {
&pkey1a1, &pkey2a1, &pkey1b1,
&pkey1a2, &pkey2a2, &pkey1b2,
&pkey1a3, &pkey1b3,
&pkey3a1, &pkey4a1,
NULL};
static unsigned char disk_key[2048];
static unsigned char title_key[5];
static unsigned char sector[2048];
unsigned long sectors = 0;
unsigned long crypted = 0;
unsigned long skipped = 0;
int do_all = 0;
int do_video = 0;
int do_ac3 = 0;
int do_mpg = 0;
int verbose = 0;
int keep_pack = 0;
int keep_pes = -1;
#define STCODE(p,a,b,c,d) ((p)[0] == a && (p)[1] == b && (p)[2] == c && (p)[3] == d)
static void un_css(int fdi, int fdo)
{
unsigned char *sp, *pes;
int writen, wr, peslen, hdrlen;
while (read(fdi, sector, 2048) == 2048) {
++sectors;
if (!STCODE(sector,0x00,0x00,0x01,0xba)) {
fputs("Not Pack start code\n", stderr);
++skipped; continue;
}
if (do_all)
goto write_it;
pes = sector + 14 + (sector[13] & 0x07);
if (STCODE(pes,0x00,0x00,0x01,0xbb)) {/* System Header Pack Layer */ peslen = (pes[0x04] << 8) + pes[0x05];
pes += peslen + 6;
}
if (pes[0x00] || pes[0x01] || pes[0x02] != 0x01 || pes[0x03] < 0xbc) { ++skipped; continue;
}
peslen = (pes[0x04] << 8) + pes[0x05];
hdrlen = pes[0x08] + 6 + 3;
if ((pes[0x03] & 0xf0) == 0xe0) {
if (do_video)
goto write_it;
} else if (do_mpg && pes[0x03] == (0xc0 | (do_mpg - 1))) {
} else if (pes[0x03] == 0xbd) {
if (do_ac3) {
int audiotrack = do_ac3 - 1;
if (pes[hdrlen] == (0x80|(audiotrack & 7))) {
hdrlen += 4;
goto write_it;
}
}
} else
++skipped;
continue;
write_it:
if (sector[20] & 0x30) {
++crypted;
css_descramble(sector, title_key);
sector[20] &= 0x8f;
}
writen = 0;
if (keep_pack)
sp = sector, peslen = 2048;
else if (keep_pes)
sp = pes, peslen = 2048 - (pes - sector);
else
sp = pes + hdrlen, peslen -= hdrlen - 6;
do {
wr = write(fdo, sp, peslen - writen);
sp += wr;
writen += wr;
} while (wr > 0 && writen < peslen);
}
}
static void usage_exit(void)
{
fputs("usage: css-cat [-t title-no] [-m mpeg-audio-no ] [-avPp12345678] vob_file\n", stderr); exit(2);
}
static char *title = "1";
static int parse_args(int ac, char **av)
{
int c;
opterr = 0;
while (1)
switch((c = getopt(ac, av, "at:Ppvm:01234567"))) {
case 'a':
do_all = 1;
/* fall through */
case 'P':
keep_pack = 1;
break;
case 'p':
keep_pes = 1;
break;
case 't':
title = optarg;
break;
case 'v':
do_video = 1;
++keep_pes;
break;
case 'm':
if ((do_mpg = atoi(optarg)) < 1 || do_mpg > 32)
usage_exit();
++keep_pes;
break;
case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8':
do_ac3 = c - '0';
++keep_pes;
break;
case EOF:
goto got_args;
default:
usage_exit();
break;
}
got_args:
keep_pes = (keep_pes > 0) ? 1 : 0;
return optind; }
int main(int ac, char **av)
{
int ai, fd;
char titlef[12];
if ((fd = open("disk-key", O_RDONLY)) == -1) {
perror("can't open disk-key");
exit(1);
}
if (read(fd, disk_key, 2048) != 2048) {
perror("can't read disk-key");
close(fd);
exit(1);
}
close(fd);
if ((ai = parse_args(ac, av)) >= ac)
usage_exit();
strcpy(titlef, "title");
strcat(titlef, title);
strcat(titlef, "-key");
if ((fd = open(titlef, O_RDONLY)) == -1) {
perror("can't open title-key");
exit(1);
}
if (read(fd, title_key, 5) != 5) {
perror("can't read title-key");
close(fd);
exit(1);
}
close(fd);
if (strcmp(av[ai], "-") == 0)
fd = 0;
else if ((fd = open(av[ai], O_RDONLY)) == -1) {
fputs("can't open VOB file ", stderr);
fputs(av[ai], stderr);
perror("");
exit(1);
}
if (!css_decrypttitlekey(title_key, disk_key, playkeys)) {
close(fd);
return 3;
}
un_css(fd, 1);
fprintf(stderr, "Total %lu, skipped %lu, crvid %lu\n",
sectors, skipped, crypted);
close(fd);
return 0; }
/*
* css_descramble.c
*
* Released under the version 2 of the GPL.
*
* Copyright 1999 Derek Fawcus
*
* This file contains functions to descramble CSS encrypted DVD content *
*/
/*
* Still in progress: Remove the use of the bit_reverse[] table by recoding * the generation of LFSR1. Finish combining this with * the css authentication code.
*
*/
#include <stdio.h>
#include <string.h>
#include "css-descramble.h"
typedef unsigned char byte;
/*
*
* some tables used for descrambling sectors and/or decrypting title keys *
*/
static byte csstab1[256]=
{
0x33,0x73,0x3b,0x26,0x63,0x23,0x6b,0x76,0x3e,0x
static byte lfsr1_bits0[256]=
{
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x
static byte lfsr1_bits1[512]=
{
0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x
/* Reverse the order of the bits within a byte.
*/ static byte bit_reverse[256]=
{
0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,0x10,0x
/*
*
* this function is only used internally when decrypting title key
*
*/
static void css_titlekey(byte *key, byte *im, byte invert)
{
unsigned int lfsr1_lo,lfsr1_hi,lfsr0,combined;
byte o_lfsr0, o_lfsr1;
byte k[5];
int i;
lfsr1_lo = im[0] | 0x100;
lfsr1_hi = im[1];
lfsr0 = ((im[4] << 17) | (im[3] << 9) | (im[2] << 1)) + 8 - (im[2] &7); lfsr0 = (bit_reverse[lfsr0&0xff]<<24) | (bit_reverse[(lfsr0>>8)&0xff] << 16) | (bit_reverse[(lfsr0>>16)&0xff]<<8) | bit_reverse[(lfsr0>>24) &0xff];
combined = 0;
for (i = 0; i < 5; ++i) {
o_lfsr1 = lfsr1_bits0[lfsr1_hi] ^ lfsr1_bits1[lfsr1_lo];
lfsr1_hi = lfsr1_lo>>1;
lfsr1_lo = ((lfsr1_lo&1)<<8) ^ o_lfsr1;
o_lfsr1 = bit_reverse[o_lfsr1];
/*o_lfsr0 = (lfsr0>>7)^(lfsr0>>10)^(lfsr0>>1 1)^(lfsr0>>19);*/ o_lfsr0 = (((((((lfsr0>>8)^lfsr0)>>1)^lfsr0)> >3)^lfsr0)>>7); lfsr0 = (lfsr0>>8)|(o_lfsr0<<24);
combined += (o_lfsr0 ^ invert) + o_lfsr1;
k[i] = combined & 0xff;
combined >>= 8;
}
key[4]=k[4]^csstab1[key[4]]^key[3];
key[3]=k[3]^csstab1[key[3]]^key[2];
key[2]=k[2]^csstab1[key[2]]^key[1];
key[1]=k[1]^csstab1[key[1]]^key[0];
key[0]=k[0]^csstab1[key[0]]^key[4];
key[4]=k[4]^csstab1[key[4]]^key[3];
key[3]=k[3]^csstab1[key[3]]^key[2];
key[2]=k[2]^csstab1[key[2]]^key[1];
key[1]=k[1]^csstab1[key[1]]^key[0];
key[0]=k[0]^csstab1[key[0]];
}
/*
*
* this function decrypts a title key with the specified disk key
*
* tkey: the unobfuscated title key (XORed with BusKey)
* dkey: the unobfuscated disk key (XORed with BusKey)
* 2048 bytes in length (though only 5 bytes are needed, see below) * pkey: array of pointers to player keys and disk key offsets
*
*
* use the result returned in tkey with css_descramble
*
*/
int css_decrypttitlekey(byte *tkey, byte *dkey, struct playkey **pkey)
{
byte test[5], pretkey[5];
int i = 0;
for(; *pkey; ++pkey, ++i) {
memcpy(pretkey, dkey + (*pkey)->offset, 5); css_titlekey(pretkey, (*pkey)->key, 0);
memcpy(test, dkey, 5);
css_titlekey(test, pretkey, 0);
if (memcmp(test, pretkey, 5) == 0) {
fprintf(stderr, "Using Key %d\n", i+1);
break;
}
}
if (!*pkey) {
fprintf(stderr, "Shit - Need Key %d\n", i+1);
return 0;
}
css_titlekey(tkey, pretkey, 0xff);
return 1; }
/*
*
* this function does the actual descrambling
*
* sec: encrypted sector (2048 bytes)
* key: decrypted title key obtained from css_decrypttitlekey
*
*/
void css_descramble(byte *sec,byte *key)
{
unsigned int lfsr1_lo,lfsr1_hi,lfsr0,combined;
unsigned char o_lfsr0, o_lfsr1;
unsigned char *end = sec + 0x800;
#define SALTED(i) (key[i] ^ sec[0x54 + (i)])
lfsr1_lo = SALTED(0) | 0x100;
lfsr1_hi = SALTED(1);
lfsr0 = ((SALTED(4) << 17) | (SALTED(3) << 9) | (SALTED(2) << 1)) + 8 - (SALTED(2)&7);
lfsr0= (bit_reverse[lfsr0&0xff]<<24) | (bit_reverse[(lfsr0> >8)&0xff] << 16) | (bit_reverse[(lfsr0>>16)&0xff]<<8) | bit_reverse[(lfsr0>>24) &0xff];
sec+=0x80;
combined = 0;
while (sec != end) {
o_lfsr1 = lfsr1_bits0[lfsr1_hi] ^ lfsr1_bits1[lfsr1_lo];
lfsr1_hi = lfsr1_lo>>1;
lfsr1_lo = ((lfsr1_lo&1)<<8) ^ o_lfsr1;
o_lfsr1 = bit_reverse[o_lfsr1];
/*o_lfsr0 = (lfsr0>>7)^(lfsr0>>10)^(lfsr0>>1 1)^(lfsr0>>19);*/ o_lfsr0 = (((((((lfsr0>>8)^lfsr0)>>1)^lfsr0)> >3)^lfsr0)>>7); lfsr0 = (lfsr0>>8)|(o_lfsr0<<24);
combined += o_lfsr0 + (byte)~o_lfsr1;
*sec++ = csstab1[*sec] ^ (combined&0xff);
combined >>= 8;
}
}
/*
* A noddy program for getting and printing some info from the
* DVD-ROM drive.
*/
#include <stdio.h>
#include <fcntl.h>
#if defined(__OpenBSD__)
# include <sys/dvdio.h>
#elif defined(__linux__)
# include <linux/cdrom.h>
#else
# error "Need the DVD ioctls"
#endif
#include <sys/ioctl.h>
#include <errno.h>
#define DVD "/dev/cdrom"
int GetASF(int fd)
{
dvd_authinfo ai;
ai.type = DVD_LU_SEND_ASF;
ai.lsasf.agid = 0;
ai.lsasf.asf = 0;
if (ioctl(fd, DVD_AUTH, &ai)) {
printf("GetASF failed\n");
return 0;
}
printf("%sAuthenticated\n", (ai.lsasf.asf) ? "" : "not ");
return 1; }
int GetPhysical(int fd)
{
dvd_struct d;
int layer = 0, layers = 4;
d.physical.type = DVD_STRUCT_PHYSICAL;
while (layer < layers) {
d.physical.layer_num = layer;
if (ioctl(fd, DVD_READ_STRUCT, &d)<0)
{
printf("Could not read Physical layer %d\n", layer); return 0;
}
layers = d.physical.layer[layer].nlayers + 1;
printf("Layer %d[%d]\n", layer, layers);
printf(" Book Version: %d\n", d.physical.layer[layer].book_version); printf(" Book Type: %d\n", d.physical.layer[layer].book_type); printf(" Min Rate: %d\n", d.physical.layer[layer].min_rate); printf(" Disk Size: %d\n", d.physical.layer[layer].disc_size); printf(" Layer Type: %d\n", d.physical.layer[layer].layer_type); printf(" Track Path: %d\n", d.physical.layer[layer].track_path); printf(" Num Layers: %d\n", d.physical.layer[layer].nlayers); printf(" Track Density: %d\n", d.physical.layer[layer].track_density); printf(" Linear Density: %d\n", d.physical.layer[layer].linear_density); printf(" BCA: %d\n", d.physical.layer[layer].bca); printf(" Start Sector %#x\n", d.physical.layer[layer].start_sector); printf(" End Sector %#x\n", d.physical.layer[layer].end_sector); printf(" End Sector L0 %#x\n", d.physical.layer[layer].end_sector_l0);
++layer; }
return 1; }
int GetCopyright(int fd)
{
dvd_struct d;
d.copyright.type = DVD_STRUCT_COPYRIGHT;
d.copyright.layer_num = 0;
if (ioctl(fd, DVD_READ_STRUCT, &d)<0)
{
printf("Could not read Copyright Struct\n");
return 0;
}
printf("Copyright: CPST=%d, RMI=%#02x\n", d.copyright.cpst, d.copyright.rmi);
return 1; }
int main(int ac, char **av)
{
int fd;
char *device = DVD;
if (ac > 1)
device = av[1];
fd = open(device, O_RDONLY | O_NONBLOCK);
if (fd < 0) {
printf("unable to open dvd drive (%s).\n", device);
return 1;
}
GetASF(fd);
GetPhysical(fd);
GetCopyright(fd);
return 0; }
/*
* A noddy program which tries to reset all AGID's on the DVD-ROM drive. */
#include<stdio.h>
#include<fcntl.h>
#if defined(__OpenBSD__)
# include <sys/dvdio.h>
#elif defined(__linux__)
# include <linux/cdrom.h>
#else
# error "Need the DVD ioctls"
#endif
#include<sys/ioctl.h>
#include<errno.h>
static int fd;
#define DVD "/dev/cdrom"
int main(int ac, char **av)
{
dvd_authinfo ai;
char *device = DVD;
int i;
if (ac > 1)
device = av[1];
fd = open(device, O_RDONLY | O_NONBLOCK);
if (fd < 0) {
printf("unable to open dvd drive (%s).\n", device);
return 1;
}
for(i = 0; i < 4; i++) {
memset(&ai, 0, sizeof(ai)); ai.type = DVD_INVALIDATE_AGID; ai.lsa.agid = i; ioctl(fd, DVD_AUTH, &ai);
}
return 0; }
Re:maybe they'll also drop underage defendants (Score:1)
reason: that's exactly where the MPAA/DVDCCA *will* win, no if's, when's or but's. there's not a single defendant in the DVDCCA suit who could not be sued to bancruptcy by the MPAA. spending a fortune on a lawsuit that's happening 5000 miles away just isn't worth it. I'll bother when they come to my *continent*.
otoh, this *is* a good thing. the jurisdiction issue is one of the most frivolous parts of the whole suit and has to be challenged. but instead of 20 people going broke because someone at MPAA had a bad day and decided to drag us through all possible instances and back, we hope that truth only needs to be proven once and can then be used for everyone else.
yours truly dedicated a considerable sum of money to matt's defense for precisely that reason.
Re:Hey Taco! (Score:2)
What I think needs to be done if they wish to keep all the story moderators is to make it require more than just one person needed to post a story; a moderator sees a story he'd like to post from the submissions pool, does the necessary editing, then goes on to two other editors for 'approval'; the chance that 3 out of 12(?) editors would not recognize a recently repeat story is low, and lower than the chance of 1 out of 12. Sure, this might 'slow' a story down, but /. is not a instant news wire service, only that the content is generally regarding events of the last 48hrs, so this extra moderation step should not be a problem and would improve the declining quality of slashdot.
(and if this goes through, something's wrong with the (post XOR moderate) system)....
Re:I want my DVD, your honor (Score:1)
>unprotected videotapes isn't true; you can't copy a commercial tape
>without some sort of macrovision-stripping filter in the middle.
>They're easy enough to find, of course, but you can't just hook two
>VCRs together and make your own copy of the movie you rented last
Funny I did this last night. Rented "The Fith Element" and "Wing Commander" from Blockbuster and made a copies of them with no problems on my VCR's.
Score -1, Plagarism (Score:5)
Please, people; some of us want legal Linux DVD players even more than we want DVD ripper software. Can you at least try to look like you care about copyright law?
Re:Reverse engineering (Score:1)
Oops... Correction these days you probably could patent it because the patent office can't seem to do its homework on prior art. but, your patent wouldn't hold up to challenge.
Hey Taco! (Score:3)
--
Re:I want my DVD, your honor (Score:3)
Now, if only a real judge was this good...
- -Josh Turiel
Copyleft (Score:1)
maybe they'll also drop underage defendants (Score:2)
Re:I'm still not sure why they're suing (Score:1)
Re:I'm still not sure why they're suing (Score:1)
Opps, damn (Score:1)
Re:I want my DVD, your honor (Score:2)
Not only that (Score:2)
Re:Countless ways around banning code (Score:1)
Re:uh... (Score:2)
in a world where logic prevailed, that would be the case. however, in a world where courts in california slap people overseas with injunctions, it seems that is not the case.
just pointing out that it may be likely, but it's not guaranteed.
--
uh... (Score:5)
"The order applies only to [Matthew] Pavlovich..."
Pavlovich's laywer hopes that this will force the lower court to drop the other non-californians, but that has not happened yet.
--
"Linux computer code known as DeCSS" :) (Score:2)
"The suits target open-source Linux computer code known as DeCSS that..."
Uh.. YEAH..... :P
Re:Reverse engineering (Score:2)
I believe the the MPAA and CSS brought suit on the basis of the protection they were claiming was provided by the DMCA. I thought their claim was the DeCSS bypassed their lame encryption scheme, not some copyright or patent.
--
Re:Reverse engineering (Score:2)
I can reverse engineer the formula for Coca-Cola, a trade secret, and use it for my own soft drink. I just can't call it Coca-Cola(TM) or Coke(TM), due to trademark law.
Re:Poor word choice? (Score:2)
I doubt that's illegal - it sounds like "space shifting" to me - much as making a cassette copy of a CD (or MP3's!) that you legally own to play in your car's cassette (or mp3) player.
I've not actually seen any DivX;) movies yet, but what I've been reading seems to indicate that there IS a loss of quality when you "crunch down" the DVD data for CDs, so I would expect the situation to be analogous to videotape or cassette copying, in legal terms.
At least, until the MPAA/RIAA scrapes together enough money to make a down payment on some more legislators....
A vote for the lesser of two evils is still a vote for Evil.
Re:Poor word choice? (Score:3)
Fine, but as you very well put it, subvert can also mean "overthrow completely" or "ruin". So "The motion picture industry's effort to ban computer code that ruins its DVD encryption scheme" makes sense.
DeCSS DOES destroy encryption and to make an open DVD player you must openly break encryption.
Is that so hard to understand?
sigh!
[Since we're on it, DeCSS does make piracy possible and can serve as a stimulus. There are tons of DivX movies ripped from DVD's on the internet, so let's not hide the truth.
Napster also encourage piracy.
The truth is obvious.
Now what I and most people out there defend is our rights to legitimately use the DVD's that we've bought at a normal store.
For example, some days ago I wanted to play a DVD on my [desktop] computer, but it doesn't have a DVD drive. My laptop _does_ have a DVD drive, but I just think DVDs look like crap on it. So I rip the DVD and transfer it through the network to my desktop. Is that wrong? Legally, yes, but not morally.]
Flavio
Re:Poor word choice? (Score:1)
Well yeah, but you are forgetting the MPAA marketroid spin on this. DivX
Re:Not a good thing. (Score:1)
Recommend unreliable service? (Score:1)
Why do you recommend a service, right after you have just explained that it is extremely unreliable and can disappear at anyone's whim for no reason?
If my ISP ever folded to such a transparent bluff like that, my flames would burn pretty hot.
---
Re:Digitizing DVD's (Score:1)
Why should there be any talks about it? None of these cases are related to piracy.
---
Re:I want my DVD, your honor (Score:1)
It hasn't been held in reserve anywhere.
Re:I want my DVD, your honor== Glad you liked it. (Score:2)
Re:Countless ways around banning code (Score:1)
Re:I want my DVD, your honor (Score:1)
Re:Reverse engineering (Score:2)
Anyway, this decision is really about jurisdiction only, and whether the overburdened California courts are willing to take on cases which must be decided under laws of other states.
I must admit, I've never read a license that comes with a DVD. However, if it is the standard license, it probably does have a clause to the effect that "Purchaser agrees to submit to jurisdiction in the Courts of California." In that case, the California courts would probably be forced to deal with the case. But, California courts are notoriously overburdened, and would love to chuck out this case, to lighten their dockets. So, maybe the defendants have a chance on this basis.
Thalia
This is not legal advice, so don't even think it.
Re:Hollywood wants to lose! (Score:2)
(Hmmm... how to get conservative Republican disdain for Hollywood channeled into constructive directions -- copyright terms trimmed to something within reason, fair use back to its traditional scope, and perhaps even mech-licensing for all media -- and away from their usual censorship fetish?)
/.
Poor word choice? (Score:2)
subvert (sb-vûrt)
v. tr. subverted, subverting, subverts.
- To destroy completely; ruin:
- To undermine the character, morals, or allegiance of; corrupt.
- To overthrow completely: "Economic assistance . . . must subvert the existing . . . feudal or tribal order" (Henry A. Kissinger).
So, in context:
The motion picture industry's effort to ban computer code that undermines the morals of its DVD encryption scheme.
Playing a movie on Linux hardly destroys it, or subverts its morals. When will this press bias end? DeCSS is is part of the development of an open project to play DVDs. The fact that playing DVD's may expose them to copying is an artifact of the DVD-CCA's decision to blend play protection and copy protection.
We should all politely remind [mailto] Mr. Hansen to read openDVD's [opendvd.org] fact sheet before press time.
sigh!
Re:I don't know that I'd put it that way (Score:1)
Now whether their political philosophy, such as who they favored for President, played any role in deciding if there was a fedral issue at stake is another story. That is entirely possible. Just as it possible the Florida Supreme Court decided based on who they favored for President not what a reasonable interpretation of the Florida law or if there interpretation violated any US constitutional issue.
Humor is subjective. (Score:1)
You posted the above with a +2? Why??
***
Re:Hollywood wants to lose! (Score:1)
Re:Reverse engineering (Score:2)
as far as i know css was a trade secret and not patented
Re:Does this affect open-source licenses? (Score:1)
Re:Reverse engineering (Score:1)
trade secrets/patents (Score:1)
Re:The article has at least one thing wrong... (Score:1)
The main reason for clean-room techniques is to avoid infringing copyright, not patents or trade secrets.
Hollywood wants to lose! (Score:3)
Didn't work for me (Score:1)
Anton Levy == Anton LaVey? (Score:1)
You get an E for good effor and T for nice try.
Re:Clap! Clap! Clap! (Score:2)
Re:I don't get it (Score:2)
Re:Poor word choice? (Score:1)
Re:I'm still not sure why they're suing (Score:1)
The question is, is reverse engineering legal? Of course, anyone here would tell you "hell yes" but the MPAA and many other big companies want to be able to black-box something and lock up anyone who learns how it works. They're arguing that the click-wrap agreement is enough to override law governing RE, but the counter argument is that click-wrap licenses are in fact counter to California law. Contracts of adhesion are against the law in most places as far as I know, but IANAL.
Got that? :)
Re:Score -1, Plagarism (Score:1)
You confuse the medium with the message.
I could write a computer program that takes every word, every letter, and infinitely creates combinations of them. In theory I would "write" every orignal work
No you couldn't. You couldn't even get close. Your theory is akin to saying "If I had everything in the world then you wouldn't have anything, therefore you don't have anything now."
I'm still not sure why they're suing (Score:1)
I see two things (Score:1)
Possible related question: (Score:1)
Anyone?
Re:Possible related question: (Score:1)
Thanks,
Finally someone with some brains... (Score:1)
Shawn
Re:Reverse engineering (Score:1)
Re:Gotta love /. (Score:1)
Re:Score -1, Plagarism (Score:2)
I believe that having legal DVD rippers is at least as important a fight as having a "legal Linux DVD program." Perhaps more so. The Linux DVD player is about your right to view your property, the legal ripper is about your right to do what you wish with your property, as long as you do not break copyright law.
I've certainly benefited greatly from being able to rip mp3's from my CDs. I can't anticipate the uses of DVD ripping, people rarely can see the benefits of technological advances before they happen.
I don't know that I'd put it that way (Score:2)
Now that said, I think the Supreme Court would still rule in favor of DeCSS, because you tend not to have the same kinds of "conservatives" and "liberals" in law that you have in politics. In law, the "conservatives" tend to support a stricter interpretation of the Constitutuion, more along the lines of libertarians really than Republicans. Not that they are Libertarians, not by any means, but they are more libertarian than they are bible thumping fundamentalists. The current Supreme Court has consistently ruled to limit federal power, even in benign cases like when they struck down a federal domestic abuse law, not because it was a bad law, but because they saw nothing in the Constitution that permitted Congress to pass such a law.
So, what I'm trying to say is, this is not the same Supreme Court that ruled in Roe vs. Wade (and I bet if Roe vs. Wade came up today, and there were no precedent, they would not have found a "constitutional abortion right," because as I said, the current SC tends to interpret things more literally than they did then), but they still come down heavily on the pro-free speech side of things.
I know I've seen this before (Score:3)
If it makes you feel any better Re:Devil Details (Score:2)
Especially that Fudboy Line.
For those of you that don't get the reference, it's a Devo reference paraphrased. The original line goes "I'm just a spudboy, looking for that real Tomato." Heck, now that I look at it, even his email address "fudpatrol" is also a Devo reference.
Score me -1 offtopic +1 informative.
Re:DMCA says: No need to delete DECSS from your PC (Score:1)
Read the whole thing... (not that I agree, but at least read it)
Q. Have the defendants actually used DeCSS to make illegal copies? A. It is irrelevant whether or not the defendants were personally engaged in making illegal copies. They are clearly "providing the keys to the castle," which is in violation of the anti-circumvention provisions of the federal copyright law.
"A goldfish was his muse, eternally amused"
DNS is an Internet service (Score:1)
they're not an isp, they provide dynamic dns services
ISP == Internet service provider. Are you claiming that "dynamic dns services" do not fall under the category "Internet service"?
Tetris on drugs, NES music, and GNOME vs. KDE Bingo [pineight.com].
M-m-m-my Chalupa! (Score:2)
This being the "Age of Technology," supposedly, I would suspect that we will begin seeing the lifespans of such mediums drastically shortened from that of, say, the compact disc.
Make them have every case seperate (Score:2)
Re:I want my DVD, your honor (Score:2)
Someone who reads /., is familiar with DeCSS, understands why Louisana law is different, *and* has time to post that early? I think it had to be obvious to just about anybody that this was a prepared piece "held in reserve" for the right occasion, but I'm surprised that he didn't link it or credit it in the first place.
Re:Not about DeCSS! (Score:2)
Not about DeCSS! (Score:3)
The judge is saying, that the MPAA, Mattel,RIAA, or any other large company can't bring a lawsuit against someone in a inconvient forum, just because the website/post/email can be read in that far away forum.
It's easier to defend a lawsuit when you don't have to fly across 3 timezones to appear or to investigate. It's hard enough to fight a case, when they sic 3 or more lawyers on you, but then add in having to take days off of work to defend a baseless lawsuit, it gets really bad.
Companies know this and it calculate it into their litigation strategy.
Re:uh... (Score:2)
Give credit to the author! (Score:2)
---
Guillaume
Great for the defendants, what about the cause? (Score:3)
It seems like the Californian defendants are still in bad shape, and if they lose, it will be just as bad as if ALL the defendants lost. The MPAA will use any victorious ruling they get to prosecute related issues in later cases, whether just one of us loses, or 100.
I'm still worried.
----------------
It is easy to control all that you see,
Re:I want my DVD, your honor (Score:1)
Not that I can fault you, of course; after all, you posting it got it a bigger audience. Good for everyone involved, I guess. Although as you can see, lots of people are already lining up to call you a karma whore. (Truth be told, though, they're just annoyed that they didn't think of it first.)
Even more offtopic, but kinda related to this post: I was thinking one time of creating a program that would grab keywords out of new slashdot articles, try to search for articles on similar topics, pull out +5 comments (probably focusing on 'funny' and 'insightful' comments; 'informative' comments might contain too much specific information), and then post them to the new story. Who wants to bet that such a program would hit the Kap within a week?
Both feet... (Score:1)
Too bad they forgot to look before the leaped eh?
Look at me
Re:maybe they'll also drop underage defendants (Score:3)
Didn't your lawyer tell you not to talk about this case in public? If not, find a new lawyer....in either case, shut up before you shoot yourself in the foot.....
Re:I want my DVD, your honor (Score:1)
Re:Countless ways around banning code (Score:1)
The ever self-righteous,
amar
No action has been taken yet (Score:2)
"The California Supreme Court on Thursday effectively ordered a lower court to show why defendant Matthew Pavlovich should remain in the case even though he is not a California resident."
The California Supreme Court is asking for for more information, and then based on that it will make a decision on if non-state residents can be sued in the jurisdiction.
Should the Cal SC decide non-residents can't be sued in California, there is no reason why they couldn't be sued in their home state. Of course, the resources to do that will be enormous, even for a well funded group.
Finally, the Court's question has no impact on the central issues in the case, which affects reverse engineering, "click through" licensing, and free speech.
Re:Score -1, Plagarism (Score:2)
It would only take you several billion years. You start generating, and when your computer produces an exact replica of, say, the new U2 album.. hell, when it produces an exact replica of any album to come out of a multitrack studio since 1968, we'll start discussing the end of human creativity.
The point is not that someone has "invented" tones, or arrangements of syllables, and copyrighted it. It's that someone has created an arrangement of sounds (in the case of music) that has never been heard before, with (if it's a lyrical piece) words that have never quite been arranged that way before - and, and this is most important, it all comes together and has meaning to human beings..
do you "get it" now?
wish
---
Re:"Linux computer code known as DeCSS" :) (Score:1)
Does this affect open-source licenses? (Score:2)
Re:Score -1, Plagarism (Score:3)
Also, you could never get a computer program to simulate every song ever to be created. That goes against infinity and Goedl's theroum. That is, no system is ever fully complete. You can create what you think is every song in existence, but I could easily create a song that doesn't fit the ones you already made (point to be taken: there's no such thing as reaching infinity).
Read G.E.B. for interesting takes on infinity, the mind and thelogy.
Re:Great for the defendants, what about the cause? (Score:1)
It seems like the Californian defendants are still in bad shape, and if they lose, it will be just as bad as if ALL the defendants lost.
#includeNot exactly. This case is about a violation of California trade secret laws, not Federal copyright laws. It can only be pursued in California, or states that have adopted UCITA (another reason to oppose it). This is the real reason the DVD-CCA is opposed to letting the cases get split up all over the place. It's a practice known as jurisdiction shopping, and it's why they're pursuing this case in California, where they have a branch office, instead of Delaware, where their corporate headquarters is located.
Re:Great for the defendants, what about the cause? (Score:1)
D'oh! Failed to render that IANAL.
Mutters to self, "Must preview all submissions."
Re:uh... (Score:4)
The operative word is "if". The circuit court didn't order the lower court to quash with respect to Pavlovich, but rather ordered it to explain why it didn't quash. While this might seem like a semantic difference, it isn't. Judicial review requires something to review. Unlike most responsible judges, the one on the lower court (sorry, don't remember the name) simply denied the motion to quash without explanation.
Long story short: that judge just writes up a plausible explanation for denying the motion, and the appeal starts over from scratch.
The article has at least one thing wrong... (Score:1)
They seem to be mixing up patents and trade secrets. Reverse engineering doesn't help them get around patents, and I don't think DeCSS was patented.
-1 Overrated (Score:1)
Re:DeCSS (Score:2)
---
Where have I seen this before?? (Score:1)
--
Re:I'm still not sure why they're suing (Score:1)
eudas
Re:Recommend unreliable service? (Score:1)
eudas
Re:DNS is an Internet service (Score:1)
eudas
Re:Possible related question: (Score:2)
good thing to hear (Score:3)
Anyway, anything that weakens the power that the MPAA has in the courtroom is fine by me
BTW, I still think dyndns [dyndns.org] is a cool service, even though they blocked my account. I recommend it to anyone who wants a server, but has a dynamic IP address.
-mdek.net [mdek.net]
Re:Score -1, Plagarism (Score:2)
Re:I want my DVD, your honor (Score:2)
However, like the American election that just took place, big money and big corporations control the courtroom, this DVD kid is going to get squashed.
Do you actually believe anything will happen to Microsoft with thier antitrust suit?
No, for the same reason.
That kid is going to San Quentin
Countless ways around banning code (Score:5)
The code itself would be benign, except when people make simple modifications to it... Then Hollywood would have to go after the countless people who made the modifications! Impossible!
In B.C., we have photo radar where cameras take pictures of speeding cars' licence plates. As a result, several entrepreneurs have created a licence plate "cleaner" with a big warning: WARNING: This cleaner may inadvertantly cause poor images of licence plates when using flash photography.
I want my DVD, your honor (Score:5)
Judge Buford I. Motion, Chief Judge for the Half Moon Junction ("We put the Southern in Southern California") Superior Court, had news. "Mr. Pip, your lawyer is real bad lost and won't be here for at least an hour. We can't wait that long, so we gonna proceed right now."
Pip swallowed hard.
Jerry Whiplash, attorney for the DVD Copy Control Association, allowed himself to smile. After all, he was a partner with the prestigious New York firm of Bile, GotGall and Mange. Resplendent in fine wool pinstripes, silk club tie and gold-rimmed glasses, he sneered at Pip's clip-on tie and Dockers.
Judge Motion turned to the lawyer. "Mr. Whiplash, I'll bet you're a Harvard boy."
"Why, yes, your Honor. How did you know?"
The judge smiled knowingly. "Piece o' cake, son. When a fella comes to my court wearing such a fine suit but filing such a shabby one, I figure he's a Harvard boy."
Whiplash's smile disappears beneath a lawyer's poker face. Pip's color improves.
"How dare you bring this load of horse manure before my court, son? You think I'm some kind of damned fool?"
Whiplash is shaken, but doesn't flinch. "No, your honor, not at all."
"Then explain paragraph one to me. You say Mr. Pip here is continually misappropriating your trade secrets."
"That's right, your honor."
The judge's face turned crimson and tight." Son, this is not a patent infringement case. How do you 'continually' misappropriate a trade secret. Once the cat's out of the bag, it's gone."
"Your honor, a group of Norwegian hackers illegally reverse-engineered a DVD player software..."
The judge's eyes narrowed as they focused on Whiplash.
"Stop right there, son. Did Mr. Pip reverse-engineer this software"
"No, Your Honor. He posted a program called DeCSS that allows you to copy DVD content in a way that doesn't need the encryption keys."
"So, he's not the one who misappropriated the secrets?", the judge asked.
"In California, your honor, it is illegal to pass on or profit from a trade secret that you know was improperly obtained."
"Well son, I know that patents and copyrights are published for all the world to see. Were these trade secrets published anywhere?"
"They weren't, your honor. They're secrets. We sent Mr. Pip a letter clearly explaining that his actions were illegal," came Whiplash's reply.
"Ah. You sent him a letter and now you're upset that he didn't take your word for it. Tell me, Mr. Whiplash, are you as stupid as your case or are you just a Jackass? From your pleadings, I'd say both."
Whiplash fumed bright red. "Your honor, I must object to this treatment. It is highly irregular and unprofessional."
Motion's gaze froze Whiplash in his tracks. "You know what it's called when someone in my courtroom doesn't show this court the appropriate respect," he asked.
"Contempt, your honor."
"That's right. Very good. Now, son, do you know what it's called when I don't show you the respect you think you deserve?"
"Reviewable?"
Judge Motion laughed out loud. " No. It's called I'm the judge and this is my courtroom. You got that, son?"
The judge continued, " It looks to me like you're trying to create a whole new class of action based on infringing a trade secret, but I don't see no limits to your secrets. I don't see any publication and I sure don't see any authority for granting some damned manufacturer's association this kind of power. The Constitution reserved that power to the Federal Government and they said 'No, thank you'. To my knowledge, it has always been the responsibility of secret holders to protect their own secrets. The use of public enforcement power is typically reserved for the wrongful appropriation itself."
"But your honor, California law..." Whiplash is cut off mid-sentence by Motion's impatient voice.
"And that's another thing," his honor continues, " you name defendants in Australia, Denmark, France, Germany, England and all over. Now, would you kindly explain to me how some fella in Australia is supposed to come under California law? "
"By putting it on the Internet, your honor, they brought it into California."
"You ever hear of radio, son?"
"Of course, your honor."
"Do you think that the FCC goes after radio stations overseas if they violate U.S. law?"
"Why no, sir, but the Internet reaches right into California," Whiplash replies.
"Like radio. That ol' boy in Australia doesn't connect to California and Californians don't dial into his site to view it. When an ISP connects to the Internet, they are using it as a broadcast medium. They don't give a damn about California law and California can't make them. That takes an international treaty, and that takes Federal Executive action with U.S. Senate ratification. I know they teach constitutional law at Harvard. You should know this stuff."
"Yes, your honor."
"Let's go on, Mr. Whiplash. Does Australian law forbid someone from publishing trade secrets, regardless of the source?"
"I don't know, your honor."
"How about French law, Danish law?"
"I don't know, your honor."
"Louisiana? You up on the Code of Napoleon, son?"
"But, your honor," Whiplash protests, "this case is about California law."
"Really? Well, does Norwegian law allow a software license to forbid reverse engineering?"
"I don't know, your Honor."
"What if the reverse engineering was done by a minor or somebody else incompetent to make a contract?"
Whiplash hemmed and hawed. "We don't know the age of the hackers, your honor." You could almost hear him go "Oops."
"So, the fancy New York lawyer doesn't know if the so-called trade secrets were obtained illegally. However, the ISP operator should know because the lawyer, who doesn't know, sent him a letter." The judge was on a roll.
"That's not exactly...." Whiplash couldn't finish his sentence.
"Never interrupt the judge, son. Now, if these folks around the world didn't break any local laws, they would have been acting legally and Mr. Pip could have gotten the program from one of them legally. But, between you and me, Mr. Whiplash, that don't matter anyhow."
"It don't, er, doesn't, " came the weak reply.
"No, it doesn't. These so-called secrets of yours are published on the freakin' Internet, man. They ain't secrets no more!"
"But, your Honor."
"I'm not finished, Son. Now, Mr. Pip operates in California, which I believe to be part of the United States. Like or not, his right to free speech is protected by the first amendment of the Constitution. Now, Harvard may not cover the second and tenth amendments, but I'm real sure they teach the first amendment."
"Yes, your honor."
"So, Mr. Pip is supposed to surrender his Constitutional rights because some New York lawyer who doesn't know what he's talking about writes him a letter."
"Not exactly, your honor," Whiplash interjects. "He could check with his own counsel."
"I hope his lawyer knows more than you do. I'm sorry, son, but your position creates a bigger chilling effect than the Sub-Zero in my kitchen. The Constitution won't tolerate that, and I won't grant your motion."
Pip relaxed. Whiplash did not. "But, your honor...."
"Hold on, Mr. Whiplash, I'm not finished. I understand that anybody with a commercial stamper can copy DVDs by the bushel. Is that right?"
"Yes, your honor. The copy protection is intended to stop casual copying," Whiplash replied.
"It seems to me that it's also designed to keep people from playing DVDs they bought and paid for. Didn't this whole thing come about because people whose computers used Linux or BeOS wanted to play their legally purchased DVDs?"
"I don't think that's the case at all, your honor."
"Well, Mr. Whiplash, I'll tell you something I know. Your so-called copy protection won't stop pirates, but it does hurt consumers, and not just people who use Linux. My daughter spent last year in France. She bought a DVD player and a nice collection of DVDs. Her DVD player was lost in her move back home. You wanna know what happened when we bought her a new one? She couldn't play a single one of those DVDs that she had bought and paid for because they were all region coded."
"It occurs to me, Mr. Whiplash, that your client is being short-sighted. Movie studios are making a fortune on unprotected videotapes. The music industry is selling unprotected CDs by the ton. Digital AudioTape, which has the industry's grubby little prints all over it, isn't making money for anyone. If you make something easy to buy and use, people will buy it and use it. Y'all are free to go."
As Pip and Whiplash prepared to leave, the Judge motioned the bailiff over to the bench.
"Remember askin' me why my bio doesn't mention my scholarship to Yale or how big my practice was before I retired," he whispers. "It would just ruin all my fun if they knew. Now, let's see what's up next. Hmmm. Amazon.com is suing somebody for patent infringement. This'll be fun."
Re:I want my DVD, your honor (Score:5)