1147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn/*
2147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * Copyright (C) 2016 The Android Open Source Project
3147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn *
4147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * Permission is hereby granted, free of charge, to any person
5147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * obtaining a copy of this software and associated documentation
6147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * files (the "Software"), to deal in the Software without
7147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * restriction, including without limitation the rights to use, copy,
8147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * modify, merge, publish, distribute, sublicense, and/or sell copies
9147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * of the Software, and to permit persons to whom the Software is
10147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * furnished to do so, subject to the following conditions:
11147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn *
12147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * The above copyright notice and this permission notice shall be
13147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * included in all copies or substantial portions of the Software.
14147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn *
15147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn * SOFTWARE.
23147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn */
24147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn
25147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn#if !defined(AVB_INSIDE_LIBAVB_ATX_H) && !defined(AVB_COMPILATION)
26147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn#error \
27147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn    "Never include this file directly, include libavb_atx/libavb_atx.h instead."
28147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn#endif
29147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn
30147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn#ifndef AVB_ATX_TYPES_H_
31147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn#define AVB_ATX_TYPES_H_
32147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn
33147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn#include <libavb/libavb.h>
34147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn
35147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn#ifdef __cplusplus
36147b08db62f068c4fa76c3629f83d4282b614039Darren Krahnextern "C" {
37147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn#endif
38147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn
39147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn/* Size in bytes of an Android Things product ID. */
40147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn#define AVB_ATX_PRODUCT_ID_SIZE 16
41147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn
42147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn/* Size in bytes of a serialized public key with a 4096-bit modulus. */
4343e12d8b2904afa7b5adc0e2c4d9bbf81ca3b97cDarren Krahn#define AVB_ATX_PUBLIC_KEY_SIZE (sizeof(AvbRSAPublicKeyHeader) + 1024)
44147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn
45147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn/* Data structure of Android Things permanent attributes. */
46147b08db62f068c4fa76c3629f83d4282b614039Darren Krahntypedef struct AvbAtxPermanentAttributes {
47147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn  uint32_t version;
4843e12d8b2904afa7b5adc0e2c4d9bbf81ca3b97cDarren Krahn  uint8_t product_root_public_key[AVB_ATX_PUBLIC_KEY_SIZE];
49147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn  uint8_t product_id[AVB_ATX_PRODUCT_ID_SIZE];
50147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn} AVB_ATTR_PACKED AvbAtxPermanentAttributes;
51147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn
52147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn/* Data structure of signed fields in an Android Things certificate. */
53147b08db62f068c4fa76c3629f83d4282b614039Darren Krahntypedef struct AvbAtxCertificateSignedData {
54147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn  uint32_t version;
5543e12d8b2904afa7b5adc0e2c4d9bbf81ca3b97cDarren Krahn  uint8_t public_key[AVB_ATX_PUBLIC_KEY_SIZE];
56147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn  uint8_t subject[AVB_SHA256_DIGEST_SIZE];
57147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn  uint8_t usage[AVB_SHA256_DIGEST_SIZE];
58147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn  uint64_t key_version;
59147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn} AVB_ATTR_PACKED AvbAtxCertificateSignedData;
60147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn
6143e12d8b2904afa7b5adc0e2c4d9bbf81ca3b97cDarren Krahn/* Data structure of an Android Things certificate. */
6243e12d8b2904afa7b5adc0e2c4d9bbf81ca3b97cDarren Krahntypedef struct AvbAtxCertificate {
63147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn  AvbAtxCertificateSignedData signed_data;
64147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn  uint8_t signature[AVB_RSA4096_NUM_BYTES];
6543e12d8b2904afa7b5adc0e2c4d9bbf81ca3b97cDarren Krahn} AVB_ATTR_PACKED AvbAtxCertificate;
66147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn
67147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn/* Data structure of Android Things public key metadata in vbmeta. */
68147b08db62f068c4fa76c3629f83d4282b614039Darren Krahntypedef struct AvbAtxPublicKeyMetadata {
69147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn  uint32_t version;
7043e12d8b2904afa7b5adc0e2c4d9bbf81ca3b97cDarren Krahn  AvbAtxCertificate product_intermediate_key_certificate;
7143e12d8b2904afa7b5adc0e2c4d9bbf81ca3b97cDarren Krahn  AvbAtxCertificate product_signing_key_certificate;
72147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn} AVB_ATTR_PACKED AvbAtxPublicKeyMetadata;
73147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn
74147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn#ifdef __cplusplus
75147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn}
76147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn#endif
77147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn
78147b08db62f068c4fa76c3629f83d4282b614039Darren Krahn#endif /* AVB_ATX_TYPES_H_ */
79