亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? ecmgenerator.c

?? Sun公司Dream項(xiàng)目
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):

/*
 * The contents of this file are subject to the terms
 * of the Common Development and Distribution License
 * (the "License").  You may not use this file except
 * in compliance with the License.
 *
 * You can obtain a copy of the license at
 * http://www.opensource.org/licenses/cddl1.php
 * See the License for the specific language governing
 * permissions and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL
 * HEADER in each file and include the License file at
 * http://www.opensource.org/licenses/cddl1.php.  If 
 * applicable, add the following below this CDDL HEADER, 
 * with the fields enclosed by brackets "[]" replaced 
 * with your own identifying information: 
 * Portions Copyright [yyyy]
 * [name of copyright owner]
 */ 

/*
 * $(@)EcmGenerator.cc $Revision: 1.2 $ $Date: 2006/07/25 22:39:09 $
 * 
 * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
 */

#include <stdexcept>
#include <stdio.h>

#include "dreamcas/EcmGenerator.h"
#include "ca_crypto/crypto.h"
#include "mpeg2/OutputBitBuffer.h"
#include "mpeg2/FileWriter.h"

#include "dreamcas/Ecm.h"
#include "dreamcas/EcmWriter.h"
#include "mpeg2/mpeg2ts_demux_stub.h"

#include <string.h>

#include <fstream>
#include <string>

namespace m2t=mpeg2ts;

#define CA_SYS_ID  0x222
#define FREQUENCY 5
#define FOR_ANY_PROGRAM -1
#define ANY_STREAM_TYPE -1

#define TEST_MEMORY(p) if(p==NULL){ fprintf(stderr, "Memory check failed in %s line %d\n", __FILE__, __LINE__);exit(-1);}

typedef enum encrypt_type_s 
{
	ENCRYPT_ALL, 
	ENCRYPT_VIDEO_ONLY, 
	ENCRYPT_AUDIO_ONLY,
	ENCRYPT_UNKNOWN
}encrypt_type;

typedef struct encrypt_key_s
{
    encrypt_key_s(int programNumber, encrypt_type type, unsigned char *p_payload, int i_length)
    {
        e_type = type;
        pn     = programNumber;
        ecm_pid = 0; /* no . will be assigned later in the parser*/
        key_length = 0;
        /* get the key content (the ECM payload) */
        key_buf = new unsigned char[i_length];
        memcpy(key_buf, p_payload, i_length);
        key_length = i_length;
    }
    
    ~encrypt_key_s()
    {
        delete[] key_buf;
    }
    
    int                pn;           /* program number we are encrypting */
    encrypt_type       e_type;       /* encrypt type for this key */
    short              ecm_pid;      /* pid of the ecm containing the key */
    unsigned char *    key_buf;          /* key payload */
    int                key_length;       /* payload length */
    
private:
    encrypt_key_s( const encrypt_key_s& );
    encrypt_key_s& operator=( const encrypt_key_s& );
    
} encrypt_key_t;
 
typedef boost::shared_ptr<encrypt_key_s> EncryptionKeyPtr;
typedef encrypt_key_s *encrypt_key_p;

typedef struct
{
    bool       b_pmt_pid; /* is it a pck pid? */
    bool       b_seen;    /* being used ? */
    int           pn;        /* program number */
    encrypt_key_p p_key;     /* encryption key for this pid. chosen from the keys in sys */
    unsigned char  continuity_counter; /* TS packet counter */
} ts_pid_t;

/* structure of the ca descriptor,one ca descriptor corresponds to one key only */
struct ts_ca_descriptor_s 
{
    ts_ca_descriptor_s(encrypt_type encryption_type, int ca_system_id,
                       int ca_pid, unsigned char * p_private_data, int i_private_length)
    {
        stream_type = ANY_STREAM_TYPE;
        en_type     = encryption_type;
                
        desc = boost::shared_ptr<m2t::CaDescriptor>(new m2t::CaDescriptor);
        desc->caSystemId = ca_system_id;
        desc->caPid = ca_pid;
        desc->privateData = std::string( (char *)p_private_data, i_private_length );    
    }
    
    int                                  stream_type;/* the ca is used for this stream type,  */
    encrypt_type                         en_type;
    boost::shared_ptr<m2t::CaDescriptor> desc;       /*  the PSI descriptor */
    encrypt_key_p                        p_key;      /* encryption key this CA from */
    
private:
    ts_ca_descriptor_s( const ts_ca_descriptor_s& );
    ts_ca_descriptor_s& operator=( const ts_ca_descriptor_s& );
};

typedef boost::shared_ptr< ts_ca_descriptor_s > TsCaDescriptorPtr;
typedef std::vector< TsCaDescriptorPtr > TsCaDescriptorList;
typedef std::vector< EncryptionKeyPtr > EncryptionKeyList;

struct ca_sys_t
{
    ca_sys_t(int sys_id, unsigned int seconds)
    {
        /* setup data members */
        ecm_frequency = seconds;
        b_outputECMafterPMT = true;
        i_pmt_version_number = 0;
        
        /* pid initialization */
        for( int i = 0; i < 8192; i++ )
        {
            pid[i].b_seen     = false;
            pid[i].b_pmt_pid  = false;
            pid[i].pn         = 0;
            pid[i].p_key      = NULL;
            pid[i].continuity_counter = 0;
        }
        /* reserved pids */
        for( int i = 0x0; i < 0x1F4; i++ )
        {
            pid[i].b_seen   = true;
        }
        
        i_ca_system_id = sys_id;
    }

    ~ca_sys_t()
    {
    }
    
    int                 b_outputECMafterPMT;
    ts_pid_t            pid[8192];      /* pid arrays  */
    EncryptionKeyList   keys; /* a list of keys of the CAS */
    int                 ecm_frequency;  /* frequence of sending ECMs, seconds */
    int                 i_ca_system_id;
    int                 i_pmt_version_number;
};


static void addKey2CAS(ca_sys_t *p_sys, int pn, encrypt_type type, unsigned char *p_payload, int length)
{
	if (p_sys)
	{
		EncryptionKeyPtr pkey ( new encrypt_key_s(pn, type, p_payload, length) );
		p_sys->keys.push_back(pkey);
	}
	return;
}

namespace dream {
    namespace cas {

EcmGenerator::EcmGenerator(m2t::FileWriterPtr writer, const Emm& emm,
                           const char *ecmfile, EncryptionDebugKey keytype )
        : m_outfilter(writer), m_emm(emm), m_debugKeyType(keytype)
{
    assert( emm.entitlementTokenData.size()>0 && "EMM Key size should be > 0" );
    assert( emm.seedData.size() > 0 && "EMM IV size should be > 0" );
    
    if( ecmfile != NULL )
        m_ecmOut = EcmWriterPtr( new EcmWriter( ecmfile ) );
    
    m_pCas = new ca_sys_t(CA_SYS_ID, FREQUENCY);
}

EcmGenerator::~EcmGenerator()
{
   delete m_pCas;
}

void EcmGenerator::encryptProgram( unsigned int programNumber )
{
    assert( m_pCas->keys.size() == 0 );
    
    int pn = programNumber;
    
    if( programNumber == ALL_PROGRAMS )
        pn = FOR_ANY_PROGRAM;
    
    unsigned char dummyKey[16];
    
    addKey2CAS( m_pCas, pn, ENCRYPT_ALL, dummyKey, sizeof(dummyKey) );
    
    return;
}

void EcmGenerator::operator()(m2t::Pat pat, unsigned int patPid)
{
    for(m2t::PatEntryList::iterator it=pat.entries.begin(); it!=pat.entries.end(); ++it)
    {
        unsigned int pid = (*it).programMapPid.to_ulong(); 
        m_pCas->pid[ pid ].b_seen = true;
        m_pCas->pid[ pid ].pn = (*it).programNumber.to_ulong();
        m_pCas->pid[ pid ].b_pmt_pid = true;
    }
    
    return;
}

static unsigned int getFreePid( ca_sys_t *pcas, unsigned long programNumber );

static TsBytes injectCaDescriptorToPmt( ca_sys_t *pcas, m2t::Pmt& pmt, 
                                      unsigned int pmtPid,
                                      TsCaDescriptorList& caList );

/*                                      
 * Encrypt ECM data with the Key.IV in EMM and wrap the encrypted ECM into
 * an MPEG2 TS Program Map Section 
 */
PsiBytes generateCaMessageSection( const dream::cas::Ecm& ecm,
                                   const dream::cas::Emm& emm );


                                           
static TsBytes tsPacketizeCaMessage( ca_sys_t *pcas, unsigned int ecmPid, 
                                     PsiBytes& caBytes );


/******************************************************************************/

std::string KeyGenerator::generateKey( int size )
{
    unsigned char key[256];
    

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人的天堂av| 国产精品理论在线观看| 午夜激情综合网| 91丨国产丨九色丨pron| 91麻豆精品国产91久久久久久久久| 亚洲综合一二区| 成人免费视频app| 久久久影院官网| 国内精品不卡在线| 日韩免费看的电影| 日本欧美加勒比视频| 欧美日韩高清一区二区不卡| 亚洲一区视频在线| 国产福利一区在线观看| 国产欧美一区在线| 国产盗摄精品一区二区三区在线| 精品久久久久久久久久久久包黑料 | 国产suv精品一区二区6| 精品999久久久| 狠狠色狠狠色综合系列| 欧美大片顶级少妇| 麻豆传媒一区二区三区| 欧美色欧美亚洲另类二区| 樱桃国产成人精品视频| 色综合天天综合在线视频| 久久久精品一品道一区| 国产精品1区2区3区在线观看| 精品国产青草久久久久福利| 久久成人综合网| 日韩三级中文字幕| 九色综合狠狠综合久久| 精品国精品国产| 国模大尺度一区二区三区| 欧美精品一区二区三区四区 | 亚洲色图在线看| 不卡一区二区在线| 亚洲欧美怡红院| 色噜噜久久综合| 一区二区久久久| 欧美亚洲一区三区| 亚洲va韩国va欧美va| 91精品综合久久久久久| 久久成人av少妇免费| 精品乱码亚洲一区二区不卡| 国产福利一区在线观看| 国产精品伦一区二区三级视频| 色悠久久久久综合欧美99| 亚洲狠狠爱一区二区三区| 欧美日韩成人综合天天影院| 麻豆国产精品一区二区三区| 久久亚洲一级片| 国产一区不卡视频| 一区二区三区在线影院| 欧美夫妻性生活| 久草在线在线精品观看| 国产精品视频第一区| yourporn久久国产精品| 天堂av在线一区| 久久色在线视频| 北条麻妃国产九九精品视频| 亚洲一区二区三区自拍| 欧美日韩精品系列| 国产成人在线观看免费网站| 亚洲男帅同性gay1069| 欧美电影在线免费观看| 国产伦精品一区二区三区免费 | 亚洲激情网站免费观看| 欧美精品v日韩精品v韩国精品v| 日本va欧美va欧美va精品| 国产精品―色哟哟| 欧美亚洲一区二区三区四区| 精品一区二区三区免费毛片爱| 国产精品免费视频观看| 欧美剧情片在线观看| 国产麻豆视频一区| 亚洲精品成人少妇| 精品国产91洋老外米糕| 91偷拍与自偷拍精品| 美女高潮久久久| 成人免费一区二区三区视频 | 欧美日免费三级在线| 国产一区91精品张津瑜| 亚洲成人av在线电影| 国产精品无码永久免费888| 欧美一卡二卡三卡| 在线这里只有精品| 国产a精品视频| 日本在线不卡一区| 玉米视频成人免费看| 国产情人综合久久777777| 这里只有精品视频在线观看| 99国产一区二区三精品乱码| 激情国产一区二区| 无码av免费一区二区三区试看| 国产精品你懂的在线| 精品三级在线看| 欧美三级在线视频| 91原创在线视频| 国产精品888| 经典一区二区三区| 琪琪一区二区三区| 亚洲va欧美va人人爽| 亚洲激情中文1区| 国产精品福利一区| 久久久精品人体av艺术| 日韩精品一区二区三区视频在线观看| 91精彩视频在线观看| 99在线精品一区二区三区| 国产精品一区二区在线播放 | 豆国产96在线|亚洲| 久久国产综合精品| 天使萌一区二区三区免费观看| 一区二区三区免费| 综合激情成人伊人| 日韩美女视频一区二区| 国产精品高潮久久久久无| 欧美国产精品一区二区| 国产午夜精品一区二区| 91久久国产最好的精华液| 中文一区二区在线观看| 粉嫩aⅴ一区二区三区四区| 日韩三级视频中文字幕| 日本成人在线视频网站| 欧美日本视频在线| 五月天激情综合网| 在线播放欧美女士性生活| 亚洲伊人色欲综合网| 欧美日韩精品久久久| 天天操天天干天天综合网| 欧美精品精品一区| 亚洲九九爱视频| 久久欧美中文字幕| 2023国产精品视频| 久久久久9999亚洲精品| 久久亚洲精精品中文字幕早川悠里 | 精品国产免费视频| 精品国内片67194| 久久综合九色综合欧美亚洲| 久久久激情视频| 中文字幕av免费专区久久| 国产精品超碰97尤物18| 国产精品灌醉下药二区| 亚洲三级久久久| 亚洲国产乱码最新视频| 天天综合天天综合色| 另类的小说在线视频另类成人小视频在线 | av资源网一区| 一本久道中文字幕精品亚洲嫩| 91福利国产成人精品照片| 在线观看日韩av先锋影音电影院| 欧美少妇xxx| 日韩一区二区电影在线| 精品福利av导航| 国产精品久久久久久久久动漫| 亚洲精品中文字幕乱码三区| 亚洲成人黄色小说| 精品在线亚洲视频| 国产99精品国产| 色哟哟在线观看一区二区三区| 欧美午夜精品久久久| 日韩三级在线观看| 中文在线免费一区三区高中清不卡| 亚洲私人影院在线观看| 亚洲国产一区二区在线播放| 美国三级日本三级久久99 | 蜜臀国产一区二区三区在线播放| 国产精品自产自拍| 伊人色综合久久天天| 精品粉嫩超白一线天av| 91精品国产入口在线| 欧美一区二区视频免费观看| av一区二区不卡| 伦理电影国产精品| 亚洲va欧美va天堂v国产综合| 国产日韩av一区二区| 精品少妇一区二区三区在线视频| 91久久国产综合久久| 成人永久免费视频| 精品一区二区三区香蕉蜜桃| 天堂在线一区二区| 免费观看30秒视频久久| 偷窥少妇高潮呻吟av久久免费| 久久国产精品一区二区| gogo大胆日本视频一区| 欧美高清精品3d| 国产精品久久777777| 亚洲成人av资源| 国产精品88888| 欧美日本一道本在线视频| 国产欧美综合在线观看第十页| 亚洲五码中文字幕| 人人狠狠综合久久亚洲| 美女视频黄a大片欧美| 成人精品国产福利| 欧美军同video69gay| 国产精品久久久久影院色老大| 日韩不卡一二三区| 91女神在线视频| 日韩精品中午字幕| 樱花影视一区二区|