1 /*
2  * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef IMG_PARSER_MOD_H
8 #define IMG_PARSER_MOD_H
9 
10 #include <drivers/auth/auth_common.h>
11 
12 /*
13  * Return values
14  */
15 enum img_parser_ret_value {
16 	IMG_PARSER_OK,
17 	IMG_PARSER_ERR,			/* Parser internal error */
18 	IMG_PARSER_ERR_FORMAT,		/* Malformed image */
19 	IMG_PARSER_ERR_NOT_FOUND	/* Authentication data not found */
20 };
21 
22 /*
23  * Image types. A parser should be instantiated and registered for each type
24  */
25 typedef enum img_type_enum {
26 	IMG_RAW,			/* Binary image */
27 	IMG_PLAT,			/* Platform specific format */
28 	IMG_CERT,			/* X509v3 certificate */
29 	IMG_MAX_TYPES,
30 } img_type_t;
31 
32 /* Image parser library structure */
33 typedef struct img_parser_lib_desc_s {
34 	img_type_t img_type;
35 	const char *name;
36 
37 	void (*init)(void);
38 	int (*check_integrity)(void *img, unsigned int img_len);
39 	int (*get_auth_param)(const auth_param_type_desc_t *type_desc,
40 			void *img, unsigned int img_len,
41 			void **param, unsigned int *param_len);
42 } img_parser_lib_desc_t;
43 
44 /* Exported functions */
45 void img_parser_init(void);
46 int img_parser_check_integrity(img_type_t img_type,
47 		void *img_ptr, unsigned int img_len);
48 int img_parser_get_auth_param(img_type_t img_type,
49 		const auth_param_type_desc_t *type_desc,
50 		void *img_ptr, unsigned int img_len,
51 		void **param_ptr, unsigned int *param_len);
52 
53 /* Macro to register an image parser library */
54 #define REGISTER_IMG_PARSER_LIB(_type, _name, _init, _check_int, _get_param) \
55 	static const img_parser_lib_desc_t __img_parser_lib_desc_##_type \
56 	__section(".img_parser_lib_descs") __used = { \
57 		.img_type = _type, \
58 		.name = _name, \
59 		.init = _init, \
60 		.check_integrity = _check_int, \
61 		.get_auth_param = _get_param \
62 	}
63 
64 #endif /* IMG_PARSER_MOD_H */
65