1*4f2df630SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors 2*4f2df630SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*4f2df630SAndroid Build Coastguard Worker // found in the LICENSE file. 4*4f2df630SAndroid Build Coastguard Worker 5*4f2df630SAndroid Build Coastguard Worker #ifndef CRYPTO_SECURE_HASH_H_ 6*4f2df630SAndroid Build Coastguard Worker #define CRYPTO_SECURE_HASH_H_ 7*4f2df630SAndroid Build Coastguard Worker 8*4f2df630SAndroid Build Coastguard Worker #include <stddef.h> 9*4f2df630SAndroid Build Coastguard Worker 10*4f2df630SAndroid Build Coastguard Worker namespace crypto { 11*4f2df630SAndroid Build Coastguard Worker 12*4f2df630SAndroid Build Coastguard Worker // A wrapper to calculate secure hashes incrementally, allowing to 13*4f2df630SAndroid Build Coastguard Worker // be used when the full input is not known in advance. 14*4f2df630SAndroid Build Coastguard Worker class SecureHash { 15*4f2df630SAndroid Build Coastguard Worker public: 16*4f2df630SAndroid Build Coastguard Worker enum Algorithm { 17*4f2df630SAndroid Build Coastguard Worker SHA256, 18*4f2df630SAndroid Build Coastguard Worker }; 19*4f2df630SAndroid Build Coastguard Worker 20*4f2df630SAndroid Build Coastguard Worker SecureHash(const SecureHash&) = delete; 21*4f2df630SAndroid Build Coastguard Worker SecureHash& operator=(const SecureHash&) = delete; 22*4f2df630SAndroid Build Coastguard Worker ~SecureHash()23*4f2df630SAndroid Build Coastguard Worker virtual ~SecureHash() {} 24*4f2df630SAndroid Build Coastguard Worker 25*4f2df630SAndroid Build Coastguard Worker static SecureHash* Create(Algorithm type); 26*4f2df630SAndroid Build Coastguard Worker 27*4f2df630SAndroid Build Coastguard Worker virtual void Update(const void* input, size_t len) = 0; 28*4f2df630SAndroid Build Coastguard Worker virtual void Finish(void* output, size_t len) = 0; 29*4f2df630SAndroid Build Coastguard Worker virtual size_t GetHashLength() const = 0; 30*4f2df630SAndroid Build Coastguard Worker 31*4f2df630SAndroid Build Coastguard Worker // Create a clone of this SecureHash. The returned clone and this both 32*4f2df630SAndroid Build Coastguard Worker // represent the same hash state. But from this point on, calling 33*4f2df630SAndroid Build Coastguard Worker // Update()/Finish() on either doesn't affect the state of the other. 34*4f2df630SAndroid Build Coastguard Worker virtual SecureHash* Clone() const = 0; 35*4f2df630SAndroid Build Coastguard Worker 36*4f2df630SAndroid Build Coastguard Worker protected: SecureHash()37*4f2df630SAndroid Build Coastguard Worker SecureHash() {} 38*4f2df630SAndroid Build Coastguard Worker }; 39*4f2df630SAndroid Build Coastguard Worker 40*4f2df630SAndroid Build Coastguard Worker } // namespace crypto 41*4f2df630SAndroid Build Coastguard Worker 42*4f2df630SAndroid Build Coastguard Worker #endif // CRYPTO_SECURE_HASH_H_ 43