35#include "boot_config.h"
38#include "core/crypto.h"
40#include "hash/hash_algorithms.h"
43#ifndef VERIFY_INTEGRITY_SUPPORT
44#define VERIFY_INTEGRITY_SUPPORT ENABLED
45#elif (VERIFY_INTEGRITY_SUPPORT != ENABLED && VERIFY_INTEGRITY_SUPPORT != DISABLED)
46#error VERIFY_INTEGRITY_SUPPORT parameter is not valid!
50#ifndef VERIFY_AUTHENTICATION_SUPPORT
51#define VERIFY_AUTHENTICATION_SUPPORT DISABLED
52#elif (VERIFY_AUTHENTICATION_SUPPORT != ENABLED && VERIFY_AUTHENTICATION_SUPPORT != DISABLED)
53#error VERIFY_INTEGRITY_SUPPORT parameter is not valid!
57#ifndef VERIFY_SIGNATURE_SUPPORT
58#define VERIFY_SIGNATURE_SUPPORT DISABLED
59#elif (VERIFY_SIGNATURE_SUPPORT != ENABLED && VERIFY_SIGNATURE_SUPPORT != DISABLED)
60#error VERIFY_INTEGRITY_SUPPORT parameter is not valid!
64#ifndef VERIFY_RSA_SUPPORT
65#define VERIFY_RSA_SUPPORT DISABLED
66#elif (VERIFY_RSA_SUPPORT != ENABLED && VERIFY_RSA_SUPPORT != DISABLED)
67#error VERIFY_RSA_SUPPORT parameter is not valid!
71#ifndef VERIFY_ECDSA_SUPPORT
72#define VERIFY_ECDSA_SUPPORT DISABLED
73#elif (VERIFY_ECDSA_SUPPORT != ENABLED && VERIFY_ECDSA_SUPPORT != DISABLED)
74#error VERIFY_ECDSA_SUPPORT parameter is not valid!
78#if (VERIFY_AUTHENTICATION_SUPPORT == ENABLED)
79#include "cipher/cipher_algorithms.h"
80#include "mac/mac_algorithms.h"
84#if (VERIFY_SIGNATURE_SUPPORT == ENABLED)
85#if VERIFY_RSA_SUPPORT == ENABLED
88#if VERIFY_ECDSA_SUPPORT == ENABLED
91#include "pkix/pem_import.h"
92#include "pkix/pem_key_import.h"
96#if (VERIFY_AUTHENTICATION_SUPPORT == ENABLED)
97#define MAX_CHECK_CONTEXT_SIZE sizeof(HmacContext)
99#define MAX_CHECK_CONTEXT_SIZE sizeof(HashContext)
103#ifndef MAX_HASH_DIGEST_SIZE
104#if (VERIFY_SIGNATURE_SUPPORT == ENABLED) || (VERIFY_AUTHENTICATION_SUPPORT == ENABLED)
105#error A signature/authentication verify method is enabled but no hash algorithm is; enable at least SHA-256 in crypto_config.h
107#define MAX_HASH_DIGEST_SIZE CRC32_DIGEST_SIZE
112#define VERIFY_MAX_HASH_DIGEST_SIZE MAX_HASH_DIGEST_SIZE
126 VERIFY_METHOD_INTEGRITY,
127 VERIFY_METHOD_AUTHENTICATION,
128 VERIFY_METHOD_SIGNATURE
159#if (VERIFY_INTEGRITY_SUPPORT == ENABLED)
162#if (VERIFY_AUTHENTICATION_SUPPORT == ENABLED)
168#if (VERIFY_SIGNATURE_SUPPORT == ENABLED || BOOT_RUNTIME_SIGNATURE_CHECK_SUPPORT == ENABLED)
184 uint8_t checkContext[MAX_CHECK_CONTEXT_SIZE];
188 uint8_t imageCheckDigest[MAX_HASH_DIGEST_SIZE];
197 size_t verifyDataLength);
199 size_t checkDataSize,
size_t *checkDataLength);
cboot_error_t
Error codes.
Definition cboot_error.h:57
CycloneBOOT CRC32 cryptographic integrity tag.
Verification context.
Definition verify.h:181
size_t checkDataSize
Image verification check data size.
Definition verify.h:186
VerifySettings verifySettings
Image verification user settings.
Definition verify.h:182
size_t imageCheckDigestSize
Image verification digest buffer size.
Definition verify.h:190
Verification settings.
Definition verify.h:157
size_t authKeyLen
Image authentication key size.
Definition verify.h:166
const char_t * signKey
Image signature public key (PEM format)
Definition verify.h:171
VerifySignAlgo signAlgo
Image signature algorithm.
Definition verify.h:169
VerifyMethod verifyMethod
Image verification method.
Definition verify.h:158
VerifyAuthAlgo authAlgo
Image authentication algorithm.
Definition verify.h:163
const HashAlgo * signHashAlgo
Image signature hash algorithm.
Definition verify.h:170
const HashAlgo * authHashAlgo
Image authentication hash algorithm.
Definition verify.h:164
const HashAlgo * integrityAlgo
Image integrity algorithm.
Definition verify.h:160
const char_t * authKey
Image authentication key.
Definition verify.h:165
size_t signKeyLen
Image signature public key size.
Definition verify.h:172
cboot_error_t verifyInit(VerifyContext *context, VerifySettings *settings)
Initialize image verification context.
Definition verify.c:50
cboot_error_t verifyGenerateCheckData(VerifyContext *context, uint8_t *checkData, size_t checkDataSize, size_t *checkDataLength)
Generate image check data according to given verification method.
Definition verify.c:338
cboot_error_t verifyConfirm(VerifyContext *context, uint8_t *verifyData, size_t verifyDataLength)
Validate image check data tag using the given verification method. For integrity check in consist on ...
Definition verify.c:204
VerifySignAlgo
Verification signature algorithms.
Definition verify.h:146
VerifyMethod
Verification method.
Definition verify.h:125
VerifyAuthAlgo
Verification authentication algorithms.
Definition verify.h:136
cboot_error_t verifyProcess(VerifyContext *context, uint8_t *data, size_t length)
Process image data verification by updating integrity, authentication or signature tag with a portion...
Definition verify.c:129