1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2013 3*4882a593Smuzhiyun * Reinhard Pfau, Guntermann & Drunck GmbH, reinhard.pfau@gdsys.cc 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef __HRE_H 9*4882a593Smuzhiyun #define __HRE_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun struct key_program { 12*4882a593Smuzhiyun uint32_t magic; 13*4882a593Smuzhiyun uint32_t code_crc; 14*4882a593Smuzhiyun uint32_t code_size; 15*4882a593Smuzhiyun uint8_t code[]; 16*4882a593Smuzhiyun }; 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun struct h_reg { 19*4882a593Smuzhiyun bool valid; 20*4882a593Smuzhiyun uint8_t digest[20]; 21*4882a593Smuzhiyun }; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun /* CCDM specific contants */ 24*4882a593Smuzhiyun enum { 25*4882a593Smuzhiyun /* NV indices */ 26*4882a593Smuzhiyun NV_COMMON_DATA_INDEX = 0x40000001, 27*4882a593Smuzhiyun /* magics for key blob chains */ 28*4882a593Smuzhiyun MAGIC_KEY_PROGRAM = 0x68726500, 29*4882a593Smuzhiyun MAGIC_HMAC = 0x68616300, 30*4882a593Smuzhiyun MAGIC_END_OF_CHAIN = 0x00000000, 31*4882a593Smuzhiyun /* sizes */ 32*4882a593Smuzhiyun NV_COMMON_DATA_MIN_SIZE = 3 * sizeof(uint64_t) + 2 * sizeof(uint16_t), 33*4882a593Smuzhiyun }; 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun int hre_verify_program(struct key_program *prg); 36*4882a593Smuzhiyun int hre_run_program(const uint8_t *code, size_t code_size); 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #endif /* __HRE_H */ 39