[6ffecc]: test / test.c  Maximize  Restore  History

Download this file

92 lines (72 with data), 2.4 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/* csstest.c - test program for libdvdcss
*
* Samuel Hocevar <sam@zoy.org> - June 2001
* Updated on Nov 13th 2001 for libdvdcss version 1.0.0
*
* This piece of code is public domain */
#include <stdlib.h>
#include <dvdcss/dvdcss.h>
/* Macro to check if a sector is scrambled */
#define IsSectorScrambled(buf) (((unsigned char*)(buf))[0x14] & 0x30)
/* Print parts of a 2048 bytes buffer */
void dumpsector( unsigned char * );
int main( int i_argc, char *ppsz_argv[] )
{
dvdcss_handle dvdcss;
unsigned char p_buffer[ DVDCSS_BLOCK_SIZE ];
unsigned int i_sector;
/* Print version number */
printf( "cool, I found libdvdcss version %s\n", dvdcss_interface_2 );
/* Check for 2 arguments */
if( i_argc != 3 )
{
printf( "usage: %s <device> <sector>\n", ppsz_argv[0] );
return -1;
}
/* Save the requested sector */
i_sector = atoi( ppsz_argv[2] );
/* Initialize libdvdcss */
dvdcss = dvdcss_open( ppsz_argv[1] );
if( dvdcss == NULL )
{
printf( "argh ! couldn't open DVD (%s)\n", ppsz_argv[1] );
return -1;
}
/* Set the file descriptor at sector i_sector */
dvdcss_seek( dvdcss, i_sector, DVDCSS_NOFLAGS );
/* Read one sector */
dvdcss_read( dvdcss, p_buffer, 1, DVDCSS_NOFLAGS );
/* Print the sector */
printf( "requested sector:\n" );
dumpsector( p_buffer );
/* Check if sector was encrypted */
if( IsSectorScrambled( p_buffer ) )
{
/* Set the file descriptor position to the previous location */
/* ... and get the appropriate key for this sector */
dvdcss_seek( dvdcss, i_sector, DVDCSS_SEEK_KEY );
/* Read sector again, and decrypt it on the fly */
dvdcss_read( dvdcss, p_buffer, 1, DVDCSS_READ_DECRYPT );
/* Print the decrypted sector */
printf( "unscrambled sector:\n" );
dumpsector( p_buffer );
}
else
{
printf( "sector is not scrambled\n" );
}
/* Close the device */
dvdcss_close( dvdcss );
return 0;
}
/* Print parts of a 2048 bytes buffer */
void dumpsector( unsigned char *p_buffer )
{
int i_amount = 10;
for( ; i_amount ; i_amount--, p_buffer++ ) printf( "%.2x", *p_buffer );
printf( " ... " );
i_amount = 25;
p_buffer += 200;
for( ; i_amount ; i_amount--, p_buffer++ ) printf( "%.2x", *p_buffer );
printf( " ...\n" );
}

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks