36#include "core/crypto.h"
38#include "hash/hash_algorithms.h"
40#if defined(VARIANT_OPEN) || defined(VARIANT_EVAL) || defined(VARIANT_ULTIMATE)
41#include "cipher_modes/cbc.h"
42#include "cipher/cipher_algorithms.h"
43#include "pkix/pem_key_export.h"
50#define ARRAY_BYTES(arr) (sizeof((arr)[0]) * ARRAY_SIZE(arr))
51#define ARRAY_SBYTES(arr) ((ssize_t)ARRAY_BYTES(arr))
53#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
54#define ARRAY_SSIZE(arr) ((ptrdiff_t)ARRAY_SIZE(arr))
57#define CIPHER_MAGIC_NUMBER "5ef41578fcfbb9a98ffc218dde463d44"
58#define CIPHER_MAGIC_NUMBER_SIZE 16
61#define CIPHER_BLOCK_SIZE 16
68int read_file(
const char *file_path,
char **file_contents,
size_t *file_size);
69int blockify(
size_t blockSize,
char **input,
size_t inputSize,
char **output,
size_t *outputSize);
73int encrypt(
char *plainData,
size_t plainDataSize,
char *cipherData,
CipherInfo cipherInfo);
74int sign(
CipherInfo *cipherInfo,
CheckDataInfo *checkDataInfo,
char *data,
size_t dataLen,
char **signData,
size_t *signDataLen);
78void dump_buffer(
void *buffer,
size_t buffer_size);
79void dump_buffer_2(
void *buffer,
size_t buffer_size,
size_t columSize);
80void dumpHeader(ImageHeader *header);
82void dumpFooter(
char *check_data,
size_t check_data_size);
84void dump_cleartext_image(
void *buffer,
size_t buffer_size);
85void dump_ciphertext_image(
void *buffer,
size_t buffer_size);
86uint32_t version_string_to_int(
const char *version);
89int is_hex(
const char *str);
90int hex_string_to_byte_array(
const char *hexString,
unsigned char **byteArray,
size_t *byteArraySize);
Generate the body section of an update image.
CycloneBOOT compatible Update Image Builder.
Buffers the image passes through while it is built.
Definition main.h:81
int read_file(const char *file_path, char **file_contents, size_t *file_size)
Read a file.
Definition utils.c:103
void parse_firmware_version(const char *version, ImageVersion *imageVersion)
Parse a "MA.MI.RE.BUILD" firmware version, BUILD in hex.
Definition utils.c:1042
void imageBuildCleanup(ImageBuild *build)
Release all working buffers.
Definition utils.c:1071
const HashAlgo * hash_algo_by_name(const char *name)
Map a hash/checksum algorithm name to its HashAlgo.
Definition utils.c:75
int seedInitVector(uint8_t *buffer, size_t length)
Generate an initialization vector with random data.
Definition utils.c:316
int blockify(size_t blockSize, char **input, size_t inputSize, char **output, size_t *outputSize)
Slice a given buffer in to a blocks of a given size.
Definition utils.c:180
int write_image_to_file(UpdateImage *image, CipherInfo *cipherInfo, const char *output_file_path)
Write the update image to a file.
Definition utils.c:555