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