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

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

?? main.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]
 */ 

/*
 * $(@)main.c $Revision: 1.3 $ $Date: 2006/09/29 18:17:39 $
 * 
 * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
 */
/*
 * Copyright (c) 2005 by Sun Microsystems, Inc.
 * Functions to perform TS parsing

 * Created:   July 29, 2005
 * Author:    Yongfang Liang
 *---------------------------------------------------------------*/

#include <stdio.h>

//#include "trickplay/trickplay.h"
#include "cas/cas_lib.h"
#include "ca_crypto/crypto.h"
#define HAVE_ENCRYPTION_LIB
//#define _DEBUG

#include "ecmfile.h"
#include <libgen.h>
#include <stdio.h> 
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include "cobjs/Macros.h"
#include <sys/mman.h>

#include "cobjs/ArrayOf.h"
#include "cobjs/HashTable.h"
#include "cobjs/Macros.h"
#include "cobjs/RetCode.h"
#include "cobjs/Types.h"
#include "cobjs/libcobjsVersion.h"

#include "mmp/Mmp.h"
#include "mmp/Mpeg1Pes.h"
#include "mmp/Mpeg1Sys.h"
#include "mmp/Mpeg2.h"
#include "mmp/Mpeg2Pat.h"
#include "mmp/Mpeg2Pes.h"
#include "mmp/Mpeg2Pmt.h"
#include "mmp/Mpeg2Ps.h"
#include "mmp/Mpeg2Psi.h"
#include "mmp/Mpeg2Ts.h"
#include "mmp/Pipe.h"
#include "mmp/libmmpVersion.h"
#include "mmp/Mpeg2VideoEs.h"
#include "mmp/Mpeg1AudioEs.h"

#define CA_SYS_ID  0x222
#define FREQUENCY 5
/* AES key size 128 bits */
#define KEY_LENGTH 16 
/* AES use block size 16bytes */
#define BLOCK_SIZE 16


typedef struct 
{
    uint8_t  key_len;
    uint8_t  iv_len;
    uint8_t  key[KEY_LENGTH];
    uint8_t  iv[BLOCK_SIZE];
} cas_ecm_payload, *cas_ecm_payload_p;

typedef struct 
{
    uint8_t  aes_mode;
    uint8_t  key_len;
    uint8_t  iv_len;
    uint8_t  key[KEY_LENGTH];
    uint8_t  iv[BLOCK_SIZE];
} cas_emm_payload, *cas_emm_payload_p;


typedef struct 
{
	cas_ecm_payload  *p_ecm;
	cas_emm_payload  *p_emm;
	/* input ecm file name,only used for generating encrypted Trickplay stream */
	char in_ecm_file_name[256]; 
	/* output ecm recording the ECM offset in the encrypted file 
	   used when generating encrypted Trickplay stream */ 
	char out_ecm_file_name[256];
	char emm_file_name[256];
	int  ecm_no;
	int  ecm_no_inserting;
    ca_sys_p p_ecm_sys;
	short ecm_id;
	int b_reverse;

} sys_info_s, *sys_info_p;

#define	MAP_CHUNK	(1024*1024)
static void  OutputCallBack (void *token, uint8_t *buf, int len);

static void  ECMCallBack (void *token, uint8_t *buf, int len, uint8_t *out_buf, int *out_len, long long  position);
static void  ECMIOnlyCallBack (void *token, uint8_t *buf, int len, uint8_t *out_buf, int *out_len, long long  position);

static void  ScrambleCallBack (void *token, uint8_t *key_buf, int key_len, 
	                       uint8_t *pkt, uint8_t *payload_buf, int payload_len,
	                       long long position);

static void  EMMOutputCallBack (void *token, uint8_t *ts_buf, int ts_len);
static void EMMAsymEncrypt(void *token, uint8_t *emm_buf, int emm_len, 
                        uint8_t *out_buf, int *out_len, long long  position);
static void TSCallBack(void *token, long long position);

/* put the file dat into a MMP object */
static long long file2mmp(const char *file, ca_sys_p p_sys)
{
    long                pagesize = sysconf(_SC_PAGESIZE);
    off64_t             offset = 0;
    long                mapChunk;
    int                 fd;
    struct stat64       st;
    caddr_t             buf;
    long long           retVal;
    int		retCode;

    if ((fd = open64(file, O_RDONLY)) <= 0 || fstat64(fd, &st) < 0) {
	perror(file);
	retVal = -1;
	goto done;
    }
    retVal = st.st_size;
    (void) printf("File size:     %lld\n", st.st_size);

    mapChunk = ROUND_UP(MAP_CHUNK, pagesize);
    while (offset < st.st_size) {
	buf = mmap64((caddr_t) 0, mapChunk, PROT_READ, MAP_PRIVATE, fd, offset);
	if (buf == (caddr_t) - 1) {
	    perror("mmap");
	    retVal = -1;
	    goto done;
	}
	if (madvise(buf, mapChunk, MADV_SEQUENTIAL) < 0) {
	    perror("madvise");
	    retVal = -1;
	    goto done;
	}
	retCode = casPutData(p_sys, (uint8_t *)buf,
		(size_t) MIN(mapChunk, st.st_size - offset));
	if (munmap(buf, mapChunk) < 0) {
	    perror("munmap");
	    retVal = -1;
	    goto done;
	}
	if (retCode != 0) {
	    break;
	}
	offset += mapChunk;
    }
done:
    if (fd >= 0) {
	(void) close(fd);
    }
    return retVal;
}

static void  EMMOutputCallBack (void *token, uint8_t *ts_buf, int ts_len)
{
    /* generate the EMM key file */
    FILE *emmFile = NULL;
    char *filename = (char *)token;
    emmFile = fopen(filename,"wb");
    fwrite(ts_buf, 1, ts_len, emmFile);
    fclose(emmFile);
    return;
}


static void EMMWritePayloadCallBack(void *token, uint8_t *emm_buf, int emm_len, 
                            uint8_t *out_buf, int *out_len, long long  position)
{
    FILE *emmFile = NULL;
    char *filename = (char *)token;
    emmFile = fopen(filename,"wb");
    fwrite(emm_buf, 1, emm_len, emmFile);
    fclose(emmFile);

    /* 
     * Hacky!
     * function expects something in the out_buf hence copy contents into
     * out_buf 
     */
    memcpy(out_buf, emm_buf, emm_len);
    *out_len = emm_len;
    return;
 
}
/* generate the EMM data file */

static void createEMM(cas_emm_payload *p_emm, uint8_t aes_mode, char *filename)
{
    ca_sys_p            p_sys, p_emm_sys;
    int i = 0;
#ifndef HAVE_ENCRYPTION_LIB
    unsigned char access_key[KEY_LENGTH+1]  = "2222222222222222";
    unsigned char access_iv[BLOCK_SIZE+1]   = "0123456789012345";
    memcpy(p_emm->iv, access_iv, BLOCK_SIZE);
    memcpy(p_emm->key, access_key, KEY_LENGTH);
#else
    generate_key(p_emm->iv, BLOCK_SIZE);
    generate_key(p_emm->key, KEY_LENGTH);
#endif

    p_emm->key_len = KEY_LENGTH ;
    p_emm->iv_len  = BLOCK_SIZE;
    p_emm->aes_mode = aes_mode;
    
#ifdef _DEBUG
    printf ("key: ");
    for (i = 0; i<KEY_LENGTH; i++)
    {
        printf("%#x ", p_emm->key[i]);
    }
    printf("\n");
    printf ("iv : ");
    for (i = 0; i<BLOCK_SIZE; i++)
    {
        printf("%#x ", p_emm->iv[i]);
    }
    printf("\n");
#endif
    
    p_emm_sys = createCAS(CA_SYS_ID,FREQUENCY);
    /* we dont want to write the whole TS packet. Just the payload. */
    // casSetOutputCallback(p_emm_sys, EMMOutputCallBack, filename);

    casSetEMSCallBack(p_emm_sys, EMMWritePayloadCallBack, filename);
    generateCAMessage(p_emm_sys, 0, 600, (uint8_t *)p_emm, sizeof(*p_emm));
    freeCAS(p_emm_sys);
    return;
	
}

void GetEncryptedBitstream(ca_sys_p  p_sys, sys_info_s *p_sys_info, char *infilename, FILE *outfile, int ecm_after_pmt,
	      casScrambleCallBack f_scramble,
	      casEMSCallBack      f_ems
	      )
{
    long long           fileSize;
    int             retCode;
    
    casECMafterPMT(p_sys, ecm_after_pmt);
    
    casSetOutputCallback(p_sys, OutputCallBack, outfile);
    casSetEMSCallBack(p_sys, f_ems, p_sys_info);
    casSetScrambleCallBack(p_sys, f_scramble, p_sys_info);
    
    addKey2CAS(p_sys, FOR_ANY_PROGRAM, ENCRYPT_ALL, 
    	       (uint8_t *)p_sys_info->p_ecm, sizeof(cas_ecm_payload));
//    addKey2CAS(p_sys, FOR_ANY_PROGRAM, ENCRYPT_VIDEO_ONLY, (uint8_t *)&ecm, sizeof( cas_ecm_payload));
    
    /* read file, parse it, and then generate the new file */
    printf("Start ECM insertion...\n");
    fileSize = file2mmp(infilename, p_sys);
    retCode = casEOF(p_sys);
    printf("Done!\n");
    return;
}

static void  OutputCallBack (void *token, uint8_t *ts_buf, int ts_len)
{
	FILE *outfile = (FILE *)token;
	fwrite(ts_buf, 1, ts_len, outfile);
	return;
}

/* position -> the postion of ECM in the newfile */
/* key_buf: the original payload added by addKey2CAS */
/* out_buf is the buffer being inserted into the bitstream */
/* this function is called each time a ecm is generated */
static void  ECMCallBack (void *token, uint8_t *key_buf, int key_len, uint8_t *out_buf, int *out_len, long long  position)
{
    sys_info_s *p_sys_info = (sys_info_s *)token;
    FILE *ecm_file = NULL;
    cas_ecm_payload_p p_ecm = p_sys_info->p_ecm;
    cas_emm_payload_p p_emm = p_sys_info->p_emm;
    
    int encrypted_data_size = 0;
    uint8_t *p_ecm_buf = (uint8_t *)(p_ecm);
    
#ifndef HAVE_ENCRYPTION_LIB
    unsigned char access_key[KEY_LENGTH+1]  = "2222222222222222";
    unsigned char access_iv[BLOCK_SIZE+1]   = "0123456789012345";
    memcpy(p_ecm->iv, access_iv, BLOCK_SIZE);
    memcpy(p_ecm->key, access_key, KEY_LENGTH);
#else
    generate_key(p_ecm->iv, BLOCK_SIZE);
    generate_key(p_ecm->key, KEY_LENGTH);
#endif

    /* when everytime inserting the ECM, the key and IV are changed */
    p_ecm->key_len = KEY_LENGTH ;
    p_ecm->iv_len  = BLOCK_SIZE;
    


    /* save the ECM payload for later used in encrypting the trickplay stream */
    ecm_file = fopen(p_sys_info->out_ecm_file_name, "r+b");
    if(ecm_file)
    {
        ECMfile_info *info = GetECMFileInfo(ecm_file);
        /* save the ECM, not yet encrypted by EMM! */
        WriteOneECMItem(ecm_file, info, p_sys_info->ecm_no,
                        p_ecm_buf, sizeof(*p_ecm), position);
    	p_sys_info->ecm_no ++;
        fclose(ecm_file);
        CleanECMInfo(info);
    }

#ifdef HAVE_ENCRYPTION_LIB
    encrypted_data_size =  encryptBufferData(p_ecm_buf, sizeof(cas_ecm_payload), out_buf, *out_len, 
    	              p_emm->key, p_emm->key_len, p_emm->iv, p_emm->iv_len, (AES_MODE)p_emm->aes_mode);
    *out_len = encrypted_data_size;
#else
    memcpy(out_buf, p_ecm_buf, *out_len);
    *out_len = sizeof(cas_ecm_payload);
    
#endif

    return;
}

/* position -> the postion of ECM in the newfile */
/* key_buf: the original payload added by addKey2CAS */
/* out_buf is the buffer being inserted into the bitstream */
/* this function is called each time a ecm is generated */
static void  ECMIOnlyCallBack (void *token, uint8_t *key_buf, int key_len, uint8_t *out_buf, int *out_len, long long  position)
{
    sys_info_s *p_sys_info = (sys_info_s *)token;
    FILE *ecm_file = NULL;
    cas_ecm_payload_p p_ecm = p_sys_info->p_ecm;
    cas_emm_payload_p p_emm = p_sys_info->p_emm;
    
    int encrypted_data_size = 0;

    memcpy(p_ecm, key_buf, key_len);

#ifdef _DEBUG
    ecm_file = fopen(p_sys_info->out_ecm_file_name, "r+b");
    if(ecm_file)
    {
        ECMfile_info *info = GetECMFileInfo(ecm_file);
        /* save the ECM, not yet encrypted by EMM! */
        WriteOneECMItem(ecm_file, info, p_sys_info->ecm_no,
                        key_buf, key_len, position);
    	p_sys_info->ecm_no ++;
        fclose(ecm_file);
        CleanECMInfo(info);
    }
#endif

#ifdef HAVE_ENCRYPTION_LIB
    encrypted_data_size =  encryptBufferData(key_buf, key_len, out_buf, *out_len, 
    	              p_emm->key, p_emm->key_len, p_emm->iv, p_emm->iv_len, (AES_MODE)p_emm->aes_mode);
    *out_len = encrypted_data_size;
#endif
    return;
}

static void counterAddUInt32( uint8_t *op1, uint32_t op_size, uint32_t op2)
{
    uint32_t len;
    uint8_t  op2_8; 
    
    len = op_size - 1;
    op2_8 = op2 & 0xFF;
    while ( len >= 0 )
    {
        op1[len] = op1[len] + op2_8;
    	if ( op1[len] )
    		break;
    	len--;
    }

    len = op_size - 2;
    op2_8 = (op2 >> 8 )& 0xFF;
    while ( len >= 0 )
    {
        op1[len] = op1[len] + op2_8;
    	if ( op1[len] )
    		break;
    	len--;
    }

    len = op_size - 3;
    op2_8 = (op2 >> 16 ) & 0xFF;
    while ( len >= 0 )
    {
        op1[len] = op1[len] + op2_8;
    	if ( op1[len] )
    		break;
    	len--;
    }

    len = op_size - 4;
    op2_8 = (op2 >> 24 ) & 0xFF;
    while ( len >= 0 )
    {
        op1[len] = op1[len] + op2_8;
    	if ( op1[len] )
    		break;
    	len--;
    }
    
    return;  	
}

static void counterInc( uint8_t *op1, uint32_t op_size)
{
    uint32_t len;
    uint8_t  op2_8; 
    
    len = op_size - 1;
    while ( len >= 0 )
    {
    	if ( ++op1[len] )
    		break;
    	len--;
    }
   
    return;  	
}

static void TSCallBack(void *token, long long position)
{
    sys_info_s *p_sys_info = (sys_info_s *)token;
    cas_ecm_payload_p p_ecm = p_sys_info->p_ecm;
    FILE *ecm_file = NULL;
    
    /* inserting the ECM at proper positions */
    ecm_file = fopen(p_sys_info->in_ecm_file_name, "rb");
    if (ecm_file == NULL)
    {
        printf("Error: could not open ECM file, no ECM inserted!\n");
    	return;
    }
    else 
    {
        ECMfile_info *info;
        int ecm_index = 0;
        info = GetECMFileInfo(ecm_file);
        ecm_index = p_sys_info->b_reverse ? info->header.no_of_ECMs-1-p_sys_info->ecm_no_inserting : p_sys_info->ecm_no_inserting;
        
        ReWrOneECMItem(ecm_file, info, ecm_index, TRUE);
    	while (info->ecmItem.insert_offset == -1 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品福利视频一区二区三区| 久久99精品国产.久久久久久| 欧美蜜桃一区二区三区| 色综合色狠狠综合色| fc2成人免费人成在线观看播放| 国产美女在线观看一区| 成人午夜视频在线观看| 99re视频精品| 欧美无人高清视频在线观看| 欧美日韩日日摸| 欧美一级高清大全免费观看| 日韩欧美在线网站| 国产日产欧产精品推荐色| 中文子幕无线码一区tr| 亚洲精品日韩专区silk| 午夜伊人狠狠久久| 黄色日韩网站视频| 99久久精品情趣| 欧美日韩黄色一区二区| www日韩大片| 欧美国产日韩一二三区| 亚洲综合av网| 韩国欧美国产1区| av午夜一区麻豆| 国产欧美精品一区| 亚洲人123区| 日本亚洲欧美天堂免费| 国产乱子轮精品视频| 色综合天天做天天爱| 欧美精品vⅰdeose4hd| 国产欧美精品一区二区三区四区| 亚洲精品国产a| 极品少妇xxxx精品少妇偷拍| 91女神在线视频| 精品日产卡一卡二卡麻豆| 亚洲欧洲韩国日本视频| 美日韩一区二区| 色婷婷一区二区三区四区| 日韩免费观看高清完整版| 最好看的中文字幕久久| 经典一区二区三区| 欧美在线不卡一区| 中文字幕免费在线观看视频一区| 亚洲成人免费av| a美女胸又www黄视频久久| 日韩免费电影一区| 一区二区三区四区精品在线视频| 国产毛片一区二区| 日韩欧美在线观看一区二区三区| 自拍偷拍国产亚洲| 国产高清在线精品| 日韩一区二区免费高清| 亚洲地区一二三色| 色综合天天在线| 中文字幕第一区综合| 狠狠狠色丁香婷婷综合激情| 精品视频一区 二区 三区| 亚洲韩国一区二区三区| 国产一区在线视频| 日韩精品一区二区三区在线播放| 亚洲国产精品天堂| 色婷婷国产精品久久包臀 | 综合电影一区二区三区 | 国产精品网友自拍| 久久99久久久久| 91麻豆精品国产91久久久 | 激情深爱一区二区| 欧美日韩一卡二卡| 亚洲第一成年网| 欧美日韩一区视频| 五月婷婷色综合| 欧美福利一区二区| 日本成人在线网站| 欧美一区二区不卡视频| 奇米影视一区二区三区| 欧美一区二区三区色| 麻豆精品精品国产自在97香蕉| 91精品国产高清一区二区三区 | 精品国内片67194| 美女精品一区二区| 欧美成人三级在线| 国产激情一区二区三区四区| 亚洲国产精品精华液2区45| 高清视频一区二区| 国产精品国产三级国产三级人妇| 不卡的av电影在线观看| 亚洲精品免费看| 3d成人动漫网站| 国产在线精品一区二区三区不卡| 久久久久久久综合色一本| 国产a精品视频| 亚洲一区在线播放| 2017欧美狠狠色| 色综合天天综合色综合av| 亚洲综合色婷婷| 日韩精品一区二区在线观看| 国产福利精品导航| 亚洲三级视频在线观看| 91精品久久久久久蜜臀| 成人午夜电影久久影院| 一区二区三区产品免费精品久久75| 精品99一区二区三区| 国产精品原创巨作av| 亚洲欧美成人一区二区三区| 91.麻豆视频| 成人黄色软件下载| 日韩av电影天堂| 国产精品剧情在线亚洲| 7777精品伊人久久久大香线蕉的 | 精品精品欲导航| 不卡的av在线播放| 欧美aaaaa成人免费观看视频| 国产精品网站在线| 欧美一级日韩免费不卡| 97久久超碰国产精品电影| 免播放器亚洲一区| 亚洲欧美国产毛片在线| 国产亚洲精品福利| 欧美蜜桃一区二区三区| av在线播放不卡| 国模套图日韩精品一区二区 | 亚洲图片激情小说| 日韩欧美视频一区| 在线观看欧美日本| 成人免费观看男女羞羞视频| 久久精品国产亚洲5555| 伊人婷婷欧美激情| 亚洲国产精品ⅴa在线观看| 日韩欧美电影在线| 欧美日韩亚洲另类| 从欧美一区二区三区| 六月丁香婷婷色狠狠久久| 亚洲欧美偷拍三级| 国产精品美女久久久久aⅴ国产馆| 欧美美女网站色| 色综合久久精品| eeuss国产一区二区三区| 国产伦理精品不卡| 久草在线在线精品观看| 日韩中文字幕91| 亚洲国产三级在线| 一区二区三区加勒比av| 亚洲免费av在线| 亚洲女子a中天字幕| 亚洲天堂免费看| 国产精品亲子乱子伦xxxx裸| 国产亚洲欧洲997久久综合| 欧美成人综合网站| 欧美电影免费观看高清完整版 | 国产精品美女久久久久久久久| 精品国产一区二区三区久久影院| 欧美一区二区三区喷汁尤物| 欧美日韩精品电影| 欧美精品一卡二卡| 欧美精品丝袜中出| 欧美一区日韩一区| 欧美成人综合网站| 久久久久成人黄色影片| 国产日韩影视精品| 国产精品三级视频| 一区二区三区欧美| 午夜精品影院在线观看| 男男视频亚洲欧美| 狠狠色丁香久久婷婷综合_中| 国产精品资源网| 色综合久久99| 欧美一级艳片视频免费观看| 久久色视频免费观看| 国产精品国产三级国产普通话蜜臀| 亚洲色大成网站www久久九九| 亚洲国产乱码最新视频| 伦理电影国产精品| 成人不卡免费av| 欧美日韩在线播放一区| 91精品在线观看入口| 国产免费成人在线视频| 亚洲另类春色国产| 久久精品99久久久| 波多野结衣中文一区| 欧美剧在线免费观看网站| 亚洲精品一区二区三区蜜桃下载| 国产精品久久久久久久久动漫 | 亚洲欧洲www| 婷婷综合在线观看| 福利一区二区在线| 欧美日韩aaa| 国产精品免费丝袜| 日韩激情视频网站| 99r精品视频| 日韩美一区二区三区| 亚洲欧美日韩一区二区| 国内精品在线播放| 欧美无砖砖区免费| 亚洲欧洲在线观看av| 毛片基地黄久久久久久天堂| 91农村精品一区二区在线| 精品国产在天天线2019| 一片黄亚洲嫩模| 成人av在线播放网站| 精品少妇一区二区三区日产乱码|