1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CRYPTO_SECURE_HASH_H_ 6 #define CRYPTO_SECURE_HASH_H_ 7 8 #include "base/basictypes.h" 9 #include "crypto/crypto_export.h" 10 11 class Pickle; 12 class PickleIterator; 13 14 namespace crypto { 15 16 // A wrapper to calculate secure hashes incrementally, allowing to 17 // be used when the full input is not known in advance. 18 class CRYPTO_EXPORT SecureHash { 19 public: 20 enum Algorithm { 21 SHA256, 22 }; 23 virtual ~SecureHash() {} 24 25 static SecureHash* Create(Algorithm type); 26 27 virtual void Update(const void* input, size_t len) = 0; 28 virtual void Finish(void* output, size_t len) = 0; 29 30 // Serialize the context, so it can be restored at a later time. 31 // |pickle| will contain the serialized data. 32 // Returns whether or not |pickle| was filled. 33 virtual bool Serialize(Pickle* pickle) = 0; 34 35 // Restore the context that was saved earlier. 36 // |data_iterator| allows this to be used as part of a larger pickle. 37 // |pickle| holds the saved data. 38 // Returns success or failure. 39 virtual bool Deserialize(PickleIterator* data_iterator) = 0; 40 41 protected: 42 SecureHash() {} 43 44 private: 45 DISALLOW_COPY_AND_ASSIGN(SecureHash); 46 }; 47 48 } // namespace crypto 49 50 #endif // CRYPTO_SECURE_HASH_H_ 51