diff options
Diffstat (limited to 'host/lib/host_key2.c')
-rw-r--r-- | host/lib/host_key2.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/host/lib/host_key2.c b/host/lib/host_key2.c index 28f02af5..a100455e 100644 --- a/host/lib/host_key2.c +++ b/host/lib/host_key2.c @@ -103,3 +103,44 @@ struct vb2_private_key *vb2_read_private_key_pem( /* Return the key */ return key; } + +void vb2_init_packed_key(struct vb2_packed_key *key, uint8_t *key_data, + uint32_t key_size) +{ + memset(key, 0, sizeof(*key)); + key->key_offset = vb2_offset_of(key, key_data); + key->key_size = key_size; + key->algorithm = VB2_ALG_COUNT; /* Key not present yet */ +} + +int vb2_copy_packed_key(struct vb2_packed_key *dest, + const struct vb2_packed_key *src) +{ + if (dest->key_size < src->key_size) + return VB2_ERROR_COPY_KEY_SIZE; + + dest->key_size = src->key_size; + dest->algorithm = src->algorithm; + dest->key_version = src->key_version; + memcpy((uint8_t *)vb2_packed_key_data(dest), + vb2_packed_key_data(src), src->key_size); + return VB2_SUCCESS; +} + +struct vb2_packed_key *vb2_read_packed_key(const char *filename) +{ + struct vb2_packed_key *key; + uint32_t file_size; + + if (VB2_SUCCESS != + vb2_read_file(filename, (uint8_t **)&key, &file_size)) { + return NULL; + } + + if (packed_key_looks_ok(key, file_size)) + return key; + + /* Error */ + free(key); + return NULL; +} |