Skip to content

Commit

Permalink
DEPENDENCY MERGE: riotboot_add_sha256_verify (RIOT-OS#11805)
Browse files Browse the repository at this point in the history
  • Loading branch information
kaspar030 committed Jul 10, 2019
2 parents c1ed1bc + 6df6d6d commit 2299177
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 0 deletions.
14 changes: 14 additions & 0 deletions sys/include/riotboot/flashwrite.h
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,20 @@ static inline int riotboot_flashwrite_finish(riotboot_flashwrite_t *state)
*/
size_t riotboot_flashwrite_slotsize(const riotboot_flashwrite_t *state);

/**
* @brief Verify the digest of an image
*
* @param[in] sha256_digest content of the image digest
* @param[in] img_size the size of the image
* @param[in] target_slot the image slot number
*
* @returns -1 when image is too small
* @returns 0 if the digest is valid
* @returns 1 if the digest is invalid
*/
int riotboot_flashwrite_verify_sha256(const uint8_t *sha256_digest,
size_t img_size, int target_slot);

#ifdef __cplusplus
}
#endif
Expand Down
51 changes: 51 additions & 0 deletions sys/riotboot/flashwrite_verify_sha256.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* Copyright (C) 2019 Inria
* 2019 Freie Universität Berlin
* 2019 Kaspar Schleiser <[email protected]>
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/

/**
* @ingroup sys_riotboot_flashwrite
* @{
*
* @file
* @brief Firmware update sha256 verification helper functions
*
* @author Kaspar Schleiser <[email protected]>
*
* @}
*/

#include <stdint.h>
#include <string.h>

#include "hashes/sha256.h"
#include "log.h"
#include "riotboot/slot.h"

int riotboot_flashwrite_verify_sha256(const uint8_t *sha256_digest, size_t img_len, int target_slot)
{
char digest[SHA256_DIGEST_LENGTH];

sha256_context_t sha256;

if (img_len < 4) {
LOG_INFO("riotboot: verify_sha256(): image too small\n");
return -1;
}

uint8_t *img_start = (uint8_t *)riotboot_slot_get_hdr(target_slot);

LOG_INFO("riotboot: verifying digest at %p (img at: %p size: %u)\n", sha256_digest, img_start, img_len);

sha256_init(&sha256);
sha256_update(&sha256, "RIOT", 4);
sha256_update(&sha256, img_start + 4, img_len - 4);
sha256_final(&sha256, digest);

return memcmp(sha256_digest, digest, SHA256_DIGEST_LENGTH) != 0;
}

0 comments on commit 2299177

Please sign in to comment.