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

Unified Diff: omaha_hash_calculator.cc

Issue 3132033: AU: Sign delta payloads (Closed) Base URL: ssh://git@chromiumos-git/update_engine.git
Patch Set: fixes for review Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « omaha_hash_calculator.h ('k') | payload_signer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: omaha_hash_calculator.cc
diff --git a/omaha_hash_calculator.cc b/omaha_hash_calculator.cc
index 7f62622515ecaf378622ad616044bca6b2972073..fee72a91bfd7fbc7b95ffc76715cad9ea41e4959 100644
--- a/omaha_hash_calculator.cc
+++ b/omaha_hash_calculator.cc
@@ -2,51 +2,81 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "update_engine/omaha_hash_calculator.h"
+
#include <openssl/bio.h>
#include <openssl/buffer.h>
#include <openssl/evp.h>
#include "base/logging.h"
-#include "update_engine/omaha_hash_calculator.h"
+#include "update_engine/utils.h"
+
+using std::string;
+using std::vector;
namespace chromeos_update_engine {
-OmahaHashCalculator::OmahaHashCalculator() {
- CHECK_EQ(SHA1_Init(&ctx_), 1);
+OmahaHashCalculator::OmahaHashCalculator() : valid_(false) {
+ valid_ = (SHA1_Init(&ctx_) == 1);
+ LOG_IF(ERROR, !valid_) << "SHA1_Init failed";
}
// Update is called with all of the data that should be hashed in order.
// Mostly just passes the data through to OpenSSL's SHA1_Update()
-void OmahaHashCalculator::Update(const char* data, size_t length) {
- CHECK(hash_.empty()) << "Can't Update after hash is finalized";
+bool OmahaHashCalculator::Update(const char* data, size_t length) {
+ TEST_AND_RETURN_FALSE(valid_);
+ TEST_AND_RETURN_FALSE(hash_.empty());
COMPILE_ASSERT(sizeof(size_t) <= sizeof(unsigned long),
length_param_may_be_truncated_in_SHA1_Update);
- CHECK_EQ(SHA1_Update(&ctx_, data, length), 1);
+ TEST_AND_RETURN_FALSE(SHA1_Update(&ctx_, data, length) == 1);
+ return true;
}
// Call Finalize() when all data has been passed in. This mostly just
// calls OpenSSL's SHA1_Final() and then base64 encodes the hash.
-void OmahaHashCalculator::Finalize() {
- CHECK(hash_.empty()) << "Don't call Finalize() twice";
+bool OmahaHashCalculator::Finalize() {
+ bool success = true;
+ TEST_AND_RETURN_FALSE(hash_.empty());
unsigned char md[SHA_DIGEST_LENGTH];
- CHECK_EQ(SHA1_Final(md, &ctx_), 1);
+ TEST_AND_RETURN_FALSE(SHA1_Final(md, &ctx_) == 1);
// Convert md to base64 encoding and store it in hash_
BIO *b64 = BIO_new(BIO_f_base64());
- CHECK(b64);
+ if (!b64)
+ LOG(INFO) << "BIO_new(BIO_f_base64()) failed";
BIO *bmem = BIO_new(BIO_s_mem());
- CHECK(bmem);
- b64 = BIO_push(b64, bmem);
- CHECK_EQ(BIO_write(b64, md, sizeof(md)), sizeof(md));
- CHECK_EQ(BIO_flush(b64), 1);
+ if (!bmem)
+ LOG(INFO) << "BIO_new(BIO_s_mem()) failed";
+ if (b64 && bmem) {
+ b64 = BIO_push(b64, bmem);
+ success = (BIO_write(b64, md, sizeof(md)) == sizeof(md));
+ if (success)
+ success = (BIO_flush(b64) == 1);
- BUF_MEM *bptr = NULL;
- BIO_get_mem_ptr(b64, &bptr);
- hash_.assign(bptr->data, bptr->length - 1);
+ BUF_MEM *bptr = NULL;
+ BIO_get_mem_ptr(b64, &bptr);
+ hash_.assign(bptr->data, bptr->length - 1);
+ }
+ if (b64) {
+ BIO_free_all(b64);
+ b64 = NULL;
+ }
+ return success;
+}
- BIO_free_all(b64);
+bool OmahaHashCalculator::RawHashOfData(const vector<char>& data,
+ vector<char>* out_hash) {
+ OmahaHashCalculator calc;
+ calc.Update(&data[0], data.size());
+
+ out_hash->resize(out_hash->size() + SHA_DIGEST_LENGTH);
+ TEST_AND_RETURN_FALSE(
+ SHA1_Final(reinterpret_cast<unsigned char*>(&(*(out_hash->end() -
+ SHA_DIGEST_LENGTH))),
+ &calc.ctx_) == 1);
+ return true;
}
-std::string OmahaHashCalculator::OmahaHashOfBytes(
+string OmahaHashCalculator::OmahaHashOfBytes(
const void* data, size_t length) {
OmahaHashCalculator calc;
calc.Update(reinterpret_cast<const char*>(data), length);
@@ -54,13 +84,11 @@ std::string OmahaHashCalculator::OmahaHashOfBytes(
return calc.hash();
}
-std::string OmahaHashCalculator::OmahaHashOfString(
- const std::string& str) {
+string OmahaHashCalculator::OmahaHashOfString(const string& str) {
return OmahaHashOfBytes(str.data(), str.size());
}
-std::string OmahaHashCalculator::OmahaHashOfData(
- const std::vector<char>& data) {
+string OmahaHashCalculator::OmahaHashOfData(const vector<char>& data) {
return OmahaHashOfBytes(&data[0], data.size());
}
« no previous file with comments | « omaha_hash_calculator.h ('k') | payload_signer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698