| /* Copyright (c) 2014 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 key structures |
| */ |
| |
| #ifndef VBOOT_REFERENCE_HOST_SIGNATURE2_H_ |
| #define VBOOT_REFERENCE_HOST_SIGNATURE2_H_ |
| |
| #include "2struct.h" |
| |
| struct vb2_private_key; |
| struct vb21_signature; |
| |
| /** |
| * Get the digest info for a hash algorithm |
| * |
| * @param hash_alg Hash algorithm |
| * @param buf_ptr On success, points to the digest info |
| * @param size_ptr On success, contains the info size in bytes |
| * @return VB2_SUCCESS, or non-zero error code on failure. |
| */ |
| vb2_error_t vb2_digest_info(enum vb2_hash_algorithm hash_alg, |
| const uint8_t **buf_ptr, uint32_t *size_ptr); |
| |
| /** |
| * Sign data buffer |
| * |
| * @param sig_ptr On success, points to a newly allocated signature. |
| * Caller is responsible for calling free() on this. |
| * @param data Pointer to data to sign |
| * @param size Size of data to sign in bytes |
| * @param key Private key to use to sign data |
| * @param desc Optional description for signature. If NULL, the |
| * key description will be used. |
| * @return VB2_SUCCESS, or non-zero error code on failure. |
| */ |
| vb2_error_t vb21_sign_data(struct vb21_signature **sig_ptr, const uint8_t *data, |
| uint32_t size, const struct vb2_private_key *key, |
| const char *desc); |
| |
| /** |
| * Calculate the signature size for a private key. |
| * |
| * @param size_ptr On success, contains the signature size in bytes. |
| * @param key Key to calculate signature length from. |
| * @param desc Optional description for signature. If NULL, the |
| * key description will be used. |
| * @return VB2_SUCCESS, or non-zero error code on failure. |
| */ |
| vb2_error_t vb21_sig_size_for_key(uint32_t *size_ptr, |
| const struct vb2_private_key *key, |
| const char *desc); |
| |
| /** |
| * Calculate the total signature size for a list of keys. |
| * |
| * @param size_ptr On success, contains the signature size in bytes. |
| * @param key_list List of keys to calculate signature length from. |
| * @param key_count Number of keys. |
| * @return VB2_SUCCESS, or non-zero error code on failure. |
| */ |
| vb2_error_t vb21_sig_size_for_keys(uint32_t *size_ptr, |
| const struct vb2_private_key **key_list, |
| uint32_t key_count); |
| |
| /** |
| * Sign object with a key. |
| * |
| * @param buf Buffer containing object to sign, starting with |
| * common header |
| * @param sig_offset Offset in buffer at which to store signature. All |
| * data before this in the buffer will be signed. |
| * @param key Key to sign object with |
| * @param desc If non-null, description to use for signature |
| */ |
| vb2_error_t vb21_sign_object(uint8_t *buf, uint32_t sig_offset, |
| const struct vb2_private_key *key, |
| const char *desc); |
| |
| /** |
| * Sign object with list of keys. |
| * |
| * @param buf Buffer containing object to sign, starting with |
| * common header |
| * @param sig_offset Offset to start signatures. All data before this |
| * in the buffer will be signed. |
| * @param key_list List of keys to sign object with |
| * @param key_count Number of keys in list |
| */ |
| vb2_error_t vb21_sign_object_multiple(uint8_t *buf, uint32_t sig_offset, |
| const struct vb2_private_key **key_list, |
| uint32_t key_count); |
| |
| #endif /* VBOOT_REFERENCE_HOST_SIGNATURE2_H_ */ |