/* Copyright (c) 2010 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. * * Host-side functions for verified boot. */ #ifndef VBOOT_REFERENCE_HOST_SIGNATURE_H_ #define VBOOT_REFERENCE_HOST_SIGNATURE_H_ #include "host_key.h" #include "utility.h" #include "vboot_struct.h" struct vb2_private_key; struct vb2_signature; /** * Initialize a signature struct. * * @param sig Structure to initialize * @param sig_data Pointer to signature data buffer (after sig) * @param sig_size Size of signature data buffer in bytes * @param data_size Amount of data signed in bytes */ void vb2_init_signature(struct vb2_signature *sig, uint8_t *sig_data, uint32_t sig_size, uint32_t data_size); /** * Allocate a new signature. * * @param sig_size Size of signature in bytes * @param data_size Amount of data signed in bytes * * @return The signature or NULL if error. Caller must free() it. */ struct vb2_signature *vb2_alloc_signature(uint32_t sig_size, uint32_t data_size); /** * Copy a signature. * * @param dest Destination signature * @param src Source signature * * @return VB2_SUCCESS, or non-zero if error. */ int vb2_copy_signature(struct vb2_signature *dest, const struct vb2_signature *src); /** * Calculate a SHA-512 digest-only signature. * * @param data Pointer to data to hash * @param size Length of data in bytes * * @return The signature, or NULL if error. Caller must free() it. */ struct vb2_signature *vb2_sha512_signature(const uint8_t *data, uint32_t size); /** * Calculate a signature for the data using the specified key. * * @param data Pointer to data to sign * @param size Length of data in bytes * @param key Private key to use to sign data * * @return The signature, or NULL if error. Caller must free() it. */ struct vb2_signature *vb2_calculate_signature( const uint8_t *data, uint32_t size, const struct vb2_private_key *key); /** * Calculate a signature for the data using an external signer. * * @param data Pointer to data to sign * @param size Length of data in bytes * @param key_file Name of file containing private key * @param key_algorithm Key algorithm * @param external_signer Path to external signer program * * @return The signature, or NULL if error. Caller must free() it. */ struct vb2_signature *vb2_external_signature(const uint8_t *data, uint32_t size, const char *key_file, uint32_t key_algorithm, const char *external_signer); #endif /* VBOOT_REFERENCE_HOST_SIGNATURE_H_ */