29 December 1999
For worldwide DVD CSS sources see:
http://cryptome.org/dvd-v-500.htm
DVD CSS source code:
http://cryptome.org/css-tar.gz
EFF to Oppose DVD Complaint:
http://cryptome.org/eff-v-dvd.htmhttp://www.eff.org/pub/EFF/Newsletters/EFFector/current.html
13 November 1999
A compilation of messages on DVD/CSS sent or forwarded to us.
Resent-Date: 04 Nov 1999 21:17:34 +0100
Date: Mon, 25 Oct 1999 07:01:58 +0200 (CEST)
Message-Id: <199910250501.HAA19966@sofuku.monster.org>
From: Anonymous <nobody@replay.com>
Comments: This message did not originate from the Sender address above.
	It was remailed automatically by anonymizing remailer software.
	Please report problems or inappropriate use to the
	remailer administrator at <abuse@replay.com>.
To: livid-dev@livid.on.openprojects.net
Subject: [Livid-dev] css
Original-Sender: livid-dev-admin@livid.on.openprojects.net
Errors-To: livid-dev-admin@livid.on.openprojects.net
X-Mailman-Version: 1.0rc2
Precedence: bulk
List-Id:  <livid-dev.livid.on.openprojects.net>
X-BeenThere: livid-dev@livid.on.openprojects.net
Lines: 347
begin 664 css.tar.gz
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
K[.3X2:FX0E!E:=7)21FTE(Z<9OO77.%W][O[W?WN?M6__P5O7*7R`/``````
`
end
_______________________________________________
Livid-dev maillist  -  Livid-dev@livid.on.openprojects.net
http://livid.on.openprojects.net/mailman/listinfo/livid-dev
Resent-Date: 04 Nov 1999 21:17:34 +0100
Date: Tue, 26 Oct 1999 20:59:14 -0700
From: Aaron Holtzman <aholtzma@ess4.engr.UVic.CA>
To: livid-dev@livid.on.openprojects.net
Message-ID: <19991026205914.E29794@ess.engr.uvic.ca>
Mail-Followup-To: livid-dev@livid.on.openprojects.net
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
X-Mailer: Mutt 1.0pre3i
Subject: [Livid-dev] CSS key generation analysis
Original-Sender: livid-dev-admin@livid.on.openprojects.net
Errors-To: livid-dev-admin@livid.on.openprojects.net
X-Mailman-Version: 1.0rc2
Precedence: bulk
List-Id:  <livid-dev.livid.on.openprojects.net>
X-BeenThere: livid-dev@livid.on.openprojects.net
Lines: 69
Since the css code is publically available, I'm going to make use
of my right to free speech in my country. It's amazing the amount
of fear that large multinational corporations can put into the
hearts of hackers :p
The first step of key generation does very little to protect
the integrity of the player keys. In fact, if you have one legit
key, you are just one forty bit hash function away from getting a
new player key.
First, some definitions and background. I'm going to focus on the
first stage of key generation (which is all that matters).
D[]     - The disc key sector containing 409 five bit 'slots'
d       - A plain text disc key that can be used in key generation step 2
d'      - An encrypted disc key taken from D[] which corresponds to p
p       - A plain text player key as it exists in the player code
p'      - An encrypted player key generated as part of key generation step 1
The first stage key generation looks like this
p' = crypt_a(p);           //This is the for(i=[0..5]){ k += LSFR + CRAP} loop
d  = one_way_hash(d',p');  
You would then use the resulting d to decrypt the title key in stage two 
and carry on your merry way. There are two interesting remarks to make at 
this point. One is that d is constant for a particular disc, regardless of which
player key you're using. Two, the generation is p' is completely pointless.
Since p' only depends on p, having p' is just as good as having p for our 
purposes.
Now if we have p_5 for example (where _N means corresponding to disc key 
offset N), we could run through the process using d_5' and p_5' and get
d (which is again the same for all player keys). All we need to do to get p_X'
(where X is any old offset from 0x05-0xA0 (1)(2)) is find an input to the one_way_hash
function that along with d_X' provides the output d. 
There are 2^40 possibile combinations of inputs, and I have code that
trys 17e6 potential hashes/second on a Celeron 366. This gives a max
search time of ~17 hours.
There is one caveat. The one way hash function is not a bijection. This means 
there may be many potential hash inputs that produce that right output. Only one 
is p_X', and to test the potential keys you need to use a different disc.
Code to perform this task is left as an exercise to the reader. Have fun.
cheers,
aaron
(1) I contend that there are only 32 player keys that are repeated up to
thirteen times in random slots (but the slots are the same between discs).
Slots 0x05-0xA0 are unrepeated, consecutive disc keys. On _some_ discs,
some of the repeat slots are filled with noise. If you don't believe me
take a look at the distribution of the disk key sector and decide for 
yourself.
(2) There is also the matter of the special 0x00 slot magic disc key. This
key plays a part in determining which player key to use (if a player has
more than one p). I haven't looked too closely at the math behind this
key, but I suspect that there are even more flaws to exploit here.
_______________________________________________
Livid-dev maillist  -  Livid-dev@livid.on.openprojects.net
http://livid.on.openprojects.net/mailman/listinfo/livid-dev
Resent-Date: 04 Nov 1999 21:17:34 +0100; also posted to the Cryptography
mail list 27 October 1999.
Date: Wed, 27 Oct 1999 08:55:01 +0200 (CEST)
From: Frank Andrew Stevenson <frank@funcom.com>
X-Sender: frank@odin
To: livid-dev@livid.on.openprojects.net
Message-ID: <Pine.SGI.3.96.991027082942.451B-100000@odin>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Subject: [Livid-dev] Successfull attack on CSS algorithm
Original-Sender: livid-dev-admin@livid.on.openprojects.net
Errors-To: livid-dev-admin@livid.on.openprojects.net
X-Mailman-Version: 1.0rc2
Precedence: bulk
List-Id:  <livid-dev.livid.on.openprojects.net>
X-BeenThere: livid-dev@livid.on.openprojects.net
Lines: 280
Hi, I am a new member to this list, in fact I subscribed just today,
in order to send this message, and answer to followups.
My main interest in this is purely cryptographical, so I have little
or no knowledge of the problems associated with CSS. What I have done
is device an attack that will recover a CSS key with a complexity of
2^16 and as little as 6 known output bytes. This should reduce the
keyrecovery time from ~17 hours to a fraction of a second.
The CSS algorith is fataly flawed. A divide and conquer attack is
possible by guessing the 16 unknown bits of LFSR1. LFSR1 is then
clocked 4 times, and the known keystream bytes are then used to
reconstruct the state of LFSR2. The whole cipher is then clocked 
another 2-6 times to validate the key. If the key is correct LFSR2 is
clocked backwards 4 times to retrieve the initial state. The fine
details can be found in the source code below.
I hope this mail isn't too long, but I have included source for
a complete cracker which works as follows:
hippopotamus:~/pc/temp> scramble 3e 4c 13 2e 9c
Doing encryption
Keystate at start: 13e 4c 01385c2b
output: 80 18 e2 cc c1 21 85 0d 9f 8c 
This produces the 10 first bytes of the keystream for
the given key, and also dumps the initial keystate.
hippopotamus:~/pc/temp> time scramble 80 18 e2 cc c1 21 85 0d 9f 8c
Attempting crack
Candidate: 13e 4c 01385c2b
0.090u 0.000s 0:00.10 90.0%     0+0k 0+0io 87pf+0w
With 10 bytes as input, the initial state is here recovered in
1/10th of a second on a PPro200.  
  frank
---------- The following is C code for the attack --------
/********************************************************
*
*  The Divide and conquer attack
*
*  Deviced and written by Frank A. Stevenson 26 Oct 1999
*
*  ( frank@funcom.com )
*  Released under the GPL license
*
********************************************************/
#define KEYSTREAMBYTES 10
static unsigned char invtab4[256];
void CSScracker( unsigned char* pStream ) {
  unsigned int t1,t2,t3,t4,t5,t6;
  unsigned int nTry;
  unsigned int vCandidate;
  int i;
  unsigned int j;
  /* Test that CSStab4 is a permutation */
  memset( invtab4, 0, 256 );
  for( i = 0 ; i < 256 ; i++ ) invtab4[ CSStab4[i] ] = 1; 
  for( i = 0 ; i < 256 ; i++ ) if( invtab4[ i ] != 1 ) {
    printf( "Permutation error\n" );
    exit( -1 );
  }
  /* initialize the inverse of table4 */
  for( i = 0 ; i < 256 ; i++ ) invtab4[ CSStab4[i] ] = i;
  for( nTry = 0 ; nTry < 65536 ; nTry++ ) {
    t1 = nTry >> 8 | 0x100;
    t2 = nTry & 0xff;
    t3 = 0;   /* not needed */
    t5 = 0;
    /* iterate cipher 4 times to reconstruct LFSR2 */
    for( i = 0 ; i < 4 ; i++ ) {
      /* advance LFSR1 normaly */
      t4=CSStab2[t2]^CSStab3[t1];
      t2=t1>>1;
      t1=((t1&1)<<8)^t4;
      t4=CSStab5[t4];
      /* deduce t6 & t5 */
      t6 = pStream[ i ];    
      if( t5 ) t6 = ( t6 + 0xff )&0x0ff;
      if( t6 < t4 ) t6 += 0x100;
      t6 -= t4;
      t5 += t6 + t4;
      t6 = invtab4[ t6 ];
      /* printf( "%02x/%02x ", t4, t6 ); */
      /* feed / advance t3 / t5 */
      t3 = (t3 << 8) | t6;
      t5 >>= 8;
    }
    vCandidate = t3;
    /* iterate 6 more times to validate candidate key */
    for( ; i < KEYSTREAMBYTES ; i++ ) {
      t4=CSStab2[t2]^CSStab3[t1];
      t2=t1>>1;
      t1=((t1&1)<<8)^t4;
      t4=CSStab5[t4];
      t6=(((((((t3>>3)^t3)>>1)^t3)>>8)^t3)>>5)&0xff;
      t3=(t3<<8)|t6;
      t6=CSStab4[t6];
      t5+=t6+t4;
      if( (t5 & 0xff) != pStream[i] ) break;
      t5>>=8;
    }
    if( i == KEYSTREAMBYTES ) {
      /* Do 4 backwards steps of iterating t3 to deduce initial state */
      t3 = vCandidate;
      for( i = 0 ; i < 4 ; i++ ) {
        t1 = t3 & 0xff;
        t3 = ( t3 >> 8 );
        /* easy to code, and fast enough bruteforce search for byte
shifted in */
        for( j=0 ; j < 256 ; j++ ) {
          t3 = (t3 & 0x1ffff) | ( j << 17 );
          t6=(((((((t3>>3)^t3)>>1)^t3)>>8)^t3)>>5)&0xff;
          if( t6 == t1 ) break;  
	}
      }
      printf( "Candidate: %03x %02x %08x\n", 0x100|(nTry>>8),nTry&0x0ff,
t3 );
    }
  }
}
  
----------- Following is a complete cracker -------------------
------ compiles with VC++ / gcc linux, runs  on x86 ----------- 
begin 640 scramble.c.Z
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
%*;,]"A:%
`
end
This sentence is unique in this respect; it can safely
be attributed to my employer, Funcom Oslo AS.
E3D2BCADBEF8C82F A5891D2B6730EA1B PGPmail preferred, finger for key
There is no place like N59 50.558' E010 50.870'. (WGS84)
_______________________________________________
Livid-dev maillist  -  Livid-dev@livid.on.openprojects.net
http://livid.on.openprojects.net/mailman/listinfo/livid-dev
Date: Wed, 27 Oct 1999 14:54:17 +0200 (CEST)
From: Frank Andrew Stevenson <frank@funcom.com>
X-Sender: frank@odin
To: cryptography@c2.net
Subject: CSS broken
Message-ID: <Pine.SGI.3.96.991027144958.28574A-100000@odin>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Sender: owner-cryptography@c2.net
Monday sourcecode for the CSS algorithm was released
through an anonymous remailer. CSS is the encryption algoritm
used on DVD movies, and it was supected that it was weak
beyond just having a 40 bit key. Yesterday I found it to
be vulnerable to a trivial 2^16 attack with as little
as 6 bytes of known plaintext.
I posted the details on:
http://livid.on.openprojects.net/pipermail/livid-dev/1999-October/000589.html
  frank
This sentence is unique in this respect; it can safely
be attributed to my employer, Funcom Oslo AS.
E3D2BCADBEF8C82F A5891D2B6730EA1B PGPmail preferred, finger for key
There is no place like N59 50.558' E010 50.870'. (WGS84)
Resent-Date: 04 Nov 1999 21:17:34 +0100
Date: Wed, 27 Oct 1999 16:14:52 +0100
From: Derek Fawcus <derek@spider.com>
To: livid-dev@livid.on.openprojects.net
Message-ID: <19991027161452.S13273@spuggy.spider.com>
Mail-Followup-To: livid-dev@livid.on.openprojects.net
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
X-Mailer: Mutt 1.0pre4i
Subject: [Livid-dev] CSS Algorithms descriptions
Original-Sender: livid-dev-admin@livid.on.openprojects.net
Errors-To: livid-dev-admin@livid.on.openprojects.net
X-Mailman-Version: 1.0rc2
Precedence: bulk
List-Id:  <livid-dev.livid.on.openprojects.net>
X-BeenThere: livid-dev@livid.on.openprojects.net
Lines: 19
  For those who want a description of the algorithms,  I've actually started
writing one up.  At the moment there's not a lot there,  but I'll add to it
over time.  Then someone can do a 'cleanroom' implementation if they really
care to.
  It's at www.eyrie.demon.co.uk/derek/dvd/css/css-info.html
DF
-- 
Derek Fawcus                                                    derek@spider.com
Spider Software Ltd.                                        +44 (0) 131 475 7034
PGP/GnuPG Keys available
_______________________________________________
Livid-dev maillist  -  Livid-dev@livid.on.openprojects.net
http://livid.on.openprojects.net/mailman/listinfo/livid-dev
Resent-Date: 04 Nov 1999 21:17:34 +0100; also posted to the Cryptography
mail list 28 October 1999.
Date: Thu, 28 Oct 1999 12:57:37 +0200 (CEST)
From: Frank Andrew Stevenson <frank@funcom.com>
X-Sender: frank@odin
To: livid-dev@livid.on.openprojects.net
Message-ID: <Pine.SGI.3.96.991028123857.10753B-100000@odin>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Subject: [Livid-dev] Working PlayerKey cracker
Original-Sender: livid-dev-admin@livid.on.openprojects.net
Errors-To: livid-dev-admin@livid.on.openprojects.net
X-Mailman-Version: 1.0rc2
Precedence: bulk
List-Id:  <livid-dev.livid.on.openprojects.net>
X-BeenThere: livid-dev@livid.on.openprojects.net
Lines: 226
In response to feedback from yesterdays post I have now refined
my attack in the following ways:
The CSSdecrypt key can now be recoverd with only 5 bytes of
known output. Sometimes multiple keys will be found to a
single output, due to colissions in the mixing stage. But
this is not a problem when recovering KEKs ( Key encryption
Keys ), as all keys found will be equivalent / interchangable.
There has been some debate around the 'hash function'. I choose
to view it as a very simple encryption function. With 5 byte
input, 5 byte output and 5 byte key. When searching for a
player key, the input / output is known. The cipher can then be
attacked with a complexity of 2^8. Code for the key recovery
is given below. This cipher has many colissions, and some
input outup pairs have no keys, while others have multiple.
The latter is a concern when searching for Player keys, as
they have to be eliminted by checking agains other discs.
I have attached a program that works as follows:
hippopotamus:~/tmp> time ./keyrec 22 e1 67 83 72 0f c1 7a 96 98
Recovering Key
Possible mangling key: af c9 07 42 1f
  Possible Player key 51 67 67 c5 e0
  Possible Player key 69 d2 e3 92 ae
5.000u 0.010s 0:05.44 92.0%     0+0k 0+0io 87pf+0w
Here 2 equivalent player keys are recovered from the
input:  22 e1 67 83 72   - Disc key
output: 0f c1 7a 96 98   - intermediate key, common for all player keys
The process takes 5.5 seconds on a PPro200, somewhat slower
now that only 5 bytes are known in the keystream. 
If this works, as I hope it will, I will leave it as an exersice
to the reader to recover all player keys :-)
  frank
-------------- This is how to recover the 'hashing key' --------
static int unmangle ( unsigned char* in , unsigned char *out ) {
  unsigned char A[5];
  unsigned char B[5];
  unsigned char C[5];
  unsigned char k[6];
  int i,j;
  /* Recover mangling key */
  memcpy( A, in, 5 );
  memcpy( C, out, 5 );
  k[5] = 0;
  for( i=0 ; i < 256 ; i++ ) {
    k[4] = i;
    for( j = 4 ; j >= 2 ; j-- ) {
      B[j] = k[j] ^ CSStab1[ A[j] ] ^ A[j-1];
      B[j-1] = CSStab1[ B[j] ] ^ k[j] ^ C[j];
      k[j-1] = A[j-2] ^ CSStab1[ A[j-1] ] ^ B[j-1];
    }
    B[0] = CSStab1[ B[1] ] ^ k[1] ^ C[1];
    k[0] = B[0] ^ CSStab1[ A[0] ] ^ B[4];
    if( ( CSStab1[ B[0] ] ^ k[0]  )== C[0] ) {
      printf( "Possible mangling key: %02x %02x %02x %02x %02x\n", k[0],
k[1], k[2], k[3], k[4] );
    }
  }
  return 0;
}
----------- The following is the complete sourec for  ------
---------------- player key cracker ------------------------ 
begin 640 keyrec.c.Z
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
G[ZMI>,[VO0&Z!P5EG&XK?4X0[_TCX[?C,A^ULH/C$""1MKHEHBP*
`
end
This sentence is unique in this respect; it can safely
be attributed to my employer, Funcom Oslo AS.
E3D2BCADBEF8C82F A5891D2B6730EA1B PGPmail preferred, finger for key
There is no place like N59 50.558' E010 50.870'. (WGS84)
_______________________________________________
Livid-dev maillist  -  Livid-dev@livid.on.openprojects.net
http://livid.on.openprojects.net/mailman/listinfo/livid-dev
Resent-Date: 04 Nov 1999 21:17:34 +0100
From: "aaron nonymous" <csshacker666@hotmail.com>
To: livid-dev@livid.on.openprojects.net
Date: Thu, 28 Oct 1999 17:17:24 GMT
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="----=_NextPart_000_19be5891_8520a0e$280e07"
Subject: [Livid-dev] more code for reading, descrambling dvd
Original-Sender: livid-dev-admin@livid.on.openprojects.net
Errors-To: livid-dev-admin@livid.on.openprojects.net
X-Mailman-Version: 1.0rc2
Precedence: bulk
List-Id:  <livid-dev.livid.on.openprojects.net>
X-BeenThere: livid-dev@livid.on.openprojects.net
Lines: 298
try this out...
compile instructions in README file
______________________________________________________
Get Your Private, Free Email at http://www.hotmail.com
[] readdvd.tgz
Resent-Date: 04 Nov 1999 21:17:34 +0100
From: Mike Stump <mrs@windriver.com>
Received: (from mrs@localhost)
	by kankakee.wrs.com (8.9.1/8.9.0) id CAA19738;
	Sat, 30 Oct 1999 02:51:39 -0700 (PDT)
Date: Sat, 30 Oct 1999 02:51:39 -0700 (PDT)
Message-Id: <199910300951.CAA19738@kankakee.wrs.com>
To: livid-dev@livid.on.openprojects.net
Subject: [Livid-dev] Random numbers
Original-Sender: livid-dev-admin@livid.on.openprojects.net
Errors-To: livid-dev-admin@livid.on.openprojects.net
X-Mailman-Version: 1.0rc2
Precedence: bulk
List-Id:  <livid-dev.livid.on.openprojects.net>
X-BeenThere: livid-dev@livid.on.openprojects.net
Lines: 419
I found a bunch of random numbers lying about, they are good for seeding
poker programs and such:
$ cat *.keys | sort | uniq -c | sort -nr | cut -f1 | uniq -c:
     75       6
    160       5
     75       4
     61       3
     24       2
    673       1
$ cat *.keys | sort | uniq -c | sort -nr (skipping the last 673
uninteresting numbers):
      6	{0x7d5, {0x4c,0xbb,0xf5,0x5b,0x23}}
      6	{0x7b7, {0xab,0x36,0xe3,0xeb,0x76}}
      6	{0x7ad, {0xec,0xa0,0xcf,0xb3,0xff}}
      6	{0x78f, {0xbf,0x92,0xc3,0xb0,0xe2}}
      6	{0x762, {0x2c,0xb2,0xc1,0x09,0xee}}
      6	{0x73f, {0x26,0xec,0xc4,0xa7,0x4e}}
      6	{0x730, {0x2c,0xb2,0xc1,0x09,0xee}}
      6	{0x71c, {0x26,0xec,0xc4,0xa7,0x4e}}
      6	{0x717, {0xec,0xa0,0xcf,0xb3,0xff}}
      6	{0x6f4, {0xb1,0xb8,0xf9,0x38,0x03}}
      6	{0x6c2, {0xcf,0x1a,0xb2,0xf8,0x0a}}
      6	{0x6b8, {0x2c,0xb2,0xc1,0x09,0xee}}
      6	{0x6ae, {0x2c,0xb2,0xc1,0x09,0xee}}
      6	{0x68b, {0x45,0xed,0x28,0xeb,0xd3}}
      6	{0x67c, {0x4c,0xbb,0xf5,0x5b,0x23}}
      6	{0x672, {0xab,0x36,0xe3,0xeb,0x76}}
      6	{0x64a, {0x26,0xec,0xc4,0xa7,0x4e}}
      6	{0x622, {0xb1,0xb8,0xf9,0x38,0x03}}
      6	{0x61d, {0x45,0xed,0x28,0xeb,0xd3}}
      6	{0x618, {0xb1,0xb8,0xf9,0x38,0x03}}
      6	{0x604, {0xec,0xa0,0xcf,0xb3,0xff}}
      6	{0x5be, {0xec,0xa0,0xcf,0xb3,0xff}}
      6	{0x591, {0xbf,0x92,0xc3,0xb0,0xe2}}
      6	{0x58c, {0x2f,0x25,0x9e,0x96,0xdd}}
      6	{0x573, {0xcf,0x1a,0xb2,0xf8,0x0a}}
      6	{0x564, {0xcf,0x1a,0xb2,0xf8,0x0a}}
      6	{0x550, {0x26,0xec,0xc4,0xa7,0x4e}}
      6	{0x537, {0xec,0xa0,0xcf,0xb3,0xff}}
      6	{0x532, {0xbf,0x92,0xc3,0xb0,0xe2}}
      6	{0x519, {0xab,0x36,0xe3,0xeb,0x76}}
      6	{0x4c4, {0x4c,0xbb,0xf5,0x5b,0x23}}
      6	{0x4a6, {0x45,0xed,0x28,0xeb,0xd3}}
      6	{0x4a1, {0xcf,0x1a,0xb2,0xf8,0x0a}}
      6	{0x433, {0x51,0x67,0x67,0xc5,0xe0}}
      6	{0x410, {0x2f,0x25,0x9e,0x96,0xdd}}
      6	{0x40b, {0xbf,0x92,0xc3,0xb0,0xe2}}
      6	{0x3c0, {0x2c,0xb2,0xc1,0x09,0xee}}
      6	{0x3bb, {0x26,0xec,0xc4,0xa7,0x4e}}
      6	{0x38e, {0x2c,0xb2,0xc1,0x09,0xee}}
      6	{0x36b, {0x51,0x67,0x67,0xc5,0xe0}}
      6	{0x366, {0xab,0x36,0xe3,0xeb,0x76}}
      6	{0x361, {0x45,0xed,0x28,0xeb,0xd3}}
      6	{0x357, {0xb1,0xb8,0xf9,0x38,0x03}}
      6	{0x352, {0xbf,0x92,0xc3,0xb0,0xe2}}
      6	{0x339, {0xb1,0xb8,0xf9,0x38,0x03}}
      6	{0x320, {0xb1,0xb8,0xf9,0x38,0x03}}
      6	{0x2f3, {0x51,0x67,0x67,0xc5,0xe0}}
      6	{0x2bc, {0x2c,0xb2,0xc1,0x09,0xee}}
      6	{0x2a8, {0x2f,0x25,0x9e,0x96,0xdd}}
      6	{0x29e, {0xbf,0x92,0xc3,0xb0,0xe2}}
      6	{0x28f, {0x51,0x67,0x67,0xc5,0xe0}}
      6	{0x28a, {0xcf,0x1a,0xb2,0xf8,0x0a}}
      6	{0x27b, {0x51,0x67,0x67,0xc5,0xe0}}
      6	{0x258, {0x2f,0x25,0x9e,0x96,0xdd}}
      6	{0x221, {0xec,0xa0,0xcf,0xb3,0xff}}
      6	{0x1fe, {0x45,0xed,0x28,0xeb,0xd3}}
      6	{0x1f9, {0x51,0x67,0x67,0xc5,0xe0}}
      6	{0x18b, {0x2c,0xb2,0xc1,0x09,0xee}}
      6	{0x177, {0x51,0x67,0x67,0xc5,0xe0}}
      6	{0x154, {0x51,0x67,0x67,0xc5,0xe0}}
      6	{0x14a, {0x4c,0xbb,0xf5,0x5b,0x23}}
      6	{0x145, {0xcf,0x1a,0xb2,0xf8,0x0a}}
      6	{0x13b, {0xab,0x36,0xe3,0xeb,0x76}}
      6	{0x131, {0x4c,0xbb,0xf5,0x5b,0x23}}
      6	{0x11d, {0x2f,0x25,0x9e,0x96,0xdd}}
      6	{0x0f5, {0x2f,0x25,0x9e,0x96,0xdd}}
      6	{0x0e6, {0x4c,0xbb,0xf5,0x5b,0x23}}
      6	{0x0d7, {0x2c,0xb2,0xc1,0x09,0xee}}
      6	{0x096, {0xbf,0x92,0xc3,0xb0,0xe2}}
      6	{0x050, {0x45,0xed,0x28,0xeb,0xd3}}
      6	{0x04b, {0x51,0x67,0x67,0xc5,0xe0}}
      6	{0x037, {0xec,0xa0,0xcf,0xb3,0xff}}
      6	{0x023, {0xcf,0x1a,0xb2,0xf8,0x0a}}
      6	{0x00a, {0xb1,0xb8,0xf9,0x38,0x03}}
      6	{0x005, {0x2f,0x25,0x9e,0x96,0xdd}}
      5	{0x7f3, {0x51,0x67,0x67,0xc5,0xe0}}
      5	{0x7ee, {0x2f,0x25,0x9e,0x96,0xdd}}
      5	{0x7da, {0x26,0xec,0xc4,0xa7,0x4e}}
      5	{0x7c6, {0x85,0xf3,0x85,0xa0,0xe0}}
      5	{0x7c1, {0xcf,0x1a,0xb2,0xf8,0x0a}}
      5	{0x7b2, {0x3b,0x31,0x34,0x0d,0x91}}
      5	{0x7a3, {0xb8,0x5d,0xd8,0x53,0xbd}}
      5	{0x79e, {0x14,0x0c,0x9e,0xd0,0x09}}
      5	{0x799, {0xb1,0xb8,0xf9,0x38,0x03}}
      5	{0x794, {0x12,0x11,0xca,0x04,0x3b}}
      5	{0x780, {0x7b,0x1e,0x5e,0x2b,0x57}}
      5	{0x77b, {0x2c,0xb2,0xc1,0x09,0xee}}
      5	{0x767, {0x12,0x11,0xca,0x04,0x3b}}
      5	{0x758, {0x63,0xdb,0x4c,0x5b,0x4a}}
      5	{0x749, {0x7b,0x1e,0x5e,0x2b,0x57}}
      5	{0x73a, {0xb1,0xb8,0xf9,0x38,0x03}}
      5	{0x70d, {0x63,0xdb,0x4c,0x5b,0x4a}}
      5	{0x703, {0x3b,0x31,0x34,0x0d,0x91}}
      5	{0x6fe, {0x85,0xf3,0x85,0xa0,0xe0}}
      5	{0x6ef, {0x48,0xb7,0x6c,0xce,0x69}}
      5	{0x6ea, {0xcf,0x1a,0xb2,0xf8,0x0a}}
      5	{0x6d6, {0xb8,0x5d,0xd8,0x53,0xbd}}
      5	{0x6c7, {0x85,0xf3,0x85,0xa0,0xe0}}
      5	{0x6a9, {0x85,0xf3,0x85,0xa0,0xe0}}
      5	{0x6a4, {0x26,0xec,0xc4,0xa7,0x4e}}
      5	{0x69a, {0xab,0x36,0xe3,0xeb,0x76}}
      5	{0x690, {0x2f,0x25,0x9e,0x96,0xdd}}
      5	{0x686, {0x48,0xb7,0x6c,0xce,0x69}}
      5	{0x66d, {0x26,0xec,0xc4,0xa7,0x4e}}
      5	{0x668, {0xfc,0x95,0xa9,0x87,0x35}}
      5	{0x65e, {0xec,0xa0,0xcf,0xb3,0xff}}
      5	{0x659, {0xfc,0x95,0xa9,0x87,0x35}}
      5	{0x654, {0xab,0x36,0xe3,0xeb,0x76}}
      5	{0x64f, {0x39,0x3d,0xf1,0xf1,0xbd}}
      5	{0x645, {0x14,0x0c,0x9e,0xd0,0x09}}
      5	{0x636, {0x45,0xed,0x28,0xeb,0xd3}}
      5	{0x627, {0x26,0xec,0xc4,0xa7,0x4e}}
      5	{0x613, {0x39,0x3d,0xf1,0xf1,0xbd}}
      5	{0x60e, {0x7b,0x1e,0x5e,0x2b,0x57}}
      5	{0x609, {0xb1,0xb8,0xf9,0x38,0x03}}
      5	{0x5ff, {0x48,0xb7,0x6c,0xce,0x69}}
      5	{0x5e6, {0x48,0xb7,0x6c,0xce,0x69}}
      5	{0x5d7, {0x14,0x0c,0x9e,0xd0,0x09}}
      5	{0x5d2, {0x85,0xf3,0x85,0xa0,0xe0}}
      5	{0x5c3, {0xfc,0x95,0xa9,0x87,0x35}}
      5	{0x5b4, {0x1a,0xa4,0x33,0x21,0xa6}}
      5	{0x5aa, {0x4c,0xbb,0xf5,0x5b,0x23}}
      5	{0x5a0, {0x3b,0x31,0x34,0x0d,0x91}}
      5	{0x596, {0xcf,0x1a,0xb2,0xf8,0x0a}}
      5	{0x587, {0x14,0x0c,0x9e,0xd0,0x09}}
      5	{0x582, {0x48,0xb7,0x6c,0xce,0x69}}
      5	{0x57d, {0xb1,0xb8,0xf9,0x38,0x03}}
      5	{0x578, {0x4c,0xbb,0xf5,0x5b,0x23}}
      5	{0x56e, {0xb8,0x5d,0xd8,0x53,0xbd}}
      5	{0x569, {0x12,0x11,0xca,0x04,0x3b}}
      5	{0x541, {0xab,0x36,0xe3,0xeb,0x76}}
      5	{0x52d, {0xec,0xa0,0xcf,0xb3,0xff}}
      5	{0x528, {0x45,0xed,0x28,0xeb,0xd3}}
      5	{0x523, {0x39,0x3d,0xf1,0xf1,0xbd}}
      5	{0x514, {0xec,0xa0,0xcf,0xb3,0xff}}
      5	{0x50f, {0x2f,0x25,0x9e,0x96,0xdd}}
      5	{0x505, {0xbf,0x92,0xc3,0xb0,0xe2}}
      5	{0x4fb, {0xcf,0x1a,0xb2,0xf8,0x0a}}
      5	{0x4f6, {0xfc,0x95,0xa9,0x87,0x35}}
      5	{0x4e7, {0x48,0xb7,0x6c,0xce,0x69}}
      5	{0x4e2, {0x3b,0x31,0x34,0x0d,0x91}}
      5	{0x4d8, {0x7b,0x1e,0x5e,0x2b,0x57}}
      5	{0x4d3, {0xb8,0x5d,0xd8,0x53,0xbd}}
      5	{0x4c9, {0x01,0xaf,0xe3,0x12,0x80}}
      5	{0x4ba, {0x3b,0x31,0x34,0x0d,0x91}}
      5	{0x4b0, {0x39,0x3d,0xf1,0xf1,0xbd}}
      5	{0x49c, {0x48,0xb7,0x6c,0xce,0x69}}
      5	{0x497, {0x01,0xaf,0xe3,0x12,0x80}}
      5	{0x488, {0x85,0xf3,0x85,0xa0,0xe0}}
      5	{0x479, {0x2f,0x25,0x9e,0x96,0xdd}}
      5	{0x46f, {0x45,0xed,0x28,0xeb,0xd3}}
      5	{0x465, {0x85,0xf3,0x85,0xa0,0xe0}}
      5	{0x45b, {0x3b,0x31,0x34,0x0d,0x91}}
      5	{0x456, {0x85,0xf3,0x85,0xa0,0xe0}}
      5	{0x451, {0x1a,0xa4,0x33,0x21,0xa6}}
      5	{0x44c, {0xbf,0x92,0xc3,0xb0,0xe2}}
      5	{0x43d, {0x2c,0xb2,0xc1,0x09,0xee}}
      5	{0x438, {0xbf,0x92,0xc3,0xb0,0xe2}}
      5	{0x42e, {0x01,0xaf,0xe3,0x12,0x80}}
      5	{0x41f, {0xb8,0x5d,0xd8,0x53,0xbd}}
      5	{0x41a, {0x3b,0x31,0x34,0x0d,0x91}}
      5	{0x415, {0xab,0x36,0xe3,0xeb,0x76}}
      5	{0x401, {0xbf,0x92,0xc3,0xb0,0xe2}}
      5	{0x3fc, {0x3b,0x31,0x34,0x0d,0x91}}
      5	{0x3e8, {0xab,0x36,0xe3,0xeb,0x76}}
      5	{0x3e3, {0x3b,0x31,0x34,0x0d,0x91}}
      5	{0x3de, {0xb8,0x5d,0xd8,0x53,0xbd}}
      5	{0x3d9, {0x12,0x11,0xca,0x04,0x3b}}
      5	{0x3d4, {0x26,0xec,0xc4,0xa7,0x4e}}
      5	{0x3c5, {0x12,0x11,0xca,0x04,0x3b}}
      5	{0x3a7, {0xbf,0x92,0xc3,0xb0,0xe2}}
      5	{0x389, {0x85,0xf3,0x85,0xa0,0xe0}}
      5	{0x384, {0xb8,0x5d,0xd8,0x53,0xbd}}
      5	{0x375, {0x4c,0xbb,0xf5,0x5b,0x23}}
      5	{0x35c, {0x51,0x67,0x67,0xc5,0xe0}}
      5	{0x343, {0x48,0xb7,0x6c,0xce,0x69}}
      5	{0x334, {0x48,0xb7,0x6c,0xce,0x69}}
      5	{0x311, {0x3b,0x31,0x34,0x0d,0x91}}
      5	{0x30c, {0xec,0xa0,0xcf,0xb3,0xff}}
      5	{0x307, {0xab,0x36,0xe3,0xeb,0x76}}
      5	{0x2e4, {0x01,0xaf,0xe3,0x12,0x80}}
      5	{0x2da, {0x39,0x3d,0xf1,0xf1,0xbd}}
      5	{0x2d5, {0xfc,0x95,0xa9,0x87,0x35}}
      5	{0x2d0, {0x2f,0x25,0x9e,0x96,0xdd}}
      5	{0x2cb, {0xb8,0x5d,0xd8,0x53,0xbd}}
      5	{0x2c1, {0x01,0xaf,0xe3,0x12,0x80}}
      5	{0x2ad, {0xfc,0x95,0xa9,0x87,0x35}}
      5	{0x294, {0x39,0x3d,0xf1,0xf1,0xbd}}
      5	{0x285, {0x1a,0xa4,0x33,0x21,0xa6}}
      5	{0x276, {0x85,0xf3,0x85,0xa0,0xe0}}
      5	{0x267, {0x48,0xb7,0x6c,0xce,0x69}}
      5	{0x262, {0x45,0xed,0x28,0xeb,0xd3}}
      5	{0x25d, {0x12,0x11,0xca,0x04,0x3b}}
      5	{0x253, {0x39,0x3d,0xf1,0xf1,0xbd}}
      5	{0x244, {0x85,0xf3,0x85,0xa0,0xe0}}
      5	{0x23f, {0x3b,0x31,0x34,0x0d,0x91}}
      5	{0x23a, {0xb8,0x5d,0xd8,0x53,0xbd}}
      5	{0x235, {0x51,0x67,0x67,0xc5,0xe0}}
      5	{0x22b, {0xb8,0x5d,0xd8,0x53,0xbd}}
      5	{0x226, {0x51,0x67,0x67,0xc5,0xe0}}
      5	{0x212, {0xbf,0x92,0xc3,0xb0,0xe2}}
      5	{0x1f4, {0x4c,0xbb,0xf5,0x5b,0x23}}
      5	{0x1ef, {0x26,0xec,0xc4,0xa7,0x4e}}
      5	{0x1e0, {0xec,0xa0,0xcf,0xb3,0xff}}
      5	{0x1db, {0x4c,0xbb,0xf5,0x5b,0x23}}
      5	{0x1c7, {0x3b,0x31,0x34,0x0d,0x91}}
      5	{0x1b8, {0xcf,0x1a,0xb2,0xf8,0x0a}}
      5	{0x1a9, {0xcf,0x1a,0xb2,0xf8,0x0a}}
      5	{0x19f, {0x2f,0x25,0x9e,0x96,0xdd}}
      5	{0x17c, {0x14,0x0c,0x9e,0xd0,0x09}}
      5	{0x16d, {0x48,0xb7,0x6c,0xce,0x69}}
      5	{0x140, {0x85,0xf3,0x85,0xa0,0xe0}}
      5	{0x122, {0xb1,0xb8,0xf9,0x38,0x03}}
      5	{0x118, {0x4c,0xbb,0xf5,0x5b,0x23}}
      5	{0x10e, {0xb8,0x5d,0xd8,0x53,0xbd}}
      5	{0x0ff, {0xfc,0x95,0xa9,0x87,0x35}}
      5	{0x0fa, {0xec,0xa0,0xcf,0xb3,0xff}}
      5	{0x0f0, {0x45,0xed,0x28,0xeb,0xd3}}
      5	{0x0e1, {0x26,0xec,0xc4,0xa7,0x4e}}
      5	{0x0cd, {0xb8,0x5d,0xd8,0x53,0xbd}}
      5	{0x0c8, {0x14,0x0c,0x9e,0xd0,0x09}}
      5	{0x0be, {0xb1,0xb8,0xf9,0x38,0x03}}
      5	{0x0b9, {0xab,0x36,0xe3,0xeb,0x76}}
      5	{0x0a5, {0x45,0xed,0x28,0xeb,0xd3}}
      5	{0x087, {0xfc,0x95,0xa9,0x87,0x35}}
      5	{0x07d, {0x26,0xec,0xc4,0xa7,0x4e}}
      5	{0x073, {0x63,0xdb,0x4c,0x5b,0x4a}}
      5	{0x069, {0x3b,0x31,0x34,0x0d,0x91}}
      5	{0x064, {0x85,0xf3,0x85,0xa0,0xe0}}
      5	{0x05a, {0x48,0xb7,0x6c,0xce,0x69}}
      5	{0x032, {0x14,0x0c,0x9e,0xd0,0x09}}
      5	{0x02d, {0xab,0x36,0xe3,0xeb,0x76}}
      5	{0x028, {0xb8,0x5d,0xd8,0x53,0xbd}}
      5	{0x01e, {0x2c,0xb2,0xc1,0x09,0xee}}
      5	{0x014, {0x4c,0xbb,0xf5,0x5b,0x23}}
      4	{0x7f8, {0x7b,0x1e,0x5e,0x2b,0x57}}
      4	{0x7d0, {0xab,0x1e,0xe7,0x7b,0x72}}
      4	{0x7a8, {0xfc,0x95,0xa9,0x87,0x35}}
      4	{0x776, {0x12,0x11,0xca,0x04,0x3b}}
      4	{0x76c, {0x7b,0x1e,0x5e,0x2b,0x57}}
      4	{0x74e, {0x63,0xdb,0x4c,0x5b,0x4a}}
      4	{0x744, {0x12,0x11,0xca,0x04,0x3b}}
      4	{0x735, {0x7b,0x1e,0x5e,0x2b,0x57}}
      4	{0x72b, {0x7b,0x1e,0x5e,0x2b,0x57}}
      4	{0x726, {0x63,0xdb,0x4c,0x5b,0x4a}}
      4	{0x721, {0x12,0x11,0xca,0x04,0x3b}}
      4	{0x708, {0x7b,0x1e,0x5e,0x2b,0x57}}
      4	{0x6e5, {0x12,0x11,0xca,0x04,0x3b}}
      4	{0x6e0, {0x63,0xdb,0x4c,0x5b,0x4a}}
      4	{0x6db, {0xfc,0x95,0xa9,0x87,0x35}}
      4	{0x695, {0xfc,0x95,0xa9,0x87,0x35}}
      4	{0x681, {0x63,0xdb,0x4c,0x5b,0x4a}}
      4	{0x663, {0x63,0xdb,0x4c,0x5b,0x4a}}
      4	{0x63b, {0x01,0xaf,0xe3,0x12,0x80}}
      4	{0x62c, {0xab,0x1e,0xe7,0x7b,0x72}}
      4	{0x5fa, {0x1a,0xa4,0x33,0x21,0xa6}}
      4	{0x5f5, {0x7b,0x1e,0x5e,0x2b,0x57}}
      4	{0x5e1, {0xab,0x1e,0xe7,0x7b,0x72}}
      4	{0x5dc, {0x14,0x71,0x35,0xba,0xe2}}
      4	{0x5b9, {0x01,0xaf,0xe3,0x12,0x80}}
      4	{0x55f, {0x63,0xdb,0x4c,0x5b,0x4a}}
      4	{0x555, {0x39,0x3d,0xf1,0xf1,0xbd}}
      4	{0x546, {0x1a,0xa4,0x33,0x21,0xa6}}
      4	{0x53c, {0x7b,0x1e,0x5e,0x2b,0x57}}
      4	{0x51e, {0x01,0xaf,0xe3,0x12,0x80}}
      4	{0x4f1, {0x14,0x71,0x35,0xba,0xe2}}
      4	{0x4ab, {0xab,0x1e,0xe7,0x7b,0x72}}
      4	{0x492, {0x14,0x0c,0x9e,0xd0,0x09}}
      4	{0x48d, {0x1a,0xa4,0x33,0x21,0xa6}}
      4	{0x47e, {0x14,0x0c,0x9e,0xd0,0x09}}
      4	{0x46a, {0x12,0x11,0xca,0x04,0x3b}}
      4	{0x429, {0xab,0x1e,0xe7,0x7b,0x72}}
      4	{0x424, {0x39,0x3d,0xf1,0xf1,0xbd}}
      4	{0x406, {0x53,0x94,0xe1,0x75,0xbf}}
      4	{0x3f7, {0x63,0xdb,0x4c,0x5b,0x4a}}
      4	{0x3cf, {0x63,0xdb,0x4c,0x5b,0x4a}}
      4	{0x3b6, {0x01,0xaf,0xe3,0x12,0x80}}
      4	{0x3b1, {0x14,0x0c,0x9e,0xd0,0x09}}
      4	{0x39d, {0x53,0x94,0xe1,0x75,0xbf}}
      4	{0x398, {0x01,0xaf,0xe3,0x12,0x80}}
      4	{0x37a, {0x7b,0x1e,0x5e,0x2b,0x57}}
      4	{0x370, {0x14,0x0c,0x9e,0xd0,0x09}}
      4	{0x34d, {0x39,0x3d,0xf1,0xf1,0xbd}}
      4	{0x33e, {0x14,0x71,0x35,0xba,0xe2}}
      4	{0x32a, {0x53,0x94,0xe1,0x75,0xbf}}
      4	{0x316, {0x63,0xdb,0x4c,0x5b,0x4a}}
      4	{0x2f8, {0x53,0x94,0xe1,0x75,0xbf}}
      4	{0x2e9, {0x53,0x94,0xe1,0x75,0xbf}}
      4	{0x2c6, {0x1a,0xa4,0x33,0x21,0xa6}}
      4	{0x2b2, {0x53,0x94,0xe1,0x75,0xbf}}
      4	{0x2a3, {0x39,0x3d,0xf1,0xf1,0xbd}}
      4	{0x24e, {0x14,0x0c,0x9e,0xd0,0x09}}
      4	{0x217, {0x14,0x0c,0x9e,0xd0,0x09}}
      4	{0x1ea, {0xab,0x1e,0xe7,0x7b,0x72}}
      4	{0x1d1, {0x53,0x94,0xe1,0x75,0xbf}}
      4	{0x1bd, {0x1a,0xa4,0x33,0x21,0xa6}}
      4	{0x1ae, {0x12,0x11,0xca,0x04,0x3b}}
      4	{0x1a4, {0x01,0xaf,0xe3,0x12,0x80}}
      4	{0x195, {0x14,0x71,0x35,0xba,0xe2}}
      4	{0x186, {0x1a,0xa4,0x33,0x21,0xa6}}
      4	{0x136, {0x1a,0xa4,0x33,0x21,0xa6}}
      4	{0x12c, {0x1a,0xa4,0x33,0x21,0xa6}}
      4	{0x109, {0xfc,0x95,0xa9,0x87,0x35}}
      4	{0x0af, {0xfc,0x95,0xa9,0x87,0x35}}
      4	{0x09b, {0x7b,0x1e,0x5e,0x2b,0x57}}
      4	{0x08c, {0x39,0x3d,0xf1,0xf1,0xbd}}
      4	{0x05f, {0x01,0xaf,0xe3,0x12,0x80}}
      4	{0x046, {0x1a,0xa4,0x33,0x21,0xa6}}
      4	{0x041, {0x12,0x11,0xca,0x04,0x3b}}
      4	{0x019, {0x53,0x94,0xe1,0x75,0xbf}}
      3	{0x7e9, {0x35,0x5b,0xc1,0x31,0x0f}}
      3	{0x7df, {0x53,0x94,0xe1,0x75,0xbf}}
      3	{0x7cb, {0x14,0x71,0x35,0xba,0xe2}}
      3	{0x771, {0x35,0x5b,0xc1,0x31,0x0f}}
      3	{0x75d, {0xab,0x1e,0xe7,0x7b,0x72}}
      3	{0x6f9, {0xab,0x1e,0xe7,0x7b,0x72}}
      3	{0x6d1, {0xab,0x1e,0xe7,0x7b,0x72}}
      3	{0x6bd, {0xab,0x1e,0xe7,0x7b,0x72}}
      3	{0x6b3, {0x14,0x71,0x35,0xba,0xe2}}
      3	{0x5f0, {0x35,0x5b,0xc1,0x31,0x0f}}
      3	{0x5c8, {0x14,0x71,0x35,0xba,0xe2}}
      3	{0x5a5, {0x35,0x5b,0xc1,0x31,0x0f}}
      3	{0x59b, {0x35,0x5b,0xc1,0x31,0x0f}}
      3	{0x55a, {0x14,0x71,0x35,0xba,0xe2}}
      3	{0x54b, {0x33,0x2f,0x49,0x6c,0xe0}}
      3	{0x50a, {0x33,0x2f,0x49,0x6c,0xe0}}
      3	{0x500, {0x33,0x2f,0x49,0x6c,0xe0}}
      3	{0x4ec, {0x33,0x2f,0x49,0x6c,0xe0}}
      3	{0x4ce, {0x35,0x5b,0xc1,0x31,0x0f}}
      3	{0x4bf, {0x57,0x2c,0x8b,0x31,0xae}}
      3	{0x4b5, {0xab,0x1e,0xe7,0x7b,0x72}}
      3	{0x483, {0x36,0x67,0xb2,0xe3,0x85}}
      3	{0x474, {0x35,0x5b,0xc1,0x31,0x0f}}
      3	{0x447, {0x36,0x67,0xb2,0xe3,0x85}}
      3	{0x442, {0x57,0x2c,0x8b,0x31,0xae}}
      3	{0x3ed, {0x53,0x94,0xe1,0x75,0xbf}}
      3	{0x3ca, {0x36,0x67,0xb2,0xe3,0x85}}
      3	{0x3ac, {0x14,0x71,0x35,0xba,0xe2}}
      3	{0x3a2, {0x36,0x67,0xb2,0xe3,0x85}}
      3	{0x393, {0x57,0x2c,0x8b,0x31,0xae}}
      3	{0x37f, {0x14,0x71,0x35,0xba,0xe2}}
      3	{0x32f, {0x4b,0x65,0x0d,0xc1,0xee}}
      3	{0x325, {0x4b,0x65,0x0d,0xc1,0xee}}
      3	{0x2fd, {0x33,0x2f,0x49,0x6c,0xe0}}
      3	{0x2df, {0x36,0x67,0xb2,0xe3,0x85}}
      3	{0x2b7, {0x57,0x2c,0x8b,0x31,0xae}}
      3	{0x299, {0x36,0x67,0xb2,0xe3,0x85}}
      3	{0x271, {0x57,0x2c,0x8b,0x31,0xae}}
      3	{0x26c, {0x53,0x94,0xe1,0x75,0xbf}}
      3	{0x20d, {0x57,0x2c,0x8b,0x31,0xae}}
      3	{0x208, {0x33,0x2f,0x49,0x6c,0xe0}}
      3	{0x203, {0x4b,0x65,0x0d,0xc1,0xee}}
      3	{0x1e5, {0x33,0x2f,0x49,0x6c,0xe0}}
      3	{0x1d6, {0x4b,0x65,0x0d,0xc1,0xee}}
      3	{0x1cc, {0x35,0x5b,0xc1,0x31,0x0f}}
      3	{0x1c2, {0x14,0x71,0x35,0xba,0xe2}}
      3	{0x1b3, {0x36,0x67,0xb2,0xe3,0x85}}
      3	{0x19a, {0x33,0x2f,0x49,0x6c,0xe0}}
      3	{0x181, {0x33,0x2f,0x49,0x6c,0xe0}}
      3	{0x172, {0x4b,0x65,0x0d,0xc1,0xee}}
      3	{0x168, {0x57,0x2c,0x8b,0x31,0xae}}
      3	{0x163, {0x14,0x71,0x35,0xba,0xe2}}
      3	{0x159, {0x53,0x94,0xe1,0x75,0xbf}}
      3	{0x104, {0x53,0x94,0xe1,0x75,0xbf}}
      3	{0x0eb, {0x33,0x2f,0x49,0x6c,0xe0}}
      3	{0x0c3, {0x33,0x2f,0x49,0x6c,0xe0}}
      3	{0x0aa, {0xab,0x1e,0xe7,0x7b,0x72}}
      3	{0x0a0, {0x33,0x2f,0x49,0x6c,0xe0}}
      3	{0x082, {0xab,0x1e,0xe7,0x7b,0x72}}
      3	{0x078, {0x14,0x71,0x35,0xba,0xe2}}
      3	{0x03c, {0x57,0x2c,0x8b,0x31,0xae}}
      2	{0x7e4, {0x36,0x67,0xb2,0xe3,0x85}}
      2	{0x78a, {0x4b,0x65,0x0d,0xc1,0xee}}
      2	{0x785, {0x57,0x2c,0x8b,0x31,0xae}}
      2	{0x753, {0x35,0x5b,0xc1,0x31,0x0f}}
      2	{0x712, {0x35,0x5b,0xc1,0x31,0x0f}}
      2	{0x631, {0x4b,0x65,0x0d,0xc1,0xee}}
      2	{0x5cd, {0x4b,0x65,0x0d,0xc1,0xee}}
      2	{0x5af, {0x4b,0x65,0x0d,0xc1,0xee}}
      2	{0x4dd, {0x57,0x2c,0x8b,0x31,0xae}}
      2	{0x3f2, {0x36,0x67,0xb2,0xe3,0x85}}
      2	{0x348, {0x4b,0x65,0x0d,0xc1,0xee}}
      2	{0x31b, {0x36,0x67,0xb2,0xe3,0x85}}
      2	{0x302, {0x35,0x5b,0xc1,0x31,0x0f}}
      2	{0x2ee, {0x35,0x5b,0xc1,0x31,0x0f}}
      2	{0x280, {0x57,0x2c,0x8b,0x31,0xae}}
      2	{0x21c, {0x57,0x2c,0x8b,0x31,0xae}}
      2	{0x190, {0x4b,0x65,0x0d,0xc1,0xee}}
      2	{0x15e, {0x36,0x67,0xb2,0xe3,0x85}}
      2	{0x14f, {0x36,0x67,0xb2,0xe3,0x85}}
      2	{0x113, {0x57,0x2c,0x8b,0x31,0xae}}
      2	{0x0d2, {0x4b,0x65,0x0d,0xc1,0xee}}
      2	{0x091, {0x4b,0x65,0x0d,0xc1,0xee}}
      2	{0x06e, {0x36,0x67,0xb2,0xe3,0x85}}
      2	{0x055, {0x35,0x5b,0xc1,0x31,0x0f}}
They take around 30 minutes to generate.
_______________________________________________
Livid-dev maillist  -  Livid-dev@livid.on.openprojects.net
http://livid.on.openprojects.net/mailman/listinfo/livid-dev
Resent-Date: 04 Nov 1999 21:17:34 +0100
Date: Sat, 30 Oct 1999 04:56:47 -0400
From: Greg Maxwell <greg@linuxpower.cx>
X-Mailer: Mozilla 4.7 [en] (X11; I; Linux 2.3.25 i686)
X-Accept-Language: en
MIME-Version: 1.0
To: livid-dev@livid.on.openprojects.net
Content-Type: multipart/mixed;
 boundary="------------3E736036ED24D6BDAFE53E2F"
Subject: [Livid-dev] 'BETTER' player key cracker.
Original-Sender: livid-dev-admin@livid.on.openprojects.net
Errors-To: livid-dev-admin@livid.on.openprojects.net
X-Mailman-Version: 1.0rc2
Precedence: bulk
List-Id:  <livid-dev.livid.on.openprojects.net>
X-BeenThere: livid-dev@livid.on.openprojects.net
Lines: 450
I made a quick and dirty mod to the CSS 'Working Playerkey cracker'.
My new version reads the disk-key file output by tstdvd.
To use it you'll need to edit css-descramble.c:
Goto where it says if (memcmp(test, pretkey, 5) == 0) {
and add:
	fprintf(stderr, "Using Key %d\nUsing pretkey:\t", i+1);
	for (ii = 0; ii < 5; ++ii) {
	  fprintf(stderr,"%02X ", pretkey[ii]);
	}
	fprintf(stderr,"\n");
This will give you what your current player key decrypted the disk key
to.
With this knoweldge, and a complete copy of the disk key, we can now
kick-ass and take names.
Example:
[greg@limelight css-auth]$ ./k 7f 71 cc 7a 62 585
static struct playkey pkey1 = {0x249, {0xb7, 0x3f, 0xd4, 0xaa, 0x14}};
Where "7f 71 cc 7a 62" is the decoded disk-key portion, and 585 is the
disk-key position we are trying to crack in ascii. It outputs a css-cat
compatible line of C.
Now you need to do this for all offests on a few disks and coorlate the
output.
This is just a quick hack on Frank Andrew Stevenson's code.
Mike Stump <mrs@windriver.com> is working on a much better version.
I just wanted to get this out./*
* keyrecnew.c
*
* Copyright 1999 Frank Andrew Stevenson <frank@funcom.com>
* Copyright 1999 Gregory Maxwell <greg@linuxpower.cx>
*
* Released under version 2 of the GPL. 
*
* CSS 'Working Playerkey cracker'
* Orignally written by: Frank Andrew Stevenson <frank@funcom.com>
*
* Modified poorly by Greg Maxwell <greg@linuxpower.cx>
* Hacked it to take an offset and read a disk file.
*
*
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
                     
int o;
static unsigned int CSStab0[11]={5,0,1,2,3,4,0,1,2,3,4};
static unsigned char CSStab1[256]=
{
	0x33,0x73,0x3b,0x26,0x63,0x23,0x6b,0x76,0x3e,0x7e,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 unsigned char CSStab2[256]=
{
	0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x08,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 unsigned char CSStab3[512]=
{
	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,
	0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff,0x00,0x24,0x49,0x6d,0x92,0xb6,0xdb,0xff
};
static unsigned char CSStab4[256]=
{
	0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,0x10,0x90,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
};
static unsigned char CSStab5[256]=
{
	0xff,0x7f,0xbf,0x3f,0xdf,0x5f,0x9f,0x1f,0xef,0x6f,0xaf,0x2f,0xcf,0x4f,0x8f,0x0f,
	0xf7,0x77,0xb7,0x37,0xd7,0x57,0x97,0x17,0xe7,0x67,0xa7,0x27,0xc7,0x47,0x87,0x07,
	0xfb,0x7b,0xbb,0x3b,0xdb,0x5b,0x9b,0x1b,0xeb,0x6b,0xab,0x2b,0xcb,0x4b,0x8b,0x0b,
	0xf3,0x73,0xb3,0x33,0xd3,0x53,0x93,0x13,0xe3,0x63,0xa3,0x23,0xc3,0x43,0x83,0x03,
	0xfd,0x7d,0xbd,0x3d,0xdd,0x5d,0x9d,0x1d,0xed,0x6d,0xad,0x2d,0xcd,0x4d,0x8d,0x0d,
	0xf5,0x75,0xb5,0x35,0xd5,0x55,0x95,0x15,0xe5,0x65,0xa5,0x25,0xc5,0x45,0x85,0x05,
	0xf9,0x79,0xb9,0x39,0xd9,0x59,0x99,0x19,0xe9,0x69,0xa9,0x29,0xc9,0x49,0x89,0x09,
	0xf1,0x71,0xb1,0x31,0xd1,0x51,0x91,0x11,0xe1,0x61,0xa1,0x21,0xc1,0x41,0x81,0x01,
	0xfe,0x7e,0xbe,0x3e,0xde,0x5e,0x9e,0x1e,0xee,0x6e,0xae,0x2e,0xce,0x4e,0x8e,0x0e,
	0xf6,0x76,0xb6,0x36,0xd6,0x56,0x96,0x16,0xe6,0x66,0xa6,0x26,0xc6,0x46,0x86,0x06,
	0xfa,0x7a,0xba,0x3a,0xda,0x5a,0x9a,0x1a,0xea,0x6a,0xaa,0x2a,0xca,0x4a,0x8a,0x0a,
	0xf2,0x72,0xb2,0x32,0xd2,0x52,0x92,0x12,0xe2,0x62,0xa2,0x22,0xc2,0x42,0x82,0x02,
	0xfc,0x7c,0xbc,0x3c,0xdc,0x5c,0x9c,0x1c,0xec,0x6c,0xac,0x2c,0xcc,0x4c,0x8c,0x0c,
	0xf4,0x74,0xb4,0x34,0xd4,0x54,0x94,0x14,0xe4,0x64,0xa4,0x24,0xc4,0x44,0x84,0x04,
	0xf8,0x78,0xb8,0x38,0xd8,0x58,0x98,0x18,0xe8,0x68,0xa8,0x28,0xc8,0x48,0x88,0x08,
	0xf0,0x70,0xb0,0x30,0xd0,0x50,0x90,0x10,0xe0,0x60,0xa0,0x20,0xc0,0x40,0x80,0x00
};
static void CSSdescramble( unsigned char *key )
{
	unsigned int t1,t2,t3,t4,t5,t6;
	unsigned int i;
	t1= key[0] ^ 0x100;
	t2= key[1];
	t3=(*((unsigned int *)(key+2)));
	t4=t3&7;
	t3=t3*2+8-t4;
	t5=0;
        printf( "Keystate at start: %03x %02x %08x\n", t1, t2, t3 );
	printf( "output: " );
	for( i=0 ; i < 10 ; i++ )
	{
		t4=CSStab2[t2]^CSStab3[t1];
		t2=t1>>1;
		t1=((t1&1)<<8)^t4;
		t4=CSStab5[t4];
		t6=(((((((t3>>3)^t3)>>1)^t3)>>8)^t3)>>5)&0xff;
		t3=(t3<<8)|t6;
		t6=CSStab4[t6];
		t5+=t6+t4;
		printf( "%02x ",t5&0xff);
		t5>>=8;
	}
	printf( "\n" );
}
/********************************************************
*
*  The Divide and conquer attack
*
*  Deviced and written by Frank A. Stevenson
*
*  ( frank@funcom.com )
*  Released on a GPL license
*
********************************************************/
static int RunLfsr2Backwards( int vStartState, int nSteps ) {
  unsigned int t1,t3,t6;
  int i,j;
  t3 = vStartState;
  for( i = 0 ; i < nSteps ; i++ ) {
    t1 = t3 & 0xff;
    t3 = ( t3 >> 8 );
    /* easy to code, and fast enough bruteforce search for byte shifted in */
    for( j=0 ; j < 256 ; j++ ) {
      t3 = (t3 & 0x1ffff) | ( j << 17 );
      t6=(((((((t3>>3)^t3)>>1)^t3)>>8)^t3)>>5)&0xff;
      if( t6 == t1 ) break;  
    }
  }
  return t3;
}
static unsigned char invtab4[256];
static void CSScracker( unsigned char* pStream, unsigned char *pTableA, unsigned char *pTableB ) {
  unsigned int t1,t2,t3,t4,t5,t6;
  int ii=0;
  unsigned int nTry;
  unsigned int vCandidate;
  int i;
  /* Test that pTableA is a permutation */
  memset( invtab4, 0, 256 );
  for( i = 0 ; i < 256 ; i++ ) invtab4[ pTableA[i] ] = 1; 
  for( i = 0 ; i < 256 ; i++ ) if( invtab4[ i ] != 1 ) {
    printf( "Permutation error\n" );
    exit( -1 );
  }
  /* initialize the inverse of table4 */
  for( i = 0 ; i < 256 ; i++ ) invtab4[ pTableA[i] ] = i;
  for( nTry = 0 ; nTry < 65536 ; nTry++ ) {
    t1 = nTry >> 8 | 0x100;
    t2 = nTry & 0xff;
    t3 = 0;
    t5 = 0;
    /* iterate cipher 3 times to reconstruct LFSR2 16/17 bits */
    for( i = 0 ; i < 3 ; i++ ) {
      /* advance LFSR1 normaly */
      t4=CSStab2[t2]^CSStab3[t1];
      t2=t1>>1;
      t1=((t1&1)<<8)^t4;
      t4=pTableB[t4];
      /* deduce t6 & t5 */
      t6 = pStream[ i ];    
      if( t5 ) t6 = ( t6 + 0xff )&0x0ff;
      if( t6 < t4 ) t6 += 0x100;
      t6 -= t4;
      t5 += t6 + t4;
      t6 = invtab4[ t6 ];
      /* printf( "%02x/%02x ", t4, t6 ); */
      /* feed / advance t3 / t5 */
      t3 = (t3 << 8) | t6;
      t5 >>= 8;
    }
    /* Guess the most significant bit of LFSR2 */
    vCandidate =  RunLfsr2Backwards( t3 , 3 );
    if( ( vCandidate & 0x08 ) == 0 ) {
      t3 |=  0x01000000;
      vCandidate =  RunLfsr2Backwards( t3 , 3 );
    }
    if( ( vCandidate & 0x08 ) == 0 ) {
      printf( "Failed to guess bit - exiting\n" );
      exit( -1 );
    }
    /* iterate 2 more times to validate candidate key */
    for( ; i < 5 ; i++ ) {
      t4=CSStab2[t2]^CSStab3[t1];
      t2=t1>>1;
      t1=((t1&1)<<8)^t4;
      t4=pTableB[t4];
      t6=(((((((t3>>3)^t3)>>1)^t3)>>8)^t3)>>5)&0xff;
      t3=(t3<<8)|t6;
      t6=pTableA[t6];
      t5+=t6+t4;
      if( (t5 & 0xff) != pStream[i] ) break;
      t5>>=8;
    }
    if( i == 5 ) {
      /* Key was found - print out result */
      t4 = ( vCandidate / 2 ) & 0xfffff8;
      t4 |= vCandidate & 0x7;
      /* printf( "Candidate: %03x %02x %08x\n", 0x100|(nTry>>8),nTry&0x0ff, vCandidate ); */
	ii++;
      printf( "static struct playkey pkey1 = {0x%03x, {0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x}};\n", o, nTry>>8, nTry&0x0ff, t4&0xff , (t4 >>8) &0xff, t4 >> 16 ); 
    }
  }
}
/* simple function to convert hex bytes to int */
/* note: will give random results if nonhex digits are input */
static char hexdigits[17] = "0123456789abcdef\0";
static int HexByteToInt( const char *pNumber ) {
  char ch;
  int r;
  ch = tolower( pNumber[0] );
  r = 16 * (int)( strchr( hexdigits, ch ) - hexdigits );
  ch = tolower( pNumber[1] );
  r+= (int)( strchr( hexdigits, ch ) - hexdigits );
  return r & 0x0ff;  /* invalid input will have produce garbage */
} 
/* Revert mangling function - and crack keys*/
static int unmangle ( unsigned char* in , unsigned char *out ) {
  unsigned char A[5];
  unsigned char B[5];
  unsigned char C[5];
  unsigned char k[6];
  int i,j;
  /* Recover mangling key */
  memcpy( A, in, 5 );
  memcpy( C, out, 5 );
  k[5] = 0;
  for( i=0 ; i < 256 ; i++ ) {
    k[4] = i;
    for( j = 4 ; j >= 2 ; j-- ) {
      B[j] = k[j] ^ CSStab1[ A[j] ] ^ A[j-1];
      B[j-1] = CSStab1[ B[j] ] ^ k[j] ^ C[j];
      k[j-1] = A[j-2] ^ CSStab1[ A[j-1] ] ^ B[j-1];
    }
    B[0] = CSStab1[ B[1] ] ^ k[1] ^ C[1];
    k[0] = B[0] ^ CSStab1[ A[0] ] ^ B[4];
    if( ( CSStab1[ B[0] ] ^ k[0]  )== C[0] ) {
/*      printf( "Possible mangling key: %02x %02x %02x %02x %02x\n", k[0], k[1], k[2], k[3], k[4] );
*/
      CSScracker( k, CSStab4, CSStab4 );
      
    }
  }
  return 0;
}
/* Main function */
int main( int argc, char* argv[] ) {
  int i;
  int fid;
  unsigned char in[5] = { 0,0,0,0,0 };
  unsigned char out[5] = { 0,0,0,0,0 };
  if( (argc!=2) && (argc!=7) ) {
    printf( "Usage: %s xx xx xx xx xx offset (title code)\n", argv[0] );
    return -1;
  }
  if (argc == 2) {
    o = atoi(argv[1]);  
    out[ 0 ] = HexByteToInt( "7F" );
    out[ 1 ] = HexByteToInt( "71" );
    out[ 2 ] = HexByteToInt( "CC" );
    out[ 3 ] = HexByteToInt( "7A" );
    out[ 4 ] = HexByteToInt( "62" );
  }
  
  if (argc==7) {
    for( i = 0; i < 5 ; i++ ) {
     out[ i ] = HexByteToInt( argv[i+1] );
    }
    o = atoi(argv[6]); 
  }
  
    fid = open("disk-key",O_RDONLY);
    lseek(fid,o,SEEK_SET);
    read(fid,in,5);    
    close(fid);
  /* search for key */
  unmangle( in, out );
  
  return( 0 );
}
Resent-Date: 04 Nov 1999 21:17:34 +0100; also posted to the Cryptography
mail list 30 October 1999.
Date: Sat, 30 Oct 1999 20:40:25 +0200 (CEST)
From: Frank Andrew Stevenson <frank@funcom.com>
X-Sender: frank@odin
To: livid-dev@livid.on.openprojects.net
Message-ID: <Pine.SGI.3.96.991030201122.28175A-100000@odin>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Subject: [Livid-dev] Working attack on DiskKey Hash
Original-Sender: livid-dev-admin@livid.on.openprojects.net
Errors-To: livid-dev-admin@livid.on.openprojects.net
X-Mailman-Version: 1.0rc2
Precedence: bulk
List-Id:  <livid-dev.livid.on.openprojects.net>
X-BeenThere: livid-dev@livid.on.openprojects.net
Lines: 228
Through private communication with list readers, I was more
or less challenged... ( Or so it felt to me ) To find an
attack whereby the encrypted (temporary) diskkey can be
retrieved from the hash found at the start of the Disk
key data block.
At first it seemed to me that it required a workload of 2^40.
And there didn't seem much in the way for speeding up such
an attack. But througe careful study of the structure in the
mangling cipher and the CSS I have now come up with the
following attack.
Guess the initals state of LFSR1, and B[0] - the first byte
of the second stage of the mangling cipher. From this starting
point k[0] and B[4] , first byte of mangling key, and fifth
byte of second stage can be found. Now k[4] can be found,
that is the fifth byte in the mangling key. Through a table
all permissible k[1] second mangling keys can be found.
Since the mangling key is the output of the ordinary CSS cipher,
LFSR1s output is completely known. We have also just found byte
1,2,5 of the CSS cipher output. This gives us 2  possibilities
of 1,2,5 byte output from LFSR2. Luckily there is a 1 <-> 1
mapping of these bytes and the initial state.
So through a table with 2^24 entries the initial state of 
LSFR2 can be found. By now completing the mangle cipher 
1 out 256 LFSR2 startstates will emerge as a candidate,
and can be checked the usual (slow) way. There will 'only'
be 2^17 such checks so performance is not a concern.
The whole attack has a complexity of 2^24 (mayby 25), with
a memory requirnement of 64MB. On a PIII/450 it will recover
a set of possible keys in less than in 20 seconds.
Sample run on 200MHz R4000 (?)
   
odin:~> time ./unhash fb 81 26 01 fe
CSS hash finder - gobbles memory ( 64 MB RAM ) Good luck
Searching for hash: fb 81 26 01 fe
Initializing k[1] lookup table
Initializing and clearing 64MB of RAM
Calculating big table. Wait, this takes time
--------------------------------
################################
Table init completed, now reversing hash
Possible tmp key 21 5b 31 89 82
Possible tmp key 3f 9d fa de f3
Possible tmp key 53 4d fe 99 1e
114.602u 1.595s 1:59.12 97.5% 0+0k 0+0io 0pf+0w
This recovers 3 possible keys for the given hash.
I believe the wrong ones are easy to eliminate
by trying to decode the datastreams. ( It takes
almost 2 minutes on this CPU, but at least it runs
on bigendians as well )
  frank
--------- Fully functional DiskKey Hash cracker ------------
begin 640 unhash.c.Z
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
1N<C9AM4,$XI246J11`DLLP`2
`
end
This sentence is unique in this respect; it can safely
be attributed to my employer, Funcom Oslo AS.
E3D2BCADBEF8C82F A5891D2B6730EA1B PGPmail preferred, finger for key
There is no place like N59 50.558' E010 50.870'. (WGS84)
_______________________________________________
Livid-dev maillist  -  Livid-dev@livid.on.openprojects.net
http://livid.on.openprojects.net/mailman/listinfo/livid-dev
Date: Sat, 30 Oct 1999 21:27:50 +0200 (CEST)
From: Frank Andrew Stevenson <frank@funcom.com>
X-Sender: frank@odin
To: cryptography@c2.net
Subject: More on CSS
Message-ID: <Pine.SGI.3.96.991030210322.28175B-100000@odin>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Sender: owner-cryptography@c2.net
Earlier this week, I posted a note about an attack on the recently
published CSS cipher, used for encrypting DVDs.
I published my first attack here:
http://livid.on.openprojects.net/pipermail/livid-dev/1999-October/000589.html
It has a workload 2^16 and recovers the 40 bits CSS key with 6 known
bytes.
I then directed my efforts against the TitleKey generation:
http://livid.on.openprojects.net/pipermail/livid-dev/1999-October/000609.html
Here a secondary mangling cipher falls with a workload of 2^8, and as
only 5 bytes of known plaintext is now needed, it is now possible to
extract numerous 'player keys' by correalating a few DVD titles.
It seems to have worked, for shortly afterwards there was a deluge of
playerkeys:
http://livid.on.openprojects.net/pipermail/livid-dev/1999-October/000657.html
My last attack is outlined in:
http://livid.on.openprojects.net/pipermail/livid-dev/1999-October/000671.html
It is an attack on a hash that is used to verify that the correct player
key has been used. This has was also weakness, and can be reversed with
2^25 work and 2^24 memory. A PIII/450 reverts such a hash in less than 20
seconds.
This particular attack is interesting as it will allow a DVD to viewed
without any known player key, or known / guessed plaintext.
This should be of concern when trying to design 'secure distributions'
of movies for In Flight Entertainment, such as is beeing discussed on:
http://www.waea.org/public/specs/DVD-WG/DVDWG%20Index.html
( Movies can be released much earlier for IFE, and the security of
  these copies are a concern with regards to piracy. If they can
  be decrypted, they provide a Digital Master )  
  frank
Date: Mon, 8 Nov 1999 13:00:21 +0100 (CET)
From: Frank Andrew Stevenson <frank@funcom.com>
X-Sender: frank@odin
To: cryptography@c2.net
Subject: CSS Details
Message-ID: <Pine.SGI.3.96.991108125714.23331B-100000@odin>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Sender: owner-cryptography@c2.net
I have put together some information on the weaknesses of the
DVDs CSS algorithm, as a service to those who don't want to wade
through the C code that I wrote.
http://crypto.gq.nu/
  frank