1/* 2 * Copyright (c) 2022-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#ifndef __HVB_H_ 16#define __HVB_H_ 17 18#include "hvb_ops.h" 19#include "hvb_types.h" 20 21#ifdef __cplusplus 22extern "C" 23{ 24#endif 25 26#define HVB_MAX_NUMBER_OF_ROLLBACK_INDEX_LOCATIONS 32 27#define HVB_MAX_NUMBER_OF_LOADED_CERTS 32 28#define HVB_MAX_NUMBER_OF_LOADED_IMAGES 32 29#define HVB_MAX_PARTITION_NAME_LEN 36 30 31/* partition range 4 Kib - 64 GiB. */ 32#define HVB_MAX_PARTITION_SIZE 0x1000000000 33#define HVB_MIN_PARTITION_SIZE 0x0000001000 34 35/* Maximum size of a rvt image - 64 KiB. */ 36#define RVT_MAX_SIZE (64 * 1024) 37 38/* Maximum size for hash parttion list, one is RVT and the other for null pointer. */ 39#define REQUEST_LIST_LEN 2 40 41enum hvb_errno { 42 HVB_OK, 43 HVB_ERROR_OOM, 44 HVB_ERROR_IO, 45 HVB_ERROR_VERIFY_SIGN, 46 HVB_ERROR_VERIFY_HASH, 47 HVB_ERROR_ROLLBACK_INDEX, 48 HVB_ERROR_PUBLIC_KEY_REJECTED, 49 HVB_ERROR_INVALID_CERT_FORMAT, 50 HVB_ERROR_INVALID_FOOTER_FORMAT, 51 HVB_ERROR_UNSUPPORTED_VERSION, 52 HVB_ERROR_INVALID_ARGUMENT, 53}; 54 55struct hvb_image_data { 56 char *partition_name; 57 struct hvb_buf data; 58 bool preloaded; 59}; 60 61struct hvb_cert_data { 62 char *partition_name; 63 struct hvb_buf data; 64 enum hvb_errno verify_result; 65}; 66 67struct hvb_cmdline_data { 68 char *buf; 69 uint64_t cur_pos; // the first avaliable pos in buf 70 uint64_t max_size; 71}; 72 73struct hvb_verified_data { 74 struct hvb_cert_data *certs; 75 uint64_t num_loaded_certs; 76 struct hvb_image_data *images; 77 uint64_t num_loaded_images; 78 struct hvb_cmdline_data cmdline; 79 uint64_t key_len; 80 uint64_t rollback_indexes[HVB_MAX_NUMBER_OF_ROLLBACK_INDEX_LOCATIONS]; 81}; 82 83struct hvb_verified_data *hvb_init_verified_data(void); 84enum hvb_errno hvb_chain_verify(struct hvb_ops *ops, const char *rvt_parttion_name, 85 const char *const *hash_ptn_list, 86 struct hvb_verified_data **out_data); 87void hvb_chain_verify_data_free(struct hvb_verified_data *verified_data); 88 89#ifdef __cplusplus 90} 91#endif 92 93#endif 94