home *** CD-ROM | disk | FTP | other *** search
/ pc.louisiana.edu/pub/unix/ / Louisiana_UNIX.tar / Louisiana_UNIX / deCSS.pl < prev    next >
Perl Script  |  2001-04-02  |  698b  |  16 lines

  1. #!/usr/bin/perl -w
  2. # 531-byte qrpff-fast, Keith Winstein and Marc Horowitz 
  3. # MPEG 2 PS VOB file on stdin -> descrambled output on stdout
  4. # arguments: title key bytes in least to most-significant order
  5. $_='while(read+STDIN,$_,2048){$a=29;$b=73;$c=142;$t=255;@t=
  6. map{$_%16or$t^=$c^=(
  7. $m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;$t^=(72,@z=
  8. (64,72,$a^=12*($_%16
  9. -2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]}(16..271);
  10. if((@a=unx"C*",$_)[20]&48){$h
  11. =5;$_=unxb24,join"",@b=map{xB8,unxb8,chr($_^$a[--$h+84])}
  12. @ARGV;s/...$/1$&/;$
  13. d=unxV,xb25,$_;$e=256|(ord$b[4])<>8^($f=$t&($d>>12^$d>>4^
  14. $d^$d/8))<>8^($t&($g=($q=$e>>14&7^$e)^$q*8^$q<<6))<>=8)+=
  15. $f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eval
  16.