host_signature2.h revision 308d2540929cd95e2a565be95ce0b1d45d2fbed2
1/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file.
4 *
5 * Host-side functions for verified boot key structures
6 */
7
8#ifndef VBOOT_REFERENCE_HOST_SIGNATURE2_H_
9#define VBOOT_REFERENCE_HOST_SIGNATURE2_H_
10
11#include "2struct.h"
12
13struct vb2_private_key;
14
15/**
16 * Sign data buffer
17 *
18 * @param sig_ptr	On success, points to a newly allocated signature.
19 *			Caller is responsible for calling free() on this.
20 * @param data		Pointer to data to sign
21 * @param size		Size of data to sign in bytes
22 * @param key		Private key to use to sign data
23 * @param desc		Optional description for signature.  If NULL, the
24 *			key description will be used.
25 * @return VB2_SUCCESS, or non-zero error code on failure.
26 */
27int vb2_sign_data(struct vb2_signature **sig_ptr,
28		  const uint8_t *data,
29		  uint32_t size,
30		  const struct vb2_private_key *key,
31		  const char *desc);
32
33/**
34 * Calculate the signature size for a private key.
35 *
36 * @param size_ptr	On success, contains the signature size in bytes.
37 * @param key		Key to calculate signature length from.
38 * @param desc		Optional description for signature.  If NULL, the
39 *			key description will be used.
40 * @return VB2_SUCCESS, or non-zero error code on failure.
41 */
42int vb2_sig_size_for_key(uint32_t *size_ptr,
43			 const struct vb2_private_key *key,
44			 const char *desc);
45
46/**
47 * Calculate the total signature size for a list of keys.
48 *
49 * @param size_ptr	On success, contains the signature size in bytes.
50 * @param key_list	List of keys to calculate signature length from.
51 * @param key_count	Number of keys.
52 * @return VB2_SUCCESS, or non-zero error code on failure.
53 */
54int vb2_sig_size_for_keys(uint32_t *size_ptr,
55			  const struct vb2_private_key **key_list,
56			  uint32_t key_count);
57
58/**
59 * Sign object with a key.
60 *
61 * @param buf		Buffer containing object to sign, starting with
62 *			common header
63 * @param sig_offset	Offset in buffer at which to store signature.  All
64 *			data before this in the buffer will be signed.
65 * @param key		Key to sign object with
66 * @param desc		If non-null, description to use for signature
67 */
68int vb2_sign_object(uint8_t *buf,
69		    uint32_t sig_offset,
70		    const struct vb2_private_key *key,
71		    const char *desc);
72
73/**
74 * Sign object with list of keys.
75 *
76 * @param buf		Buffer containing object to sign, starting with
77 *			common header
78 * @param sig_offset	Offset to start signatures.  All data before this
79 *			in the buffer will be signed.
80 * @param key_list	List of keys to sign object with
81 * @param key_count	Number of keys in list
82 */
83int vb2_sign_object_multiple(uint8_t *buf,
84			     uint32_t sig_offset,
85			     const struct vb2_private_key **key_list,
86			     uint32_t key_count);
87
88#endif  /* VBOOT_REFERENCE_HOST_SIGNATURE2_H_ */
89