Home | History | Annotate | Download | only in objmng
      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