Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Patents

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.
This discussion has been archived. No new comments can be posted.

Hollywood Dealt Setback in California DeCSS Case

Comments Filter:
  • by Anonymous Coward
    It does not. It goes to the MPAA's customized 404 page. Try it.
  • by Anonymous Coward
    I could swear I've seen it on OSOpinion... Ah, here we are:

    http://www.osopinion.com/Opinions/DeanPannell/Dean Pannell5.html [osopinion.com]

  • by Anonymous Coward on Friday December 15, 2000 @12:11PM (#555838)
    /*
    * 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; /* Actually only 1 bit each */ byte combined;

    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 /* __linux__ */
    #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}}; /* DVD specific ? */ static struct playkey pkey4a1 = {0x028, {0x53,0xd4,0xf7,0xd9,0x8f}}; /* DVD specific ? */

    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))) { /* MPEG Audio */ goto write_it;
    } else if (pes[0x03] == 0xbd) { /* AC3 Audio */
    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,0x7 e, 0x36,0x2b,0x6e,0x2e,0x66,0x7b, 0xd3,0x93,0xdb,0x06,0x43,0x03,0x4b,0x96,0xde,0x9e, 0xd6,0x0b,0x4e,0x0e,0x46,0x9b, 0x57,0x17,0x5f,0x82,0xc7,0x87,0xcf,0x12,0x5a,0x1a, 0x52,0x8f,0xca,0x8a,0xc2,0x1f, 0xd9,0x99,0xd1,0x00,0x49,0x09,0x41,0x90,0xd8,0x98, 0xd0,0x01,0x48,0x08,0x40,0x91, 0x3d,0x7d,0x35,0x24,0x6d,0x2d,0x65,0x74,0x3c,0x7c, 0x34,0x25,0x6c,0x2c,0x64,0x75, 0xdd,0x9d,0xd5,0x04,0x4d,0x0d,0x45,0x94,0xdc,0x9c, 0xd4,0x05,0x4c,0x0c,0x44,0x95, 0x59,0x19,0x51,0x80,0xc9,0x89,0xc1,0x10,0x58,0x18, 0x50,0x81,0xc8,0x88,0xc0,0x11, 0xd7,0x97,0xdf,0x02,0x47,0x07,0x4f,0x92,0xda,0x9a, 0xd2,0x0f,0x4a,0x0a,0x42,0x9f, 0x53,0x13,0x5b,0x86,0xc3,0x83,0xcb,0x16,0x5e,0x1e, 0x56,0x8b,0xce,0x8e,0xc6,0x1b, 0xb3,0xf3,0xbb,0xa6,0xe3,0xa3,0xeb,0xf6,0xbe,0xfe, 0xb6,0xab,0xee,0xae,0xe6,0xfb, 0x37,0x77,0x3f,0x22,0x67,0x27,0x6f,0x72,0x3a,0x7a, 0x32,0x2f,0x6a,0x2a,0x62,0x7f, 0xb9,0xf9,0xb1,0xa0,0xe9,0xa9,0xe1,0xf0,0xb8,0xf8, 0xb0,0xa1,0xe8,0xa8,0xe0,0xf1, 0x5d,0x1d,0x55,0x84,0xcd,0x8d,0xc5,0x14,0x5c,0x1c, 0x54,0x85,0xcc,0x8c,0xc4,0x15, 0xbd,0xfd,0xb5,0xa4,0xed,0xad,0xe5,0xf4,0xbc,0xfc, 0xb4,0xa5,0xec,0xac,0xe4,0xf5, 0x39,0x79,0x31,0x20,0x69,0x29,0x61,0x70,0x38,0x78, 0x30,0x21,0x68,0x28,0x60,0x71, 0xb7,0xf7,0xbf,0xa2,0xe7,0xa7,0xef,0xf2,0xba,0xfa, 0xb2,0xaf,0xea,0xaa,0xe2,0xff };

    static byte lfsr1_bits0[256]=
    {
    0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0 8, 0x0b,0x0a,0x0d,0x0c,0x0f,0x0e, 0x12,0x13,0x10,0x11,0x16,0x17,0x14,0x15,0x1b,0x1a, 0x19,0x18,0x1f,0x1e,0x1d,0x1c, 0x24,0x25,0x26,0x27,0x20,0x21,0x22,0x23,0x2d,0x2c, 0x2f,0x2e,0x29,0x28,0x2b,0x2a, 0x36,0x37,0x34,0x35,0x32,0x33,0x30,0x31,0x3f,0x3e, 0x3d,0x3c,0x3b,0x3a,0x39,0x38, 0x49,0x48,0x4b,0x4a,0x4d,0x4c,0x4f,0x4e,0x40,0x41, 0x42,0x43,0x44,0x45,0x46,0x47, 0x5b,0x5a,0x59,0x58,0x5f,0x5e,0x5d,0x5c,0x52,0x53, 0x50,0x51,0x56,0x57,0x54,0x55, 0x6d,0x6c,0x6f,0x6e,0x69,0x68,0x6b,0x6a,0x64,0x65, 0x66,0x67,0x60,0x61,0x62,0x63, 0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x76,0x77, 0x74,0x75,0x72,0x73,0x70,0x71, 0x92,0x93,0x90,0x91,0x96,0x97,0x94,0x95,0x9b,0x9a, 0x99,0x98,0x9f,0x9e,0x9d,0x9c, 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x89,0x88, 0x8b,0x8a,0x8d,0x8c,0x8f,0x8e, 0xb6,0xb7,0xb4,0xb5,0xb2,0xb3,0xb0,0xb1,0xbf,0xbe, 0xbd,0xbc,0xbb,0xba,0xb9,0xb8, 0xa4,0xa5,0xa6,0xa7,0xa0,0xa1,0xa2,0xa3,0xad,0xac, 0xaf,0xae,0xa9,0xa8,0xab,0xaa, 0xdb,0xda,0xd9,0xd8,0xdf,0xde,0xdd,0xdc,0xd2,0xd3, 0xd0,0xd1,0xd6,0xd7,0xd4,0xd5, 0xc9,0xc8,0xcb,0xca,0xcd,0xcc,0xcf,0xce,0xc0,0xc1, 0xc2,0xc3,0xc4,0xc5,0xc6,0xc7, 0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf6,0xf7, 0xf4,0xf5,0xf2,0xf3,0xf0,0xf1, 0xed,0xec,0xef,0xee,0xe9,0xe8,0xeb,0xea,0xe4,0xe5, 0xe6,0xe7,0xe0,0xe1,0xe2,0xe3 };

    static byte lfsr1_bits1[512]=
    {
    0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x2 4, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff, 0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24, 0x49,0x6d,0x92,0xb6,0xdb,0xff };

    /* Reverse the order of the bits within a byte.

    */ static byte bit_reverse[256]=
    {
    0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,0x10,0x9 0, 0x50,0xd0,0x30,0xb0,0x70,0xf0, 0x08,0x88,0x48,0xc8,0x28,0xa8,0x68,0xe8,0x18,0x98, 0x58,0xd8,0x38,0xb8,0x78,0xf8, 0x04,0x84,0x44,0xc4,0x24,0xa4,0x64,0xe4,0x14,0x94, 0x54,0xd4,0x34,0xb4,0x74,0xf4, 0x0c,0x8c,0x4c,0xcc,0x2c,0xac,0x6c,0xec,0x1c,0x9c, 0x5c,0xdc,0x3c,0xbc,0x7c,0xfc, 0x02,0x82,0x42,0xc2,0x22,0xa2,0x62,0xe2,0x12,0x92, 0x52,0xd2,0x32,0xb2,0x72,0xf2, 0x0a,0x8a,0x4a,0xca,0x2a,0xaa,0x6a,0xea,0x1a,0x9a, 0x5a,0xda,0x3a,0xba,0x7a,0xfa, 0x06,0x86,0x46,0xc6,0x26,0xa6,0x66,0xe6,0x16,0x96, 0x56,0xd6,0x36,0xb6,0x76,0xf6, 0x0e,0x8e,0x4e,0xce,0x2e,0xae,0x6e,0xee,0x1e,0x9e, 0x5e,0xde,0x3e,0xbe,0x7e,0xfe, 0x01,0x81,0x41,0xc1,0x21,0xa1,0x61,0xe1,0x11,0x91, 0x51,0xd1,0x31,0xb1,0x71,0xf1, 0x09,0x89,0x49,0xc9,0x29,0xa9,0x69,0xe9,0x19,0x99, 0x59,0xd9,0x39,0xb9,0x79,0xf9, 0x05,0x85,0x45,0xc5,0x25,0xa5,0x65,0xe5,0x15,0x95, 0x55,0xd5,0x35,0xb5,0x75,0xf5, 0x0d,0x8d,0x4d,0xcd,0x2d,0xad,0x6d,0xed,0x1d,0x9d, 0x5d,0xdd,0x3d,0xbd,0x7d,0xfd, 0x03,0x83,0x43,0xc3,0x23,0xa3,0x63,0xe3,0x13,0x93, 0x53,0xd3,0x33,0xb3,0x73,0xf3, 0x0b,0x8b,0x4b,0xcb,0x2b,0xab,0x6b,0xeb,0x1b,0x9b, 0x5b,0xdb,0x3b,0xbb,0x7b,0xfb, 0x07,0x87,0x47,0xc7,0x27,0xa7,0x67,0xe7,0x17,0x97, 0x57,0xd7,0x37,0xb7,0x77,0xf7, 0x0f,0x8f,0x4f,0xcf,0x2f,0xaf,0x6f,0xef,0x1f,0x9f, 0x5f,0xdf,0x3f,0xbf,0x7f,0xff };

    /*
    *
    * 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; }
  • most of us (yes, I'm also on their hitlist) never bothered with lawyers.

    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.
  • The fact that there are repeat stories within a short time period (a few days) implies either the story moderators aren't reading the site and/or there's too many story moderators and sections of the site. It's completely understandable if a story is repeated after 4 or so months by a different moderator, but on the same day?

    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)....

  • >Too bad the part about the movie industry making tons of money on
    >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.
  • by roystgnr ( 4015 ) <roy&stogners,org> on Friday December 15, 2000 @12:22PM (#555842) Homepage
    The guy who actually wrote this, Dean Pannell (who goes by "dinotrac", not "Maldivian") does say "Copying with proper attribution is expressly permitted" on his essay [dinotrac.com]... but that copyright statement and attribution seems to be the only thing that wasn't cut and pasted here.

    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?

  • If you reverse engineer a trade secret you cannot patent it because whatever you reverse engineered would be prior art.

    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.
  • by emag ( 4640 ) <slashdot@nosPAm.gurski.org> on Friday December 15, 2000 @11:29AM (#555844) Homepage
    You should read YRO [slashdot.org] periodically. This has been there [slashdot.org] since 07:34!


    --
  • by jht ( 5006 ) on Friday December 15, 2000 @11:42AM (#555845) Homepage Journal
    This deserves Post Of The Year honors, if any post on Slashdot ever has. Bravo!

    Now, if only a real judge was this good...

    - -Josh Turiel
  • by jjr ( 6873 )
    Is Copyleft still a witness in the case?
  • maybe they'll drop underage defendants as well. i'm a named defendant, i have no clue why they continue to list me although i'm STILL 17 and a MINNESOTA resident. geez.
  • Good point. I hadn't even though of that as a possibility, but that would seem to make good sense... but then in reality, this is one of those "Good ol' boys" clubs that has tons of cash and wants everything exactly their way, and they are willing to burn anybody who stands in their way, even if it could actually bring them more revenue.
  • Oh yes, totally forgot about that human virtue called GREED.
  • that's "Church of SatInism"... actually "Church of SatAnism" scrambles to "Chum of anarchists" - sorry.
  • Right on the mark about DATs as well - I just bought 8 for backups. Sure hope Madonna appreciates the extra bucks.
  • but you can rearrange the letters in "Church of Satanism" to spell "Chum of Christians" which seems to indicate some kind of divine conspiracy going on.
  • In most places, it's an offense to obscure your license plates, intentionally or otherwise. That includes putting shiny stuff on them (or whatever) so that red-light cameras and radar cameras can't properly image them.
  • "...if Matthew Pavlovich is ordered dropped from the case solely on the basis that he doesn't reside in California, all the other non-Californians will be dropped as a matter of course."

    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.
    --
  • by Phexro ( 9814 ) on Friday December 15, 2000 @11:31AM (#555855)
    did anyone actually read the link?

    "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.
    --
  • From the article:

    "The suits target open-source Linux computer code known as DeCSS that..."

    Uh.. YEAH..... :P

  • 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.


    --

  • The author of the article is confused. You can use reverse engineering to discover trade secrets and then use them in your own products. A patent, is by definition, public information.

    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.

  • So I rip the DVD and transfer it through the network to my desktop. Is that wrong? Legally, yes, but not morally.]

    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.
  • by Flavio ( 12072 ) on Friday December 15, 2000 @11:50AM (#555860)
    The motion picture industry's effort to ban computer code that undermines the morals of its DVD encryption scheme.

    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
  • 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.

    Well yeah, but you are forgetting the MPAA marketroid spin on this. DivX ;) is digital so you can make perfect copies, etc. It makes me laugh when I hear people say that just because something is digital it is so superior.
  • DO NOT CLICK THAT LINK!!! it goes to goatse.cx. *shudder*
  • BTW, I still think dyndns 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.

    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.


    ---
  • There havent been any talks about how someone will prevent this sort of piracy.

    Why should there be any talks about it? None of these cases are related to piracy.


    ---
  • Actually, I wrote the piece a year ago and it has appeared in a number of places, including OSOpinion, LinuxToday, opendvd.org and my own website, dinotrac.com.

    It hasn't been held in reserve anywhere.
  • Maldivian, please consider yourself a friend after the fact. Although I do ask for attribution when somebody posts one of my pieces, that seems to have been handled and not harm was done. Quite the opposite, in fact. Judge Motion has been introduced to a few more people and I've gotten some really nice e-mails. Yahoo!! (the exclamation, not the portal) I would like to share the gist of my favorite e-mail so far, even though it wasn't prompted by this posting. While all that mess was going on down in Florida, one friend watched the proceedings of Judge Sauls in the Leon County court. He e-mailed me to say that Judge Motion was alive and well in Leon County. I took it as quite the compliment.
  • It's still a derived work, so it really wouldn't matter.
  • Too bad the part about the movie industry making tons of money on 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 night with any expectation of viewable quality.
  • In general, you are correct, reverse engineering may be used to discover trade secrets. In this case, the MPAA's assertion is that reverse engineering is prohibited by license. Since to acquire a player, one must agree to the license (apparently it shows up before you can play anything, or it's in the box or something), you can not legitimately obtain a copy of the player without having agreed to this license. Therefore, the reverse engineering, generally acceptable, is prohibited.

    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.
  • Er, why? Supporting Hollywood would be leaning strongly against the political biases of the conservatives on the court.

    (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?)
    /.

  • "The motion picture industry's effort to ban computer code that subverts its DVD encryption scheme"

    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!
  • From what I understand, they have consistently upheld state's rights except when a federal law or constitutional issue is at stake. Seven judges held the Florida Supreme Court's decision violated a Constitutional right so the state's rights issue didn't matter.
    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.
  • I found it quite amusing, as many made up stories with made up characters are, to those of us who actually (gasp) read fiction. Just because you didn't find it funny doesn't mean it is of no value or 'immature' as you put it. I challenge you to find a 3rd grader who would find this story interesting, or even understand it.

    You posted the above with a +2? Why??
    ***
  • actually they like to get their hands into as much as possible, basically slowly growing their power. its sort of a good bet that they would support decss, because it just shows how far they can extend their power...ie against such powerful entities as mpaa
  • you can produce a pantentable object because most technologies arnt patented, they are trade secrets. if you patent something it is publicly avalible but protected, trade secrets arnont patented and prtected only through the silence of its creator, if someone revese enginers it and figures it out, then they can patent it, because trade secrets have no protection
    as far as i know css was a trade secret and not patented
  • The article does not say the judge invalidated the licence. However, it does day that the case hinges upon the licence, and that Allon Levy (defense attorney, or counsel for the defence as we call it over here) claims it is invalid. The article also makes the very strong claim that one must accept the licence before downloading CSS.
  • Since to acquire a player, one must agree to the license (apparently it shows up before you can play anything, or it's in the box or something)), you can not legitimately obtain a copy of the player without having agreed to this license.
    If it's in the box, you've already acquired the player.
    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."...
    If you don't make a contract, you're not bound by it, including the jurisdiction clause. If the MPAA can produce a copy of the licence signed by the authors of DeCSS, then the California courts will have to hear the case.
  • Everywhere but the USA, prior art has to be public. If you allow trade secrets to be prior art, the patent office can't "do its homework", unless it somehow knows everyone's trade secrets.
  • According to Johansen, DeCSS was a clean room reimplementation. The MPAA seems to be claiming that it's reverse engineering. I know whom I believe.

    The main reason for clean-room techniques is to avoid infringing copyright, not patents or trade secrets.
  • by zeiche ( 81782 ) on Friday December 15, 2000 @11:54AM (#555880)
    If they lose the case, they can appeal to the US Supreme Court. They now know 5 of the 9 justices will rule in their favor.
  • I tried takingthe video out from my GeForce2 DDR and plugging it into my TV tuner, then starting the tv capture software and recording it, but i couldn't get anything. How are you supposed to do it?
  • The new Slashdot math?
    You get an E for good effor and T for nice try.
  • It's just as funny now as it was when it was written.
  • But it's not funny. It's a made up story - about the same maturity as a 3rd grader would find interesting. Obviously posted by someone with friends who moderate down any dissenting post too.
  • That actually is illegal, but only because DVDs are involved. Basically, because of the DMCA, playing DVDs in any way which is not officially sanctioned by the MPAA is illegal. However, just because it is illegal doesn't mean I wouldn't do it in a second, or that any of you should think twice either. There's nothing wrong with it, that's simply the fair use of a movie you have payed for. If it's an unjust or stupid law, break it as many times as you can or it will never go away.
  • You haven't been following this case very long, have you? They're already making a profit from it. The whole point of DVD encryption is to prevent anyone from playing a movie without their sanctioned hardware, and no one can make the hardware without a license from the DVD/CCA. This is all an elaborate scheme to place themselves in total control of all movies played everywhere. With VHS, anyone can make a player for it and they have. There is a healthy free market in video players. But the DVD player market is a very closed, tightly guarded monopoly and it is undoubtedly making loads of cash for the MPAA. Since CSS, the encryption scheme used with DVDs, was a trade secret (emphasis on the past tense :) open sourcing a legitamate player would be out of the question. The only type of player for a computer that could be legal would have to be closed source. The guys at MoRE reverse engineered the encryption used with DVDs so that an open-source, freely available player could be made. That's why the MPAA is so pissed off, DeCSS in effect can make their comfy monopoly on DVD players worthless because their trade secret was reverse engineered, and trade secrets have no more protection than their secrecy.

    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? :)

  • Copyright is a lie. You didn't invent the English language, you didn't invent electromagnetic waves (sound, light), you didn't invent music

    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."

  • Ok, if computer users want to use DVDs, they need a decrypter. People make open source decryption programs. Why sue the guy that wrote it when you can just hire him for half the cost and make a profit off of it?
  • This comment being modded up to +5, and the MPAA and federal courts now going after any site linking to this discussion thread. I say forget about the MPAA and mod this up, and post it on every other thread on /. as well. This code deserves to be free, and Valenti and Co. deserve to rot in the deepest depths of Satan's playpen.
  • So does this mean we may be able to buy an external DVD drive with a firewire/I.Link port on it any time soon? I'm wondering if it's legislation or some secret pact keeping such a device off the market currently.
    Anyone?
  • Any possibility you can help me find a link to this text?
    Thanks,
  • Glad to see it. Hope Hollywood gets the shaft in this one.
    Shawn
  • There's [at least] two lawsuits going on, each with a different core arguement. The one in California (by the DVD CCA) is arguing that the big list of people who posted DeCSS misappropriated trade secrets, whereas the New York case (by the MPAA) against 2600 focused more on the DMCA aspect of the case. You can be fairly sure that they will play both trials out to the end to find which argument will hold up better in court and squash everyone else with whatever judgement is in their favour.
  • Moderators don't decide which articles are accepted.

  • 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?

    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.

  • This is NOT the same Supreme Court that ruled in Roe vs. Wade. Same institution, sure, but different justices.

    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.

  • by Galvatron ( 115029 ) on Friday December 15, 2000 @12:00PM (#555897)
    I guess as long as lots of people haven't seen it before, I can't fault the guy too much for reposting it, but this HAS been up before, and the fact that the comment ID is 9 obviously shows this guy's been waiting for an opportunity to put it up. So stop falling all over yourselves trying to praise him already.
  • If it makes you feel any better, I laughed.
    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.
  • 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"
  • 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].
  • I think the world has realized by now that any digital medium will be subject to pirating. The only point in such cases as this to delay the mass outbreak before the industry is forced to come out with the next medium.

    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.

  • The more cases they have to have open at a time the better. They all need to demand that they get their own trials and make MPAA rethink how long they can keep this up.
  • 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.

  • ts amazing they even got this far. With money like they have, anything is possible.
    I saw this with the CPHack case too. In their lawsuit and request for injunction, Mattel claimed that if the injunction was not granted, they would suffer irrepreable harm. But, in an article wirtten by their attorney (Schwartz), they claimed that software was changed the next day. If the software was changed, then the encrypted stream would have to be changed. If the encryption has been changed, how can there be any further damage?

  • by www.sorehands.com ( 142825 ) on Friday December 15, 2000 @12:03PM (#555905) Homepage
    This ruling is not about the DeCSS lawsuit validity. This is about jurisidiction!

    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.

  • Yes, and the people who made the link made came to the obvious conclusion that if Matthew Pavlovich is ordered dropped from the case solely on the basis that he doesn't reside in California, all the other non-Californians will be dropped as a matter of course. Jurisdiction questions such as this one are a very common method by which lawsuits are dismissed.
  • That's a good one, but credit should have been given to the author, Dean Pannell.

    ---
    Guillaume

  • by Modab ( 153378 ) on Friday December 15, 2000 @11:57AM (#555908)
    It looks like a ray of hope for those defendants who live outside of California, and I don't mean to belittle their possible victory, but does this lend anything to our war against the MPAA?

    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,

  • Now that's the way to get karma ... post a definite +5 Funny article from somewhere else, and then gain more karma when you post who the author actually is...

    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?

  • Looks like thats what hollywood used when they jumped in on this one.
    Too bad they forgot to look before the leaped eh?

    Look at me /mr. cliche-man/ today :)

    .ph0x
  • by krlynch ( 158571 ) on Friday December 15, 2000 @01:34PM (#555911) Homepage

    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.....

  • sorry for the waste of space but; BRAVO
  • Why not? Because we're not just trying to get away with it, we're trying to make a point.

    The ever self-righteous,
    amar

  • From the article:
    "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.
  • I could generate everything covered under copyright law.

    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
    ---

  • ...written in an open-source Linux language known (in a very James Bond way) only by a single letter...
  • The article says the judge invalidated the license that people had to click to agree to when they downloaded the software. Is this sauce for the goose also going to be sauce for the gander? What's the legal status of copyleft licenses? Last I heard, they'd never really been tested in court.
  • by Fervent ( 178271 ) on Friday December 15, 2000 @01:36PM (#555918)
    One could argue that creation is a process that turns something out of nothing (as I argue -- imagination itself is a miracle). Then copyright law would not apply to the media being used, but the content one wishes to represent.

    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.

  • 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.

    #include

    Not 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.

  • D'oh! Failed to render that IANAL.

    Mutters to self, "Must preview all submissions."

  • by Prior Restraint ( 179698 ) on Friday December 15, 2000 @01:50PM (#555921)

    ...if Matthew Pavlovich is ordered dropped from the case...

    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.

  • "reverse engineering," a technique used by software developers to recreate patented products without running afoul of intellectual property laws.

    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.

  • Not that funny, certainly not +5
  • and where did you read that article at?

    ---
  • It looks familiar?? Or maybe I'm dreaming...


    --
  • hey, what's the use of money if you can't use it to get your own way, right?

    eudas
  • they're not an isp, they provide dynamic dns services.

    eudas
  • the term 'isp' has historically been applied to those who sell internet access, be it via dialup, isdn, or broadband networks. dyndns does not fall within that category.

    eudas
  • Yes there is a pact keeping this type of product off the market. The DVD CCA has a stipulation in the licensing contract that says if you make a DVD player, it can't have those high bandwidth outputs. So if you are an HDTV owner, the MPAA says "Screw you."

  • by darthpenguin ( 206566 ) on Friday December 15, 2000 @11:54AM (#555931) Homepage
    This is a good thing to hear. One of my sites that I used to spread information about DeCSS was in effect shut down. Even though I hosted off my own server at home, over my own internet connection, they went to the people who provided me with my dynamic DNS network services: dyndns.org [dyndns.org]. The guy in charge of the service just suspended my account when HE was contacted by the MPAA. This pretty much shut down the only way most people could access my site, which really pissed me off, because I didn't even provide DeCSS anymore on it, but rather instructions on how to install the Linux DVD player once you got the source, and reasons why I thought DeCSS should be allowed.

    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]
  • Copyright is a lie. You didn't invent the English language, you didn't invent electromagnetic waves (sound, light), you didn't invent music. You didn't invent paper, pens, sentences or phrases. You took matter that existed before humans ever existed and arranged it. 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, so if you came up with something, I could simply say, "Too bad, my computer wrote it first, therefore it's not oringial." I could do the same with sound: generate random sound until I've created every musical composition every to be invented. I could generate everything covered under copyright law.
  • It would be nice if the judge could look at the case from an impartial stance like this, purely based on law.

    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
  • by c_g12 ( 262068 ) <c_g12NO@SPAMhotmail.com> on Friday December 15, 2000 @11:36AM (#555953)
    Why not make the source "fill in the blanks?"

    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.

  • by Maldivian ( 264175 ) on Friday December 15, 2000 @11:27AM (#555956)
    T.C. Pip, a small California ISP operator, didn't think twice about posting DeCSS to one of his web sites. Now he was standing, shaky and pale, before a judge. His lawyer was nowhere to be found.

    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."

  • by Maldivian ( 264175 ) on Friday December 15, 2000 @12:14PM (#555957)
    I think all praise should be redirected to Dean Pannell [dinotrac.com] (a.k.a. dinotrac), the orginal author of that excellent piece. I had it bookmarked for a while and then saw this slashdot story, both clicked and thus the post.

It is easier to write an incorrect program than understand a correct one.

Working...