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