159c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
259c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * Use of this source code is governed by a BSD-style license that can be
359c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * found in the LICENSE file.
459c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
559c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * Host-side functions for verified boot key structures
659c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler */
759c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
859c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler#ifndef VBOOT_REFERENCE_HOST_KEY2_H_
959c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler#define VBOOT_REFERENCE_HOST_KEY2_H_
1059c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
1159c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler#include "2struct.h"
1259c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
13fc73f087653ee67193a9f2b897433db2cd532f8cRandall Spanglerstruct vb2_public_key;
14fc73f087653ee67193a9f2b897433db2cd532f8cRandall Spangler
1559c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler/* Private key data, in-memory format for use in signing calls. */
1659c29202d2d67b97f587152b5457ed89f7430a77Randall Spanglerstruct vb2_private_key {
1759c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler	struct rsa_st *rsa_private_key;		/* Private key data */
1859c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler	enum vb2_hash_algorithm hash_alg;	/* Hash algorithm */
1959c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler	enum vb2_signature_algorithm sig_alg;	/* Signature algorithm */
2059c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler	char *desc;				/* Description */
2159c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler	struct vb2_guid guid;			/* Key GUID */
2259c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler};
2359c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
244e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson/* Convert between enums and human-readable form. Terminated with {0, 0}. */
254e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardsonstruct vb2_text_vs_enum {
264e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson	const char *name;
274e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson	unsigned int num;
284e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson};
294e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson
304e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson/**
314e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * @param table         Table to search
324e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * @param num           Enum value to search for
334e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * @return pointer to table entry or NULL if no match
344e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson */
354e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardsonconst struct vb2_text_vs_enum *vb2_lookup_by_num(
364e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson	const struct vb2_text_vs_enum *table,
374e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson	const unsigned int num);
384e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson
394e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson/**
404e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * @param table         Table to search
414e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * @param name          String value to search for
424e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * @return pointer to table entry or NULL if no match
434e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson */
444e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardsonconst struct vb2_text_vs_enum *vb2_lookup_by_name(
454e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson	const struct vb2_text_vs_enum *table,
464e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson	const char *name);
474e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson
484e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardsonextern struct vb2_text_vs_enum vb2_text_vs_algorithm[];
494e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardsonextern struct vb2_text_vs_enum vb2_text_vs_sig[];
504e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardsonextern struct vb2_text_vs_enum vb2_text_vs_hash[];
514e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson
5259c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler/**
5359c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * Free a private key.
5459c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
5559c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param key		Key containing internal data to free.
5659c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler */
5759c29202d2d67b97f587152b5457ed89f7430a77Randall Spanglervoid vb2_private_key_free(struct vb2_private_key *key);
5859c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
5959c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler/**
60308d2540929cd95e2a565be95ce0b1d45d2fbed2Randall Spangler * Unpack a private key from vb2_packed_private_key format.
6159c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
6259c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param key_ptr	Destination for newly allocated key; this must be
6359c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *			freed with vb2_private_key_free().
6459c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param buf		Source buffer containing packed key
6559c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param size		Size of buffer in bytes
6659c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @return VB2_SUCCESS, or non-zero error code if error.
6759c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler */
6859c29202d2d67b97f587152b5457ed89f7430a77Randall Spanglerint vb2_private_key_unpack(struct vb2_private_key **key_ptr,
6959c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler			   const uint8_t *buf,
7059c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler			   uint32_t size);
7159c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
7259c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler/**
73308d2540929cd95e2a565be95ce0b1d45d2fbed2Randall Spangler * Read a private key from vb2_packed_private_key format.
7459c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
7559c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param key_ptr	Destination for newly allocated key; this must be
7659c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *			freed with vb2_private_key_free().
7759c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param filename	File to read key data from.
7859c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @return VB2_SUCCESS, or non-zero error code if error.
7959c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler */
8059c29202d2d67b97f587152b5457ed89f7430a77Randall Spanglerint vb2_private_key_read(struct vb2_private_key **key_ptr,
8159c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler			 const char *filename);
8259c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
8359c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler/**
8459c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * Read a private key from a .pem file.
8559c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
8659c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * This only reads the internal data for the key.  It does not set any of the
8759c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * other fields in *key_ptr, since those are not contained in the .pem file.
8859c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
8959c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param key_ptr	Destination for newly allocated key; this must be
9059c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *			freed with vb2_private_key_free().
9159c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param filename	File to read key data from.
9259c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @return VB2_SUCCESS, or non-zero error code if error.
9359c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler */
9459c29202d2d67b97f587152b5457ed89f7430a77Randall Spanglerint vb2_private_key_read_pem(struct vb2_private_key **key_ptr,
9559c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler			     const char *filename);
9659c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
9759c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler/**
9859c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * Set the description of a private key.
9959c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
10059c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param key		Key to set description for
10159c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param desc		Description string, or NULL if no description.
10259c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @return VB2_SUCCESS, or non-zero error code if error.
10359c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler */
10459c29202d2d67b97f587152b5457ed89f7430a77Randall Spanglerint vb2_private_key_set_desc(struct vb2_private_key *key, const char *desc);
10559c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
10659c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler/**
107308d2540929cd95e2a565be95ce0b1d45d2fbed2Randall Spangler * Write a private key to vb2_packed_private_key format.
10859c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
10959c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param key		Key to write
11059c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param filename	File to write key data to.
11159c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @return VB2_SUCCESS, or non-zero error code if error.
11259c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler */
11359c29202d2d67b97f587152b5457ed89f7430a77Randall Spanglerint vb2_private_key_write(const struct vb2_private_key *key,
11459c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler			  const char *filename);
11559c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
11659c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler/**
117fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler * Get a private key for an unsigned hash
118fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler *
119fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler * @param key_ptr	Destination for pointer to key.  The key is statically
120fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler *			allocated and must not be freed.
121fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler * @param hash_alg	Hash algorithm to use
122fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler * @return VB2_SUCCESS, or non-zero error code if error.
123fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler */
124fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spanglerint vb2_private_key_hash(const struct vb2_private_key **key_ptr,
125fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler			 enum vb2_hash_algorithm hash_alg);
126fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler
127fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler/**
1284e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * Allocate a public key buffer of sufficient size for the signature algorithm.
1294e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson *
1304e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * This only initializes the sig_alg field and the guid field to an empty
1314e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * guid.  It does not set any of the other fields in *key_ptr.
1324e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson *
1334e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * @param key_ptr	Destination for newly allocated key; this must be
1344e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson *			freed with vb2_public_key_free().
1354e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * @param sig_alg	Signature algorithm for key.
1364e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * @return VB2_SUCCESS, or non-zero error code if error.
1374e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson */
1384e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardsonint vb2_public_key_alloc(struct vb2_public_key **key_ptr,
1394e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson			 enum vb2_signature_algorithm sig_alg);
1404e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson
1414e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson/**
1424e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * Return the packed data for a key allocated with vb2_public_key_alloc().
1434e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson *
1444e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * The packed data is in the same buffer, following the key struct and GUID.
1454e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson */
1464e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardsonuint8_t *vb2_public_key_packed_data(struct vb2_public_key *key);
1474e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson
1484e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson/**
14959c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * Free a public key allocated by one of the functions below.
15059c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
15159c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * Note that this should ONLY be called for public keys allocated via one
15259c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * of those functions; public keys created or filled in other ways (such as
153308d2540929cd95e2a565be95ce0b1d45d2fbed2Randall Spangler * vb2_unpack_key()) do not allocate memory for sub-fields in the same way.
15459c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
15559c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param key		Key to free
15659c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler */
15759c29202d2d67b97f587152b5457ed89f7430a77Randall Spanglervoid vb2_public_key_free(struct vb2_public_key *key);
15859c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
15959c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler/**
16059c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * Read a public key from a .keyb file.
16159c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
16259c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * Guesses the signature algorithm based on the size of the .keyb file.  Does
16359c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * not set the hash_alg, guid, or desc fields, since those are not contained in
16459c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * the .keyb file.
16559c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
16659c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param key_ptr	Destination for newly allocated key; this must be
16759c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *			freed with vb2_public_key_free().
16859c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param filename	File to read key from.
16959c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @return VB2_SUCCESS, or non-zero error code if error.
17059c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler */
17159c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
17259c29202d2d67b97f587152b5457ed89f7430a77Randall Spanglerint vb2_public_key_read_keyb(struct vb2_public_key **key_ptr,
17359c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler			     const char *filename);
17459c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
17559c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler/**
17659c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * Set the description of a public key.
17759c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
17859c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param key		Key to set description for
17959c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param desc		Description string, or NULL if no description.
18059c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @return VB2_SUCCESS, or non-zero error code if error.
18159c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler */
18259c29202d2d67b97f587152b5457ed89f7430a77Randall Spanglerint vb2_public_key_set_desc(struct vb2_public_key *key, const char *desc);
18359c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
18459c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler/**
185308d2540929cd95e2a565be95ce0b1d45d2fbed2Randall Spangler * Read a public key in vb2_packed_key format.
18659c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
18759c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param key_ptr	On success, points to the newly allocated key buffer.
18859c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *			Caller is responsible for calling free() on this.
18959c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @return VB2_SUCCESS, or non-zero if error.
19059c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler */
191308d2540929cd95e2a565be95ce0b1d45d2fbed2Randall Spanglerint vb2_packed_key_read(struct vb2_packed_key **key_ptr,
19259c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler			 const char *filename);
19359c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
19459c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler/**
195308d2540929cd95e2a565be95ce0b1d45d2fbed2Randall Spangler * Pack a public key into vb2_packed_key format.
19659c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *
19759c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param pubk		Public key to pack
19859c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @param key_ptr	On success, points to a newly allocated packed key
19959c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *			buffer.  Caller is responsible for calling free() on
20059c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler *			this.
20159c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler * @return VB2_SUCCESS, or non-zero if error.
20259c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler */
203308d2540929cd95e2a565be95ce0b1d45d2fbed2Randall Spanglerint vb2_public_key_pack(struct vb2_packed_key **key_ptr,
20459c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler			const struct vb2_public_key *pubk);
20559c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler
206fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler/**
207fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler * Get a public key for an unsigned hash.
208fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler *
209fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler * @param key		Destination for key data.
210fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler * @param hash_alg	Hash algorithm to use
211fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler * @return VB2_SUCCESS, or non-zero error code if error.
212fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler */
213fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spanglerint vb2_public_key_hash(struct vb2_public_key *key,
214fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler			enum vb2_hash_algorithm hash_alg);
215fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler
216fb9a216dd677d97f3d6963f668a9b84d349ef339Randall Spangler
2174e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson/**
2184e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * Return the signature algorithm implied by the bit length of an RSA key
2194e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson *
2204e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * @param rsa		RSA key
2214e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * @return vb2 signature algorithm
2224e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson */
2234e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardsonenum vb2_signature_algorithm vb2_rsa_sig_alg(struct rsa_st *rsa);
2244e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson
2254e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson/**
2264e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * Write a public key to the vb2_packed_key format.
2274e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson *
2284e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * @param key		Key to write
2294e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * @param filename	File to write key data to.
2304e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson * @return VB2_SUCCESS, or non-zero error code if error.
2314e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson */
2324e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardsonint vb2_public_key_write(const struct vb2_public_key *key,
2334e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson			 const char *filename);
2344e4c19602edf3834b50d66d3ba067e895aca6fa0Bill Richardson
23559c29202d2d67b97f587152b5457ed89f7430a77Randall Spangler#endif  /* VBOOT_REFERENCE_HOST_KEY2_H_ */
236