blob: c63a1951ffb17808e39e894975fe0b47ce8dacbe [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
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
21extern "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
54typedef 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 */
84int32_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__ */