blob: 4fb94d6041c216446da56c59050afc60af5c0089 [file] [log] [blame]
Randall Spanglerd1836442010-06-10 09:59:04 -07001/* Copyright (c) 2010 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.
6 */
7
8#ifndef VBOOT_REFERENCE_HOST_SIGNATURE_H_
9#define VBOOT_REFERENCE_HOST_SIGNATURE_H_
10
Randall Spanglerd1836442010-06-10 09:59:04 -070011#include "cryptolib.h"
12#include "host_key.h"
13#include "utility.h"
14#include "vboot_struct.h"
15
Randall Spangler814aaf02016-06-17 10:48:16 -070016struct vb2_private_key;
17struct vb2_signature;
Randall Spanglerd1836442010-06-10 09:59:04 -070018
Randall Spangler814aaf02016-06-17 10:48:16 -070019/**
20 * Initialize a signature struct.
21 *
22 * @param sig Structure to initialize
23 * @param sig_data Pointer to signature data buffer (after sig)
24 * @param sig_size Size of signature data buffer in bytes
25 * @param data_size Amount of data signed in bytes
26 */
Randall Spangler814aaf02016-06-17 10:48:16 -070027void vb2_init_signature(struct vb2_signature *sig, uint8_t *sig_data,
28 uint32_t sig_size, uint32_t data_size);
Randall Spanglerd1836442010-06-10 09:59:04 -070029
30
Randall Spangler814aaf02016-06-17 10:48:16 -070031/**
32 * Allocate a new signature.
33 *
34 * @param sig_size Size of signature in bytes
35 * @param data_size Amount of data signed in bytes
36 *
37 * @return The signature or NULL if error. Caller must free() it.
38 */
Randall Spangler814aaf02016-06-17 10:48:16 -070039struct vb2_signature *vb2_alloc_signature(uint32_t sig_size,
40 uint32_t data_size);
Randall Spanglerd1836442010-06-10 09:59:04 -070041
Randall Spangler814aaf02016-06-17 10:48:16 -070042/**
43 * Copy a signature.
Randall Spanglerd1836442010-06-10 09:59:04 -070044 *
Randall Spangler814aaf02016-06-17 10:48:16 -070045 * @param dest Destination signature
46 * @param src Source signature
47 *
48 * @return VB2_SUCCESS, or non-zero if error. */
Randall Spangler814aaf02016-06-17 10:48:16 -070049int vb2_copy_signature(struct vb2_signature *dest,
50 const struct vb2_signature *src);
Randall Spanglerd1836442010-06-10 09:59:04 -070051
Randall Spangler814aaf02016-06-17 10:48:16 -070052/**
53 * Calculate a SHA-512 digest-only signature.
Randall Spanglerd1836442010-06-10 09:59:04 -070054 *
Randall Spangler814aaf02016-06-17 10:48:16 -070055 * @param data Pointer to data to hash
56 * @param size Length of data in bytes
57 *
Randall Spanglerd46461c2016-06-22 16:46:23 -070058 * @return The signature, or NULL if error. Caller must free() it.
Randall Spangler814aaf02016-06-17 10:48:16 -070059 */
60struct vb2_signature *vb2_sha512_signature(const uint8_t *data, uint32_t size);
Bill Richardson2448d3b2012-05-03 08:40:44 -070061
Randall Spanglerd46461c2016-06-22 16:46:23 -070062/**
63 * Calculate a signature for the data using the specified key.
Randall Spanglerd1836442010-06-10 09:59:04 -070064 *
Randall Spanglerd46461c2016-06-22 16:46:23 -070065 * @param data Pointer to data to sign
66 * @param size Length of data in bytes
67 * @param key Private key to use to sign data
68 *
69 * @return The signature, or NULL if error. Caller must free() it.
70 */
Randall Spangler814aaf02016-06-17 10:48:16 -070071struct vb2_signature *vb2_calculate_signature(
72 const uint8_t *data, uint32_t size,
73 const struct vb2_private_key *key);
Randall Spanglerd1836442010-06-10 09:59:04 -070074
Randall Spangler7d0cc742016-06-30 11:30:32 -070075/**
76 * Calculate a signature for the data using an external signer.
Gaurav Shah068fc6f2010-10-29 10:59:50 -070077 *
Randall Spangler7d0cc742016-06-30 11:30:32 -070078 * @param data Pointer to data to sign
79 * @param size Length of data in bytes
80 * @param key_file Name of file containing private key
81 * @param key_algorithm Key algorithm
82 * @param external_signer Path to external signer program
83 *
84 * @return The signature, or NULL if error. Caller must free() it.
85 */
86struct vb2_signature *vb2_external_signature(const uint8_t *data,
87 uint32_t size,
88 const char *key_file,
89 uint32_t key_algorithm,
90 const char *external_signer);
Gaurav Shah068fc6f2010-10-29 10:59:50 -070091
Randall Spanglerd1836442010-06-10 09:59:04 -070092#endif /* VBOOT_REFERENCE_HOST_SIGNATURE_H_ */