blob: 6d094c6a6d4cba33deebb361245c93eeda06a397 [file] [log] [blame]
Bill Richardson1b1cf1c2014-10-02 10:59:52 -07001#!/bin/sh -u
2# Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
Bill Richardsonf155ab32011-06-16 16:02:56 -07003# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6if [ -z "$*" ]; then
7 cat <<EOF 1>&2
8
Bill Richardson788dbc32012-10-03 12:45:48 -07009Usage: vbutil_what_keys [-v|-V] IMAGE [IMAGE...]
Bill Richardsonf155ab32011-06-16 16:02:56 -070010
Bill Richardson93a892c2011-12-15 14:05:43 -080011Given a ChromiumOS disk (or BIOS) image, try to figure out how it's signed.
12Note that this does not verify the signature, it just reports which keyblock
13was used to create the signature.
Bill Richardsonf155ab32011-06-16 16:02:56 -070014
Bill Richardson788dbc32012-10-03 12:45:48 -070015With the -v option, it will attempt to mount any rootfs partitions from disk
16images (using sudo), extract the BIOS from /usr/sbin/chromeos-firmwareupdate,
17and process it as well. Use -V to display the shellball -V message too.
18that.
19
Bill Richardsonf155ab32011-06-16 16:02:56 -070020EOF
21 exit 1
22fi
23
Bill Richardsonaf23ef72014-07-31 13:50:12 -070024# We'll grep for the known sha1sums within this script (they're at the end).
25# Obtain them by running script on images you know have been signed correctly
26# (since the keys themselves are inside the HSM).
Bill Richardson788dbc32012-10-03 12:45:48 -070027#
28# BTW, the default H2C HWIDs are fixed for each platform:
Bill Richardsonaf23ef72014-07-31 13:50:12 -070029#
Bill Richardson93a892c2011-12-15 14:05:43 -080030# {97A1FBD6-FDE1-4FC5-BB81-286608B90FCE} Alex H2C
Bill Richardson788dbc32012-10-03 12:45:48 -070031# {9D799111-A88A-439E-9E1F-FBBB41B00A9A} Mario H2C
Bill Richardson93a892c2011-12-15 14:05:43 -080032# {24B107F2-BA6A-4EBD-8CDD-E768438CE0F0} Stumpy H2C
33# {FA42644C-CF3A-4692-A9D3-1A667CB232E9} ZGB H2C
Bill Richardsonaf23ef72014-07-31 13:50:12 -070034
Bill Richardson93a892c2011-12-15 14:05:43 -080035
Bill Richardson788dbc32012-10-03 12:45:48 -070036# args?
37unpack_it=
38verbose=
39if [ "${1:-}" = "-v" ]; then
40 unpack_it=yes
41 shift
42fi
43if [ "${1:-}" = "-V" ]; then
44 unpack_it=yes
45 verbose=yes
46 shift
47fi
Bill Richardsonf155ab32011-06-16 16:02:56 -070048
Bill Richardson788dbc32012-10-03 12:45:48 -070049# clean up on exit
50cleanup() {
51 [ -n "${CLEAN_UM:-}" ] && sudo umount $CLEAN_UM
52 [ -n "${CLEAN_RM:-}" ] && rm -rf $CLEAN_RM
53}
54trap cleanup EXIT
55
56# temp stuff
57TMPFILE=$(mktemp /tmp/keyblock_XXXXXXXXX)
58CLEAN_RM="$TMPFILE"
59if [ -n "$unpack_it" ]; then
60 TMPMNT=$(mktemp -d /tmp/mountdir_XXXXXXXXX)
61 TMPDIR=$(mktemp -d /tmp/extractdir_XXXXXXXXX)
62 CLEAN_RM="$CLEAN_RM $TMPDIR $TMPMNT"
63fi
64
Bill Richardsonaf23ef72014-07-31 13:50:12 -070065greppy() {
66 local key="$1"
67 grep "$key" "$0" 2>/dev/null | sed -e 's/ \+/ /g' | \
68 cut -d ' ' -f 4- | sed -e ':a;N;$!ba;s/\n/, /g'
69}
70
Bill Richardson788dbc32012-10-03 12:45:48 -070071
72showbios() {
73 local file="$1" space="$2"
74 local hwid matchh rootkey matchn recoverykey matchr
75
Bill Richardsona1d9fe62014-09-05 12:52:27 -070076 hwid=$(futility gbb_utility --hwid "$file" | sed -e 's/^.*: *//') || return
Bill Richardson788dbc32012-10-03 12:45:48 -070077 matchh=$(grep "$hwid" "$0" 2>/dev/null | sed -e 's/^# //')
78
Bill Richardsona1d9fe62014-09-05 12:52:27 -070079 futility gbb_utility --rootkey="$TMPFILE" "$file" >/dev/null
80 rootkey=$(futility vbutil_key --unpack "$TMPFILE" | grep sha1sum | \
Bill Richardson788dbc32012-10-03 12:45:48 -070081 sed -e 's/^.*: *//')
Bill Richardsonaf23ef72014-07-31 13:50:12 -070082 matchn=$(greppy "$rootkey")
Bill Richardson788dbc32012-10-03 12:45:48 -070083
Bill Richardsona1d9fe62014-09-05 12:52:27 -070084 futility gbb_utility --recoverykey="$TMPFILE" "$file" >/dev/null
85 recoverykey=$(futility vbutil_key --unpack "$TMPFILE" | grep sha1sum | \
Bill Richardson788dbc32012-10-03 12:45:48 -070086 sed -e 's/^.*: *//')
Bill Richardsonaf23ef72014-07-31 13:50:12 -070087 matchr=$(greppy "$recoverykey")
Bill Richardson788dbc32012-10-03 12:45:48 -070088
89 echo "$space hwid: ${matchh:-$hwid}"
Bill Richardsonaf23ef72014-07-31 13:50:12 -070090 echo "$space root key: ${rootkey} ${matchn}"
91 echo "$space recovery key: ${recoverykey} ${matchr}"
Bill Richardson788dbc32012-10-03 12:45:48 -070092}
93
94
95
96# handle one input file
Bill Richardsonf155ab32011-06-16 16:02:56 -070097dofile() {
98 file="$1"
Bill Richardson93a892c2011-12-15 14:05:43 -080099 size=$(stat -c %s "$file")
Bill Richardsonf155ab32011-06-16 16:02:56 -0700100
Bill Richardsona5e15192012-02-22 09:10:19 -0800101 if [ -f "$file" ] && [ "$size" -le 8388608 ]; then
Bill Richardson788dbc32012-10-03 12:45:48 -0700102 echo -e "\nBIOS: $file"
Bill Richardsonf155ab32011-06-16 16:02:56 -0700103
Bill Richardson788dbc32012-10-03 12:45:48 -0700104 showbios "$file" ""
Bill Richardson93a892c2011-12-15 14:05:43 -0800105
106 else
Bill Richardson788dbc32012-10-03 12:45:48 -0700107 echo -e "\nIMAGE: $file"
Bill Richardson93a892c2011-12-15 14:05:43 -0800108
109 for pnum in $(cgpt find -n -t kernel "$file" 2>/dev/null); do
110
111 psize=$(cgpt show -s -i "$pnum" "$file")
112 if [ "$psize" -ge 128 ]; then
113
114 pstart=$(cgpt show -b -i "$pnum" "$file")
115 dd if="$file" of="$TMPFILE" bs=512 count=128 skip="$pstart" 2>/dev/null
116
Bill Richardsona1d9fe62014-09-05 12:52:27 -0700117 psum=$(futility vbutil_keyblock --unpack "$TMPFILE" 2>/dev/null | \
Bill Richardson93a892c2011-12-15 14:05:43 -0800118 grep sha1sum | sed -e 's/^.*: *//')
119
120 if [ -n "$psum" ]; then
Bill Richardsonaf23ef72014-07-31 13:50:12 -0700121 match=$(greppy "$psum")
Bill Richardsona1d9fe62014-09-05 12:52:27 -0700122 flags=$(futility vbutil_keyblock --unpack "$TMPFILE" 2>/dev/null | \
Bill Richardson93a892c2011-12-15 14:05:43 -0800123 grep Flags: | sed -e 's/^.*:[ 0-9]*//')
124 else
125 match=""
126 psum="--invalid--"
127 flags=""
128 fi
129
Bill Richardsonaf23ef72014-07-31 13:50:12 -0700130 echo " part $pnum kernel: $psum ($flags) $match"
Bill Richardsonf155ab32011-06-16 16:02:56 -0700131 fi
132
Bill Richardson93a892c2011-12-15 14:05:43 -0800133 done
Bill Richardson788dbc32012-10-03 12:45:48 -0700134
135 if [ -n "$unpack_it" ]; then
136 for pnum in $(cgpt find -n -t rootfs "$file" 2>/dev/null); do
137
138 psize=$(cgpt show -s -i "$pnum" "$file")
139 if [ "$psize" -ge 128 ]; then
140
141 pstart=$(cgpt show -b -i "$pnum" "$file")
142
143 echo " part $pnum shellball:"
144 sudo mount -o loop,ro,offset=$(( $pstart * 512 )) "$file" "$TMPMNT"
145 CLEAN_UM="$TMPMNT"
146 [ -n "$verbose" ] && "$TMPMNT/usr/sbin/chromeos-firmwareupdate" -V
147 "$TMPMNT/usr/sbin/chromeos-firmwareupdate" \
148 --sb_extract "$TMPDIR" > /dev/null
149 sudo umount "$TMPMNT"
150 CLEAN_UM=
151
152 showbios "$TMPDIR/bios.bin" " "
153 fi
154
155 done
156 fi
157
Bill Richardson93a892c2011-12-15 14:05:43 -0800158 fi
Bill Richardsonf155ab32011-06-16 16:02:56 -0700159}
160
161
162for file in "$@"; do
163 dofile $file
164done
165
Bill Richardson788dbc32012-10-03 12:45:48 -0700166echo ""
Bill Richardsonaf23ef72014-07-31 13:50:12 -0700167
168exit 0;
169
170##############################################################################
171# Here are the known keys
172##############################################################################
173#
174# Firmware recovery keys
175#
176# c14bd720b70d97394257e3e826bd8f43de48d4ed recovery developer keys
177#
178# 5c5776bf7574e5601c25042e0748b6844cfdd1dc recovery Alex MP
179# 5c5776bf7574e5601c25042e0748b6844cfdd1dc recovery Alex MP-v4
180# 5c5776bf7574e5601c25042e0748b6844cfdd1dc recovery Alex-HE MP-v4
181# b3373d76358c3528d0653c4035bdd0020e2b0e1b recovery Butterfly MP-v3
182# 8a22e18a91e89f46f1f59b44a7887ab3821cb18d recovery Butterfly Pre-MP
183# b6079520f8c8dc7192a78d111b9fefb98cee49b3 recovery Clapper MP
184# 13b0ddf343bb0c325b178e5be138d4969a9e02be recovery Daisy MP-v3
185# 5e9d23b2d908a6ac5ee5c9747a9e2fe6dff01372 recovery Daisy-Skate MP
186# 540bb135df55fe0036fe061b7a1f2a52d287cd1b recovery Daisy-Spring MP-v2
187# ae67678f8ed662ef4d1e4a639226d278b90ccaa3 recovery Enguarde MP-v10
188# ff7c07ae0ac04ccb92090e339545b716228a6da4 recovery Expresso MP-v10
189# 3c359d59432641a151161e2738ba8ca2b3eb12ab recovery Falco MP-v2
190# 3c359d59432641a151161e2738ba8ca2b3eb12ab recovery Falco-li MP-v2
191# c989d1ab66d2a67886e1019330812cb9e4e48f31 recovery Glimmer MP
192# ab325d5411c6a21b41142b71b747335144e12538 recovery Gnawty MP
193# d81c751df76a7d53a6d3c2f58987562c87416735 recovery Kiev MP
194# 02601fcbcac953f043a53eac6fed7a5367a7189c recovery Kiev PreMP
195# 6eaa4b094cd75eacc0f2fa4516d33ed86ea6f3d2 recovery Kip MP
196# dc65a88c92511494999d2c03a72ec2584d21917d recovery Leon MP
197# 7e74cd6d66f361da068c0419d2e0946b4d091e1c recovery Link MP
198# 7e74cd6d66f361da068c0419d2e0946b4d091e1c recovery Link MP-v4
199# 08b2d19bc87d05d860a1c274f874bc9fa9ab7dfb recovery Link Pre-MP
200# 0d800afb53cdd05dd849addee0143ca1d96e893c recovery Lumpy MP
201# 0d800afb53cdd05dd849addee0143ca1d96e893c recovery Lumpy MP-v3
202# ebcac421fbf411bee99ee90672a3add17f5a967b recovery Lumpy PVT
203# 5d0d163b824cab5ae4f23fb2cc012e2a4124f4fe recovery Mario MP
204# 5d0d163b824cab5ae4f23fb2cc012e2a4124f4fe recovery Mario MP-v3
205# 51dd0b446540182fd91c6196b9a8dfcd7bcf6256 recovery McCloud MP
206# 67f01715f3acf6526ce48a3d2cf81b003a01f334 recovery Monroe MP
207# 40832bb15fa40a18b8e5d80fd17d0405b624884e recovery Nyan PreMP
208# 2b356618cd0f739877b7a3f155917341f8778523 recovery Nyan-Big MP
209# 26900310befce802836cca982f819aa72445e190 recovery Nyan-Blaze MP
210# e74e63e14b285700324ffd3acc4b776dc3104b8f recovery Panther MP
211# 7f03c648d2bb4ab3979cb87633da51ed90267f03 recovery Parrot MP
212# 7f03c648d2bb4ab3979cb87633da51ed90267f03 recovery Parrot MP-v3
213# 7f03c648d2bb4ab3979cb87633da51ed90267f03 recovery Parrot-ivb MP-v3
214# d254b3b3ddaac32f7b843753de9257ec4f6c67ed recovery Peach-Pi MP
215# 6d9a2ca8b3080a97e1e5a4efbc5386ead77c3c7f recovery Peach-Pit MP-v2
216# bf39d0d3e30cbf6a121416d04df4603ad5310779 recovery Peppy MP-v2
217# 60aa1bbbea1d2f724c6e5daa0653ca472ac3085e recovery Quawks MP
218# fb4847ecb6bfcc300e5f570c5e8f3ab881204968 recovery Rambi PreMP
219# 462edb5ebfd817e29e813db7a424582c3ce35768 recovery Samus PreMP
220# 13b0ddf343bb0c325b178e5be138d4969a9e02be recovery Snow MP
221# cdc2858ca78351dc4b54d5d5d02bc695830f7802 recovery Squawks MP
222# 5cb31faf8c524672a15fd4628c585af79eca0247 recovery Stout MP
223# 5cb31faf8c524672a15fd4628c585af79eca0247 recovery Stout MP-v3
224# 37e7bad73449f782f280b1668fed48d1132137fa recovery Stumpy MP
225# 8540f56f87d91c5403704c960c1f385705201e20 recovery Stumpy PVT
226# e0b610bc85908c35fb7bd11bfd34afb84d547190 recovery Swanky MP
227# 50759cb8bc2f86ef378571fa7b30a161e7dcdc03 recovery Tricky MP
228# a0c56006541cd38d6c884d27210a135f5c309a3f recovery Winky PreMP
229# a4ee431f7a07c59e920fe570ead0b938cdd4019d recovery Wolf MP
230# 9bd99a594c45b6739899a17ec29ac2289ee75463 recovery ZGB MP
231# 9bd99a594c45b6739899a17ec29ac2289ee75463 recovery ZGB MP-v3
232# 9bd99a594c45b6739899a17ec29ac2289ee75463 recovery ZGB-HE MP-v3
233# ba07696c1c82891fdacab28a434148d239e7c834 recovery Zako MP-v2
234#
235# Firmware root keys
236#
237# b11d74edd286c144e1135b49e7f0bc20cf041f10 root developer keys
238#
239# 00f77be2a0c013343db84fc6259da09e558b8318 root Alex MP
240# 00f77be2a0c013343db84fc6259da09e558b8318 root Alex MP-v4
241# 00f77be2a0c013343db84fc6259da09e558b8318 root Alex-HE MP-v4
242# c788cee8c798669fe4822b7544dd3e399ce22604 root Butterfly MP-v3
243# 12a2c88b58cbd9eef6b777a3af440f611ea4f561 root Butterfly Pre-MP
244# 952dd6852c11fd8b36b4fb88f3335ecae722e0e6 root Clapper MP
245# a026a7a4a0bf0fa32d6b7aa90a80d5ef01a3b799 root Daisy MP-v3
246# c788cee8c798669fe4822b7544dd3e399ce22604 root Daisy-Skate MP
247# ab3521d3b1938af52009b2c3dfad964594f6b367 root Daisy-Spring MP-v2
248# 48dc3c5917b9095d6b4188560c9726ba31a192ee root Enguarde MP-v10
249# 82f706e156e5927bbdf8f14f4a9f45bc59986311 root Expresso MP-v10
250# c788cee8c798669fe4822b7544dd3e399ce22604 root Falco MP-v2
251# c788cee8c798669fe4822b7544dd3e399ce22604 root Falco-li MP-v2
252# 952dd6852c11fd8b36b4fb88f3335ecae722e0e6 root Glimmer MP
253# fc68bcb88bf9af1907289a9f377d658b3b9fe5b0 root Gnawty MP
254# 4c5067795ddbbf100d19f9ba08928af1c1ef37c6 root Kiev MP
255# 9c138273527db0a0797233e2345ee39e46c0df95 root Kiev PreMP
256# c788cee8c798669fe4822b7544dd3e399ce22604 root Kip MP
257# 154512de86cc1cc36a67d4225eb2fcc37dac1b7c root Leon MP
258# 7b5c520ceabce86f13e02b7ca363cfb509fc5b98 root Link MP
259# 7b5c520ceabce86f13e02b7ca363cfb509fc5b98 root Link MP-v4
260# e63058bf4b86b6fb1f148bc7acea9c71fe51675f root Link Pre-MP
261# 4e92f07efd4a920c4e4f1ed97cf47b7b04ee1428 root Lumpy MP
262# 4e92f07efd4a920c4e4f1ed97cf47b7b04ee1428 root Lumpy MP-v3
263# c9fc61f331b34e00a148e657bde5fb6b0b576c0a root Lumpy PVT
264# 541f467a7d8747f55ae9087ee4e34155f5ee3cd7 root Mario MP
265# 541f467a7d8747f55ae9087ee4e34155f5ee3cd7 root Mario MP-v3
266# fc68bcb88bf9af1907289a9f377d658b3b9fe5b0 root McCloud MP
267# eec186f8a0cd6be2e9d86dc9ce284790739be202 root Monroe MP
268# 3f54dd6a6e16128aec5c6c3052763388ae99d350 root Nyan PreMP
269# fc68bcb88bf9af1907289a9f377d658b3b9fe5b0 root Nyan-Big MP
270# c788cee8c798669fe4822b7544dd3e399ce22604 root Nyan-Blaze MP
271# 758a59f4f911b63a1335223d761d2485313674c8 root Panther MP
272# 9f59876c7f7dc881f02d934786c6b7c2c17dcaac root Parrot MP
273# 9f59876c7f7dc881f02d934786c6b7c2c17dcaac root Parrot MP-v3
274# 9f59876c7f7dc881f02d934786c6b7c2c17dcaac root Parrot-ivb MP-v3
275# a026a7a4a0bf0fa32d6b7aa90a80d5ef01a3b799 root Peach-Pi MP
276# a026a7a4a0bf0fa32d6b7aa90a80d5ef01a3b799 root Peach-Pit MP-v2
277# fc68bcb88bf9af1907289a9f377d658b3b9fe5b0 root Peppy MP-v2
278# 758a59f4f911b63a1335223d761d2485313674c8 root Quawks MP
279# b3119b02f2b5371da5596b13d612facbca99b94f root Rambi PreMP
280# cb8086a9c1cd26318fef9a9fb3f846ca12320737 root Samus PreMP
281# a026a7a4a0bf0fa32d6b7aa90a80d5ef01a3b799 root Snow MP
282# 758a59f4f911b63a1335223d761d2485313674c8 root Squawks MP
283# 952dd6852c11fd8b36b4fb88f3335ecae722e0e6 root Stout MP
284# 952dd6852c11fd8b36b4fb88f3335ecae722e0e6 root Stout MP-v3
285# 4ec4ba0a746b37b1c6286ab807c2a5b1e7ab4ab0 root Stumpy MP
286# 06939c65797eadfe6be1b3343a2e339800a34108 root Stumpy PVT
287# 154512de86cc1cc36a67d4225eb2fcc37dac1b7c root Swanky MP
288# ed3dab48746de569513aa288439f86fe24cc3386 root Tricky MP
289# 5915703fb47bf569d7a6b8726cb9a1bd159487b0 root Winky PreMP
290# ed3dab48746de569513aa288439f86fe24cc3386 root Wolf MP
291# 9f59876c7f7dc881f02d934786c6b7c2c17dcaac root ZGB MP
292# 9f59876c7f7dc881f02d934786c6b7c2c17dcaac root ZGB MP-v3
293# 9f59876c7f7dc881f02d934786c6b7c2c17dcaac root ZGB-HE MP-v3
294# c788cee8c798669fe4822b7544dd3e399ce22604 root Zako MP-v2
295#
296# Normal kernel keys
297#
298# d6170aa480136f1f29cf339a5ab1b960585fa444 normal developer keys
299#
300# af24e46b6c3805869616e71c002c9a2a847ad266 normal Alex MP
301# af24e46b6c3805869616e71c002c9a2a847ad266 normal Alex MP-v4
302# af24e46b6c3805869616e71c002c9a2a847ad266 normal Alex-HE MP-v4
303# 6026d95d1f11e1b88c19a139effbb02660523904 normal Butterfly MP-v3
304# 24fcff70ef3d834451384452bd9bc64c4d01c559 normal Butterfly Pre-MP
305# d03ba05319cd77d0830b268804804f21fcb7672c normal Clapper MP
306# 0d96e14c31a405b28dd7c7d2e416bbf960bc9779 normal Daisy MP-v3
307# da0bb5a3e2e80ebab0ac268ba2204ec360e9bb45 normal Daisy-Skate MP
308# 94b5cfc5933e2f6294095820fa9eaf8162ca8021 normal Daisy-Spring MP-v2
309# dd15b9458ffc5ecb8048dbc4ae5e7f480c9e1852 normal Duck PreMP
310# d9ffc2514c179472b6c5553b8ed20237cdfef73e normal Enguarde MP-v10
311# bd99dc86506b9ebe3025e5af69a26decf607173d normal Expresso MP-v10
312# c5d935b69950c29b2d2bba7cecacd2859fb9afbd normal Falco MP-v2
313# c5d935b69950c29b2d2bba7cecacd2859fb9afbd normal Falco-li MP-v2
314# c6bc5788eb62701cdd69b309766fe2a49ead14d1 normal Glimmer MP
315# 32778b8483e14e4570b582c34df065c5ee833a59 normal Gnawty MP
316# f82f08a5953b688b078f465731f1077fdf0d97cf normal Kiev MP
317# b3ad5503fda8b06c74a000fed289006c97bf5600 normal Kip MP
318# 933610d5c9926ec5540e180cda18c0395a853012 normal Leon MP
319# d5927774fc14bb18a38c27fef47a36517a089d04 normal Link MP
320# ad9e35dcd4287a3e27264ce49df6df40aaf2dcbb normal Link MP-v4
321# 7cb50f352af15f807f4bf3eaaede62d2f9c70d27 normal Link Pre-MP
322# ad9e35dcd4287a3e27264ce49df6df40aaf2dcbb normal Link-freon MP-v4
323# cc887372ac2d1c415eac93fc11e753629c387358 normal Lumpy MP v2
324# cc887372ac2d1c415eac93fc11e753629c387358 normal Lumpy MP-v3
325# fa55cba16857a49270fb1561f87343c00959eb19 normal Lumpy PVT
326# a1454fcecb98a6f33b38638564bdfc20161a7b04 normal Mario MP v2
327# a1454fcecb98a6f33b38638564bdfc20161a7b04 normal Mario MP-v3
328# 8848be24f4c34f064ae23c0450d27b62e558d2ed normal McCloud MP
329# ac65608a05976a904f4c6123953968cd1aa444ab normal Monroe MP
330# 78d388d49c494510d48cfa1650eacd45aa871da5 normal Nyan PreMP
331# 71dd606970080aab093da2bbe91ca4348988175c normal Nyan-Big MP
332# c4c00693dd7b99fffc1b272641f769d0a2f19ef5 normal Nyan-Blaze MP
333# 39f6088397ebfcc8fffbd933b4bcd8a0e74ba409 normal Panther MP
334# 8975d168123d5cfc7cebf674627958445f0d2a52 normal Parrot MP v2
335# e18e8ac7835390a71d2d70d02880694c6da9ac92 normal Parrot MP-v3
336# e18e8ac7835390a71d2d70d02880694c6da9ac92 normal Parrot-ivb MP-v3
337# ef469c6417138a8a371b51483d941a01453d27a3 normal Peach-Pi MP
338# 2cf0eddab3a021044fc66fdca492c7899de5b7eb normal Peach-Pit MP-v2
339# 320e083d80e1a49d9c11cc0d8d055b050a92805a normal Peppy MP-v2
340# c65c3e3648eca66449ac9cdaf60edc2ba1b136e8 normal Quawks MP
341# 037f4ed441ac39ca0a7fdd6c0829d4add9bf5f34 normal Rambi PreMP
342# 989186f9aec3bced013d7f085c0f8caa07518e34 normal Samus PreMP
343# c5120666c642f031e76edab8a2b45dd32232f80d normal Snow MP v2
344# 1cab1dedc34076b8887c9ebd4e6769eda6c41ed2 normal Squawks MP
345# 09cb9b45c2cd4ca674861fe484aa758ba5568be0 normal Stout MP
346# 47a82928807763a30956f40e4de0e68af2a17975 normal Stout MP-v3
347# de0b76af3caa55a8e7aa34c805e4248ad03b18e7 normal Stumpy MP
348# f7e48006982a0ad4a41c0ca6610f062adb0eec44 normal Stumpy MP v2
349# 04dd63e835c979b57f87fd74e99af68e0cd39ad7 normal Stumpy PVT
350# c321ed66f9b999598d39be7be3246bb25362740b normal Swanky MP
351# 5c626cd8a684e470e74d3ceaf518aae745fe15dc normal Tegra2-Kaen PVT
352# 09790fcb8c2b6732ec54bc406d34ec16c55992ba normal Tricky MP
353# 202bb448a3f269771cffe53c38d6f05b2d1329ae normal Winky PreMP
354# 7d4f5255af3552d8c8b40f60873d683268050015 normal Wolf MP
355# 7b7ae8652775ad7305f565161b3acc00fcc8ea22 normal ZGB MP v2
356# 7b7ae8652775ad7305f565161b3acc00fcc8ea22 normal ZGB MP-v3
357# 7b7ae8652775ad7305f565161b3acc00fcc8ea22 normal ZGB-HE MP-v3
358# f70f0373b60ea8e2c5df7a9afeb75726fe0c8eb3 normal Zako MP-v2
359#
360# Recovery kernel keys
361#
362# e78ce746a037837155388a1096212ded04fb86eb recovery developer keys
363#
364# 03172b08f0b99172c73d947f51e8ca23d418bcbf recovery Alex MP
365# 03172b08f0b99172c73d947f51e8ca23d418bcbf recovery Alex MP-v4
366# 03172b08f0b99172c73d947f51e8ca23d418bcbf recovery Alex-HE MP-v4
367# c65d20649d35019a40642a4e2540b19587ee6458 recovery Butterfly MP-v3
368# 934e38b44b11eb892d1edc32cb3ba87c558232d9 recovery Butterfly Pre-MP
369# 889367bc86d0af857412a409f98e2ab9d798f887 recovery Clapper MP
370# f32b5f6b6cfb6d77136ac0d8ed0cdf67e6df7b91 recovery Daisy MP-v3
371# 66496dd27c44ae81cf0c41671b5af59a316969da recovery Daisy-Skate MP
372# a1f00935770234a434c4b14414c48866b1661e40 recovery Daisy-Spring MP-v2
373# 9a04d0ea29b095c6c227b50d4bb75f431355dbb0 recovery Duck PreMP
374# e30dc74a05de0d0e7522817f8d97f04f08ff6a8b recovery Enguarde MP-v10
375# 4e22acdedf89a3dbb6b9861b513e2121bd457a96 recovery Expresso MP-v10
376# af1e6c23c3148d3261b5fc7c30860d89faeee7a6 recovery Falco MP-v2
377# af1e6c23c3148d3261b5fc7c30860d89faeee7a6 recovery Falco-li MP-v2
378# 45145bcfc866b5cc7d711d6451fd1272f55ba087 recovery Glimmer MP
379# 377f89af74389c1d06876981bda3a7a591332f67 recovery Gnawty MP
380# 10d73c2b24b35c0ea387babd72e9b242f2d79c9f recovery Kiev MP
381# 5dea047c25331a6b3ed0f40efa7e2b8b90676abf recovery Kip MP
382# 51a7f92ef6d727da9b0f0ebd8882a836db296e97 recovery Leon MP
383# e8c4e66b00df5468e4d7ec9757347842cfd6c1da recovery Link MP
384# e8c4e66b00df5468e4d7ec9757347842cfd6c1da recovery Link MP-v4
385# 93e0ecffb36199071a3d995f6726770e799dcd0e recovery Link Pre-MP
386# e8c4e66b00df5468e4d7ec9757347842cfd6c1da recovery Link-freon MP-v4
387# 49d40533b0812d3f31232c5eedd47e7e11acc293 recovery Lumpy MP
388# 49d40533b0812d3f31232c5eedd47e7e11acc293 recovery Lumpy MP-v3
389# cb45bc04a932e4bcac41b44d31afd9516ca0fe24 recovery Lumpy PVT
390# f6fadd7e31eebf4bcc4eb8d2dd512e3a2313627f recovery Mario MP
391# f6fadd7e31eebf4bcc4eb8d2dd512e3a2313627f recovery Mario MP-v3
392# 95b4a4abb2a55e7163824e36583c109c90a2e78d recovery McCloud MP
393# 5e2ca8bc287af2d94615e940ee17e9620d3191dd recovery Monroe MP
394# b914dc4800f6929d0c1ecea536dbff9ef618af26 recovery Nyan PreMP
395# 9cdfb53d6ef4f4746de2dace828d1142c216a130 recovery Nyan-Big MP
396# 934ce4a3a23316457727a500b7dce4e04b2f7147 recovery Nyan-Blaze MP
397# ef1c9cdbf547acc397288cf58fd3ee274383abbb recovery Panther MP
398# cfa1a4a784a90cc7c1df6859fa226b89e6afbeb5 recovery Parrot MP
399# cfa1a4a784a90cc7c1df6859fa226b89e6afbeb5 recovery Parrot MP-v3
400# cfa1a4a784a90cc7c1df6859fa226b89e6afbeb5 recovery Parrot-ivb MP-v3
401# 7cabfc4c72cb300399c8c490b39c1ce0c45b11c0 recovery Peach-Pi MP
402# b39e9b9b12f3ab4fd1017e6c92d4ccff2723347d recovery Peach-Pit MP-v2
403# 74ec605d3525e24b7f7a4b633afd2ec048dc6d12 recovery Peppy MP-v2
404# 315417a5d8a95b954f5f101acaef5b107136a418 recovery Quawks MP
405# d0b7feba2bb53ecd8eda6602ccf6a0c25e5b001f recovery Rambi PreMP
406# 61cad57963dd64202cead8dcfc62aea76c9911c2 recovery Samus PreMP
407# f32b5f6b6cfb6d77136ac0d8ed0cdf67e6df7b91 recovery Snow MP
408# d45eb14119d14b5b1d4b259f177e32c522d27f99 recovery Squawks MP
409# fa4497f70968a1820ceb0ac4364d8e9ec0abc0b2 recovery Stout MP
410# fa4497f70968a1820ceb0ac4364d8e9ec0abc0b2 recovery Stout MP-v3
411# 6f6d6df4e328633904990cf8c60baa18b8cf6fc7 recovery Stumpy MP
412# 057a03c1526a1be7f42d29095c5a583231a75b35 recovery Stumpy PVT
413# d56ac05587d7d45d681cb52d113fb5d95e787d1d recovery Swanky MP
414# de11a604715a920d7371ceefda75a5b1b062443f recovery Tegra2-Kaen PVT
415# 4fe89a587d09c9fb58e79b556014b833f64559fb recovery Tricky MP
416# 72bb00bb0c89d06569df2d9d2e8087e040bbbb8b recovery Winky PreMP
417# a01a2a2502fe8f6e3dc8100080b0e486bc0a3468 recovery Wolf MP
418# 20f3e8b77da6577706c91feefb203f98ee20d479 recovery ZGB MP
419# 20f3e8b77da6577706c91feefb203f98ee20d479 recovery ZGB MP-v3
420# 20f3e8b77da6577706c91feefb203f98ee20d479 recovery ZGB-HE MP-v3
421# 070611f0aa70b6887dd3c96b4086c13894ffa25f recovery Zako MP-v2