173ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker/* 273ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker * Copyright (C) 2009 The Android Open Source Project 373ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker * 473ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker * Licensed under the Apache License, Version 2.0 (the "License"); 573ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker * you may not use this file except in compliance with the License. 673ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker * You may obtain a copy of the License at 773ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker * 873ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker * http://www.apache.org/licenses/LICENSE-2.0 973ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker * 1073ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker * Unless required by applicable law or agreed to in writing, software 1173ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker * distributed under the License is distributed on an "AS IS" BASIS, 1273ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1373ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker * See the License for the specific language governing permissions and 1473ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker * limitations under the License. 1573ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker */ 1673ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker 1773ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker#include <stdio.h> 1873ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker#include <stdlib.h> 1973ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker#include <stdarg.h> 2099916f0496cfe37891d40f21a9a0e387620a8a60Doug Zongker#include <sys/types.h> 2199916f0496cfe37891d40f21a9a0e387620a8a60Doug Zongker#include <sys/stat.h> 2299916f0496cfe37891d40f21a9a0e387620a8a60Doug Zongker#include <fcntl.h> 2373ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker 247c3ae45ef9306d2ff4b491e0488c8849bf15ce90Doug Zongker#include "common.h" 2573ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker#include "verifier.h" 26daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker#include "ui.h" 2730362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker#include "mincrypt/sha.h" 2830362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker#include "mincrypt/sha256.h" 2999916f0496cfe37891d40f21a9a0e387620a8a60Doug Zongker#include "minzip/SysUtil.h" 3073ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker 3173ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker// This is build/target/product/security/testkey.x509.pem after being 3273ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker// dumped out by dumpkey.jar. 3373ae31ce0ac09c0e45924d817644261c87ab1a60Doug ZongkerRSAPublicKey test_key = 3473ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker { 64, 0xc926ad21, 3530362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker { 0x6afee91fu, 0x7fa31d5bu, 0x38a0b217u, 0x99df9baeu, 3630362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xfe72991du, 0x727d3c04u, 0x20943f99u, 0xd08e7826u, 3730362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x69e7c8a2u, 0xdeeccc8eu, 0x6b9af76fu, 0x553311c4u, 3830362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x07b9e247u, 0x54c8bbcau, 0x6a540d81u, 0x48dbf567u, 3930362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x98c92877u, 0x134fbfdeu, 0x01b32564u, 0x24581948u, 4030362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x6cddc3b8u, 0x0cd444dau, 0xfe0381ccu, 0xf15818dfu, 4130362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xc06e6d42u, 0x2e2f6412u, 0x093a6737u, 0x94d83b31u, 4230362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xa466c87au, 0xb3f284a0u, 0xa694ec2cu, 0x053359e6u, 4330362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x9717ee6au, 0x0732e080u, 0x220d5008u, 0xdc4af350u, 4430362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x93d0a7c3u, 0xe330c9eau, 0xcac3da1eu, 0x8ebecf8fu, 4530362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xc2be387fu, 0x38a14e89u, 0x211586f0u, 0x18b846f5u, 4630362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x43be4c72u, 0xb578c204u, 0x1bbfb230u, 0xf1e267a8u, 4730362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xa2d3e656u, 0x64b8e4feu, 0xe7e83d4bu, 0x3e77a943u, 4830362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x3559ffd9u, 0x0ebb0f99u, 0x0aa76ce6u, 0xd3786ea7u, 4930362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xbca8cd6bu, 0x068ca8e8u, 0xeb1de2ffu, 0x3e3ecd6cu, 5030362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xe0d9d825u, 0xb1edc762u, 0xdec60b24u, 0xd6931904u}, 5130362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker { 0xccdcb989u, 0xe19281f9u, 0xa6e80accu, 0xb7f40560u, 5230362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x0efb0bccu, 0x7f12b0bbu, 0x1e90531au, 0x136d95d0u, 5330362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x9e660665u, 0x7d54918fu, 0xe3b93ea2u, 0x2f415d10u, 5430362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x3d2df6e6u, 0x7a627ecfu, 0xa6f22d70u, 0xb995907au, 5530362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x09de16b2u, 0xfeb8bd61u, 0xf24ec294u, 0x716a427fu, 5630362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x2e12046fu, 0xeaf3d56au, 0xd9b873adu, 0x0ced340bu, 5730362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xbc9cec09u, 0x73c65903u, 0xee39ce9bu, 0x3eede25au, 5830362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x397633b7u, 0x2583c165u, 0x8514f97du, 0xe9166510u, 5930362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x0b6fae99u, 0xa47139fdu, 0xdb8352f0u, 0xb2ad7f2cu, 6030362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xa11552e2u, 0xd4d490a7u, 0xe11e8568u, 0xe9e484dau, 6130362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xd3ef8449u, 0xa47055dau, 0x4edd9557u, 0x03a78ba1u, 6230362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x770e130du, 0x16762facu, 0x0cbdfcc4u, 0xf3070540u, 6330362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x008b6515u, 0x60e7e1b7u, 0xa72cf7f9u, 0xaff86e39u, 6430362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x4296faadu, 0xfc90430eu, 0x6cc8f377u, 0xb398fd43u, 6530362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x423c5997u, 0x991d59c4u, 0x6464bf73u, 0x96431575u, 6630362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x15e3d207u, 0x30532a7au, 0x8c4be618u, 0x460a4d76u }, 6717495277b1a6328f5cae68523ad00be1f1107950Doug Zongker 3 6817495277b1a6328f5cae68523ad00be1f1107950Doug Zongker }; 6917495277b1a6328f5cae68523ad00be1f1107950Doug Zongker 7017495277b1a6328f5cae68523ad00be1f1107950Doug ZongkerRSAPublicKey test_f4_key = 7117495277b1a6328f5cae68523ad00be1f1107950Doug Zongker { 64, 0xc9bd1f21, 7230362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker { 0x1178db1fu, 0xbf5d0e55u, 0x3393a165u, 0x0ef4c287u, 7330362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xbc472a4au, 0x383fc5a1u, 0x4a13b7d2u, 0xb1ff2ac3u, 7430362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xaf66b4d9u, 0x9280acefu, 0xa2165bdbu, 0x6a4d6e5cu, 7530362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x08ea676bu, 0xb7ac70c7u, 0xcd158139u, 0xa635ccfeu, 7630362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xa46ab8a8u, 0x445a3e8bu, 0xdc81d9bbu, 0x91ce1a20u, 7730362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x68021cdeu, 0x4516eda9u, 0x8d43c30cu, 0xed1eff14u, 7830362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xca387e4cu, 0x58adc233u, 0x4657ab27u, 0xa95b521eu, 7930362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xdfc0e30cu, 0x394d64a1u, 0xc6b321a1u, 0x2ca22cb8u, 8030362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xb1892d5cu, 0x5d605f3eu, 0x6025483cu, 0x9afd5181u, 8130362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x6e1a7105u, 0x03010593u, 0x70acd304u, 0xab957cbfu, 8230362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x8844abbbu, 0x53846837u, 0x24e98a43u, 0x2ba060c1u, 8330362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x8b88b88eu, 0x44eea405u, 0xb259fc41u, 0x0907ad9cu, 8430362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x13003adau, 0xcf79634eu, 0x7d314ec9u, 0xfbbe4c2bu, 8530362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xd84d0823u, 0xfd30fd88u, 0x68d8a909u, 0xfb4572d9u, 8630362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xa21301c2u, 0xd00a4785u, 0x6862b50cu, 0xcfe49796u, 8730362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xdaacbd83u, 0xfb620906u, 0xdf71e0ccu, 0xbbc5b030u }, 8830362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker { 0x69a82189u, 0x1a8b22f4u, 0xcf49207bu, 0x68cc056au, 8930362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xb206b7d2u, 0x1d449bbdu, 0xe9d342f2u, 0x29daea58u, 9030362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xb19d011au, 0xc62f15e4u, 0x9452697au, 0xb62bb87eu, 9130362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x60f95cc2u, 0x279ebb2du, 0x17c1efd8u, 0xec47558bu, 9230362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xc81334d1u, 0x88fe7601u, 0x79992eb1u, 0xb4555615u, 9330362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x2022ac8cu, 0xc79a4b8cu, 0xb288b034u, 0xd6b942f0u, 9430362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x0caa32fbu, 0xa065ba51u, 0x4de9f154u, 0x29f64f6cu, 9530362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x7910af5eu, 0x3ed4636au, 0xe4c81911u, 0x9183f37du, 9630362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x5811e1c4u, 0x29c7a58cu, 0x9715d4d3u, 0xc7e2dce3u, 9730362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x140972ebu, 0xf4c8a69eu, 0xa104d424u, 0x5dabbdfbu, 9830362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x41cb4c6bu, 0xd7f44717u, 0x61785ff7u, 0x5e0bc273u, 9930362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x36426c70u, 0x2aa6f08eu, 0x083badbfu, 0x3cab941bu, 10030362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x8871da23u, 0x1ab3dbaeu, 0x7115a21du, 0xf5aa0965u, 10130362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xf766f562u, 0x7f110225u, 0x86d96a04u, 0xc50a120eu, 10230362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0x3a751ca3u, 0xc21aa186u, 0xba7359d0u, 0x3ff2b257u, 10330362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker 0xd116e8bbu, 0xfc1318c0u, 0x070e5b1du, 0x83b759a6u }, 10417495277b1a6328f5cae68523ad00be1f1107950Doug Zongker 65537 10573ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker }; 10673ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker 1077a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny RootECPublicKey test_ec_key = 1087a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root { 1097a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root { 1107a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root {0xd656fa24u, 0x931416cau, 0x1c0278c6u, 0x174ebe4cu, 1117a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root 0x6018236au, 0x45ba1656u, 0xe8c05d84u, 0x670ed500u} 1127a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root }, 1137a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root { 1147a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root {0x0d179adeu, 0x4c16827du, 0x9f8cb992u, 0x8f69ff8au, 1157a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root 0x481b1020u, 0x798d91afu, 0x184db8e9u, 0xb5848dd9u} 1167a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root } 1177a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root }; 1187a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root 119daefc1d442fb421606680feb9aeb59c133f4c427Doug ZongkerRecoveryUI* ui = NULL; 12073ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker 121daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker// verifier expects to find a UI object; we provide one that does 122daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker// nothing but print. 123daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongkerclass FakeUI : public RecoveryUI { 124daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker void Init() { } 125daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker void SetBackground(Icon icon) { } 12673ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker 127daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker void SetProgressType(ProgressType determinate) { } 128daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker void ShowProgress(float portion, float seconds) { } 129daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker void SetProgress(float fraction) { } 130daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker 131daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker void ShowText(bool visible) { } 132daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker bool IsTextVisible() { return false; } 133daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker bool WasTextEverVisible() { return false; } 134daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker void Print(const char* fmt, ...) { 135daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker va_list ap; 136daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker va_start(ap, fmt); 1377c3ae45ef9306d2ff4b491e0488c8849bf15ce90Doug Zongker vfprintf(stderr, fmt, ap); 138daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker va_end(ap); 139daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker } 140daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker 141daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker void StartMenu(const char* const * headers, const char* const * items, 142daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker int initial_selection) { } 143daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker int SelectMenu(int sel) { return 0; } 144daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker void EndMenu() { } 145daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker}; 14673ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker 1477c3ae45ef9306d2ff4b491e0488c8849bf15ce90Doug Zongkervoid 1487c3ae45ef9306d2ff4b491e0488c8849bf15ce90Doug Zongkerui_print(const char* format, ...) { 1497c3ae45ef9306d2ff4b491e0488c8849bf15ce90Doug Zongker va_list ap; 1507c3ae45ef9306d2ff4b491e0488c8849bf15ce90Doug Zongker va_start(ap, format); 1517c3ae45ef9306d2ff4b491e0488c8849bf15ce90Doug Zongker vfprintf(stdout, format, ap); 1527c3ae45ef9306d2ff4b491e0488c8849bf15ce90Doug Zongker va_end(ap); 1537c3ae45ef9306d2ff4b491e0488c8849bf15ce90Doug Zongker} 1547c3ae45ef9306d2ff4b491e0488c8849bf15ce90Doug Zongker 1557a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Rootstatic Certificate* add_certificate(Certificate** certsp, int* num_keys, 1567a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root Certificate::KeyType key_type) { 1577a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root int i = *num_keys; 1587a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root *num_keys = *num_keys + 1; 1597a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root *certsp = (Certificate*) realloc(*certsp, *num_keys * sizeof(Certificate)); 1607a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root Certificate* certs = *certsp; 1617a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root certs[i].rsa = NULL; 1627a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root certs[i].ec = NULL; 1637a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root certs[i].key_type = key_type; 1647a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root certs[i].hash_len = SHA_DIGEST_SIZE; 1657a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root return &certs[i]; 1667a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root} 1677a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root 16873ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongkerint main(int argc, char **argv) { 1697a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root if (argc < 2) { 1707a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root fprintf(stderr, "Usage: %s [-sha256] [-ec | -f4 | -file <keys>] <package>\n", argv[0]); 17173ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker return 2; 17273ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker } 1737a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root Certificate* certs = NULL; 1747a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root int num_keys = 0; 17573ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker 1767a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root int argn = 1; 1777a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root while (argn < argc) { 1787a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root if (strcmp(argv[argn], "-sha256") == 0) { 1797a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root if (num_keys == 0) { 1807a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root fprintf(stderr, "May only specify -sha256 after key type\n"); 1817a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root return 2; 1827a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root } 1837a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root ++argn; 1847a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root Certificate* cert = &certs[num_keys - 1]; 1857a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root cert->hash_len = SHA256_DIGEST_SIZE; 1867a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root } else if (strcmp(argv[argn], "-ec") == 0) { 1877a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root ++argn; 1887a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root Certificate* cert = add_certificate(&certs, &num_keys, Certificate::EC); 1897a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root cert->ec = &test_ec_key; 1907a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root } else if (strcmp(argv[argn], "-e3") == 0) { 1917a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root ++argn; 1927a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root Certificate* cert = add_certificate(&certs, &num_keys, Certificate::RSA); 1937a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root cert->rsa = &test_key; 1947a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root } else if (strcmp(argv[argn], "-f4") == 0) { 1957a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root ++argn; 1967a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root Certificate* cert = add_certificate(&certs, &num_keys, Certificate::RSA); 1977a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root cert->rsa = &test_f4_key; 1987a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root } else if (strcmp(argv[argn], "-file") == 0) { 1997a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root if (certs != NULL) { 2007a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root fprintf(stderr, "Cannot specify -file with other certs specified\n"); 2017a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root return 2; 2027a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root } 2037a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root ++argn; 2047a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root certs = load_keys(argv[argn], &num_keys); 2057a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root ++argn; 2067a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root } else if (argv[argn][0] == '-') { 2077a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root fprintf(stderr, "Unknown argument %s\n", argv[argn]); 2087a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root return 2; 2097a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root } else { 2107a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root break; 2117a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root } 21230362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker } 2137a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root 2147a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root if (argn == argc) { 2157a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root fprintf(stderr, "Must specify package to verify\n"); 2167a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root return 2; 2177a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root } 2187a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root 2197a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root if (num_keys == 0) { 2207a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root certs = (Certificate*) calloc(1, sizeof(Certificate)); 2217a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root if (certs == NULL) { 2227a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root fprintf(stderr, "Failure allocating memory for default certificate\n"); 2237a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root return 1; 2247a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root } 2257a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root certs->key_type = Certificate::RSA; 2267a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root certs->rsa = &test_key; 2277a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root certs->ec = NULL; 2287a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root certs->hash_len = SHA_DIGEST_SIZE; 2297a4adb5268ae71260c86788ccdeb7a699c80ee0aKenny Root num_keys = 1; 23017495277b1a6328f5cae68523ad00be1f1107950Doug Zongker } 23117495277b1a6328f5cae68523ad00be1f1107950Doug Zongker 232daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker ui = new FakeUI(); 233daefc1d442fb421606680feb9aeb59c133f4c427Doug Zongker 23499916f0496cfe37891d40f21a9a0e387620a8a60Doug Zongker MemMapping map; 23599916f0496cfe37891d40f21a9a0e387620a8a60Doug Zongker if (sysMapFile(argv[argn], &map) != 0) { 23699916f0496cfe37891d40f21a9a0e387620a8a60Doug Zongker fprintf(stderr, "failed to mmap %s: %s\n", argv[argn], strerror(errno)); 23799916f0496cfe37891d40f21a9a0e387620a8a60Doug Zongker return 4; 23899916f0496cfe37891d40f21a9a0e387620a8a60Doug Zongker } 23999916f0496cfe37891d40f21a9a0e387620a8a60Doug Zongker 24099916f0496cfe37891d40f21a9a0e387620a8a60Doug Zongker int result = verify_file(map.addr, map.length, certs, num_keys); 24173ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker if (result == VERIFY_SUCCESS) { 24230362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker printf("VERIFIED\n"); 24373ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker return 0; 24473ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker } else if (result == VERIFY_FAILURE) { 24530362a6ad132cbafde82cc57293e00679d4f86c2Doug Zongker printf("NOT VERIFIED\n"); 24673ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker return 1; 24773ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker } else { 24873ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker printf("bad return value\n"); 24973ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker return 3; 25073ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker } 25173ae31ce0ac09c0e45924d817644261c87ab1a60Doug Zongker} 252