1/* Copyright (c) 2013 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 * High-level firmware API for loading and verifying rewritable firmware. 6 * (Firmware portion) 7 */ 8 9#include "sysincludes.h" 10 11#include "bmpblk_header.h" 12#include "region.h" 13#include "gbb_access.h" 14#include "gbb_header.h" 15#include "load_kernel_fw.h" 16#include "utility.h" 17#include "vboot_api.h" 18#include "vboot_struct.h" 19 20static VbError_t VbGbbReadKey(VbCommonParams *cparams, uint32_t offset, 21 VbPublicKey **keyp) 22{ 23 VbPublicKey hdr, *key; 24 VbError_t ret; 25 uint32_t size; 26 27 ret = VbRegionReadData(cparams, VB_REGION_GBB, offset, 28 sizeof(VbPublicKey), &hdr); 29 if (ret) 30 return ret; 31 32 /* Deal with a zero-size key (used in testing) */ 33 size = hdr.key_offset + hdr.key_size; 34 if (size < sizeof(hdr)) 35 size = sizeof(hdr); 36 key = VbExMalloc(size); 37 ret = VbRegionReadData(cparams, VB_REGION_GBB, offset, size, key); 38 if (ret) { 39 VbExFree(key); 40 return ret; 41 } 42 43 *keyp = key; 44 return VBERROR_SUCCESS; 45} 46 47VbError_t VbGbbReadRootKey(VbCommonParams *cparams, VbPublicKey **keyp) 48{ 49 return VbGbbReadKey(cparams, cparams->gbb->rootkey_offset, keyp); 50} 51 52VbError_t VbGbbReadRecoveryKey(VbCommonParams *cparams, VbPublicKey **keyp) 53{ 54 return VbGbbReadKey(cparams, cparams->gbb->recovery_key_offset, keyp); 55} 56