17#ifndef __FEC_PRIVATE_H__
18#define __FEC_PRIVATE_H__
25#include <sys/syscall.h>
33#include <crypto_utils/android_pubkey.h>
36#include <openssl/obj_mac.h>
37#include <openssl/sha.h>
41#define WORK_MIN_THREADS 1
42#define WORK_MAX_THREADS 64
45#define VERITY_CACHE_BLOCKS 4096
46#define VERITY_NO_CACHE UINT64_MAX
49#define VERITY_METADATA_SIZE (8 * FEC_BLOCKSIZE)
50#define VERITY_TABLE_ARGS 10
51#define VERITY_MIN_TABLE_SIZE (VERITY_TABLE_ARGS * 2)
52#define VERITY_MAX_TABLE_SIZE (VERITY_METADATA_SIZE - sizeof(verity_header))
55#define VERITY_MAGIC 0xB001B001
56#define VERITY_MAGIC_DISABLE 0x46464F56
57#define VERITY_VERSION 0
58#define VERITY_TABLE_FIELDS 10
59#define VERITY_TABLE_VERSION 1
92 const std::vector<uint8_t> &
salt,
int nid);
105 uint64_t data_offset, uint8_t *
data);
153extern bool raw_pread(
int fd,
void *buf,
size_t count, uint64_t offset);
154extern bool raw_pwrite(
int fd,
const void *buf,
size_t count, uint64_t offset);
158 uint64_t offset,
size_t *errors);
164extern uint64_t
verity_get_size(uint64_t file_size, uint32_t *verity_levels,
165 uint32_t *level_hashes,
166 uint32_t padded_digest_size);
172 #define unlikely(x) __builtin_expect(!!(x), 0)
173 #define likely(x) __builtin_expect(!!(x), 1)
177 #define __stringify(x) #x
178 #define stringify(x) __stringify(x)
183 #define __log(func, type, format, args...) \
184 fprintf(stderr, "fec: <%" PRIu64 "> " type ": %s: " format "\n", \
185 android::base::GetThreadId(), __FUNCTION__, ##args)
187 #include <cutils/klog.h>
189 #define __log(func, type, format, args...) \
190 KLOG_##func("fec", "<%d> " type ": %s: " format "\n", \
191 (int)syscall(SYS_gettid), __FUNCTION__, ##args)
195 #define debug(format, args...)
197 #define debug(format, args...) __log(DEBUG, "debug", format, ##args)
200#define warn(format, args...) __log(WARNING, "warning", format, ##args)
201#define error(format, args...) __log(ERROR, "error", format, ##args)
204 if (unlikely(!(p))) { \
205 error("`%s' failed", #p); \
#define ANDROID_PUBKEY_MODULUS_SIZE
Definition: android_pubkey.h:31
bool raw_pread(int fd, void *buf, size_t count, uint64_t offset)
Definition: fec_read.cpp:475
ssize_t process(fec_handle *f, uint8_t *buf, size_t count, uint64_t offset, read_func func)
Definition: fec_process.cpp:40
ssize_t(* read_func)(fec_handle *f, uint8_t *dest, size_t count, uint64_t offset, size_t *errors)
Definition: fec_private.h:157
uint64_t verity_get_size(uint64_t file_size, uint32_t *verity_levels, uint32_t *level_hashes, uint32_t padded_digest_size)
Definition: fec_verity.cpp:97
int verity_parse_header(fec_handle *f, uint64_t offset)
Definition: fec_verity.cpp:537
bool raw_pwrite(int fd, const void *buf, size_t count, uint64_t offset)
Definition: fec_read.cpp:497
char data[Size]
Definition: incremental_server.cpp:1
uint8_t hash[SHA256_DIGEST_LENGTH]
Definition: io.h:6
Definition: fec_private.h:128
bool valid
Definition: fec_private.h:129
std::vector< uint8_t > vbmeta
Definition: fec_private.h:130
hashtree_info hashtree
Definition: fec_private.h:131
Definition: fec_private.h:69
uint64_t start
Definition: fec_private.h:76
uint32_t size
Definition: fec_private.h:73
uint64_t rounds
Definition: fec_private.h:75
uint64_t blocks
Definition: fec_private.h:74
int rsn
Definition: fec_private.h:72
bool valid
Definition: fec_private.h:70
int roots
Definition: fec_private.h:71
Definition: fec_private.h:134
int mode
Definition: fec_private.h:138
int flags
Definition: fec_private.h:137
ecc_info ecc
Definition: fec_private.h:135
verity_info verity
Definition: fec_private.h:144
avb_info avb
Definition: fec_private.h:145
uint64_t pos
Definition: fec_private.h:141
hashtree_info hashtree() const
Definition: fec_private.h:147
int fd
Definition: fec_private.h:136
uint64_t errors
Definition: fec_private.h:139
uint64_t data_size
Definition: fec_private.h:140
uint64_t size
Definition: fec_private.h:142
Definition: fec_private.h:79
bool ecc_read_hashes(fec_handle *f, uint64_t hash_offset, uint8_t *hash, uint64_t data_offset, uint8_t *data)
Definition: fec_verity.cpp:181
uint64_t data_blocks
Definition: fec_private.h:81
int get_hash(const uint8_t *block, uint8_t *hash)
Definition: fec_verity.cpp:124
int initialize(uint64_t hash_start, uint64_t data_blocks, const std::vector< uint8_t > &salt, int nid)
Definition: fec_verity.cpp:141
std::vector< uint8_t > salt
Definition: fec_private.h:87
uint32_t padded_digest_length_
Definition: fec_private.h:116
uint64_t hash_start
Definition: fec_private.h:83
int nid_
Definition: fec_private.h:114
std::vector< uint8_t > zero_hash
Definition: fec_private.h:88
uint32_t digest_length_
Definition: fec_private.h:115
std::vector< uint8_t > hash_data
Definition: fec_private.h:86
int verify_tree(const fec_handle *f, const uint8_t *root)
Definition: fec_verity.cpp:204
bool check_block_hash_with_index(uint64_t index, const uint8_t *block)
Definition: fec_verity.cpp:171
bool check_block_hash(const uint8_t *expected, const uint8_t *block)
Definition: fec_verity.cpp:157
Definition: fec_private.h:119
verity_header ecc_header
Definition: fec_private.h:125
bool disabled
Definition: fec_private.h:120
std::string table
Definition: fec_private.h:121
hashtree_info hashtree
Definition: fec_private.h:123
verity_header header
Definition: fec_private.h:124
uint64_t metadata_start
Definition: fec_private.h:122