• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (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://www.apache.org/licenses/LICENSE-2.0
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 #ifndef __DRM_RIGHTS_MANAGER_H__
18 #define __DRM_RIGHTS_MANAGER_H__
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 #include <openssl/aes.h>
25 #include <drm_common_types.h>
26 #include <parser_rel.h>
27 
28 #ifdef DRM_DEVICE_ARCH_ARM
29 #define ANDROID_DRM_CORE_PATH   "/data/drm/rights/"
30 #define DRM_UID_FILE_PATH       "/data/drm/rights/uid.txt"
31 #else
32 #define ANDROID_DRM_CORE_PATH   "/home/user/golf/esmertec/device/out/debug/host/linux-x86/product/sim/data/data/com.android.drm.mobile1/"
33 #define DRM_UID_FILE_PATH       "/home/user/golf/esmertec/device/out/debug/host/linux-x86/product/sim/data/data/com.android.drm.mobile1/uid.txt"
34 #endif
35 
36 #define EXTENSION_NAME_INFO     ".info"
37 
38 #define GET_ID      1
39 #define GET_UID     2
40 
41 #define GET_ROAMOUNT        1
42 #define GET_ALL_RO          2
43 #define SAVE_ALL_RO         3
44 #define GET_A_RO            4
45 #define SAVE_A_RO           5
46 
47 /**
48  * Get the id or uid from the "uid.txt" file.
49  *
50  * \param Uid       The content id for a specially DRM object.
51  * \param id        The id number managed by DRM engine for a specially DRM object.
52  * \param option    The option to get id or uid, the value includes: GET_ID, GET_UID.
53  *
54  * \return
55  *      -TRUE, if the operation successfully.
56  *      -FALSE, if the operation failed.
57  */
58 int32_t drm_readFromUidTxt(uint8_t* Uid, int32_t* id, int32_t option);
59 
60 /**
61  * Save or read the rights information on the "id.info" file.
62  *
63  * \param id        The id number managed by DRM engine for a specially DRM object.
64  * \param Ro        The rights structure to save the rights information.
65  * \param RoAmount  The number of rights for this DRM object.
66  * \param option    The option include: GET_ROAMOUNT, GET_ALL_RO, SAVE_ALL_RO, GET_A_RO, SAVE_A_RO.
67  *
68  * \return
69  *      -TRUE, if the operation successfully.
70  *      -FALSE, if the operation failed.
71  */
72 int32_t drm_writeOrReadInfo(int32_t id, T_DRM_Rights* Ro, int32_t* RoAmount, int32_t option);
73 
74 /**
75  * Append a rights information to DRM engine storage.
76  *
77  * \param Ro        The rights structure to save the rights information.
78  *
79  * return
80  *      -TRUE, if the operation successfully.
81  *      -FALSE, if the operation failed.
82  */
83 int32_t drm_appendRightsInfo(T_DRM_Rights* rights);
84 
85 /**
86  * Get the mex id number from the "uid.txt" file.
87  *
88  * \return
89  *      -an integer to indicate the max id number.
90  *      -(-1), if the operation failed.
91  */
92 int32_t drm_getMaxIdFromUidTxt();
93 
94 /**
95  * Remove the "id.info" file if all the rights for this DRM object has been deleted.
96  *
97  * \param id        The id number managed by DRM engine for a specially DRM object.
98  *
99  * \return
100  *      -TRUE, if the operation successfully.
101  *      -FALSE, if the operation failed.
102  */
103 int32_t drm_removeIdInfoFile(int32_t id);
104 
105 /**
106  * Update the "uid.txt" file when delete the rights object.
107  *
108  * \param id        The id number managed by DRM engine for a specially DRM object.
109  *
110  * \return
111  *      -TRUE, if the operation successfully.
112  *      -FALSE, if the operation failed.
113  */
114 int32_t drm_updateUidTxtWhenDelete(int32_t id);
115 
116 /**
117  * Get the CEK according the given content id.
118  *
119  * \param uid       The content id for a specially DRM object.
120  * \param KeyValue  The buffer to save the CEK.
121  *
122  * \return
123  *      -TRUE, if the operation successfully.
124  *      -FALSE, if the operation failed.
125  */
126 int32_t drm_getKey(uint8_t* uid, uint8_t* KeyValue);
127 
128 /**
129  * Discard the padding bytes in DCF decrypted data.
130  *
131  * \param decryptedBuf      The aes decrypted data buffer to be scanned.
132  * \param decryptedBufLen   The length of the buffer. And save the output result.
133  *
134  * \return
135  *      -0
136  */
137 void drm_discardPaddingByte(uint8_t *decryptedBuf, int32_t *decryptedBufLen);
138 
139 /**
140  * Decrypt the media data according the CEK.
141  *
142  * \param Buffer    The buffer to decrypted and also used to save the output data.
143  * \param BufferLen The length of the buffer data and also save the output data length.
144  * \param key       The structure of the CEK.
145  *
146  * \return
147  *      -0
148  */
149 int32_t drm_aesDecBuffer(uint8_t * Buffer, int32_t * BufferLen, AES_KEY *key);
150 
151 /**
152  * Update the DCF data length according the CEK.
153  *
154  * \param pDcfLastData  The last several byte for the DCF.
155  * \param keyValue  The CEK of the DRM content.
156  * \param moreBytes Output the more bytes for discarded.
157  *
158  * \return
159  *      -TRUE, if the operation successfully.
160  *      -FALSE, if the operation failed.
161  */
162 int32_t drm_updateDcfDataLen(uint8_t* pDcfLastData, uint8_t* keyValue, int32_t* moreBytes);
163 
164 /**
165  * Check and update the rights for a specially DRM content.
166  *
167  * \param id        The id number managed by DRM engine for a specially DRM object.
168  * \param permission    The permission to be check and updated.
169  *
170  * \return
171  *      -DRM_SUCCESS, if there is a valid rights and update it successfully.
172  *      -DRM_NO_RIGHTS, if there is no rights for this content.
173  *      -DRM_RIGHTS_PENDING, if the rights is pending.
174  *      -DRM_RIGHTS_EXPIRED, if the rights has expired.
175  *      -DRM_RIGHTS_FAILURE, if there is some other error occur.
176  */
177 int32_t drm_checkRoAndUpdate(int32_t id, int32_t permission);
178 
179 #ifdef __cplusplus
180 }
181 #endif
182 
183 #endif /* __DRM_RIGHTS_MANAGER_H__ */
184