Home | History | Annotate | Download | only in parser
      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 __PARSER_DCF_H__
     18 #define __PARSER_DCF_H__
     19 
     20 #ifdef __cplusplus
     21 extern "C" {
     22 #endif
     23 
     24 #include <drm_common_types.h>
     25 
     26 #define MAX_ENCRYPTION_METHOD_LEN                            64
     27 #define MAX_RIGHTS_ISSUER_LEN                                256
     28 #define MAX_CONTENT_NAME_LEN                                 64
     29 #define MAX_CONTENT_DESCRIPTION_LEN                          256
     30 #define MAX_CONTENT_VENDOR_LEN                               256
     31 #define MAX_ICON_URI_LEN                                     256
     32 #define MAX_CONTENT_TYPE_LEN                                 64
     33 #define MAX_CONTENT_URI_LEN                                  256
     34 
     35 #define HEADER_ENCRYPTION_METHOD                             "Encryption-Method: "
     36 #define HEADER_RIGHTS_ISSUER                                 "Rights-Issuer: "
     37 #define HEADER_CONTENT_NAME                                  "Content-Name: "
     38 #define HEADER_CONTENT_DESCRIPTION                           "Content-Description: "
     39 #define HEADER_CONTENT_VENDOR                                "Content-Vendor: "
     40 #define HEADER_ICON_URI                                      "Icon-Uri: "
     41 
     42 #define HEADER_ENCRYPTION_METHOD_LEN                         19
     43 #define HEADER_RIGHTS_ISSUER_LEN                             15
     44 #define HEADER_CONTENT_NAME_LEN                              14
     45 #define HEADER_CONTENT_DESCRIPTION_LEN                       21
     46 #define HEADER_CONTENT_VENDOR_LEN                            16
     47 #define HEADER_ICON_URI_LEN                                  10
     48 
     49 #define UINT_VAR_FLAG                                        0x80
     50 #define UINT_VAR_DATA                                        0x7F
     51 #define MAX_UINT_VAR_BYTE                                    5
     52 #define DRM_UINT_VAR_ERR                                     -1
     53 
     54 typedef struct _T_DRM_DCF_Info {
     55     uint8_t Version;
     56     uint8_t ContentTypeLen;                                  /**< Length of the ContentType field */
     57     uint8_t ContentURILen;                                   /**< Length of the ContentURI field */
     58     uint8_t unUsed;
     59     uint8_t ContentType[MAX_CONTENT_TYPE_LEN];               /**< The MIME media type of the plaintext data */
     60     uint8_t ContentURI[MAX_CONTENT_URI_LEN];                 /**< The unique identifier of this content object */
     61     int32_t HeadersLen;                                      /**< Length of the Headers field */
     62     int32_t EncryptedDataLen;                                /**< Length of the encrypted data field */
     63     int32_t DecryptedDataLen;                                /**< Length of the decrypted data field */
     64     uint8_t Encryption_Method[MAX_ENCRYPTION_METHOD_LEN];    /**< Encryption method */
     65     uint8_t Rights_Issuer[MAX_RIGHTS_ISSUER_LEN];            /**< Rights issuer */
     66     uint8_t Content_Name[MAX_CONTENT_NAME_LEN];              /**< Content name */
     67     uint8_t ContentDescription[MAX_CONTENT_DESCRIPTION_LEN]; /**< Content description */
     68     uint8_t ContentVendor[MAX_CONTENT_VENDOR_LEN];           /**< Content vendor */
     69     uint8_t Icon_URI[MAX_ICON_URI_LEN];                      /**< Icon URI */
     70 } T_DRM_DCF_Info;
     71 
     72 /**
     73  * Parse the DRM content format data
     74  *
     75  * \param buffer            (in)Input the DCF format data
     76  * \param bufferLen         (in)The input buffer length
     77  * \param pDcfInfo          (out)A structure pointer which contain information of DCF headers
     78  * \param ppEncryptedData   (out)The location of encrypted data
     79  *
     80  * \return
     81  *      -TRUE, when success
     82  *      -FALSE, when failed
     83  */
     84 int32_t drm_dcfParser(uint8_t *buffer, int32_t bufferLen, T_DRM_DCF_Info *pDcfInfo,
     85                       uint8_t **ppEncryptedData);
     86 
     87 #ifdef __cplusplus
     88 }
     89 #endif
     90 
     91 #endif /* __PARSER_DCF_H__ */
     92