blob: f31a97c720de37fd3b058bda7291016f731a421e [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_STORAGE_LIB_PAVER_VALIDATION_H_
#define SRC_STORAGE_LIB_PAVER_VALIDATION_H_
#include <lib/stdcompat/span.h>
#include <lib/zbi-format/zbi.h>
#include <zircon/errors.h>
#include <zircon/status.h>
#include "src/storage/lib/paver/device-partitioner.h"
namespace paver {
// Extract the payload out of the given ZBI image.
//
// Return "true" on success, or "false" if the input data is invalid.
//
// On success, sets "header" to the header of the ZBI image, and
// "payload" to the payload of the ZBI. Both are guaranteed to be
// completed contained in "data".
bool ExtractZbiPayload(cpp20::span<const uint8_t> data, const zbi_header_t** header,
cpp20::span<const uint8_t>* payload);
// Perform some basic safety checks to ensure the given payload is a valid ZBI
// for the given architecture.
bool IsValidKernelZbi(Arch arch, cpp20::span<const uint8_t> data);
// Perform some basic safety checks to ensure the given payload is a valid ChromeOS
// kernel image.
bool IsValidChromeOSKernel(cpp20::span<const uint8_t> data);
} // namespace paver
#endif // SRC_STORAGE_LIB_PAVER_VALIDATION_H_