| Index: crypto/secure_hash_openssl.cc
|
| diff --git a/crypto/secure_hash_openssl.cc b/crypto/secure_hash_openssl.cc
|
| index ec859ff1085c2e282863827fea1ee25a13f174df..868300f0f78e11e106b7af54c869b91e62bf86cd 100644
|
| --- a/crypto/secure_hash_openssl.cc
|
| +++ b/crypto/secure_hash_openssl.cc
|
| @@ -16,16 +16,16 @@ namespace crypto {
|
|
|
| namespace {
|
|
|
| -const char kSHA256Descriptor[] = "OpenSSL";
|
| -
|
| class SecureHashSHA256OpenSSL : public SecureHash {
|
| public:
|
| - static const int kSecureHashVersion = 1;
|
| -
|
| SecureHashSHA256OpenSSL() {
|
| SHA256_Init(&ctx_);
|
| }
|
|
|
| + SecureHashSHA256OpenSSL(const SecureHashSHA256OpenSSL& other) {
|
| + memcpy(&ctx_, &other.ctx_, sizeof(ctx_));
|
| + }
|
| +
|
| ~SecureHashSHA256OpenSSL() override {
|
| OPENSSL_cleanse(&ctx_, sizeof(ctx_));
|
| }
|
| @@ -40,53 +40,16 @@ class SecureHashSHA256OpenSSL : public SecureHash {
|
| SHA256_Final(result.safe_buffer(), &ctx_);
|
| }
|
|
|
| - bool Serialize(base::Pickle* pickle) override;
|
| - bool Deserialize(base::PickleIterator* data_iterator) override;
|
| + SecureHash* Clone() const override {
|
| + return new SecureHashSHA256OpenSSL(*this);
|
| + }
|
| +
|
| + size_t GetHashLength() const override { return SHA256_DIGEST_LENGTH; }
|
|
|
| private:
|
| SHA256_CTX ctx_;
|
| };
|
|
|
| -bool SecureHashSHA256OpenSSL::Serialize(base::Pickle* pickle) {
|
| - if (!pickle)
|
| - return false;
|
| -
|
| - if (!pickle->WriteInt(kSecureHashVersion) ||
|
| - !pickle->WriteString(kSHA256Descriptor) ||
|
| - !pickle->WriteBytes(&ctx_, sizeof(ctx_))) {
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool SecureHashSHA256OpenSSL::Deserialize(base::PickleIterator* data_iterator) {
|
| - if (!data_iterator)
|
| - return false;
|
| -
|
| - int version;
|
| - if (!data_iterator->ReadInt(&version))
|
| - return false;
|
| -
|
| - if (version > kSecureHashVersion)
|
| - return false; // We don't know how to deal with this.
|
| -
|
| - std::string type;
|
| - if (!data_iterator->ReadString(&type))
|
| - return false;
|
| -
|
| - if (type != kSHA256Descriptor)
|
| - return false; // It's the wrong kind.
|
| -
|
| - const char* data = NULL;
|
| - if (!data_iterator->ReadBytes(&data, sizeof(ctx_)))
|
| - return false;
|
| -
|
| - memcpy(&ctx_, data, sizeof(ctx_));
|
| -
|
| - return true;
|
| -}
|
| -
|
| } // namespace
|
|
|
| SecureHash* SecureHash::Create(Algorithm algorithm) {
|
|
|