Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(172)

Issue 553023: RSA signature verification and SHA-1/256/512 reference implementation for verified boot. (Closed)

Created:
10 years, 11 months ago by gauravsh
Modified:
9 years, 6 months ago
Reviewers:
mschilder
CC:
chromium-os-reviews_googlegroups.com
Visibility:
Public.

Description

RSA signature verification and SHA-1/256/512 reference implementation for verified boot. Also contains some preliminary tests for these primitives.

Patch Set 1 #

Total comments: 16

Patch Set 2 : Indentation Fixed. Added check in RSA_Verify for [sig_type]. #

Total comments: 2

Patch Set 3 : Add signature length parameter to RSA_Verify. #

Patch Set 4 : Use a RSA public exponent of 65537. #

Patch Set 5 : indent fixes. #

Patch Set 6 : Refactoring. Switched SHA-2 implementation. #

Total comments: 11

Patch Set 7 : Added padding.h #

Patch Set 8 : Indent and comment fixes. #

Total comments: 37

Patch Set 9 : Comment and consistency fixup. #

Patch Set 10 : Abstracted away memory-related functions from crypto implementation. #

Patch Set 11 : Separate padding declaration and definition. Avoid duplicate linking. #

Patch Set 12 : Fix comment format. #

Patch Set 13 : Misc indent fixes. #

Total comments: 38

Patch Set 14 : Fixes. #

Total comments: 6
Unified diffs Side-by-side diffs Delta from patch set Stats (+2479 lines, -0 lines) Patch
A src/platform/vboot_reference/Makefile View 1 2 3 4 5 6 7 8 9 1 chunk +21 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/common/Makefile View 1 chunk +17 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/common/utility_stub.c View 10 11 12 13 1 chunk +44 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/crypto/Makefile View 6 7 8 9 10 1 chunk +20 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/crypto/genpadding.sh View 6 7 8 9 10 11 12 13 1 chunk +169 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/crypto/padding.c View 1 chunk +172 lines, -0 lines 2 comments Download
A src/platform/vboot_reference/crypto/rsa.c View 6 7 8 9 10 11 12 13 1 chunk +190 lines, -0 lines 4 comments Download
A src/platform/vboot_reference/crypto/sha1.c View 6 7 8 1 chunk +289 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/crypto/sha2.c View 6 7 8 9 10 1 chunk +623 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/include/padding.h View 7 8 9 10 1 chunk +27 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/include/rsa.h View 6 7 8 1 chunk +37 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/include/sha.h View 6 7 8 9 10 11 12 13 1 chunk +73 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/include/utility.h View 10 11 12 13 1 chunk +32 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/tests/Makefile View 6 7 8 9 1 chunk +18 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/tests/run_tests.sh View 1 2 3 4 5 6 7 8 1 chunk +83 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/tests/sha_test_vectors.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 1 chunk +93 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/tests/sha_tests.c View 1 2 3 4 5 6 7 8 9 10 11 12 13 1 chunk +99 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/tests/verify_data.h View 1 2 3 4 5 6 7 8 1 chunk +41 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/tests/verify_data.c View 1 2 3 4 5 6 7 8 9 10 11 12 13 1 chunk +243 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/utils/Makefile View 6 7 8 1 chunk +13 lines, -0 lines 0 comments Download
A src/platform/vboot_reference/utils/dumpRSAPublicKey.c View 6 7 8 9 10 11 12 13 1 chunk +175 lines, -0 lines 0 comments Download

Messages

Total messages: 20 (0 generated)
gauravsh
Think this is in a state for a first look.
10 years, 11 months ago (2010-01-20 01:11:34 UTC) #1
gauravsh
10 years, 11 months ago (2010-01-20 01:52:22 UTC) #2
mschilder
http://codereview.chromium.org/553023/diff/1/3 File src/platform/vboot_reference/dumpRSAPublicKey.c (right): http://codereview.chromium.org/553023/diff/1/3#newcode74 src/platform/vboot_reference/dumpRSAPublicKey.c:74: write(1, &nwords, sizeof(nwords)); So this writes in native endianess ...
10 years, 11 months ago (2010-01-20 03:17:56 UTC) #3
gauravsh
http://codereview.chromium.org/553023/diff/1/3 File src/platform/vboot_reference/dumpRSAPublicKey.c (right): http://codereview.chromium.org/553023/diff/1/3#newcode74 src/platform/vboot_reference/dumpRSAPublicKey.c:74: write(1, &nwords, sizeof(nwords)); On 2010/01/20 03:17:56, mschilder wrote: > ...
10 years, 11 months ago (2010-01-20 21:54:18 UTC) #4
mschilder
http://codereview.chromium.org/553023/diff/1/3 File src/platform/vboot_reference/dumpRSAPublicKey.c (right): http://codereview.chromium.org/553023/diff/1/3#newcode74 src/platform/vboot_reference/dumpRSAPublicKey.c:74: write(1, &nwords, sizeof(nwords)); On 2010/01/20 21:54:18, gauravsh wrote: > ...
10 years, 11 months ago (2010-01-20 22:27:44 UTC) #5
gauravsh
http://codereview.chromium.org/553023/diff/1/3 File src/platform/vboot_reference/dumpRSAPublicKey.c (right): http://codereview.chromium.org/553023/diff/1/3#newcode74 src/platform/vboot_reference/dumpRSAPublicKey.c:74: write(1, &nwords, sizeof(nwords)); On 2010/01/20 22:27:45, mschilder wrote: > ...
10 years, 11 months ago (2010-01-20 23:24:13 UTC) #6
gauravsh
Changed to use an RSA public exponent of 65537.
10 years, 11 months ago (2010-01-21 22:04:52 UTC) #7
gauravsh
I refactored some of the code and switched to a different SHA-2 implementation. Bring it ...
10 years, 11 months ago (2010-01-26 02:25:46 UTC) #8
Chris Masone
On 2010/01/26 02:25:46, gauravsh wrote: > I refactored some of the code and switched to ...
10 years, 11 months ago (2010-01-26 18:54:29 UTC) #9
Chris Masone
http://codereview.chromium.org/553023/diff/8001/8008 File src/platform/vboot_reference/include/rsa.h (right): http://codereview.chromium.org/553023/diff/8001/8008#newcode33 src/platform/vboot_reference/include/rsa.h:33: const uint8_t sig_type, what values can I pass in ...
10 years, 11 months ago (2010-01-26 18:54:46 UTC) #10
gauravsh
http://codereview.chromium.org/553023/diff/8001/8008 File src/platform/vboot_reference/include/rsa.h (right): http://codereview.chromium.org/553023/diff/8001/8008#newcode33 src/platform/vboot_reference/include/rsa.h:33: const uint8_t sig_type, On 2010/01/26 18:54:47, cmasone wrote: > ...
10 years, 11 months ago (2010-01-26 20:36:52 UTC) #11
Chris Masone
On 2010/01/26 20:36:52, gauravsh wrote: > http://codereview.chromium.org/553023/diff/8001/8008 > File src/platform/vboot_reference/include/rsa.h (right): > > http://codereview.chromium.org/553023/diff/8001/8008#newcode33 > ...
10 years, 11 months ago (2010-01-26 20:59:53 UTC) #12
Will Drewry
Thanks for all the clean up and restructuring. This looks good, but still has some ...
10 years, 11 months ago (2010-01-26 21:45:44 UTC) #13
gauravsh
Addressed the style issues and responded to some of your comments. I will upload another ...
10 years, 11 months ago (2010-01-26 23:31:06 UTC) #14
gauravsh
http://codereview.chromium.org/553023/diff/8019/8023 File src/platform/vboot_reference/crypto/rsa.c (right): http://codereview.chromium.org/553023/diff/8019/8023#newcode173 src/platform/vboot_reference/crypto/rsa.c:173: if (buf[i] != *hash++) { On 2010/01/26 23:31:07, gauravsh ...
10 years, 11 months ago (2010-01-27 00:11:26 UTC) #15
gauravsh
Abstracted away the memory related functions from the crypto code to a utility.h interface. I ...
10 years, 11 months ago (2010-01-27 01:21:32 UTC) #16
Will Drewry
LGTM with some random nits on style and some checking in test/check code. Fix/TODO() what ...
10 years, 11 months ago (2010-01-28 21:32:39 UTC) #17
gauravsh
LGTMed in the previous pass but just in case... http://codereview.chromium.org/553023/diff/8061/10035 File src/platform/vboot_reference/common/utility_stub.c (right): http://codereview.chromium.org/553023/diff/8061/10035#newcode5 src/platform/vboot_reference/common/utility_stub.c:5: ...
10 years, 11 months ago (2010-01-28 22:38:08 UTC) #18
mschilder
http://codereview.chromium.org/553023/diff/8061/10053 File src/platform/vboot_reference/utils/dumpRSAPublicKey.c (right): http://codereview.chromium.org/553023/diff/8061/10053#newcode34 src/platform/vboot_reference/utils/dumpRSAPublicKey.c:34: fprintf(stderr, "ERROR: Unknown modulus length = %d.\n", modulus); s/Unknown/Unsupported/? ...
10 years, 10 months ago (2010-02-01 19:40:38 UTC) #19
gauravsh
10 years, 10 months ago (2010-02-08 20:28:17 UTC) #20
Sorry I didn't realize you had more comments. I have responded below to your
last batch of comments. If you'd like to continue further with the review of the
RSA verification code, I can create a new issue.

Thanks!

http://codereview.chromium.org/553023/diff/8061/10053
File src/platform/vboot_reference/utils/dumpRSAPublicKey.c (right):

http://codereview.chromium.org/553023/diff/8061/10053#newcode34
src/platform/vboot_reference/utils/dumpRSAPublicKey.c:34: fprintf(stderr,
"ERROR: Unknown modulus length = %d.\n", modulus);
On 2010/02/01 19:40:39, mschilder wrote:
> s/Unknown/Unsupported/?
Done.

http://codereview.chromium.org/553023/diff/11002/12031
File src/platform/vboot_reference/crypto/padding.c (right):

http://codereview.chromium.org/553023/diff/11002/12031#newcode92
src/platform/vboot_reference/crypto/padding.c:92:
0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x30,0x51,0x30,0x0d,0x06,0x09,0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x03,0x05,0x00,0x04,0x40
On 2010/02/01 19:40:39, mschilder wrote:
> These are taking up a lot of space at some point. You could replace the
literal
> bytes with their hash. Using the same hash as the signature algo. Perhaps even
> get as clever as:
> compute modpowF4; xor hash of data into least significant bytes (should become
> all 0 if hash is as expected); hash entire resulting sig buf; compare against
> expected const precomputed hash.

Yes, I am hoping to reduce the space requirement, probably by RLE encoding the
0xffs.

I like your suggestions for the other optimizations too, but I'd like to keep
the current implementation simple until we have some hard performance numbers
for this.

http://codereview.chromium.org/553023/diff/11002/12032
File src/platform/vboot_reference/crypto/rsa.c (right):

http://codereview.chromium.org/553023/diff/11002/12032#newcode107
src/platform/vboot_reference/crypto/rsa.c:107: 
On 2010/02/01 19:40:39, mschilder wrote:
> extra line?
Fixed.

http://codereview.chromium.org/553023/diff/11002/12032#newcode122
src/platform/vboot_reference/crypto/rsa.c:122: Free(a);
On 2010/02/01 19:40:39, mschilder wrote:
> depending on how minimalist/crappy your allocator is, you might get better
> efficiency by releasing in reverse order of allocating. So Free(aaR);
Free(aR);
> Free(a).

Done.

Powered by Google App Engine
This is Rietveld 408576698