/* * Copyright (c) 2017, Intel Corporation. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. */ #ifndef __PLAT_AUTH_H__ #define __PLAT_AUTH_H__ #include struct image; #define PLAT_AUTH_SHA256_LEN 32 #define PLAT_AUTH_NAME_LEN 12 #define PLAT_AUTH_PADDING 48 /* pad at end of struct */ #define SIGN_PKG_EXT_TYPE 15 #define SIGN_PKG_NUM_MODULE 1 struct signed_pkg_info_module { uint8_t name[PLAT_AUTH_NAME_LEN]; /* must be padded with 0 */ uint8_t type; uint8_t hash_algo; uint16_t hash_size; uint32_t meta_size; uint8_t hash[PLAT_AUTH_SHA256_LEN]; } __attribute__((packed)); struct signed_pkg_info_ext { uint32_t ext_type; uint32_t ext_len; uint8_t name[4]; uint32_t vcn; uint8_t bitmap[16]; uint32_t svn; uint8_t fw_type; uint8_t fw_sub_type; uint8_t reserved[14]; /* must be 0 */ /* variable length of modules */ struct signed_pkg_info_module module[SIGN_PKG_NUM_MODULE]; } __attribute__((packed)); #define PART_INFO_EXT_TYPE 3 #define PART_INFO_NUM_MODULE 1 struct partition_info_module { uint8_t name[PLAT_AUTH_NAME_LEN]; /* must be padded with 0 */ uint8_t type; uint8_t reserved[3]; uint32_t meta_size; uint8_t hash[PLAT_AUTH_SHA256_LEN]; } __attribute__((packed)); struct partition_info_ext { uint32_t ext_type; uint32_t ext_len; uint8_t name[4]; /* "ADSP" */ uint32_t length; uint8_t hash[PLAT_AUTH_SHA256_LEN]; uint32_t vcn; uint32_t part_version; uint32_t fmt_version; uint32_t instance_id; uint32_t part_flags; uint8_t reserved[20]; /* must be 0 */ /* variable length of modules */ struct partition_info_module module[PART_INFO_NUM_MODULE]; } __attribute__((packed)); #define PLAT_AUTH_SIZE \ (sizeof(struct partition_info_ext) + \ sizeof(struct signed_pkg_info_ext)) void ri_adsp_meta_data_create(struct image *image, int meta_start_offset, int meta_end_offset); void ri_plat_ext_data_create(struct image *image); #endif