xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/Common/OutStreamWithSha1.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // OutStreamWithSha1.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_OUT_STREAM_WITH_SHA1_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_OUT_STREAM_WITH_SHA1_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../../C/Sha1.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyBuffer2.h"
9*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyCom.h"
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker #include "../../IStream.h"
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_NOQIB_1(
14*f6dc9357SAndroid Build Coastguard Worker   COutStreamWithSha1
15*f6dc9357SAndroid Build Coastguard Worker   , ISequentialOutStream
16*f6dc9357SAndroid Build Coastguard Worker )
17*f6dc9357SAndroid Build Coastguard Worker   bool _calculate;
18*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<ISequentialOutStream> _stream;
19*f6dc9357SAndroid Build Coastguard Worker   CAlignedBuffer1 _sha;
20*f6dc9357SAndroid Build Coastguard Worker   UInt64 _size;
21*f6dc9357SAndroid Build Coastguard Worker 
Sha()22*f6dc9357SAndroid Build Coastguard Worker   CSha1 *Sha() { return (CSha1 *)(void *)(Byte *)_sha; }
23*f6dc9357SAndroid Build Coastguard Worker public:
COutStreamWithSha1()24*f6dc9357SAndroid Build Coastguard Worker   COutStreamWithSha1(): _sha(sizeof(CSha1)) {}
SetStream(ISequentialOutStream * stream)25*f6dc9357SAndroid Build Coastguard Worker   void SetStream(ISequentialOutStream *stream) { _stream = stream; }
ReleaseStream()26*f6dc9357SAndroid Build Coastguard Worker   void ReleaseStream() { _stream.Release(); }
27*f6dc9357SAndroid Build Coastguard Worker   void Init(bool calculate = true)
28*f6dc9357SAndroid Build Coastguard Worker   {
29*f6dc9357SAndroid Build Coastguard Worker     _calculate = calculate;
30*f6dc9357SAndroid Build Coastguard Worker     _size = 0;
31*f6dc9357SAndroid Build Coastguard Worker     Sha1_Init(Sha());
32*f6dc9357SAndroid Build Coastguard Worker   }
InitSha1()33*f6dc9357SAndroid Build Coastguard Worker   void InitSha1() { Sha1_Init(Sha()); }
GetSize()34*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetSize() const { return _size; }
Final(Byte * digest)35*f6dc9357SAndroid Build Coastguard Worker   void Final(Byte *digest) { Sha1_Final(Sha(), digest); }
36*f6dc9357SAndroid Build Coastguard Worker };
37*f6dc9357SAndroid Build Coastguard Worker 
38*f6dc9357SAndroid Build Coastguard Worker 
39*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_NOQIB_1(
40*f6dc9357SAndroid Build Coastguard Worker   CInStreamWithSha1
41*f6dc9357SAndroid Build Coastguard Worker   , ISequentialInStream
42*f6dc9357SAndroid Build Coastguard Worker )
43*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<ISequentialInStream> _stream;
44*f6dc9357SAndroid Build Coastguard Worker   CAlignedBuffer1 _sha;
45*f6dc9357SAndroid Build Coastguard Worker   UInt64 _size;
46*f6dc9357SAndroid Build Coastguard Worker 
47*f6dc9357SAndroid Build Coastguard Worker   CSha1 *Sha() { return (CSha1 *)(void *)(Byte *)_sha; }
48*f6dc9357SAndroid Build Coastguard Worker public:
49*f6dc9357SAndroid Build Coastguard Worker   CInStreamWithSha1(): _sha(sizeof(CSha1)) {}
50*f6dc9357SAndroid Build Coastguard Worker   void SetStream(ISequentialInStream *stream) { _stream = stream;  }
51*f6dc9357SAndroid Build Coastguard Worker   void Init()
52*f6dc9357SAndroid Build Coastguard Worker   {
53*f6dc9357SAndroid Build Coastguard Worker     _size = 0;
54*f6dc9357SAndroid Build Coastguard Worker     Sha1_Init(Sha());
55*f6dc9357SAndroid Build Coastguard Worker   }
56*f6dc9357SAndroid Build Coastguard Worker   void ReleaseStream() { _stream.Release(); }
57*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetSize() const { return _size; }
58*f6dc9357SAndroid Build Coastguard Worker   void Final(Byte *digest) { Sha1_Final(Sha(), digest); }
59*f6dc9357SAndroid Build Coastguard Worker };
60*f6dc9357SAndroid Build Coastguard Worker 
61*f6dc9357SAndroid Build Coastguard Worker #endif
62