From b76320a83686403da73d2a9e5fc1632145207811 Mon Sep 17 00:00:00 2001 From: Kyungwook Tak Date: Mon, 14 Mar 2016 14:58:09 +0900 Subject: [PATCH] Fix 64bit build error and some goto-catch Change-Id: I8ad8941828b85b55300574cf5ed4c0fd27861179 Signed-off-by: Kyungwook Tak --- tadcore/DrmFileHandleMgr/DrmFileHandler.cpp | 301 +++++++++++----------------- tadcore/Svc/DrmTdcSvc.cpp | 222 +++++++++----------- tadcore/TADCCore/TADC_Core.cpp | 2 +- tadcore/include/TADC_Core.h | 2 +- 4 files changed, 212 insertions(+), 315 deletions(-) diff --git a/tadcore/DrmFileHandleMgr/DrmFileHandler.cpp b/tadcore/DrmFileHandleMgr/DrmFileHandler.cpp index e1a5a57..0776dff 100644 --- a/tadcore/DrmFileHandleMgr/DrmFileHandler.cpp +++ b/tadcore/DrmFileHandleMgr/DrmFileHandler.cpp @@ -14,61 +14,77 @@ * limitations under the License. */ +#include + #include "TADC_Core.h" #include "TADC_ErrorCode.h" #include "DTapps2Rights.h" #include "DrmFileHandler.h" #include "TADC_IF.h" +#define TDC_DECRYPT_BLOCKSIZE 512 + +namespace { + +using FileHeaderPtr = std::unique_ptr; +using DrmHeaderPtr = std::unique_ptr; +using RoPtr = std::unique_ptr; + +using BufPtr = std::unique_ptr; + +inline FileHeaderPtr createFileHeaderPtr(T_FILE_HEADER *ptr) +{ + return FileHeaderPtr(ptr, TADC_MEMFree_FileHeader); +} + +inline DrmHeaderPtr createDrmHeaderPtr(T_DRM_HEADER *ptr) +{ + return DrmHeaderPtr(ptr, TADC_MEMFree_DRMHeader); +} +inline RoPtr createRoPtr(T_RO *ptr) +{ + return RoPtr(ptr, TADC_MEMFree_RO); +} +inline BufPtr createBufPtr(unsigned char *ptr) +{ + return BufPtr(ptr); +} -#define TDC_DECRYPT_BLOCKSIZE 512 +} DrmFileHandler::DrmFileHandler(void) - : m_pFilePath(NULL) - , m_pCID(NULL) - , m_pCEK(NULL) - , m_pFP(NULL) + : m_pFilePath(nullptr) + , m_pCID(nullptr) + , m_pCEK(nullptr) + , m_pFP(nullptr) { } DrmFileHandler::~DrmFileHandler(void) { if (m_pFilePath != NULL) - { delete[] m_pFilePath; - } if (m_pCID != NULL) - { delete[] m_pCID; - } if (m_pCEK != NULL) - { delete[] m_pCEK; - } if (m_pDecBuf != NULL) - { delete[] m_pDecBuf; - } if (m_pFP != NULL) - { fclose(m_pFP); - } } int DrmFileHandler::Construct(const char* szDrmFilePath) { - T_FILE_HEADER t_FileHeader; - T_DRM_HEADER t_DRMHeader; - T_RO t_RO; - - int ret = TADC_SUCCESS; - bool bRet = true; + T_FILE_HEADER t_FileHeader; + T_DRM_HEADER t_DRMHeader; + T_RO t_RO; // 1. Check the file is TADC DRM file. memset(&t_FileHeader, 0x00, sizeof(t_FileHeader)); @@ -77,34 +93,29 @@ int DrmFileHandler::Construct(const char* szDrmFilePath) DRM_TAPPS_LOG("%s starts", __func__); - if (szDrmFilePath == NULL) - { + if (szDrmFilePath == nullptr) { DRM_TAPPS_EXCEPTION("Parameters NULL!"); - ret = TADC_PARAMETER_ERROR; - - goto finish; + return TADC_PARAMETER_ERROR; } - ret = TADC_GetDRMHeaderFromFile(szDrmFilePath, &t_FileHeader, &t_DRMHeader); - - if (ret < 0) - { + int ret = TADC_GetDRMHeaderFromFile(szDrmFilePath, &t_FileHeader, &t_DRMHeader); + if (ret < 0) { DRM_TAPPS_EXCEPTION("Error : TADC_GetDRMHeaderFromFile() - %s TADC Error Code - %d", szDrmFilePath, ret); - ret = TADC_NOTTADCFILE_ERROR; - - goto finish; + return TADC_NOTTADCFILE_ERROR; } + auto fileHeaderPtr = createFileHeaderPtr(&t_FileHeader); + auto drmHeaderPtr = createDrmHeaderPtr(&t_DRMHeader); + // 2. Validate license and get the CEK for the DRM file - bRet = DTappsGetCEK((char*)t_DRMHeader.CID, &t_RO); - if (bRet == false) - { + bool bRet = DTappsGetCEK((char*)t_DRMHeader.CID, &t_RO); + if (!bRet) { DRM_TAPPS_EXCEPTION("Error : DTappsGetCEK() - %s", t_DRMHeader.CID); - ret = TADC_GET_CEK_ERROR; - - goto finish; + return TADC_GET_CEK_ERROR; } + auto roPtr = createRoPtr(&t_RO); + // 3. Setting the member variable m_pFilePath = new unsigned char[strlen(szDrmFilePath) + 1]; memset(m_pFilePath, 0x00, strlen(szDrmFilePath) + 1); @@ -124,12 +135,9 @@ int DrmFileHandler::Construct(const char* szDrmFilePath) // 4. Open the DRM file and set the filepointer to member variable m_pFP = fopen(szDrmFilePath, "rb"); - if (m_pFP == NULL) - { + if (m_pFP == nullptr) { DRM_TAPPS_EXCEPTION("Error : fopen() - %s", szDrmFilePath); - ret = TADC_FILE_OPEN_ERROR; - - goto finish; + return TADC_FILE_OPEN_ERROR; } m_PlaintextStartOffset = t_FileHeader.Offset1 + 35 + t_DRMHeader.XmlSize; @@ -138,12 +146,9 @@ int DrmFileHandler::Construct(const char* szDrmFilePath) m_OriginEndOffset = ftell(m_pFP); m_plaintextSize = m_OriginEndOffset - m_PlaintextStartOffset; - if (m_plaintextSize != t_DRMHeader.PlaintextSize) - { + if (m_plaintextSize != t_DRMHeader.PlaintextSize) { DRM_TAPPS_EXCEPTION("Error : plaintext file size incorrect. real = %ld, header = %ld", m_plaintextSize, t_DRMHeader.PlaintextSize); - ret = TADC_FILE_OPEN_ERROR; - - goto finish; + return TADC_FILE_OPEN_ERROR; } m_DrmEndOffset = m_plaintextSize; @@ -178,13 +183,6 @@ int DrmFileHandler::Construct(const char* szDrmFilePath) DrmDecryptBlocks(); return TADC_SUCCESS; - -finish: - TADC_MEMFree_FileHeader(&t_FileHeader); - TADC_MEMFree_DRMHeader(&t_DRMHeader); - TADC_MEMFree_RO(&t_RO); - - return ret; } int DrmFileHandler::DrmSeek(long long offset, int origin) @@ -279,208 +277,144 @@ long long DrmFileHandler::DrmTell(void) int DrmFileHandler::DrmDecryptBlocks(void) { - - bool bRet = true; int ret = TADC_SUCCESS; const char* packagePath = (const char*)m_pFilePath; - long long EncBlockCnt = 0; - T_FILE_HEADER t_FileHeader; - T_DRM_HEADER t_DRMHeader; - T_DEVICE_INFO t_DeviceInfo; - T_RO t_RO; + T_FILE_HEADER t_FileHeader; + T_DRM_HEADER t_DRMHeader; + T_DEVICE_INFO t_DeviceInfo; + T_RO t_RO; DrmTdcFileHeader fileHeader; - ULONG DecLen = 0; - ULONG ReadLen = 0; - ULONG k = 0, l= 0; - // 1. Check the file is TADC DRM file. memset(&t_FileHeader, 0x00, sizeof(t_FileHeader)); memset(&t_DRMHeader, 0x00, sizeof(T_DRM_HEADER)); memset(&t_DeviceInfo, 0x00, sizeof(T_DEVICE_INFO)); memset(&t_RO, 0x00, sizeof(T_RO)); - bRet = DrmTdcGetFileHeader(packagePath, &fileHeader); - if (bRet == FALSE) - { + bool bRet = DrmTdcGetFileHeader(packagePath, &fileHeader); + if (bRet == FALSE) { DRM_TAPPS_EXCEPTION("DrmDecryptBlocks Error : DrmTdcGetFileHeader()"); - ret = TADC_GET_FILEHEADER_ERROR; - - goto finish; + return TADC_GET_FILEHEADER_ERROR; } bRet = DTappsGetCEK(fileHeader.cid, &t_RO); - if(bRet == FALSE) - { + if (bRet == FALSE) { DRM_TAPPS_SECURE_EXCEPTION("DrmDecryptBlocks Error : DTappsGetCEK() packagePath=%s, fileHeader.cid=%s", packagePath, fileHeader.cid); - ret = TADC_GET_CEK_ERROR; - - goto finish; + return TADC_GET_CEK_ERROR; } + + auto roPtr = createRoPtr(&t_RO); + DRM_TAPPS_SECURE_LOG("fileHeader.cid=%s, t_RO.t_Content.CEK=%s", fileHeader.cid, t_RO.t_Content.CEK); - if ((ret = TADC_SetDeviceInfo(&t_DeviceInfo) ) == TADC_GETDUID_ERROR) - { + if ((ret = TADC_SetDeviceInfo(&t_DeviceInfo) ) == TADC_GETDUID_ERROR) { DRM_TAPPS_EXCEPTION("DrmDecryptBlocks Error : TADC_SetDeviceInfo(), TADC Error Code - %d", ret); - ret = TADC_FILE_READ_ERROR; - - goto finish; + return TADC_FILE_READ_ERROR; } ret = TADC_GetDRMHeaderFromFile(packagePath, &t_FileHeader, &t_DRMHeader); - if (ret < 0) - { + if (ret < 0) { DRM_TAPPS_EXCEPTION("DrmDecryptBlocks Error : TADC_GetDRMHeaderFromFile() - %s, TADC Error Code - %d", packagePath, ret); - ret = TADC_NOTTADCFILE_ERROR; - - goto finish; + return TADC_NOTTADCFILE_ERROR; } + /* resource to be scoped-free */ + auto fileHeaderPtr = createFileHeaderPtr(&t_FileHeader); + //Get CEK - if ((ret = TADC_GetCEK(&t_DeviceInfo, &t_RO, &t_DRMHeader )) < 0) - { + if ((ret = TADC_GetCEK(&t_DeviceInfo, &t_RO, &t_DRMHeader)) < 0) { DRM_TAPPS_EXCEPTION("DrmDecryptBlocks Error: TADC_GetCEK, TADC Error Code - %d", ret); - ret = TADC_GET_CEK_ERROR; - - goto finish; + return TADC_GET_CEK_ERROR; } - if (fseek(m_pFP, m_PlaintextStartOffset, SEEK_SET ) != 0) - { - DRM_TAPPS_EXCEPTION("DrmDecryptBlocks Error :fseek failed."); - ret = TADC_FILE_READ_ERROR; + /* resource to be scoped-free */ + auto drmHeaderPtr = createDrmHeaderPtr(&t_DRMHeader); - goto finish; + if (fseek(m_pFP, m_PlaintextStartOffset, SEEK_SET) != 0) { + DRM_TAPPS_EXCEPTION("DrmDecryptBlocks Error :fseek failed."); + return TADC_FILE_READ_ERROR; } - if (m_encryptionRange == -1) - { - EncBlockCnt = m_blockCnt; - } - else - { + auto EncBlockCnt = m_blockCnt; + if (m_encryptionRange != -1) EncBlockCnt = m_encryptionRange; - } - m_pDecBuf = new unsigned char[(EncBlockCnt * TDC_DECRYPT_BLOCKSIZE) + 1]; - if (m_pDecBuf == NULL) - { + m_pDecBuf = new (std::nothrow) unsigned char[(EncBlockCnt * TDC_DECRYPT_BLOCKSIZE) + 1]; + if (m_pDecBuf == nullptr) { DRM_TAPPS_EXCEPTION("DrmRead Error : m_pDecBuf Memory allocation failed"); return TADC_MEMAlOC_ERROR; } - ReadLen = fread(m_pDecBuf, 1, EncBlockCnt * TDC_DECRYPT_BLOCKSIZE, m_pFP); + auto ReadLen = fread(m_pDecBuf, 1, EncBlockCnt * TDC_DECRYPT_BLOCKSIZE, m_pFP); - for (k = 0 ; k < ReadLen ; k += 512) - { - if (l < EncBlockCnt) - { - DecLen = ReadLen - k; + long long l = 0; + for (size_t k = 0 ; k < ReadLen ; k += 512) { + if (l < EncBlockCnt) { + auto DecLen = ReadLen - k; DecLen = ( DecLen > 512) ? 512 : DecLen; - if ((ret = TADC_DecryptBlock((char*)m_pDecBuf + k, DecLen, &t_DRMHeader)) < 0) - { + if ((ret = TADC_DecryptBlock((char*)m_pDecBuf + k, DecLen, &t_DRMHeader)) < 0) { DRM_TAPPS_EXCEPTION("DrmDecryptBlocks Error : TADC_DecryptBlock, TADC Error Code - %d", ret); - ret = TADC_DECRYPT_PACKAGE_ERROR; - goto finish; + return TADC_DECRYPT_PACKAGE_ERROR; } } l += 1; } -finish: - TADC_MEMFree_FileHeader(&t_FileHeader); - TADC_MEMFree_DRMHeader(&t_DRMHeader); - TADC_MEMFree_RO(&t_RO); return ret; } int DrmFileHandler::DrmRead(void* pBuf, long long buflen, long long* pReadLen) { - unsigned char *pNewReadBuf = NULL; - unsigned char *pTempReadBuf = NULL; - int ret = TADC_SUCCESS; - - ULONG ReadLen = 0; - long long EncBlockCnt = 0; - - if (m_encryptionRange == -1) - { - EncBlockCnt = m_blockCnt; - } - else - { + auto EncBlockCnt = m_blockCnt; + if (m_encryptionRange != -1) EncBlockCnt = m_encryptionRange; - } - if (m_DrmCurOffset > EncBlockCnt * TDC_DECRYPT_BLOCKSIZE) - { - pNewReadBuf = (TADC_U8*)TADC_IF_Malloc(buflen + 1); - if (pNewReadBuf == NULL) - { + if (m_DrmCurOffset > EncBlockCnt * TDC_DECRYPT_BLOCKSIZE) { + auto pNewReadBuf = BufPtr(new (std::nothrow) TADC_U8[buflen + 1]); + if (!pNewReadBuf) { DRM_TAPPS_EXCEPTION("DrmRead Error : pNewReadBuf Malloc Fail"); return TADC_MEMAlOC_ERROR; } - ReadLen = fread(pNewReadBuf, 1, buflen, m_pFP); + auto ReadLen = fread(pNewReadBuf.get(), 1, buflen, m_pFP); - TADC_IF_MemCpy(pBuf , pNewReadBuf , ReadLen); - TADC_IF_Free(pNewReadBuf); + TADC_IF_MemCpy(pBuf, pNewReadBuf.get(), ReadLen); *pReadLen = ReadLen; - } - else - { - if (buflen > EncBlockCnt * TDC_DECRYPT_BLOCKSIZE - m_DrmCurOffset) - { - pTempReadBuf = (TADC_U8*)TADC_IF_Malloc((buflen) + 1); - if (pTempReadBuf == NULL) - { + } else { + if (buflen > EncBlockCnt * TDC_DECRYPT_BLOCKSIZE - m_DrmCurOffset) { + auto pTempReadBuf = createBufPtr(new (std::nothrow) TADC_U8[buflen + 1]); + if (!pTempReadBuf) { DRM_TAPPS_EXCEPTION("DrmRead Error : pTempReadBuf Malloc Fail"); - ret = TADC_MEMAlOC_ERROR; - - goto finish; + return TADC_MEMAlOC_ERROR; } m_decReadlen = (EncBlockCnt * TDC_DECRYPT_BLOCKSIZE) - m_DrmCurOffset; - TADC_IF_MemCpy(pTempReadBuf , (char*)m_pDecBuf + m_DrmCurOffset , m_decReadlen); + TADC_IF_MemCpy(pTempReadBuf.get(), reinterpret_cast(m_pDecBuf) + m_DrmCurOffset, m_decReadlen); m_extraReadlen = buflen - m_decReadlen; - if (fseek(m_pFP, m_decReadlen, SEEK_CUR) != 0) - { + if (fseek(m_pFP, m_decReadlen, SEEK_CUR) != 0) { DRM_TAPPS_EXCEPTION("DrmRead Error: fseek failed."); - ret = TADC_FILE_READ_ERROR; - - goto finish; + return TADC_FILE_READ_ERROR; } - pNewReadBuf = (TADC_U8*)TADC_IF_Malloc(m_extraReadlen + 1); - if (pNewReadBuf == NULL) - { + auto pNewReadBuf = BufPtr(new (std::nothrow) TADC_U8[m_extraReadlen + 1]); + if (!pNewReadBuf) { DRM_TAPPS_EXCEPTION("DrmRead Error : pNewReadBuf Malloc Fail"); - ret = TADC_MEMAlOC_ERROR; - goto finish; + return TADC_MEMAlOC_ERROR; } - ReadLen = fread(pNewReadBuf, 1, m_extraReadlen, m_pFP); - - TADC_IF_MemCpy((char*)pTempReadBuf + m_decReadlen, pNewReadBuf , ReadLen); - TADC_IF_MemCpy(pBuf , pTempReadBuf , buflen); + auto ReadLen = fread(pNewReadBuf.get(), 1, m_extraReadlen, m_pFP); - TADC_IF_Free(pNewReadBuf); - TADC_IF_Free(pTempReadBuf); - } - else - { + TADC_IF_MemCpy((char*)pTempReadBuf.get() + m_decReadlen, pNewReadBuf.get(), ReadLen); + TADC_IF_MemCpy(pBuf, pTempReadBuf.get(), buflen); + } else { if (m_DrmCurOffset == 0) - { - TADC_IF_MemCpy(pBuf, (char*)m_pDecBuf + m_decReadlen , buflen); - } + TADC_IF_MemCpy(pBuf, reinterpret_cast(m_pDecBuf) + m_decReadlen, buflen); else - { - TADC_IF_MemCpy(pBuf, (char*)m_pDecBuf + m_DrmCurOffset + m_decReadlen, buflen); - } + TADC_IF_MemCpy(pBuf, reinterpret_cast(m_pDecBuf) + m_DrmCurOffset + m_decReadlen, buflen); m_decReadlen = m_decReadlen + buflen; } @@ -488,11 +422,6 @@ int DrmFileHandler::DrmRead(void* pBuf, long long buflen, long long* pReadLen) } return TADC_SUCCESS; - -finish: - TADC_IF_Free(pNewReadBuf); - TADC_IF_Free(pTempReadBuf); - return ret; } long long DrmFileHandler::GetCurBlockIndex(void) diff --git a/tadcore/Svc/DrmTdcSvc.cpp b/tadcore/Svc/DrmTdcSvc.cpp index 01ab669..cf2d49d 100644 --- a/tadcore/Svc/DrmTdcSvc.cpp +++ b/tadcore/Svc/DrmTdcSvc.cpp @@ -15,10 +15,10 @@ */ /** - * @file DrmTdcSvc.cpp - * @brief This file is for TADC Testcase temporarily. - * @author Sangil Yoon (si83.yoon@samsung.com) - * @version 1.0 + * @file DrmTdcSvc.cpp + * @brief This file is for TADC Testcase temporarily. + * @author Sangil Yoon (si83.yoon@samsung.com) + * @version 1.0 * */ @@ -29,29 +29,28 @@ #include "DrmTdcSvc.h" -#define DHINFO_MAX 100 -#define DHINFO_REQIDLEN 20 +#define DHINFO_MAX 100 +#define DHINFO_REQIDLEN 20 -#define TDC_DECRYPT_IOLEN 1024*1024 // 1024 Kbyte +#define TDC_DECRYPT_IOLEN 1024 * 1024 // 1024 Kbyte //DH Session Info Structure typedef struct { - BYTE hashReqID[DHINFO_MAX][DHINFO_REQIDLEN]; //LicenseRequest Request ID Hash 20byte - T_ROACQ_INFO t_ROAcqInfo[DHINFO_MAX]; //DH Info + BYTE hashReqID[DHINFO_MAX][DHINFO_REQIDLEN]; //LicenseRequest Request ID Hash 20byte + T_ROACQ_INFO t_ROAcqInfo[DHINFO_MAX]; //DH Info } DrmTdcDHInfo; -static DrmTdcDHInfo g_DrmTdcDHInfo; -static BOOL g_DrmTdcDHFlag = FALSE; +static DrmTdcDHInfo g_DrmTdcDHInfo; +static BOOL g_DrmTdcDHFlag = FALSE; -static char g_sTimeStamp[21]; //2011.03.08, GMT ("CCCC-YY-MMThh:mm:ssZ") +static char g_sTimeStamp[21]; //2011.03.08, GMT ("CCCC-YY-MMThh:mm:ssZ") -bool DrmTdcGetFileHeader -( - IN const char *pTADCFilepath, //TDC DRM File Path - IN OUT DrmTdcFileHeader *pFileHeader //File Header Info ( CID, License URL ) +bool DrmTdcGetFileHeader( + IN const char *pTADCFilepath, //TDC DRM File Path + IN OUT DrmTdcFileHeader *pFileHeader //File Header Info ( CID, License URL ) ) { T_FILE_HEADER t_FileHeader; @@ -93,28 +92,19 @@ bool DrmTdcGetFileHeader return TRUE; } -bool DrmTdcDecryptPackage -( - IN const char *pTADCFilepath, //TDC DRM File Path - IN const char *pLicenseBuf, //Decrypted Rights Object - IN unsigned int licenseBufLen, //pDecLicenseBuf Length - IN const char *pDecryptedFile //Decrypted File Path -) +bool DrmTdcDecryptPackage( + IN const char *pTADCFilepath, + IN const char *pLicenseBuf, + IN unsigned int licenseBufLen, + IN const char *pDecryptedFile) { - T_FILE_HEADER t_FileHeader; - T_DRM_HEADER t_DRMHeader; - T_DEVICE_INFO t_DeviceInfo; - T_RO t_RO; - - - long long offset = 0, BlockCnt = 0, EncBlockCnt = 0, size1 = 0, size2 = 0; - FILE *hFile1 = INVALID_HOBJ; //TDC drm file - FILE *hFile2 = INVALID_HOBJ; //Decrypted file - - //unsigned char tempbuf[512]; // Decrypt Block - unsigned char *pReadBuf; // File Read buffer + T_FILE_HEADER t_FileHeader; + T_DRM_HEADER t_DRMHeader; + T_DEVICE_INFO t_DeviceInfo; + T_RO t_RO; - ULONG i = 0, k = 0, DecLen = 0; + FILE *hFile1 = INVALID_HOBJ; //TDC drm file + FILE *hFile2 = INVALID_HOBJ; //Decrypted file //2011.03.08, init memset(&t_FileHeader, 0x00, sizeof(T_FILE_HEADER)); @@ -137,7 +127,7 @@ bool DrmTdcDecryptPackage return FALSE; } - pReadBuf = (TADC_U8*)TADC_IF_Malloc(TDC_DECRYPT_IOLEN); + auto pReadBuf = (TADC_U8*)TADC_IF_Malloc(TDC_DECRYPT_IOLEN); if (!pReadBuf) { DRM_TAPPS_EXCEPTION("DrmTdcDecryptPackage Error : pReadBuf Malloc Fail"); return FALSE; @@ -156,16 +146,9 @@ bool DrmTdcDecryptPackage if (TADC_GetResponseROInfo((unsigned char*)pLicenseBuf, &t_RO) < 0) { DRM_TAPPS_EXCEPTION("DrmTdcDecryptPackage Error : TADC_GetResponseROInfo"); TADC_MEMFree_FileHeader(&t_FileHeader); - DRM_TAPPS_EXCEPTION("DrmTdcDecryptPackage Debug : 1"); - TADC_MEMFree_DRMHeader(&t_DRMHeader); - DRM_TAPPS_EXCEPTION("DrmTdcDecryptPackage Debug : 2"); - TADC_MEMFree_RO(&t_RO); - DRM_TAPPS_EXCEPTION("DrmTdcDecryptPackage Debug : 3"); - TADC_IF_Free(pReadBuf); - DRM_TAPPS_EXCEPTION("DrmTdcDecryptPackage Debug : 4"); return FALSE; } @@ -203,33 +186,31 @@ bool DrmTdcDecryptPackage } fseek(hFile1, 0, SEEK_END); - size1 = ftell(hFile1); + auto size1 = ftell(hFile1); - offset = t_FileHeader.Offset1 + 35 + t_DRMHeader.XmlSize; - fseek(hFile1, offset, SEEK_SET ); + auto offset = t_FileHeader.Offset1 + 35 + t_DRMHeader.XmlSize; + fseek(hFile1, offset, SEEK_SET); - size2 = size1 - offset; //plain file size - BlockCnt = (size2 / 512) + ( (size2 % 512) ? 1 : 0 ); + auto size2 = size1 - offset; //plain file size + auto BlockCnt = (size2 / 512) + ((size2 % 512) ? 1 : 0); - if (t_DRMHeader.EncryptionRange == -1) - EncBlockCnt = BlockCnt; - else + auto EncBlockCnt = BlockCnt; + if (t_DRMHeader.EncryptionRange != -1) EncBlockCnt = t_DRMHeader.EncryptionRange; - i = 0; - + long int i = 0; while (i < BlockCnt) { - ULONG ReadLen = fread(pReadBuf, 1, TDC_DECRYPT_IOLEN, hFile1); + size_t ReadLen = fread(pReadBuf, 1, TDC_DECRYPT_IOLEN, hFile1); if (ReadLen < 1) break; - for (k = 0 ; k < ReadLen ; k += 512) { + for (size_t k = 0; k < ReadLen; k += 512) { if (i < EncBlockCnt) { - DecLen = ReadLen - k; + size_t DecLen = ReadLen - k; DecLen = (DecLen > 512) ? 512 : DecLen; - if (TADC_DecryptBlock((char*)pReadBuf + k, DecLen, &t_DRMHeader) < 0 ) { + if (TADC_DecryptBlock((char *)pReadBuf + k, DecLen, &t_DRMHeader) < 0) { DRM_TAPPS_EXCEPTION("DrmTdcDecryptPackage Error : TADC_DecryptBlock"); fclose(hFile1); fclose(hFile2); @@ -245,8 +226,8 @@ bool DrmTdcDecryptPackage fwrite(pReadBuf, 1, ReadLen, hFile2); } - fclose(hFile1); //sample drm file - fclose(hFile2); //plain file + fclose(hFile1); //sample drm file + fclose(hFile2); //plain file TADC_MEMFree_FileHeader(&t_FileHeader); TADC_MEMFree_DRMHeader(&t_DRMHeader); @@ -256,25 +237,17 @@ bool DrmTdcDecryptPackage return TRUE; } -bool DrmTdcDecryptPackage2 -( - IN const char *pTADCFilepath, //TDC DRM File Path - IN T_RO t_RO, //RO Info - IN const char *pDecryptedFile //Decrypted File Path -) +bool DrmTdcDecryptPackage2( + IN const char *pTADCFilepath, + IN T_RO t_RO, + IN const char *pDecryptedFile) { - T_FILE_HEADER t_FileHeader; - T_DRM_HEADER t_DRMHeader; - T_DEVICE_INFO t_DeviceInfo; - - - long long offset = 0, BlockCnt = 0, EncBlockCnt = 0, size1 = 0, size2 = 0; - FILE* hFile1 = INVALID_HOBJ; //TDC drm file - FILE* hFile2 = INVALID_HOBJ; //Decrypted file - - unsigned char *pReadBuf; // File Read buffer + T_FILE_HEADER t_FileHeader; + T_DRM_HEADER t_DRMHeader; + T_DEVICE_INFO t_DeviceInfo; - ULONG i = 0, k = 0, DecLen = 0; + FILE *hFile1 = INVALID_HOBJ; //TDC drm file + FILE *hFile2 = INVALID_HOBJ; //Decrypted file //2011.03.08, init memset(&t_FileHeader, 0x00, sizeof(T_FILE_HEADER)); @@ -292,7 +265,7 @@ bool DrmTdcDecryptPackage2 return FALSE; } - pReadBuf = (TADC_U8*)TADC_IF_Malloc(TDC_DECRYPT_IOLEN); + auto pReadBuf = (TADC_U8*)TADC_IF_Malloc(TDC_DECRYPT_IOLEN); if (!pReadBuf) { DRM_TAPPS_EXCEPTION("DrmTdcDecryptPackage2 Error : pReadBuf Malloc Fail"); return FALSE; @@ -337,30 +310,28 @@ bool DrmTdcDecryptPackage2 } fseek(hFile1, 0, SEEK_END); - size1 = ftell(hFile1); + auto size1 = ftell(hFile1); - offset = t_FileHeader.Offset1 + 35 + t_DRMHeader.XmlSize; + auto offset = t_FileHeader.Offset1 + 35 + t_DRMHeader.XmlSize; fseek(hFile1, offset, SEEK_SET ); - size2 = size1 - offset; //plain file size - BlockCnt = (size2 / 512) + ((size2 % 512) ? 1 : 0); + auto size2 = size1 - offset; //plain file size + auto BlockCnt = (size2 / 512) + ((size2 % 512) ? 1 : 0); - if (t_DRMHeader.EncryptionRange == -1) - EncBlockCnt = BlockCnt; - else + auto EncBlockCnt = BlockCnt; + if (t_DRMHeader.EncryptionRange != -1) EncBlockCnt = t_DRMHeader.EncryptionRange; - i = 0; - + long int i = 0; while (i < BlockCnt) { - ULONG ReadLen = fread(pReadBuf, 1, TDC_DECRYPT_IOLEN, hFile1); + auto ReadLen = fread(pReadBuf, 1, TDC_DECRYPT_IOLEN, hFile1); if (ReadLen < 1) break; - for (k = 0 ; k < ReadLen ; k += 512) { + for (size_t k = 0 ; k < ReadLen ; k += 512) { if (i < EncBlockCnt) { - DecLen = ReadLen - k; + auto DecLen = ReadLen - k; DecLen = ( DecLen > 512) ? 512 : DecLen; if (TADC_DecryptBlock((char*)pReadBuf + k, DecLen, &t_DRMHeader) < 0) { @@ -378,8 +349,8 @@ bool DrmTdcDecryptPackage2 fwrite(pReadBuf, 1, ReadLen, hFile2); } - fclose(hFile1); //sample drm file - fclose(hFile2); //plain file + fclose(hFile1); //sample drm file + fclose(hFile2); //plain file TADC_MEMFree_FileHeader(&t_FileHeader); TADC_MEMFree_DRMHeader(&t_DRMHeader); @@ -388,19 +359,18 @@ bool DrmTdcDecryptPackage2 return TRUE; } -bool DrmTdcGeneratePurchaseRequest -( - IN const char *pTADCFilepath, //TDC DRM File Path - IN OUT char *pReqBuf, //Purchase Request Data - IN OUT unsigned int *pReqBufLen, //IN : pReqBuf Length, OUT : Purchase Request Data String Size ( including null terminator ) - IN OUT char *pLicenseUrl, //License Acquisition URL Data - IN OUT unsigned int *pLicenseUrlLen //IN : pLicenseUrl Length, OUT : License Server URL Data String Size ( including null terminator ) +bool DrmTdcGeneratePurchaseRequest( + IN const char *pTADCFilepath, //TDC DRM File Path + IN OUT char *pReqBuf, //Purchase Request Data + IN OUT unsigned int *pReqBufLen, //IN : pReqBuf Length, OUT : Purchase Request Data String Size ( including null terminator ) + IN OUT char *pLicenseUrl, //License Acquisition URL Data + IN OUT unsigned int *pLicenseUrlLen //IN : pLicenseUrl Length, OUT : License Server URL Data String Size ( including null terminator ) ) { - T_FILE_HEADER t_FileHeader; - T_DRM_HEADER t_DRMHeader; - T_DEVICE_INFO t_DeviceInfo; - char ReqLicBuf[REQU_MAXSIZE] = {0}; //Request buff max size. (2011.03.08) + T_FILE_HEADER t_FileHeader; + T_DRM_HEADER t_DRMHeader; + T_DEVICE_INFO t_DeviceInfo; + char ReqLicBuf[REQU_MAXSIZE] = {0}; //Request buff max size. (2011.03.08) //null check if (!pTADCFilepath @@ -462,22 +432,21 @@ bool DrmTdcGeneratePurchaseRequest return TRUE; } -int DrmTdcGenerateLicenseRequest -( - IN const char *pRespBuf, //Response Data String of the Purchase Request ( Null terminator string ) - IN unsigned int respBufLen, //pResBuf Length - IN OUT char *pReqBuf, //License Request Data - IN OUT unsigned int *pReqBufLen, //IN : pReqBuf Length, OUT : Rights Request Data String Size ( including null terminator ) - IN OUT char *pLicenseUrl, //License Acquisition URL Data - IN OUT unsigned int *pLicenseUrlLen //IN : pLicenseUrl Length, OUT : Rights Issuer Server URL Data String Size ( including null terminator ) +int DrmTdcGenerateLicenseRequest( + IN const char *pRespBuf, //Response Data String of the Purchase Request ( Null terminator string ) + IN unsigned int respBufLen, //pResBuf Length + IN OUT char *pReqBuf, //License Request Data + IN OUT unsigned int *pReqBufLen, //IN : pReqBuf Length, OUT : Rights Request Data String Size ( including null terminator ) + IN OUT char *pLicenseUrl, //License Acquisition URL Data + IN OUT unsigned int *pLicenseUrlLen //IN : pLicenseUrl Length, OUT : Rights Issuer Server URL Data String Size ( including null terminator ) ) { - T_ROACQ_INFO *pt_ROAcqInfo = NULL; + T_ROACQ_INFO *pt_ROAcqInfo = NULL; - char ReqROBuf[REQU_MAXSIZE] = {0}; //Request buff max size. (2011.03.08) - BYTE sha1_tmp[DHINFO_REQIDLEN] = {0}; - int idx = 0; - unsigned char ROVer[2]; //2011.03.08 + char ReqROBuf[REQU_MAXSIZE] = {0}; //Request buff max size. (2011.03.08) + BYTE sha1_tmp[DHINFO_REQIDLEN] = {0}; + int idx = 0; + unsigned char ROVer[2]; //2011.03.08 //null check if (!pRespBuf @@ -554,19 +523,18 @@ int DrmTdcGenerateLicenseRequest return TADC_SUCCESS; } -int DrmTdcDecryptLicense -( - IN const char *pRespBuf, //Response Data String of the Rights Request ( Null terminator string ) - IN unsigned int respBufLen, //pResBuf Length - IN OUT char *pDecLicenseBuf, //Decrypted Rights Object - IN OUT unsigned int *decLicenseBufLen //IN : pDecLicenseBuf Length, OUT : Decrypted Rights Object String Size ( including null terminator ) +int DrmTdcDecryptLicense( + IN const char *pRespBuf, //Response Data String of the Rights Request ( Null terminator string ) + IN unsigned int respBufLen, //pResBuf Length + IN OUT char *pDecLicenseBuf, //Decrypted Rights Object + IN OUT unsigned int *decLicenseBufLen //IN : pDecLicenseBuf Length, OUT : Decrypted Rights Object String Size ( including null terminator ) ) { - T_ROACQ_INFO *pt_ROAcqInfo=NULL; - T_RO t_RO; - int ret = 0; - int idx = 0; - BYTE sha1_tmp[20] = {0}; + T_ROACQ_INFO *pt_ROAcqInfo = NULL; + T_RO t_RO; + int ret = 0; + int idx = 0; + BYTE sha1_tmp[20] = {0}; //null check if (!pRespBuf diff --git a/tadcore/TADCCore/TADC_Core.cpp b/tadcore/TADCCore/TADC_Core.cpp index 0fe1ece..86fbc6b 100644 --- a/tadcore/TADCCore/TADC_Core.cpp +++ b/tadcore/TADCCore/TADC_Core.cpp @@ -1428,7 +1428,7 @@ int TADC_GetCEK(T_DEVICE_INFO *t_DeviceInfo, T_RO *t_RODB, T_DRM_HEADER *t_DRMHe return -1; } -int TADC_DecryptBlock( char* pbBuffer, int nSize, T_DRM_HEADER *t_DRMHeader) +int TADC_DecryptBlock(char *pbBuffer, int nSize, const T_DRM_HEADER *t_DRMHeader) { TADC_U8 key[16] = {0, }; TADC_U8 iv[16] = {0, }; diff --git a/tadcore/include/TADC_Core.h b/tadcore/include/TADC_Core.h index 5df7b73..928538d 100644 --- a/tadcore/include/TADC_Core.h +++ b/tadcore/include/TADC_Core.h @@ -177,7 +177,7 @@ int TADC_GetResponseRO(unsigned char *inBuffer, T_ROACQ_INFO *t_ROAcqInfo, T_RO int TADC_GetResponseROInfo(LPBYTE pszXML, T_RO *t_RO); int TADC_GetHashReqID(unsigned char *inBuffer, unsigned char *hashReqID); int TADC_GetCEK(T_DEVICE_INFO *t_DeviceInfo, T_RO *t_RODB, T_DRM_HEADER *t_DRMHeader ); -int TADC_DecryptBlock(char* pbBuffer, int nSize, T_DRM_HEADER *t_DRMHeader); +int TADC_DecryptBlock(char* pbBuffer, int nSize, const T_DRM_HEADER *t_DRMHeader); int TADC_VerifyROSignature(IN LPBYTE pszXML); DWORD TADC_GetLastError(void); int TADC_MEMFree_RO(T_RO *t_ro); -- 2.7.4