diff options
author | Gaurav Shah <gauravsh@chromium.org> | 2010-03-31 13:26:55 -0700 |
---|---|---|
committer | Gaurav Shah <gauravsh@chromium.org> | 2010-03-31 13:26:55 -0700 |
commit | fc70d72aaab4d558e39ec43832375267603bfd93 (patch) | |
tree | 2b71e90cdb26c079a76ab82607e9bf7a7c97e6ff | |
parent | 5411c7a9f03f91bf2c1cd1cf852db9d4585a05c9 (diff) | |
download | vboot-fc70d72aaab4d558e39ec43832375267603bfd93.tar.gz |
VBoot Reference: Refactoring Part 3
Refactor and restructure reference code into individual self-contain modules. I have revamped the way the code is structured to make it easy to determine which parts belong in the firmware and which are used by userland tools.
common/ - common utilities and stub functions (Firmware)
cryptolib/ - crypto library (Firmware)
misclibs/ - miscellaneous userland libraries (Userland)
sctips/ - Miscellaenous scripts (Userland)
tests/ - Tests (Userland)
vfirmware/ - Verified Firmware Implementation
vfirmware/firmware_image_fw.c (Firmware)
vfirmware/firmware_image.c (Userland)
vkernel/ - Verified Kernel Implementation
vkernel/kernel_image_fw.c (Firmware)
vkernel/kernel_image.c (Userland)
Review URL: http://codereview.chromium.org/1581005
-rw-r--r-- | Makefile | 8 | ||||
-rw-r--r-- | README | 2 | ||||
-rw-r--r-- | common/Makefile | 3 | ||||
-rw-r--r-- | common/include/rollback_index.h (renamed from include/rollback_index.h) | 0 | ||||
-rw-r--r-- | common/include/tlcl.h (renamed from include/tlcl.h) | 0 | ||||
-rw-r--r-- | common/include/utility.h (renamed from include/utility.h) | 0 | ||||
-rw-r--r-- | common/rollback_index.c (renamed from utils/rollback_index.c) | 0 | ||||
-rw-r--r-- | cryptolib/Makefile (renamed from crypto/Makefile) | 6 | ||||
-rw-r--r-- | cryptolib/include/cryptolib.h (renamed from include/cryptolib.h) | 0 | ||||
-rw-r--r-- | cryptolib/include/padding.h (renamed from include/padding.h) | 0 | ||||
-rw-r--r-- | cryptolib/include/rsa.h (renamed from include/rsa.h) | 0 | ||||
-rw-r--r-- | cryptolib/include/sha.h (renamed from include/sha.h) | 0 | ||||
-rw-r--r-- | cryptolib/padding.c (renamed from crypto/padding.c) | 0 | ||||
-rw-r--r-- | cryptolib/rsa.c (renamed from crypto/rsa.c) | 0 | ||||
-rw-r--r-- | cryptolib/rsa_utility.c (renamed from crypto/rsa_utility.c) | 0 | ||||
-rw-r--r-- | cryptolib/sha1.c (renamed from crypto/sha1.c) | 0 | ||||
-rw-r--r-- | cryptolib/sha2.c (renamed from crypto/sha2.c) | 0 | ||||
-rw-r--r-- | cryptolib/sha_utility.c (renamed from crypto/sha_utility.c) | 0 | ||||
-rw-r--r-- | misclibs/Makefile | 24 | ||||
-rw-r--r-- | misclibs/file_keys.c (renamed from utils/file_keys.c) | 0 | ||||
-rw-r--r-- | misclibs/include/file_keys.h (renamed from include/file_keys.h) | 0 | ||||
-rw-r--r-- | misclibs/include/signature_digest.h (renamed from include/signature_digest.h) | 0 | ||||
-rw-r--r-- | misclibs/signature_digest.c (renamed from utils/signature_digest.c) | 0 | ||||
-rwxr-xr-x | scripts/genpadding.sh (renamed from crypto/genpadding.sh) | 0 | ||||
-rwxr-xr-x | scripts/sign_data.sh (renamed from utils/sign_data.sh) | 0 | ||||
-rw-r--r-- | tests/Makefile | 21 | ||||
-rwxr-xr-x | tests/common.sh | 2 | ||||
-rw-r--r-- | utility/Makefile (renamed from utils/Makefile) | 46 | ||||
-rw-r--r-- | utility/dumpRSAPublicKey.c (renamed from utils/dumpRSAPublicKey.c) | 0 | ||||
-rw-r--r-- | utility/firmware_utility.cc (renamed from utils/firmware_utility.cc) | 0 | ||||
-rw-r--r-- | utility/include/firmware_utility.h (renamed from include/firmware_utility.h) | 0 | ||||
-rw-r--r-- | utility/include/kernel_utility.h (renamed from include/kernel_utility.h) | 0 | ||||
-rw-r--r-- | utility/include/verify_data.h (renamed from include/verify_data.h) | 0 | ||||
-rw-r--r-- | utility/kernel_utility.cc (renamed from utils/kernel_utility.cc) | 0 | ||||
-rw-r--r-- | utility/signature_digest_utility.c (renamed from utils/signature_digest_utility.c) | 0 | ||||
-rw-r--r-- | utility/verify_data.c (renamed from utils/verify_data.c) | 2 | ||||
-rw-r--r-- | vfirmware/Makefile | 19 | ||||
-rw-r--r-- | vfirmware/firmware_image.c (renamed from utils/firmware_image.c) | 0 | ||||
-rw-r--r-- | vfirmware/firmware_image_fw.c (renamed from utils/firmware_image_fw.c) | 0 | ||||
-rw-r--r-- | vfirmware/include/firmware_image.h (renamed from include/firmware_image.h) | 0 | ||||
-rw-r--r-- | vfirmware/include/firmware_image_fw.h (renamed from include/firmware_image_fw.h) | 0 | ||||
-rw-r--r-- | vkernel/Makefile | 19 | ||||
-rw-r--r-- | vkernel/include/kernel_image.h (renamed from include/kernel_image.h) | 0 | ||||
-rw-r--r-- | vkernel/include/kernel_image_fw.h (renamed from include/kernel_image_fw.h) | 0 | ||||
-rw-r--r-- | vkernel/kernel_image.c (renamed from utils/kernel_image.c) | 0 | ||||
-rw-r--r-- | vkernel/kernel_image_fw.c (renamed from utils/kernel_image_fw.c) | 0 |
46 files changed, 107 insertions, 45 deletions
@@ -5,10 +5,12 @@ export CC ?= gcc export CFLAGS = -Wall -DNDEBUG -O3 -Werror export TOP = $(shell pwd) -export INCLUDEDIR = $(TOP)/include -export INCLUDES = -I$(INCLUDEDIR) +export INCLUDES = \ + -I$(TOP)/common/include \ + -I$(TOP)/cryptolib/include \ + -I$(TOP)/misclibs/include -SUBDIRS=common crypto utils tests +SUBDIRS=common cryptolib misclibs vfirmware vkernel utility tests all: for i in $(SUBDIRS); do \ @@ -9,7 +9,7 @@ include/ - Contains all the code headers. firmware_image.h and kernel_image.h contains the structures that represent a verified boot firmware and kernel image. Note that the -crypto/ - Contains the implementation for the crypto library. This +cryptolib/ - Contains the implementation for the crypto library. This includes implementations for SHA1, SHA256, SHA512, and RSA signature verification (for PKCS #1 v1.5 signatures). diff --git a/common/Makefile b/common/Makefile index b9b4a512..c3cd857d 100644 --- a/common/Makefile +++ b/common/Makefile @@ -2,8 +2,9 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -SRCS = utility_stub.c tlcl_stub.c +SRCS = rollback_index.c tlcl_stub.c utility_stub.c OBJS = $(SRCS:.c=.o) +INCLUDES += -I./include/ all: libcommon.a diff --git a/include/rollback_index.h b/common/include/rollback_index.h index d4e47ac8..d4e47ac8 100644 --- a/include/rollback_index.h +++ b/common/include/rollback_index.h diff --git a/include/tlcl.h b/common/include/tlcl.h index 2e6d3fd8..2e6d3fd8 100644 --- a/include/tlcl.h +++ b/common/include/tlcl.h diff --git a/include/utility.h b/common/include/utility.h index 8619cd21..8619cd21 100644 --- a/include/utility.h +++ b/common/include/utility.h diff --git a/utils/rollback_index.c b/common/rollback_index.c index c107f8e7..c107f8e7 100644 --- a/utils/rollback_index.c +++ b/common/rollback_index.c diff --git a/crypto/Makefile b/cryptolib/Makefile index bd2eabd3..6fe364ab 100644 --- a/crypto/Makefile +++ b/cryptolib/Makefile @@ -2,17 +2,19 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +TOP ?= ../ SRCS = rsa.c sha1.c sha2.c padding.c rsa_utility.c sha_utility.c OBJS = $(SRCS:.c=.o) CFLAGS += -DUNROLL_LOOPS -DHAVE_ENDIAN_H -DHAVE_LITTLE_ENDIAN +INCLUDES += -I./include/ -I$(TOP)/common/include/ all: libcrypto.a libcrypto.a: $(OBJS) ar rs libcrypto.a $(OBJS) -padding.c: genpadding.sh - ./genpadding.sh >$@ +padding.c: $(TOP)/scripts/genpadding.sh + $(TOP)/scripts/genpadding.sh >$@ .c.o: $(OBJS) $(CC) $(CFLAGS) -ansi $(INCLUDES) -c $< -o $@ diff --git a/include/cryptolib.h b/cryptolib/include/cryptolib.h index b65a71db..b65a71db 100644 --- a/include/cryptolib.h +++ b/cryptolib/include/cryptolib.h diff --git a/include/padding.h b/cryptolib/include/padding.h index 8d8fc95f..8d8fc95f 100644 --- a/include/padding.h +++ b/cryptolib/include/padding.h diff --git a/include/rsa.h b/cryptolib/include/rsa.h index 1a458037..1a458037 100644 --- a/include/rsa.h +++ b/cryptolib/include/rsa.h diff --git a/include/sha.h b/cryptolib/include/sha.h index 16868942..16868942 100644 --- a/include/sha.h +++ b/cryptolib/include/sha.h diff --git a/crypto/padding.c b/cryptolib/padding.c index 14d94458..14d94458 100644 --- a/crypto/padding.c +++ b/cryptolib/padding.c diff --git a/crypto/rsa.c b/cryptolib/rsa.c index bfc64469..bfc64469 100644 --- a/crypto/rsa.c +++ b/cryptolib/rsa.c diff --git a/crypto/rsa_utility.c b/cryptolib/rsa_utility.c index bf322844..bf322844 100644 --- a/crypto/rsa_utility.c +++ b/cryptolib/rsa_utility.c diff --git a/crypto/sha1.c b/cryptolib/sha1.c index 41b729b1..41b729b1 100644 --- a/crypto/sha1.c +++ b/cryptolib/sha1.c diff --git a/crypto/sha2.c b/cryptolib/sha2.c index 7f476567..7f476567 100644 --- a/crypto/sha2.c +++ b/cryptolib/sha2.c diff --git a/crypto/sha_utility.c b/cryptolib/sha_utility.c index 4e266f7c..4e266f7c 100644 --- a/crypto/sha_utility.c +++ b/cryptolib/sha_utility.c diff --git a/misclibs/Makefile b/misclibs/Makefile new file mode 100644 index 00000000..5aba67e8 --- /dev/null +++ b/misclibs/Makefile @@ -0,0 +1,24 @@ +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +TOP ?= ../ +CC ?= gcc +INCLUDES += -I./include \ + -I$(TOP)/common/include \ + -I$(TOP)/cryptolib/include \ + -I$(TOP)/vfirmware/include \ + -I$(TOP)/vkernel/include + +CFLAGS ?= -Wall -DNDEBUG -O3 -Werror $(INCLUDES) +TOP ?= ../ + +MISCLIB_OUT = file_keys.o signature_digest.o + +all: $(MISCLIB_OUT) + +.c.o: + $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ + +clean: + rm -f $(MISCLIB_OUT) diff --git a/utils/file_keys.c b/misclibs/file_keys.c index 275ca6b7..275ca6b7 100644 --- a/utils/file_keys.c +++ b/misclibs/file_keys.c diff --git a/include/file_keys.h b/misclibs/include/file_keys.h index eac4df0e..eac4df0e 100644 --- a/include/file_keys.h +++ b/misclibs/include/file_keys.h diff --git a/include/signature_digest.h b/misclibs/include/signature_digest.h index 2376b972..2376b972 100644 --- a/include/signature_digest.h +++ b/misclibs/include/signature_digest.h diff --git a/utils/signature_digest.c b/misclibs/signature_digest.c index d8d425ba..d8d425ba 100644 --- a/utils/signature_digest.c +++ b/misclibs/signature_digest.c diff --git a/crypto/genpadding.sh b/scripts/genpadding.sh index baac71bd..baac71bd 100755 --- a/crypto/genpadding.sh +++ b/scripts/genpadding.sh diff --git a/utils/sign_data.sh b/scripts/sign_data.sh index bd9e1be2..bd9e1be2 100755 --- a/utils/sign_data.sh +++ b/scripts/sign_data.sh diff --git a/tests/Makefile b/tests/Makefile index 99e2d3a4..b14f74f6 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -4,15 +4,18 @@ CC ?= gcc CFLAGS ?= -Wall -DNDEBUG -O3 -Werror -INCLUDES ?= -I../include/ -TOP ?= ../ - -BASE_LIBS = $(TOP)/crypto/libcrypto.a $(TOP)/common/libcommon.a -IMAGE_LIBS = $(TOP)/utils/firmware_image.o \ - $(TOP)/utils/firmware_image_fw.o \ - $(TOP)/utils/kernel_image.o \ - $(TOP)/utils/kernel_image_fw.o -UTIL_LIBS = $(TOP)/utils/file_keys.o $(TOP)/utils/signature_digest.o +INCLUDES += -I./include \ + -I../cryptolib/include \ + -I../common/include \ + -I../misclibs/include \ + -I../vfirmware/include\ + -I../vkernel/include +BASE_LIBS = $(TOP)/cryptolib/libcrypto.a $(TOP)/common/libcommon.a +IMAGE_LIBS = $(TOP)/vfirmware/firmware_image.o \ + $(TOP)/vfirmware/firmware_image_fw.o \ + $(TOP)/vkernel/kernel_image.o \ + $(TOP)/vkernel/kernel_image_fw.o +UTIL_LIBS = $(TOP)/misclibs/file_keys.o $(TOP)/misclibs/signature_digest.o LIBS = $(IMAGE_LIBS) $(UTIL_LIBS) -lcrypto $(BASE_LIBS) TEST_BINS = big_firmware_tests \ diff --git a/tests/common.sh b/tests/common.sh index 82fdb850..421f6290 100755 --- a/tests/common.sh +++ b/tests/common.sh @@ -15,7 +15,7 @@ else SCRIPT_DIR="`pwd`"/"`dirname $0`" fi -UTIL_DIR=`dirname ${SCRIPT_DIR}`/utils +UTIL_DIR=`dirname ${SCRIPT_DIR}`/utility TEST_DIR=${SCRIPT_DIR} TESTKEY_DIR=${SCRIPT_DIR}/testkeys TESTCASE_DIR=${SCRIPT_DIR}/testcases diff --git a/utils/Makefile b/utility/Makefile index 81de74f1..a5f6f584 100644 --- a/utils/Makefile +++ b/utility/Makefile @@ -2,24 +2,25 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +TOP ?= ../ CC ?= gcc CXX ?= g++ -CFLAGS ?= -Wall -DNDEBUG -O3 -Werror -INCLUDES ?= -I../include/ -TOP ?= ../ - -LIBS = file_keys.o \ - firmware_image.o \ - firmware_image_fw.o \ - kernel_image.o \ - kernel_image_fw.o \ - rollback_index.o \ - signature_digest.o - -FIRMWARELIBS = $(TOP)/crypto/libcrypto.a $(TOP)/common/libcommon.a - -TARGET_BINS = $(LIBS) \ - dumpRSAPublicKey \ +INCLUDES += -I./include \ + -I../cryptolib/include \ + -I../common/include \ + -I../misclibs/include \ + -I../vfirmware/include\ + -I../vkernel/include +CFLAGS ?= -Wall -DNDEBUG -O3 -Werror $(INCLUDES) +LIBS = $(TOP)/misclibs/file_keys.o \ + $(TOP)/misclibs/signature_digest.o \ + $(TOP)/vfirmware/firmware_image.o \ + $(TOP)/vfirmware/firmware_image_fw.o \ + $(TOP)/vkernel/kernel_image.o \ + $(TOP)/vkernel/kernel_image_fw.o +FIRMWARELIBS = $(TOP)/cryptolib/libcrypto.a $(TOP)/common/libcommon.a + +TARGET_BINS = dumpRSAPublicKey \ firmware_utility \ kernel_utility \ signature_digest_utility \ @@ -27,23 +28,14 @@ TARGET_BINS = $(LIBS) \ all: $(TARGET_BINS) -.c.o: - $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ - dumpRSAPublicKey: dumpRSAPublicKey.c - $(CC) $(CFLAGS) $< -o $@ -lcrypto - -firmware_image_fw.o: firmware_image_fw.c - $(CC) $(CFLAGS) -ansi $(INCLUDES) -c $^ -o $@ + $(CC) $(CFLAGS) $(INCLUDES) $< -o $@ -lcrypto firmware_utility: firmware_utility.cc $(LIBS) $(FIRMWARELIBS) $(CXX) $(CFLAGS) $(INCLUDES) -ggdb -D__STDC_LIMIT_MACROS $< \ -o $@ $(FIRMWARELIBS) $(LIBS) $(TOP)/common/libcommon.a \ -lcrypto -kernel_image_fw.o: kernel_image_fw.c - $(CC) $(CFLAGS) -ansi $(INCLUDES) -c $< -o $@ - kernel_utility: kernel_utility.cc $(LIBS) $(FIRMWARELIBS) $(CXX) $(CFLAGS) $(INCLUDES) -ggdb -D__STDC_LIMIT_MACROS $< \ -o $@ $(FIRMWARELIBS) $(LIBS) $(TOP)/common/libcommon.a \ @@ -56,5 +48,5 @@ verify_data: verify_data.c $(LIBS) $(FIRMWARELIBS) $(CC) $(CFLAGS) $(INCLUDES) $< -o $@ $(LIBS) $(FIRMWARELIBS) -lcrypto clean: - rm -f $(TARGET_BINS) $(LIBS) + rm -f $(TARGET_BINS) diff --git a/utils/dumpRSAPublicKey.c b/utility/dumpRSAPublicKey.c index 837303cb..837303cb 100644 --- a/utils/dumpRSAPublicKey.c +++ b/utility/dumpRSAPublicKey.c diff --git a/utils/firmware_utility.cc b/utility/firmware_utility.cc index 85275e73..85275e73 100644 --- a/utils/firmware_utility.cc +++ b/utility/firmware_utility.cc diff --git a/include/firmware_utility.h b/utility/include/firmware_utility.h index 6c2b735a..6c2b735a 100644 --- a/include/firmware_utility.h +++ b/utility/include/firmware_utility.h diff --git a/include/kernel_utility.h b/utility/include/kernel_utility.h index 1cb7f1ae..1cb7f1ae 100644 --- a/include/kernel_utility.h +++ b/utility/include/kernel_utility.h diff --git a/include/verify_data.h b/utility/include/verify_data.h index 51b9fd6d..51b9fd6d 100644 --- a/include/verify_data.h +++ b/utility/include/verify_data.h diff --git a/utils/kernel_utility.cc b/utility/kernel_utility.cc index 9fedeb5f..9fedeb5f 100644 --- a/utils/kernel_utility.cc +++ b/utility/kernel_utility.cc diff --git a/utils/signature_digest_utility.c b/utility/signature_digest_utility.c index 6c8891b9..6c8891b9 100644 --- a/utils/signature_digest_utility.c +++ b/utility/signature_digest_utility.c diff --git a/utils/verify_data.c b/utility/verify_data.c index e6cc8529..c9da2401 100644 --- a/utils/verify_data.c +++ b/utility/verify_data.c @@ -21,7 +21,7 @@ /* ANSI Color coding sequences. */ #define COL_GREEN "\e[1;32m" -#define COL_RED "\e[0;31m]" +#define COL_RED "\e[0;31m" #define COL_STOP "\e[m" uint8_t* read_signature(char* input_file, int len) { diff --git a/vfirmware/Makefile b/vfirmware/Makefile new file mode 100644 index 00000000..a915c316 --- /dev/null +++ b/vfirmware/Makefile @@ -0,0 +1,19 @@ +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +CC ?= gcc +INCLUDES += -I./include \ + -I../cryptolib/include \ + -I../common/include \ + -I../misclibs/include +CFLAGS ?= -Wall -DNDEBUG -O3 -Werror +FIRMWARE_OUT = firmware_image_fw.o firmware_image.o + +all: $(FIRMWARE_OUT) + +.c.o: + $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ + +clean: + rm -f $(FIRMWARE_OUT) diff --git a/utils/firmware_image.c b/vfirmware/firmware_image.c index b633d1a7..b633d1a7 100644 --- a/utils/firmware_image.c +++ b/vfirmware/firmware_image.c diff --git a/utils/firmware_image_fw.c b/vfirmware/firmware_image_fw.c index 5387d95b..5387d95b 100644 --- a/utils/firmware_image_fw.c +++ b/vfirmware/firmware_image_fw.c diff --git a/include/firmware_image.h b/vfirmware/include/firmware_image.h index 19a87d9b..19a87d9b 100644 --- a/include/firmware_image.h +++ b/vfirmware/include/firmware_image.h diff --git a/include/firmware_image_fw.h b/vfirmware/include/firmware_image_fw.h index dc6db90d..dc6db90d 100644 --- a/include/firmware_image_fw.h +++ b/vfirmware/include/firmware_image_fw.h diff --git a/vkernel/Makefile b/vkernel/Makefile new file mode 100644 index 00000000..fa69fc9e --- /dev/null +++ b/vkernel/Makefile @@ -0,0 +1,19 @@ +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +CC ?= gcc +INCLUDES += -I./include \ + -I../cryptolib/include \ + -I../common/include \ + -I../misclibs/include +CFLAGS ?= -Wall -DNDEBUG -O3 -Werror +KERNEL_OUT = kernel_image_fw.o kernel_image.o + +all: $(KERNEL_OUT) + +.c.o: + $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@ + +clean: + rm -f $(KERNEL_OUT) diff --git a/include/kernel_image.h b/vkernel/include/kernel_image.h index 0ea8adb3..0ea8adb3 100644 --- a/include/kernel_image.h +++ b/vkernel/include/kernel_image.h diff --git a/include/kernel_image_fw.h b/vkernel/include/kernel_image_fw.h index 6446e8c1..6446e8c1 100644 --- a/include/kernel_image_fw.h +++ b/vkernel/include/kernel_image_fw.h diff --git a/utils/kernel_image.c b/vkernel/kernel_image.c index 8c8c0922..8c8c0922 100644 --- a/utils/kernel_image.c +++ b/vkernel/kernel_image.c diff --git a/utils/kernel_image_fw.c b/vkernel/kernel_image_fw.c index 734111c6..734111c6 100644 --- a/utils/kernel_image_fw.c +++ b/vkernel/kernel_image_fw.c |