| OLD | NEW | 
|---|
| 1 #!/bin/bash | 1 #!/bin/bash | 
| 2 | 2 | 
| 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 
| 4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be | 
| 5 # found in the LICENSE file. | 5 # found in the LICENSE file. | 
| 6 | 6 | 
| 7 # Script to resign a firmware image using a different set of keys | 7 # Script to resign a firmware image using a different set of keys | 
| 8 # for use on signing servers. | 8 # for use on signing servers. | 
| 9 # | 9 # | 
| 10 # arguments: src_fd, dst_fd, firmware_datakey, and firmware_keyblock | 10 # arguments: src_fd, dst_fd, firmware_datakey, and firmware_keyblock | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
| 40 # area_offset="0x000aa000" area_size="0x0002e000" area_name="Firmware B Data" \ | 40 # area_offset="0x000aa000" area_size="0x0002e000" area_name="Firmware B Data" \ | 
| 41 #  area_flags_raw="0x03" area_flags="static,compressed" | 41 #  area_flags_raw="0x03" area_flags="static,compressed" | 
| 42 # area_offset="0x00005200" area_size="0x00001000" area_name="RW VPD" \ | 42 # area_offset="0x00005200" area_size="0x00001000" area_name="RW VPD" \ | 
| 43 #  area_flags_raw="0x00" area_flags="" | 43 #  area_flags_raw="0x00" area_flags="" | 
| 44 # | 44 # | 
| 45 # This shows that Firmware A Data is at offset 0x0000a0000 in the .fd image | 45 # This shows that Firmware A Data is at offset 0x0000a0000 in the .fd image | 
| 46 # and is of size 0x0009e000 bytes. This can be extracted to generate new vblocks | 46 # and is of size 0x0009e000 bytes. This can be extracted to generate new vblocks | 
| 47 # which can then replace old vblock for Firmware A ("Firmware A Key" region at | 47 # which can then replace old vblock for Firmware A ("Firmware A Key" region at | 
| 48 # offset 0x00008000 and size 0x00002000). | 48 # offset 0x00008000 and size 0x00002000). | 
| 49 | 49 | 
|  | 50 # Load common constants and variables. | 
|  | 51 . "$(dirname "$0")/common.sh" | 
|  | 52 | 
| 50 # Abort on error | 53 # Abort on error | 
| 51 set -e | 54 set -e | 
| 52 | 55 | 
| 53 # Check arguments | 56 # Check arguments | 
| 54 if [ $# -ne 5 ] ; then | 57 if [ $# -ne 5 ] ; then | 
| 55   echo \ | 58   echo \ | 
| 56     "Usage: $0 src_fd dst_fd firmware_datakey firmware_keyblock kernel_subkey" | 59     "Usage: $0 src_fd dst_fd firmware_datakey firmware_keyblock kernel_subkey" | 
| 57   exit 1 | 60   exit 1 | 
| 58 fi | 61 fi | 
| 59 | 62 | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 88   match_str="$i Data" | 91   match_str="$i Data" | 
| 89   line=$(fmap_decode $1 | grep "$match_str") | 92   line=$(fmap_decode $1 | grep "$match_str") | 
| 90   offset="$(echo $line | sed -e 's/.*area_offset=\"\([a-f0-9x]*\)\".*/\1/')" | 93   offset="$(echo $line | sed -e 's/.*area_offset=\"\([a-f0-9x]*\)\".*/\1/')" | 
| 91   eval let \ | 94   eval let \ | 
| 92     fw${i}_offset="$offset" | 95     fw${i}_offset="$offset" | 
| 93   size="$(echo $line | sed -e 's/.*area_size=\"\([a-f0-9x]*\)\".*/\1/')" | 96   size="$(echo $line | sed -e 's/.*area_size=\"\([a-f0-9x]*\)\".*/\1/')" | 
| 94   eval let \ | 97   eval let \ | 
| 95     fw${i}_size="$size" | 98     fw${i}_size="$size" | 
| 96 done | 99 done | 
| 97 | 100 | 
| 98 temp_fwimage=$(mktemp) | 101 temp_fwimage=$(make_temp_file) | 
| 99 temp_out_vb=$(mktemp) | 102 temp_out_vb=$(make_temp_file) | 
| 100 trap "rm -f ${temp_fwimage} ${temp_out_vb}" EXIT |  | 
| 101 | 103 | 
| 102 # Extract out Firmware A data and generate signature using the right keys | 104 # Extract out Firmware A data and generate signature using the right keys | 
| 103 dd if="${src_fd}" of="${temp_fwimage}" skip="${fwA_offset}" bs=1 \ | 105 dd if="${src_fd}" of="${temp_fwimage}" skip="${fwA_offset}" bs=1 \ | 
| 104   count="${fwA_size}" | 106   count="${fwA_size}" | 
| 105 | 107 | 
| 106 echo "Re-calculating Firmware A vblock" | 108 echo "Re-calculating Firmware A vblock" | 
| 107 vbutil_firmware \ | 109 vbutil_firmware \ | 
| 108   --vblock "${temp_out_vb}" \ | 110   --vblock "${temp_out_vb}" \ | 
| 109   --keyblock "${firmware_keyblock}" \ | 111   --keyblock "${firmware_keyblock}" \ | 
| 110   --signprivate "${firmware_datakey}" \ | 112   --signprivate "${firmware_datakey}" \ | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 127   --signprivate "${firmware_datakey}" \ | 129   --signprivate "${firmware_datakey}" \ | 
| 128   --version "${VERSION}" \ | 130   --version "${VERSION}" \ | 
| 129   --fv "${temp_fwimage}" \ | 131   --fv "${temp_fwimage}" \ | 
| 130   --kernelkey "${kernel_subkey}" | 132   --kernelkey "${kernel_subkey}" | 
| 131 | 133 | 
| 132 # Destination image has already been created. | 134 # Destination image has already been created. | 
| 133 dd if="${temp_out_vb}" of="${dst_fd}" seek="${fwB_vblock_offset}" bs=1 \ | 135 dd if="${temp_out_vb}" of="${dst_fd}" seek="${fwB_vblock_offset}" bs=1 \ | 
| 134   count="${fwB_vblock_size}" conv=notrunc | 136   count="${fwB_vblock_size}" conv=notrunc | 
| 135 | 137 | 
| 136 echo "New signed image was output to ${dst_fd}" | 138 echo "New signed image was output to ${dst_fd}" | 
| OLD | NEW | 
|---|