Synchronize with tizen 2.4
[platform/core/security/drm-service-core-tizen.git] / tadcore / include / TADC_Core.h
1 /*
2  * Copyright (c) 2000-2015 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Flora License, Version 1.1 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://floralicense.org/license/
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #pragma once
18
19 #include <stdio.h>
20 #include <stdlib.h>
21 #include <string.h>
22 #include <memory.h>
23
24 #include "CPointerArray.h"
25 #include "CXMLAttribute.h"
26 #include "CXMLElement.h"
27 #include "CXMLFile.h"
28
29 #define         STACKTRACE(pszFunction)         // RETAILMSG(1, pszFunction);
30 #undef ERRORMSG
31 #define         ERRORMSG        //-1
32 #define         IF_ERROR_RETURN( error , errcode)       if(error < 0){DRM_TAPPS_EXCEPTION("TADC Debug Error Code = %x", errcode); return error;}
33 #define         IF_TRUE_RETURN( error , errcode)        if(error){DRM_TAPPS_EXCEPTION("TADC Debug Error Code = %x", errcode); return -1;}
34
35 //2011.03.08
36 #define         IF_TRUE_RETURN2( error , do1, do2, do3, errcode)        if(error){ do1; do2; do3; DRM_TAPPS_EXCEPTION("TADC Debug Error Code = %x", errcode); return -1;}
37
38 #ifndef TADC_SWAP32
39 #define TADC_SWAP32(x)  ((((TADC_U32)(x) & 0x000000ffL) << 24) |        (((TADC_U32)(x) & 0x0000ff00L) << 8) | (((TADC_U32)(x) & 0x00ff0000L) >> 8) | (((TADC_U32)(x) & 0xff000000L) >> 24))
40 #endif
41
42 #define TADC_U8         unsigned char
43 #define TADC_U16        unsigned short
44 #define TADC_U32        unsigned long
45 #define DWORD           unsigned long
46 #define LPBYTE          unsigned char*
47 #define TCHAR           unsigned char
48
49 #define BYTE            unsigned char
50 #define UINT            unsigned int
51 #define ULONG           unsigned long
52 #define INT32           long
53 #define INT64           long long
54 #define TRUE            1
55 #define FALSE           0
56
57
58 #define         REQU_MAXSIZE    1024*5  //2011.03.08 (HTTP Request Buffer Max Size)
59 #define         RESP_MAXSIZE    1024*10 //2011.03.08 (HTTP Response Buffer Max Size)
60
61 #define         ROXML_MAXSIZE   4096*2  //2011.03.08
62 #define         CERT_MAXSIZE    4096    //2011.03.08
63
64 #define         SID_SIZE        4
65 #define         CID_SIZE        1024            //2011.03.08 ( 32 -> 1024 )
66 #define         CEK_SIZE        32          // multiplication of 8
67 #define         GMT_SIZE        21
68
69 // Core Value Size define
70 #define         DUID_SIZE               32
71 #define         DEVICEKEY_SIZE  16
72 #define         ROID_SIZE               32
73 #define         DHKey_SIZE              128             //Max 1024 bit
74
75 // DRM Type : Tizen DRM DRM - 1
76 #define         TIZEN_DRM               1
77
78 // RO Permission Type
79 #define         DUID_RULE               1
80
81 typedef char CHAR;
82 typedef bool BOOL;
83
84 typedef struct  t_file_header
85 {
86         unsigned char   Version[2];
87         unsigned char   DRMType;
88         unsigned char   ContentsType[128];
89         long long               TotalSize;
90         long long               Offset1;
91         long long               Offset2;
92         long long               Offset3;
93         long long               Offset4;
94         long long               Offset5;
95         long long               Offset6;
96         long long               Offset7;
97         long long               Offset8;
98 }T_FILE_HEADER;
99
100 typedef struct  t_drm_header
101 {
102         long                    XmlSize;
103         unsigned char   Version[2];
104         unsigned char   *SID;
105         unsigned char   *CID;
106         unsigned char   ContentsType[128];
107         long                    EncryptionMethod;
108         long                    EncryptionLevel;
109         long long               EncryptionRange;
110         unsigned char   *RIURL;
111         long long               PlaintextSize;
112         unsigned char   *Packdate;
113         unsigned char   *CEK;
114 } T_DRM_HEADER;
115
116 typedef struct  t_decice_info
117 {
118         unsigned char   DUID[DUID_SIZE + 1];
119 } T_DEVICE_INFO;
120
121 typedef struct  t_dh_info
122 {
123         unsigned char   p[DHKey_SIZE+1];                                // DH prime binary
124         long                    pSize;
125         long                    g;                                                      // DH primitive root. ( 2 or 5 )
126         unsigned char   a[DHKey_SIZE+1];                                // DH Client private  binary
127         long                    aSize;
128         unsigned char   A[DHKey_SIZE+1];                                // DH Client public binary (ga mod p)
129         long                    ASize;
130         unsigned char   B[DHKey_SIZE+1];                                // DH Server public binary (gb mod p)
131         long                    BSize;
132         unsigned char   K[32+1];                                                // DH Session Key
133 } T_DH_INFO;
134
135 typedef struct t_ro_content
136 {
137         unsigned char   *CID;
138         unsigned char   *CEK;
139 } T_RO_CONTENT;
140
141 typedef struct  t_roacq_info
142 {
143         unsigned char*  ROAcqURL;
144         unsigned char*  ReqID;
145         T_DH_INFO               t_DHInfo;
146         unsigned char   sTimeStamp[21];
147 } T_ROACQ_INFO;
148
149 typedef struct  t_individual
150 {
151         unsigned char   BindingType;
152         unsigned char*  DUID;
153 } T_INDIVIDUAL;
154
155 typedef struct t_ro_permission
156 {
157         T_INDIVIDUAL t_Individual;
158 } T_RO_PERMISSION;
159
160
161 typedef struct  t_ro
162 {
163         short   int             PerFlag;
164         T_RO_CONTENT    t_Content;
165         T_RO_PERMISSION t_Permission;
166 } T_RO;
167
168 int     TADC_SetDeviceInfo(T_DEVICE_INFO *t_DeviceInfo);
169 int     TADC_GetFileHeader(unsigned char *inBuffer, T_FILE_HEADER *t_FileHeader);
170 int     TADC_GetDRMHeader(unsigned char *inBuffer, T_DRM_HEADER *t_DRMHeader);
171 int     TADC_GetDRMHeaderInfo(unsigned char * inBuffer, T_DRM_HEADER *t_DRMHeader);
172 int     TADC_GetDRMHeaderFromFile(const char *pTADCFilepath, T_FILE_HEADER *t_FileHeader, T_DRM_HEADER *t_DRMHeader);
173 int     TADC_MakeRequestLicense(T_DEVICE_INFO *t_DeviceInfo, T_FILE_HEADER *t_FileHeader, T_DRM_HEADER *t_DRMHeader, unsigned char * outBuffer, size_t outBufferSize);
174 int     TADC_GetROAcqInfo(unsigned char *inBuffer, T_ROACQ_INFO *t_ROAcqInfo);
175 int     TADC_MakeRequestRO(T_ROACQ_INFO *t_ROAcqInfo, unsigned char *outBuffer, size_t outBufferSize, unsigned char *ROVer=NULL); //2011.03.08
176 int     TADC_GetResponseRO(unsigned char *inBuffer, T_ROACQ_INFO *t_ROAcqInfo, T_RO *t_RO, unsigned char *outBuffer);
177 int TADC_GetResponseROInfo(LPBYTE pszXML,  T_RO *t_RO);
178 int     TADC_GetHashReqID(unsigned char *inBuffer, unsigned char *hashReqID);
179 int     TADC_GetCEK(T_DEVICE_INFO *t_DeviceInfo, T_RO *t_RODB, T_DRM_HEADER *t_DRMHeader );
180 int TADC_DecryptBlock(char* pbBuffer, int nSize, T_DRM_HEADER *t_DRMHeader);
181 int     TADC_VerifyROSignature(IN LPBYTE pszXML);
182 DWORD TADC_GetLastError(void);
183 int TADC_MEMFree_RO(T_RO *t_ro);
184 int TADC_MEMFree_FileHeader(T_FILE_HEADER *t_FileHeader);
185 int TADC_MEMFree_DRMHeader(T_DRM_HEADER *t_DrmHeader);
186 int TADC_MEMFree_ROAcqInfo(T_ROACQ_INFO *t_ROAcqInfo);