blob: 7ebb557654396bbd8cb54e3c2d8a79a8cf16c123 [file] [log] [blame]
// Copyright 2017 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// The external API for firmware testing. Because it is called by Python ctypes
// modules, we wrap it as C header file.
// When we expose a C++ class, the wrapper function of its constructor should be
// named as "<class_name>_New", and return a pointer to the instance.
// The wrapper function of a public method should be named as
// "<class_name>_<method_name>".
#ifndef HAMMERD_HAMMERD_API_H_
#define HAMMERD_HAMMERD_API_H_
#include <brillo/brillo_export.h>
#include <openssl/sha.h>
#include "hammerd/curve25519.h"
#include "hammerd/pair_utils.h"
#include "hammerd/update_fw.h"
extern "C" {
using hammerd::ChallengeStatus;
using hammerd::FirmwareUpdater;
using hammerd::FirstResponsePdu;
using hammerd::PairManager;
using hammerd::PairChallengeRequest;
using hammerd::PairChallengeResponse;
using hammerd::SectionName;
using hammerd::UpdateExtraCommand;
using hammerd::UsbConnectStatus;
// The intermediary type for converting Python string to C++ std::string.
// It is used to store either a normal string ending with '\0' or binary data.
struct ByteString {
char* ptr;
size_t size;
};
// Expose the global constant.
BRILLO_EXPORT int kEntropySize = hammerd::kEntropySize;
BRILLO_EXPORT int kSha256DigestLength = SHA256_DIGEST_LENGTH;
BRILLO_EXPORT int kX25519PublicValueLen = X25519_PUBLIC_VALUE_LEN;
// Expose FirmwareUpdater class.
BRILLO_EXPORT FirmwareUpdater* FirmwareUpdater_New(
uint16_t vendor_id, uint16_t product_id, int bus, int port);
BRILLO_EXPORT bool FirmwareUpdater_LoadEcImage(
FirmwareUpdater* updater, const ByteString* ec_image);
BRILLO_EXPORT bool FirmwareUpdater_LoadTouchpadImage(
FirmwareUpdater* updater, const ByteString* touchpad_image);
BRILLO_EXPORT UsbConnectStatus FirmwareUpdater_TryConnectUsb(
FirmwareUpdater* updater);
BRILLO_EXPORT void FirmwareUpdater_CloseUsb(
FirmwareUpdater* updater);
BRILLO_EXPORT bool FirmwareUpdater_SendFirstPdu(
FirmwareUpdater* updater);
BRILLO_EXPORT void FirmwareUpdater_SendDone(
FirmwareUpdater* updater);
BRILLO_EXPORT bool FirmwareUpdater_InjectEntropy(
FirmwareUpdater* updater);
BRILLO_EXPORT bool FirmwareUpdater_InjectEntropyWithPayload(
FirmwareUpdater* updater, const ByteString* payload);
BRILLO_EXPORT bool FirmwareUpdater_SendSubcommand(
FirmwareUpdater* updater, UpdateExtraCommand subcommand);
BRILLO_EXPORT bool FirmwareUpdater_SendSubcommandWithPayload(
FirmwareUpdater* updater,
UpdateExtraCommand subcommand, const ByteString* cmd_body);
BRILLO_EXPORT bool FirmwareUpdater_SendSubcommandReceiveResponse(
FirmwareUpdater* updater,
UpdateExtraCommand subcommand, const ByteString* cmd_body,
void* resp, size_t resp_size);
BRILLO_EXPORT bool FirmwareUpdater_TransferImage(
FirmwareUpdater* updater, SectionName section_name);
BRILLO_EXPORT bool FirmwareUpdater_TransferTouchpadFirmware(
FirmwareUpdater* updater, uint32_t section_addr, size_t data_len);
BRILLO_EXPORT SectionName FirmwareUpdater_CurrentSection(
FirmwareUpdater* updater);
BRILLO_EXPORT bool FirmwareUpdater_ValidKey(
FirmwareUpdater* updater);
BRILLO_EXPORT int FirmwareUpdater_CompareRollback(
FirmwareUpdater* updater);
BRILLO_EXPORT bool FirmwareUpdater_VersionMismatch(
FirmwareUpdater* updater, SectionName section_name);
BRILLO_EXPORT bool FirmwareUpdater_IsSectionLocked(
FirmwareUpdater* updater, SectionName section_name);
BRILLO_EXPORT bool FirmwareUpdater_UnlockRW(
FirmwareUpdater* updater);
BRILLO_EXPORT bool FirmwareUpdater_IsRollbackLocked(
FirmwareUpdater* updater);
BRILLO_EXPORT bool FirmwareUpdater_UnlockRollback(
FirmwareUpdater* updater);
BRILLO_EXPORT const FirstResponsePdu* FirmwareUpdater_GetFirstResponsePdu(
FirmwareUpdater* updater);
BRILLO_EXPORT const char* FirmwareUpdater_GetSectionVersion(
FirmwareUpdater* updater, SectionName section_name);
// Expose PairManager class.
BRILLO_EXPORT PairManager* PairManager_New();
BRILLO_EXPORT int PairManager_PairChallenge(
PairManager* self, FirmwareUpdater* fw_updater, uint8_t* public_key);
} // extern "C"
#endif // HAMMERD_HAMMERD_API_H_