* limitations under the License.
*/
+#include <memory>
+
#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<T_FILE_HEADER, int(*)(T_FILE_HEADER *)>;
+using DrmHeaderPtr = std::unique_ptr<T_DRM_HEADER, int(*)(T_DRM_HEADER *)>;
+using RoPtr = std::unique_ptr<T_RO, int(*)(T_RO *)>;
+
+using BufPtr = std::unique_ptr<unsigned char[]>;
+
+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));
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);
// 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;
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;
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)
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<char *>(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<char *>(m_pDecBuf) + m_decReadlen, buflen);
else
- {
- TADC_IF_MemCpy(pBuf, (char*)m_pDecBuf + m_DrmCurOffset + m_decReadlen, buflen);
- }
+ TADC_IF_MemCpy(pBuf, reinterpret_cast<char *>(m_pDecBuf) + m_DrmCurOffset + m_decReadlen, buflen);
m_decReadlen = m_decReadlen + buflen;
}
}
return TADC_SUCCESS;
-
-finish:
- TADC_IF_Free(pNewReadBuf);
- TADC_IF_Free(pTempReadBuf);
- return ret;
}
long long DrmFileHandler::GetCurBlockIndex(void)
*/
/**
- * @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
*
*/
#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;
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));
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;
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;
}
}
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);
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);
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));
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;
}
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) {
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);
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
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
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
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, };
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);