25b7f76785caa106acd7d042c7942a826c3d7668
[vboot.git] / host / lib / include / host_key.h
1 /* 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_KEY_H_
9 #define VBOOT_REFERENCE_HOST_KEY_H_
10
11 #include "2crypto.h"
12 #include "cryptolib.h"
13 #include "vboot_struct.h"
14
15 struct vb2_packed_key;
16 struct vb2_private_key;
17
18 typedef struct rsa_st RSA;
19
20 /* Private key data */
21 typedef struct VbPrivateKey {
22   RSA* rsa_private_key;  /* Private key data */
23   uint64_t algorithm;    /* Algorithm to use when signing */
24 } VbPrivateKey;
25
26
27 /* Read a private key from a .pem file.  Caller owns the returned pointer,
28  * and must free() it. */
29 VbPrivateKey* PrivateKeyReadPem(const char* filename, uint64_t algorithm);
30 struct vb2_private_key *vb2_read_private_key_pem(
31                 const char *filename,
32                 enum vb2_crypto_algorithm algorithm);
33
34 /* Free a private key. */
35 void PrivateKeyFree(VbPrivateKey* key);
36
37 /* Write a private key to a file in .vbprivk format. */
38 int PrivateKeyWrite(const char* filename, const VbPrivateKey* key);
39
40 /* Read a private key from a .vbprivk file.  Caller owns the returned
41  * pointer, and must free() it.
42  *
43  * Returns NULL if error. */
44 VbPrivateKey* PrivateKeyRead(const char* filename);
45 struct vb2_private_key *vb2_read_private_key(const char *filename);
46
47 /* Allocate a new public key with space for a [key_size] byte key. */
48 VbPublicKey* PublicKeyAlloc(uint64_t key_size, uint64_t algorithm,
49                             uint64_t version);
50
51
52 /* Read a public key from a .vbpubk file.  Caller owns the returned
53  * pointer, and must free it with Free().
54  *
55  * Returns NULL if error. */
56 VbPublicKey* PublicKeyRead(const char* filename);
57
58 /* Return true if the packed (public) key struct appears correct. */
59 int packed_key_looks_ok(const struct vb2_packed_key *key, uint32_t size);
60
61 /* Read a public key from a .keyb file.  Caller owns the returned
62  * pointer, and must free it with Free().
63  *
64  * Returns NULL if error. */
65 VbPublicKey* PublicKeyReadKeyb(const char* filename, uint64_t algorithm,
66                                uint64_t version);
67
68
69 /* Write a public key to a file in .vbpubk format. */
70 int PublicKeyWrite(const char* filename, const VbPublicKey* key);
71
72
73 #endif  /* VBOOT_REFERENCE_HOST_KEY_H_ */