Home | History | Annotate | Download | only in include
      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 
     13 struct 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  */
     27 int 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  */
     42 int 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  */
     54 int 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  */
     68 int 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  */
     83 int 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