Changeset 4619c0a56757e47963f5f4c65b414d14468f92b1
- Timestamp:
- 06/07/08 10:26:42 (3 months ago)
- git-parent:
- Files:
-
- modules/demux/ts.c (modified) (1 diff)
- modules/mux/mpeg/csa.c (modified) (1 diff)
- modules/mux/mpeg/csa.h (modified) (1 diff)
- modules/mux/mpeg/ts.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
modules/demux/ts.c
r3561b9b r4619c0a 778 778 if( val.psz_string && *val.psz_string ) 779 779 { 780 char *psz = val.psz_string; 781 if( psz[0] == '0' && ( psz[1] == 'x' || psz[1] == 'X' ) ) 782 { 783 psz += 2; 784 } 785 if( strlen( psz ) != 16 ) 786 { 787 msg_Warn( p_demux, "invalid csa ck (it must be 16 chars long)" ); 788 } 789 else 790 { 791 #ifndef UNDER_CE 792 uint64_t i_ck = strtoull( psz, NULL, 16 ); 793 #else 794 uint64_t i_ck = strtoll( psz, NULL, 16 ); 795 #endif 796 uint8_t ck[8]; 797 int i; 798 for( i = 0; i < 8; i++ ) 799 { 800 ck[i] = ( i_ck >> ( 56 - 8*i) )&0xff; 801 } 802 #ifndef TS_NO_CSA_CK_MSG 803 msg_Dbg( p_demux, "using CSA scrambling with " 804 "ck=%x:%x:%x:%x:%x:%x:%x:%x", 805 ck[0], ck[1], ck[2], ck[3], ck[4], ck[5], ck[6], ck[7] ); 806 #endif 807 p_sys->csa = csa_New(); 808 809 if( p_sys->csa ) 810 { 811 vlc_value_t pkt_val; 812 813 csa_SetCW( p_sys->csa, ck, ck ); 814 815 var_Create( p_demux, "ts-csa-pkt", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); 816 var_Get( p_demux, "ts-csa-pkt", &pkt_val ); 817 if( pkt_val.i_int < 4 || pkt_val.i_int > 188 ) 818 { 819 msg_Err( p_demux, "wrong packet size %d specified.", pkt_val.i_int ); 820 msg_Warn( p_demux, "using default packet size of 188 bytes" ); 821 p_sys->i_csa_pkt_size = 188; 822 } 823 else p_sys->i_csa_pkt_size = pkt_val.i_int; 824 msg_Dbg( p_demux, "decrypting %d bytes of packet", p_sys->i_csa_pkt_size ); 825 } 780 int i_res; 781 782 p_sys->csa = csa_New(); 783 784 i_res = csa_SetCW( (vlc_object_t*)p_demux, p_sys->csa, val.psz_string, 1 ); 785 if( i_res != VLC_SUCCESS || csa_SetCW( (vlc_object_t*)p_demux, p_sys->csa, val.psz_string, 0 ) != VLC_SUCCESS ) 786 { 787 csa_Delete( p_sys->csa ); 788 } 789 790 if( p_sys->csa ) 791 { 792 vlc_value_t pkt_val; 793 794 var_Create( p_demux, "ts-csa-pkt", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); 795 var_Get( p_demux, "ts-csa-pkt", &pkt_val ); 796 if( pkt_val.i_int < 4 || pkt_val.i_int > 188 ) 797 { 798 msg_Err( p_demux, "wrong packet size %d specified.", pkt_val.i_int ); 799 msg_Warn( p_demux, "using default packet size of 188 bytes" ); 800 p_sys->i_csa_pkt_size = 188; 801 } 802 else p_sys->i_csa_pkt_size = pkt_val.i_int; 803 msg_Dbg( p_demux, "decrypting %d bytes of packet", p_sys->i_csa_pkt_size ); 826 804 } 827 805 } modules/mux/mpeg/csa.c
r3561b9b r4619c0a 82 82 * csa_SetCW: 83 83 *****************************************************************************/ 84 void csa_SetCW( csa_t *c, uint8_t o_ck[8], uint8_t e_ck[8] ) 85 { 86 memcpy( c->o_ck, o_ck, 8 ); 87 csa_ComputeKey( c->o_kk, o_ck ); 88 89 memcpy( c->e_ck, e_ck, 8 ); 90 csa_ComputeKey( c->e_kk, e_ck ); 84 int csa_SetCW( vlc_object_t *p_caller, csa_t *c, char *psz_ck, int set_odd ) 85 { 86 if ( !c ) 87 { 88 msg_Dbg( p_caller, "no CSA found" ); 89 return VLC_EGENERIC; 90 } 91 /* skip 0x */ 92 if( psz_ck[0] == '0' && ( psz_ck[1] == 'x' || psz_ck[1] == 'X' ) ) 93 { 94 psz_ck += 2; 95 } 96 if( strlen( psz_ck ) != 16 ) 97 { 98 msg_Warn( p_caller, "invalid csa ck (it must be 16 chars long)" ); 99 return VLC_EGENERIC; 100 } 101 else 102 { 103 #ifndef UNDER_CE 104 uint64_t i_ck = strtoull( psz_ck, NULL, 16 ); 105 #else 106 uint64_t i_ck = strtoll( psz_ck, NULL, 16 ); 107 #endif 108 uint8_t ck[8]; 109 int i; 110 111 for( i = 0; i < 8; i++ ) 112 { 113 ck[i] = ( i_ck >> ( 56 - 8*i) )&0xff; 114 } 115 #ifndef TS_NO_CSA_CK_MSG 116 msg_Dbg( p_caller, "using CSA (de)scrambling with %s key=%x:%x:%x:%x:%x:%x:%x:%x", ((set_odd == 1) ? "odd" : "even" ), 117 ck[0], ck[1], ck[2], ck[3], ck[4], ck[5], ck[6], ck[7] ); 118 #endif 119 if ( set_odd == 1 ) 120 { 121 memcpy( c->o_ck, ck, 8 ); 122 csa_ComputeKey( c->o_kk, ck ); 123 } 124 else 125 { 126 memcpy( c->e_ck , ck, 8 ); 127 csa_ComputeKey( c->e_kk , ck ); 128 } 129 return VLC_SUCCESS; 130 } 91 131 } 92 132 modules/mux/mpeg/csa.h
r6300760 r4619c0a 35 35 void csa_Delete( csa_t * ); 36 36 37 void csa_SetCW( csa_t *, uint8_t o_ck[8], uint8_t e_ck[8]);37 int csa_SetCW( vlc_object_t *p_caller, csa_t *c, char *psz_ck, int set_odd ); 38 38 39 39 void csa_Decrypt( csa_t *, uint8_t *pkt, int i_pkt_size ); modules/mux/mpeg/ts.c
r3561b9b r4619c0a 772 772 if( val.psz_string && *val.psz_string ) 773 773 { 774 char *psz = val.psz_string; 775 776 /* skip 0x */ 777 if( psz[0] == '0' && ( psz[1] == 'x' || psz[1] == 'X' ) ) 778 { 779 psz += 2; 780 } 781 if( strlen( psz ) != 16 ) 782 { 783 msg_Dbg( p_mux, "invalid csa ck (it must be 16 chars long)" ); 784 } 785 else 786 { 787 uint64_t i_ck = strtoull( psz, NULL, 16 ); 788 uint8_t ck[8]; 789 int i; 790 791 for( i = 0; i < 8; i++ ) 792 { 793 ck[i] = ( i_ck >> ( 56 - 8*i) )&0xff; 794 } 795 #ifndef TS_NO_CSA_CK_MSG 796 msg_Dbg( p_mux, "using CSA scrambling with ck=%x:%x:%x:%x:%x:%x:%x:%x", 797 ck[0], ck[1], ck[2], ck[3], ck[4], ck[5], ck[6], ck[7] ); 798 #endif 799 p_sys->csa = csa_New(); 800 if( p_sys->csa ) 801 { 802 vlc_value_t pkt_val; 803 804 csa_SetCW( p_sys->csa, ck, ck ); 805 806 var_Get( p_mux, SOUT_CFG_PREFIX "csa-pkt", &pkt_val ); 807 if( pkt_val.i_int < 12 || pkt_val.i_int > 188 ) 808 { 809 msg_Err( p_mux, "wrong packet size %d specified.", pkt_val.i_int ); 810 msg_Warn( p_mux, "using default packet size of 188 bytes" ); 811 p_sys->i_csa_pkt_size = 188; 812 } 813 else p_sys->i_csa_pkt_size = pkt_val.i_int; 814 msg_Dbg( p_mux, "encrypting %d bytes of packet", p_sys->i_csa_pkt_size ); 815 } 774 int i_res; 775 776 p_sys->csa = csa_New(); 777 778 i_res = csa_SetCW( (vlc_object_t*)p_mux, p_sys->csa, val.psz_string, 1 ); 779 if( i_res != VLC_SUCCESS || csa_SetCW( (vlc_object_t*)p_mux, p_sys->csa, val.psz_string, 0 ) != VLC_SUCCESS ) 780 { 781 csa_Delete( p_sys->csa ); 782 } 783 784 if( p_sys->csa ) 785 { 786 vlc_value_t pkt_val; 787 788 var_Get( p_mux, SOUT_CFG_PREFIX "csa-pkt", &pkt_val ); 789 if( pkt_val.i_int < 12 || pkt_val.i_int > 188 ) 790 { 791 msg_Err( p_mux, "wrong packet size %d specified.", pkt_val.i_int ); 792 msg_Warn( p_mux, "using default packet size of 188 bytes" ); 793 p_sys->i_csa_pkt_size = 188; 794 } 795 else p_sys->i_csa_pkt_size = pkt_val.i_int; 796 msg_Dbg( p_mux, "encrypting %d bytes of packet", p_sys->i_csa_pkt_size ); 816 797 } 817 798 }
