From e179276f7dd94e9ef738f00c6953d251c76f22f7 Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Tue, 19 Apr 2016 22:31:01 -0700 Subject: recovery: Dump the signature in the zip package. We have been occasionally seeing "signature verification failed" error message when applying an update. Make more verbose output to help debugging. Bug: 28246534 Change-Id: Id83633adc9b86b3fd36abbb504e430f0816f12e4 --- print_sha1.h | 6 +++++- verifier.cpp | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/print_sha1.h b/print_sha1.h index fa3d7e009..c7c1f3651 100644 --- a/print_sha1.h +++ b/print_sha1.h @@ -22,7 +22,7 @@ #include "openssl/sha.h" -static std::string print_sha1(const uint8_t sha1[SHA_DIGEST_LENGTH], size_t len) { +static std::string print_sha1(const uint8_t* sha1, size_t len) { const char* hex = "0123456789abcdef"; std::string result = ""; for (size_t i = 0; i < len; ++i) { @@ -40,4 +40,8 @@ static std::string short_sha1(const uint8_t sha1[SHA_DIGEST_LENGTH]) { return print_sha1(sha1, 4); } +static std::string print_hex(const uint8_t* bytes, size_t len) { + return print_sha1(bytes, len); +} + #endif // RECOVERY_PRINT_SHA1_H diff --git a/verifier.cpp b/verifier.cpp index f5299b4a2..16cc7cf03 100644 --- a/verifier.cpp +++ b/verifier.cpp @@ -27,6 +27,7 @@ #include "asn1_decoder.h" #include "common.h" +#include "print_sha1.h" #include "ui.h" #include "verifier.h" @@ -230,9 +231,14 @@ int verify_file(unsigned char* addr, size_t length, uint8_t* sig_der = nullptr; size_t sig_der_length = 0; + uint8_t* signature = eocd + eocd_size - signature_start; size_t signature_size = signature_start - FOOTER_SIZE; - if (!read_pkcs7(eocd + eocd_size - signature_start, signature_size, &sig_der, - &sig_der_length)) { + + LOGI("signature (offset: 0x%zx, length: %zu): %s\n", + length - signature_start, signature_size, + print_hex(signature, signature_size).c_str()); + + if (!read_pkcs7(signature, signature_size, &sig_der, &sig_der_length)) { LOGE("Could not find signature DER block\n"); return VERIFY_FAILURE; } @@ -287,6 +293,13 @@ int verify_file(unsigned char* addr, size_t length, } i++; } + + if (need_sha1) { + LOGI("SHA-1 digest: %s\n", print_hex(sha1, SHA_DIGEST_LENGTH).c_str()); + } + if (need_sha256) { + LOGI("SHA-256 digest: %s\n", print_hex(sha256, SHA256_DIGEST_LENGTH).c_str()); + } free(sig_der); LOGE("failed to verify whole-file signature\n"); return VERIFY_FAILURE; -- cgit v1.2.3