CycloneBOOT 2.6.6
Secure Bootloader for ARM Cortex-M MCU
Loading...
Searching...
No Matches
verify.h
Go to the documentation of this file.
1
31#ifndef _VERIFY_H
32#define _VERIFY_H
33
34// Dependencies
35#include "boot_config.h"
36#include "core/cboot_error.h"
37#include "core/crc32.h"
38#include "core/crypto.h"
39#include "debug.h"
40#include "hash/hash_algorithms.h"
41
42// Integrity verification support
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!
47#endif
48
49// Authentication verification support
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!
54#endif
55
56// Signature verification support
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!
61#endif
62
63// RSA key support
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!
68#endif
69
70// ECDSA key support
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!
75#endif
76
77// Add authentication related dependencies
78#if (VERIFY_AUTHENTICATION_SUPPORT == ENABLED)
79#include "cipher/cipher_algorithms.h"
80#include "mac/mac_algorithms.h"
81#endif
82
83// Add signature related dependencies
84#if (VERIFY_SIGNATURE_SUPPORT == ENABLED)
85#if VERIFY_RSA_SUPPORT == ENABLED
86#include "pkc/rsa.h"
87#endif
88#if VERIFY_ECDSA_SUPPORT == ENABLED
89#include "ecc/ecdsa.h"
90#endif
91#include "pkix/pem_import.h"
92#include "pkix/pem_key_import.h"
93#endif
94
95// Maximum check data context size
96#if (VERIFY_AUTHENTICATION_SUPPORT == ENABLED)
97#define MAX_CHECK_CONTEXT_SIZE sizeof(HmacContext)
98#else
99#define MAX_CHECK_CONTEXT_SIZE sizeof(HashContext)
100#endif
101
102// Make sure MAX_HASH_DIGEST_SIZE is always defined.
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
106#else
107#define MAX_HASH_DIGEST_SIZE CRC32_DIGEST_SIZE
108#endif
109#endif
110
111// Maximum digest size
112#define VERIFY_MAX_HASH_DIGEST_SIZE MAX_HASH_DIGEST_SIZE
113
114// C++ guard
115#ifdef __cplusplus
116extern "C"
117{
118#endif
119
124typedef enum
125{
126 VERIFY_METHOD_INTEGRITY,
127 VERIFY_METHOD_AUTHENTICATION,
128 VERIFY_METHOD_SIGNATURE
130
135typedef enum
136{
137 VERIFY_AUTH_NONE,
138 VERIFY_AUTH_HMAC
140
145typedef enum
146{
147 VERIFY_SIGN_NONE,
148 VERIFY_SIGN_RSA,
149 VERIFY_SIGN_ECDSA,
151
156typedef struct
157{
159#if (VERIFY_INTEGRITY_SUPPORT == ENABLED)
160 const HashAlgo *integrityAlgo;
161#endif
162#if (VERIFY_AUTHENTICATION_SUPPORT == ENABLED)
164 const HashAlgo *authHashAlgo;
165 const char_t *authKey;
166 size_t authKeyLen;
167#endif
168#if (VERIFY_SIGNATURE_SUPPORT == ENABLED || BOOT_RUNTIME_SIGNATURE_CHECK_SUPPORT == ENABLED)
170 const HashAlgo *signHashAlgo;
171 const char_t *signKey;
172 size_t signKeyLen;
173#endif
175
180typedef struct
181{
183
184 uint8_t checkContext[MAX_CHECK_CONTEXT_SIZE];
187
188 uint8_t imageCheckDigest[MAX_HASH_DIGEST_SIZE];
192
193// CycloneBOOT verification related functions
195cboot_error_t verifyProcess(VerifyContext *context, uint8_t *data, size_t length);
196cboot_error_t verifyConfirm(VerifyContext *context, uint8_t *verifyData,
197 size_t verifyDataLength);
198cboot_error_t verifyGenerateCheckData(VerifyContext *context, uint8_t *checkData,
199 size_t checkDataSize, size_t *checkDataLength);
200
201// C++ guard
202#ifdef __cplusplus
203}
204#endif
205#endif // !_CIPHER_H
Error codes description.
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