xref: /aosp_15_r20/external/gsc-utils/tpm_generated/secure_hash.h (revision 4f2df630800bdcf1d4f0decf95d8a1cb87344f5f)
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