/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* * Copyright 2018 NXP */ #ifndef _TAG_OBJECT_H_ #define _TAG_OBJECT_H_ #include #define TAG_MIN_SIZE (2 * sizeof(struct conf_header)) #define TAG_OVERHEAD sizeof(struct tag_object_conf) /** * enum tag_type - Type of data represented by the tag */ enum tag_type { /** @TAG_TYPE_NOT_SUPPORTED: The type is not supported */ TAG_TYPE_NOT_SUPPORTED = 0, /* Type that passes is_tag_type_valid() */ /** @TAG_TYPE_BLACK_KEY_ECB: Black key encrypted with ECB */ TAG_TYPE_BLACK_KEY_ECB, /** * @TAG_TYPE_BLACK_KEY_ECB_TRUSTED: ECB Black key created by trusted * descriptor */ TAG_TYPE_BLACK_KEY_ECB_TRUSTED, /** @TAG_TYPE_BLACK_KEY_CCM: Black key encrypted with CCM */ TAG_TYPE_BLACK_KEY_CCM, /** * @TAG_TYPE_BLACK_KEY_CCM_TRUSTED: CCM Black key created by trusted * descriptor */ TAG_TYPE_BLACK_KEY_CCM_TRUSTED, /** @NB_TAG_TYPE: Number of type of tag */ NB_TAG_TYPE, }; /** * struct conf_header - Common struture holding the type of data and the magic * number * @_magic_number : A magic number to identify the structure * @type : The type of data contained */ struct conf_header { u32 _magic_number; u32 type; }; /** * struct blackey_conf - Configuration for a black key * @load : Load parameter for CAAM * @real_len : Length of the key before encryption */ struct blackey_conf { u32 load; u32 real_len; }; /** * struct tag_object_conf - Common structure which is the tag applied to data * @header : Part of the data initialized with common function * :c:func:`init_tag_object_header` * @conf : Configuration data about the object tagged, initialized with * specific function */ struct tag_object_conf { struct conf_header header; union { struct blackey_conf bk_conf; } conf; }; bool is_bk_conf(const struct tag_object_conf *tag_obj_conf); bool is_valid_tag_object_conf(const struct tag_object_conf *tag_obj_conf); void init_tag_object_header(struct conf_header *conf_header, enum tag_type type); int get_tag_object_conf(void *buffer, size_t buffer_size, struct tag_object_conf **tag_obj_conf); int set_tag_object_conf(const struct tag_object_conf *tag_obj_conf, void *buffer, size_t obj_size, u32 *to_size); size_t get_tag_object_overhead(void); void get_blackey_conf(const struct blackey_conf *blackey_conf, u32 *real_len, u32 *load_param); void init_blackey_conf(struct blackey_conf *blackey_conf, size_t len, bool ccm, bool tk); int get_tagged_data(void *buffer, size_t buffer_size, void **data, u32 *data_size); #endif /* _TAG_OBJECT_H_ */