1 // ICoder.h
2 
3 #ifndef __ICODER_H
4 #define __ICODER_H
5 
6 #include "IStream.h"
7 
8 #define CODER_INTERFACE(i, x) DECL_INTERFACE(i, 4, x)
9 
10 CODER_INTERFACE(ICompressProgressInfo, 0x04)
11 {
12   STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize) PURE;
13 };
14 
15 CODER_INTERFACE(ICompressCoder, 0x05)
16 {
17   STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
18       const UInt64 *inSize, const UInt64 *outSize,
19       ICompressProgressInfo *progress) PURE;
20 };
21 
22 CODER_INTERFACE(ICompressCoder2, 0x18)
23 {
24   STDMETHOD(Code)(ISequentialInStream **inStreams, const UInt64 **inSizes, UInt32 numInStreams,
25       ISequentialOutStream **outStreams, const UInt64 **outSizes, UInt32 numOutStreams,
26       ICompressProgressInfo *progress) PURE;
27 };
28 
29 namespace NCoderPropID
30 {
31   enum EEnum
32   {
33     kDefaultProp = 0,
34     kDictionarySize,
35     kUsedMemorySize,
36     kOrder,
37     kBlockSize,
38     kPosStateBits,
39     kLitContextBits,
40     kLitPosBits,
41     kNumFastBytes,
42     kMatchFinder,
43     kMatchFinderCycles,
44     kNumPasses,
45     kAlgorithm,
46     kNumThreads,
47     kEndMarker,
48     kLevel,
49     kReduceSize // estimated size of data that will be compressed. Encoder can use this value to reduce dictionary size.
50   };
51 }
52 
53 CODER_INTERFACE(ICompressSetCoderProperties, 0x20)
54 {
55   STDMETHOD(SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps) PURE;
56 };
57 
58 /*
59 CODER_INTERFACE(ICompressSetCoderProperties, 0x21)
60 {
61   STDMETHOD(SetDecoderProperties)(ISequentialInStream *inStream) PURE;
62 };
63 */
64 
65 CODER_INTERFACE(ICompressSetDecoderProperties2, 0x22)
66 {
67   STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size) PURE;
68 };
69 
70 CODER_INTERFACE(ICompressWriteCoderProperties, 0x23)
71 {
72   STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream) PURE;
73 };
74 
75 CODER_INTERFACE(ICompressGetInStreamProcessedSize, 0x24)
76 {
77   STDMETHOD(GetInStreamProcessedSize)(UInt64 *value) PURE;
78 };
79 
80 CODER_INTERFACE(ICompressSetCoderMt, 0x25)
81 {
82   STDMETHOD(SetNumberOfThreads)(UInt32 numThreads) PURE;
83 };
84 
85 CODER_INTERFACE(ICompressGetSubStreamSize, 0x30)
86 {
87   STDMETHOD(GetSubStreamSize)(UInt64 subStream, UInt64 *value) PURE;
88 };
89 
90 CODER_INTERFACE(ICompressSetInStream, 0x31)
91 {
92   STDMETHOD(SetInStream)(ISequentialInStream *inStream) PURE;
93   STDMETHOD(ReleaseInStream)() PURE;
94 };
95 
96 CODER_INTERFACE(ICompressSetOutStream, 0x32)
97 {
98   STDMETHOD(SetOutStream)(ISequentialOutStream *outStream) PURE;
99   STDMETHOD(ReleaseOutStream)() PURE;
100 };
101 
102 CODER_INTERFACE(ICompressSetInStreamSize, 0x33)
103 {
104   STDMETHOD(SetInStreamSize)(const UInt64 *inSize) PURE;
105 };
106 
107 CODER_INTERFACE(ICompressSetOutStreamSize, 0x34)
108 {
109   STDMETHOD(SetOutStreamSize)(const UInt64 *outSize) PURE;
110 };
111 
112 CODER_INTERFACE(ICompressSetBufSize, 0x35)
113 {
114   STDMETHOD(SetInBufSize)(UInt32 streamIndex, UInt32 size) PURE;
115   STDMETHOD(SetOutBufSize)(UInt32 streamIndex, UInt32 size) PURE;
116 };
117 
118 CODER_INTERFACE(ICompressFilter, 0x40)
119 {
120   STDMETHOD(Init)() PURE;
121   STDMETHOD_(UInt32, Filter)(Byte *data, UInt32 size) PURE;
122   // Filter converts as most as possible bytes
123   // Filter return outSize (UInt32)
124   // if (outSize <= size): Filter have converted outSize bytes
125   // if (outSize > size): Filter have not converted anything.
126   //      and it needs at least outSize bytes to convert one block
127   //      (it's for crypto block algorithms).
128 };
129 
130 CODER_INTERFACE(ICompressCodecsInfo, 0x60)
131 {
132   STDMETHOD(GetNumberOfMethods)(UInt32 *numMethods) PURE;
133   STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE;
134   STDMETHOD(CreateDecoder)(UInt32 index, const GUID *iid, void **coder) PURE;
135   STDMETHOD(CreateEncoder)(UInt32 index, const GUID *iid, void **coder) PURE;
136 };
137 CODER_INTERFACE(ISetCompressCodecsInfo, 0x61)
138 {
139   STDMETHOD(SetCompressCodecsInfo)(ICompressCodecsInfo *compressCodecsInfo) PURE;
140 };
141 
142 CODER_INTERFACE(ICryptoProperties, 0x80)
143 {
144   STDMETHOD(SetKey)(const Byte *data, UInt32 size) PURE;
145   STDMETHOD(SetInitVector)(const Byte *data, UInt32 size) PURE;
146 };
147 
148 /*
149 CODER_INTERFACE(ICryptoResetSalt, 0x88)
150 {
151   STDMETHOD(ResetSalt)() PURE;
152 };
153 */
154 
155 CODER_INTERFACE(ICryptoResetInitVector, 0x8C)
156 {
157   STDMETHOD(ResetInitVector)() PURE;
158 };
159 
160 CODER_INTERFACE(ICryptoSetPassword, 0x90)
161 {
162   STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size) PURE;
163 };
164 
165 CODER_INTERFACE(ICryptoSetCRC, 0xA0)
166 {
167   STDMETHOD(CryptoSetCRC)(UInt32 crc) PURE;
168 };
169 
170 //////////////////////
171 // It's for DLL file
172 namespace NMethodPropID
173 {
174   enum EEnum
175   {
176     kID,
177     kName,
178     kDecoder,
179     kEncoder,
180     kInStreams,
181     kOutStreams,
182     kDescription,
183     kDecoderIsAssigned,
184     kEncoderIsAssigned,
185     kDigestSize
186   };
187 }
188 
189 CODER_INTERFACE(IHasher, 0xC0)
190 {
191   STDMETHOD_(void, Init)() PURE;
192   STDMETHOD_(void, Update)(const void *data, UInt32 size) PURE;
193   STDMETHOD_(void, Final)(Byte *digest) PURE;
194   STDMETHOD_(UInt32, GetDigestSize)() PURE;
195 };
196 
197 CODER_INTERFACE(IHashers, 0xC1)
198 {
199   STDMETHOD_(UInt32, GetNumHashers)() PURE;
200   STDMETHOD(GetHasherProp)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE;
201   STDMETHOD(CreateHasher)(UInt32 index, IHasher **hasher) PURE;
202 };
203 
204 extern "C"
205 {
206   typedef HRESULT (WINAPI *Func_GetNumberOfMethods)(UInt32 *numMethods);
207   typedef HRESULT (WINAPI *Func_GetMethodProperty)(UInt32 index, PROPID propID, PROPVARIANT *value);
208   typedef HRESULT (WINAPI *Func_GetHashers)(IHashers **hashers);
209 }
210 
211 #endif
212