1 /*
2  * Copyright (C) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 /**
17  * @addtogroup Drm
18  * @{
19  *
20  * @brief Provides APIs of Drm.
21  * @kit DrmKit.
22  * @since 11
23  * @version 1.0
24  */
25 
26 /**
27  * @file native_drm_common.h
28  *
29  * @brief Defines the Drm common struct.
30  * @library libnative_drm.z.so
31  * @syscap SystemCapability.Multimedia.Drm.Core
32  * @since 11
33  * @version 1.0
34  */
35 
36 #ifndef NATIVE_DRM_COMMON_H
37 #define NATIVE_DRM_COMMON_H
38 
39 #include <stdint.h>
40 #include <stdio.h>
41 
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45 
46 /**
47   *
48   * @brief Enumerates event types of listener.
49   * @since 11
50   * @version 1.0
51 */
52 typedef enum DRM_EventType {
53     /**
54      * DRM event base.
55      */
56     EVENT_DRM_BASE = 200,
57     /**
58      * Provision required event.
59      */
60     EVENT_PROVISION_REQUIRED = 201,
61     /**
62      * Media key required event.
63      */
64     EVENT_KEY_REQUIRED = 202,
65     /**
66      * Media key expired event.
67      */
68     EVENT_KEY_EXPIRED = 203,
69     /**
70      * Vendor defined event.
71      */
72     EVENT_VENDOR_DEFINED = 204,
73     /**
74      * Expiration update event.
75      */
76     EVENT_EXPIRATION_UPDATE = 206,
77   } DRM_EventType;
78 
79 /**
80  * @brief Content potection level.
81  * @syscap SystemCapability.Multimedia.Drm.Core
82  * @since 11
83  * @version 1.0
84  */
85 typedef enum DRM_ContentProtectionLevel {
86     /**
87      * Content potection level unknown.
88      */
89     CONTENT_PROTECTION_LEVEL_UNKNOWN = 0,
90     /**
91      * Content potection level software crypto.
92      */
93     CONTENT_PROTECTION_LEVEL_SW_CRYPTO,
94     /**
95      * Content potection level hardware crypto.
96      */
97     CONTENT_PROTECTION_LEVEL_HW_CRYPTO,
98     /**
99      * Content potection level enhanced hardware crypto.
100      */
101     CONTENT_PROTECTION_LEVEL_ENHANCED_HW_CRYPTO,
102     /**
103      * Content potection level max stub.
104      */
105     CONTENT_PROTECTION_LEVEL_MAX,
106 } DRM_ContentProtectionLevel;
107 
108 /**
109  * @brief Media key type.
110  * @syscap SystemCapability.Multimedia.Drm.Core
111  * @since 11
112  * @version 1.0
113  */
114 typedef enum DRM_MediaKeyType {
115     /**
116      * Media key type offline.
117      */
118     MEDIA_KEY_TYPE_OFFLINE = 0,
119     /**
120      * Media key type online
121      */
122     MEDIA_KEY_TYPE_ONLINE,
123 } DRM_MediaKeyType;
124 
125 /**
126  * @brief Media key request type.
127  * @syscap SystemCapability.Multimedia.Drm.Core
128  * @since 11
129  * @version 1.0
130  */
131 typedef enum DRM_MediaKeyRequestType {
132     /**
133      * Media key request type unknown.
134      */
135     MEDIA_KEY_REQUEST_TYPE_UNKNOWN = 0,
136     /**
137      * Media key request type initial.
138      */
139     MEDIA_KEY_REQUEST_TYPE_INITIAL,
140     /**
141      * Media key request type renewal.
142      */
143     MEDIA_KEY_REQUEST_TYPE_RENEWAL,
144     /**
145      * Media key request type release.
146      */
147     MEDIA_KEY_REQUEST_TYPE_RELEASE,
148     /**
149      * Media key request type none.
150      */
151     MEDIA_KEY_REQUEST_TYPE_NONE,
152     /**
153      * Media key request type update.
154      */
155     MEDIA_KEY_REQUEST_TYPE_UPDATE,
156 } DRM_MediaKeyRequestType;
157 
158 /**
159  * @brief Offline media key status.
160  * @syscap SystemCapability.Multimedia.Drm.Core
161  * @since 11
162  * @version 1.0
163  */
164 typedef enum DRM_OfflineMediaKeyStatus {
165     /**
166      * Offline media key status unknown.
167      */
168     OFFLINE_MEDIA_KEY_STATUS_UNKNOWN = 0,
169     /**
170      * Offline media key status usable.
171      */
172     OFFLINE_MEDIA_KEY_STATUS_USABLE,
173     /**
174      * Offline media key status inactive.
175      */
176     OFFLINE_MEDIA_KEY_STATUS_INACTIVE,
177 } DRM_OfflineMediaKeyStatus;
178 
179 /**
180  * @brief Certificate status.
181  * @syscap SystemCapability.Multimedia.Drm.Core
182  * @since 11
183  * @version 1.0
184  */
185 typedef enum DRM_CertificateStatus {
186     /**
187      * Device already provisioned.
188      */
189     CERT_STATUS_PROVISIONED = 0,
190     /**
191      * Device not provisioned.
192      */
193     CERT_STATUS_NOT_PROVISIONED,
194     /**
195      * Cert already expired.
196      */
197     CERT_STATUS_EXPIRED,
198     /**
199      * Certs are invalid.
200      */
201     CERT_STATUS_INVALID,
202     /**
203      * Get certs status failed.
204      */
205     CERT_STATUS_UNAVAILABLE,
206 } DRM_CertificateStatus;
207 
208 /**
209  * @brief Max count of media key request option.
210  * @since 11
211  * @version 1.0
212  */
213 #define MAX_MEDIA_KEY_REQUEST_OPTION_COUNT 16
214 /**
215  * @brief Max len of media key request option name.
216  * @since 11
217  * @version 1.0
218  */
219 #define MAX_MEDIA_KEY_REQUEST_OPTION_NAME_LEN 64
220 /**
221  * @brief Max len of media key request option data.
222  * @since 11
223  * @version 1.0
224  */
225 #define MAX_MEDIA_KEY_REQUEST_OPTION_DATA_LEN 128
226 /**
227  * @brief Max len of media key request init data.
228  * @since 11
229  * @version 1.0
230  */
231 #define MAX_INIT_DATA_LEN 2048
232 /**
233  * @brief Max len of media mimetype.
234  * @since 11
235  * @version 1.0
236  */
237 #define MAX_MIMETYPE_LEN 64
238 
239 /**
240  * @brief Media key request info.
241  * @since 11
242  * @version 1.0
243  */
244 typedef struct DRM_MediaKeyRequestInfo {
245     /**
246      * Offline or online media key type.
247      */
248     DRM_MediaKeyType type;
249     /**
250      * Initial data len.
251      */
252     int32_t initDataLen;
253     /**
254      * PSSH info.
255      */
256     uint8_t initData[MAX_INIT_DATA_LEN];
257     /**
258      * Media content mime type.
259      */
260     char mimeType[MAX_MIMETYPE_LEN];
261     /**
262      * OptionsData count.
263      */
264     uint32_t optionsCount;
265     /**
266      * Options name the application set to drm framework.
267      */
268     char optionName[MAX_MEDIA_KEY_REQUEST_OPTION_COUNT][MAX_MEDIA_KEY_REQUEST_OPTION_NAME_LEN];
269     /**
270      * Options data the application set to drm framework.
271      */
272     char optionData[MAX_MEDIA_KEY_REQUEST_OPTION_COUNT][MAX_MEDIA_KEY_REQUEST_OPTION_DATA_LEN];
273 } DRM_MediaKeyRequestInfo;
274 
275 /**
276  * @brief Max len of media key request.
277  * @since 11
278  * @version 1.0
279  */
280 #define MAX_MEDIA_KEY_REQUEST_DATA_LEN 8192
281 /**
282  * @brief Max len of URL.
283  * @since 11
284  * @version 1.0
285  */
286 #define MAX_DEFAULT_URL_LEN 2048
287 /**
288  * @brief Media key request.
289  * @since 11
290  * @version 1.0
291  */
292 typedef struct DRM_MediaKeyRequest {
293     /**
294      * Media key request type.
295      */
296     DRM_MediaKeyRequestType type;
297     /**
298      * Media key request data len.
299      */
300     int32_t dataLen;
301     /**
302      * Media key request data sent to media key server.
303      */
304     uint8_t data[MAX_MEDIA_KEY_REQUEST_DATA_LEN];
305     /**
306      * Media key server URL.
307      */
308     char defaultUrl[MAX_DEFAULT_URL_LEN];
309 } DRM_MediaKeyRequest;
310 
311 /**
312  * @brief Max count of statistics item.
313  * @since 11
314  * @version 1.0
315  */
316 #define MAX_STATISTICS_COUNT 10
317 /**
318  * @brief Max len of statistics item name.
319  * @since 11
320  * @version 1.0
321  */
322 #define MAX_STATISTICS_NAME_LEN 64
323 /**
324  * @brief Max len of statistics item buffer.
325  * @since 11
326  * @version 1.0
327  */
328 #define MAX_STATISTICS_BUFFER_LEN 256
329 
330 /**
331  * @brief Statistics of MediaKeySystem.
332  * @since 11
333  * @version 1.0
334  */
335 typedef struct DRM_Statistics {
336     /* Statistics count. */
337     uint32_t statisticsCount;
338     /* Statistics name. */
339     char statisticsName[MAX_STATISTICS_COUNT][MAX_STATISTICS_NAME_LEN];
340     /* Statistics description. */
341     char statisticsDescription[MAX_STATISTICS_COUNT][MAX_STATISTICS_BUFFER_LEN];
342 } DRM_Statistics;
343 
344 /**
345  * @brief Max count of offline media key id.
346  * @since 11
347  * @version 1.0
348  */
349 #define MAX_OFFLINE_MEDIA_KEY_ID_COUNT 512
350 /**
351  * @brief Max len of offline media key id.
352  * @since 11
353  * @version 1.0
354  */
355 #define MAX_OFFLINE_MEDIA_KEY_ID_LEN 64
356 
357 /**
358  * @brief Offline media key ids array.
359  * @since 11
360  * @version 1.0
361  */
362 typedef struct DRM_OfflineMediakeyIdArray {
363     /* Ids count. */
364     uint32_t idsCount;
365     /* Ids len. */
366     int32_t idsLen[MAX_OFFLINE_MEDIA_KEY_ID_COUNT];
367     /* Ids. */
368     uint8_t ids[MAX_OFFLINE_MEDIA_KEY_ID_COUNT][MAX_OFFLINE_MEDIA_KEY_ID_LEN];
369 } DRM_OfflineMediakeyIdArray;
370 
371 /**
372  * @brief Max count of key info.
373  * @since 11
374  * @version 1.0
375  */
376 #define MAX_KEY_INFO_COUNT 64
377 /**
378  * @brief Max len of key id.
379  * @since 11
380  * @version 1.0
381  */
382 #define MAX_KEY_ID_LEN 16
383 /**
384  * @brief Max len of key status value.
385  * @since 11
386  * @version 1.0
387  */
388 #define MAX_KEY_STATUS_VALUE_LEN 128
389 
390 /**
391  * @brief Media key info.
392  * @since 11
393  * @version 1.0
394  */
395 typedef struct DRM_KeysInfo {
396     /* Keys count. */
397     uint32_t keysInfoCount;
398     /* Key id. */
399     uint8_t keyId[MAX_KEY_INFO_COUNT][MAX_KEY_ID_LEN];
400     /* Key status value. */
401     char statusValue[MAX_KEY_INFO_COUNT][MAX_KEY_STATUS_VALUE_LEN];
402 } DRM_KeysInfo;
403 
404 /**
405  * @brief Max count of media key status.
406  * @since 11
407  * @version 1.0
408  */
409 #define MAX_MEDIA_KEY_STATUS_COUNT 64
410 /**
411  * @brief Max len of media key status name.
412  * @since 11
413  * @version 1.0
414  */
415 #define MAX_MEDIA_KEY_STATUS_NAME_LEN 64
416 /**
417  * @brief Max len of media key status value.
418  * @since 11
419  * @version 1.0
420  */
421 #define MAX_MEDIA_KEY_STATUS_VALUE_LEN 256
422 
423 /**
424  * @brief Media key status like pocily etc.
425  * @since 11
426  * @version 1.0
427  */
428 typedef struct DRM_MediaKeyStatus {
429     /* Status count. */
430     uint32_t statusCount;
431     /* Status name. */
432     char statusName[MAX_MEDIA_KEY_STATUS_COUNT][MAX_MEDIA_KEY_STATUS_NAME_LEN];
433     /* Status value. */
434     char statusValue[MAX_MEDIA_KEY_STATUS_COUNT][MAX_MEDIA_KEY_STATUS_VALUE_LEN];
435 } DRM_MediaKeyStatus;
436 
437 /**
438  * @brief Drm system uuid len.
439  * @since 11
440  * @version 1.0
441  */
442 #define DRM_UUID_LEN 16
443 /**
444  * @brief Max len of PSSH data.
445  * @since 11
446  * @version 1.0
447  */
448 #define MAX_PSSH_DATA_LEN 2048
449 
450 /**
451  * @brief PSSH info by uuid.
452  * @since 11
453  * @version 1.0
454  */
455 typedef struct DRM_PsshInfo {
456     /**
457      * Uuid.
458      */
459     uint8_t uuid[DRM_UUID_LEN];
460     /**
461      * PSSH data len.
462      */
463     int32_t dataLen;
464     /**
465      * uint8_t PSSH data.
466      */
467     uint8_t data[MAX_PSSH_DATA_LEN];
468 } DRM_PsshInfo;
469 
470 /**
471  * @brief Max count of PSSH info.
472  * @since 11
473  * @version 1.0
474  */
475 #define MAX_PSSH_INFO_COUNT 8
476 
477 /**
478  * @brief MediaKeySystemInfo used for player to get media key system info from media source.
479  * @since 11
480  * @version 1.0
481  */
482 typedef struct DRM_MediaKeySystemInfo {
483     /* PSSH count. */
484     uint32_t psshCount;
485     /* PSSH info. */
486     DRM_PsshInfo psshInfo[MAX_PSSH_INFO_COUNT];
487 } DRM_MediaKeySystemInfo;
488 
489 /**
490 * @brief Callback for getting media key system information from media source.
491 * @since 11
492 * @version 1.0
493 */
494 typedef void (*DRM_MediaKeySystemInfoCallback)(DRM_MediaKeySystemInfo *mediaKeySystemInfo);
495 
496 /**
497  * @brief Media key system struct.
498  * @since 11
499  * @version 1.0
500  */
501 typedef struct MediaKeySystem MediaKeySystem;
502 
503 /**
504  * @brief Media key session struct.
505  * @since 11
506  * @version 1.0
507  */
508 typedef struct MediaKeySession MediaKeySession;
509 /**
510  * @brief Max len of media key system name.
511  * @since 12
512  * @version 1.0
513  */
514 #define MAX_MEDIA_KEY_SYSTEM_NAME_LEN 128
515 
516 /**
517  * @brief Max num of media key system supported
518  * @since 12
519  * @version 1.0
520  */
521 #define MAX_MEDIA_KEY_SYSTEM_NUM 8
522 
523 /**
524  * @brief Name and UUID of DRM plugin.
525  * @since 12
526  * @version 1.0
527  */
528 typedef struct DRM_MediaKeySystemDescription {
529     /* Name of DRM plugin. */
530     char name[MAX_MEDIA_KEY_SYSTEM_NAME_LEN];
531     /* uuid. */
532     uint8_t uuid[DRM_UUID_LEN];
533 } DRM_MediaKeySystemDescription;
534 
535 #ifdef __cplusplus
536 }
537 #endif
538 
539 #endif // NATIVE_DRM_COMMON_H