6 #ifndef CRYPTOPP_FILTERS_H 7 #define CRYPTOPP_FILTERS_H 11 #if CRYPTOPP_MSC_VERSION 12 # pragma warning(push) 13 # pragma warning(disable: 4127 4189 4231 4275 4514) 75 bool Flush(
bool hardFlush,
int propagation=-1,
bool blocking=
true);
76 bool MessageSeriesEnd(
int propagation=-1,
bool blocking=
true);
80 void Insert(
Filter *nextFilter);
82 virtual bool ShouldPropagateMessageEnd()
const {
return true;}
83 virtual bool ShouldPropagateMessageSeriesEnd()
const {
return true;}
85 void PropagateInitialize(
const NameValuePairs ¶meters,
int propagation);
95 size_t Output(
int outputSite,
const byte *inString,
size_t length,
int messageEnd,
bool blocking,
const std::string &channel=
DEFAULT_CHANNEL);
105 size_t OutputModifiable(
int outputSite, byte *inString,
size_t length,
int messageEnd,
bool blocking,
const std::string &channel=
DEFAULT_CHANNEL);
115 bool OutputMessageEnd(
int outputSite,
int propagation,
bool blocking,
const std::string &channel=
DEFAULT_CHANNEL);
134 bool OutputFlush(
int outputSite,
bool hardFlush,
int propagation,
bool blocking,
const std::string &channel=
DEFAULT_CHANNEL);
147 bool OutputMessageSeriesEnd(
int outputSite,
int propagation,
bool blocking,
const std::string &channel=
DEFAULT_CHANNEL);
153 size_t m_inputPosition;
178 if (m_tempSpace.size() < minSize)
181 if (desiredSize >= minSize)
183 bufferSize = desiredSize;
186 m_tempSpace.New(bufferSize);
189 bufferSize = m_tempSpace.size();
190 return m_tempSpace.begin();
199 {
return HelpCreatePutSpace(target, channel, minSize, minSize, minSize);}
208 {
return HelpCreatePutSpace(target, channel, minSize, minSize, bufferSize);}
228 : m_transparent(transparent), m_currentMessageBytes(0), m_totalBytes(0)
229 , m_currentSeriesMessages(0), m_totalMessages(0), m_totalMessageSeries(0)
230 , m_begin(NULLPTR), m_length(0) {Detach(attachment); ResetMeter();}
243 void AddRangeToSkip(
unsigned int message, lword position, lword size,
bool sortNow =
true);
251 {CRYPTOPP_UNUSED(parameters); ResetMeter();}
253 lword GetCurrentMessageBytes()
const {
return m_currentMessageBytes;}
254 lword GetTotalBytes()
const {
return m_totalBytes;}
255 unsigned int GetCurrentSeriesMessages()
const {
return m_currentSeriesMessages;}
256 unsigned int GetTotalMessages()
const {
return m_totalMessages;}
257 unsigned int GetTotalMessageSeries()
const {
return m_totalMessageSeries;}
260 {
return AttachedTransformation()->CreatePutSpace(size);}
261 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking);
262 size_t PutModifiable2(byte *inString,
size_t length,
int messageEnd,
bool blocking);
263 bool IsolatedMessageSeriesEnd(
bool blocking);
266 size_t PutMaybeModifiable(byte *inString,
size_t length,
int messageEnd,
bool blocking,
bool modifiable);
267 bool ShouldPropagateMessageEnd()
const {
return m_transparent;}
268 bool ShouldPropagateMessageSeriesEnd()
const {
return m_transparent;}
272 inline bool operator<(
const MessageRange &b)
const 273 {
return message < b.message || (message == b.message && position < b.position);}
274 unsigned int message; lword position; lword size;
278 lword m_currentMessageBytes, m_totalBytes;
279 unsigned int m_currentSeriesMessages, m_totalMessages, m_totalMessageSeries;
280 std::deque<MessageRange> m_rangesToSkip;
329 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking)
331 return PutMaybeModifiable(const_cast<byte *>(inString), length, messageEnd, blocking,
false);
334 size_t PutModifiable2(byte *inString,
size_t length,
int messageEnd,
bool blocking)
336 return PutMaybeModifiable(inString, length, messageEnd, blocking,
true);
352 virtual bool DidFirstPut()
const {
return m_firstInputDone;}
353 virtual size_t GetFirstPutSize()
const {
return m_firstSize;}
354 virtual size_t GetBlockPutSize()
const {
return m_blockSize;}
355 virtual size_t GetLastPutSize()
const {
return m_lastSize;}
357 virtual void InitializeDerivedAndReturnNewSizes(
const NameValuePairs ¶meters,
size_t &firstSize,
size_t &blockSize,
size_t &lastSize)
358 {CRYPTOPP_UNUSED(parameters); CRYPTOPP_UNUSED(firstSize); CRYPTOPP_UNUSED(blockSize); CRYPTOPP_UNUSED(lastSize); InitializeDerived(parameters);}
360 {CRYPTOPP_UNUSED(parameters);}
364 virtual void FirstPut(
const byte *inString) =0;
366 virtual void NextPutSingle(
const byte *inString)
370 virtual void NextPutMultiple(
const byte *inString,
size_t length);
372 virtual void NextPutModifiable(byte *inString,
size_t length)
373 {NextPutMultiple(inString, length);}
384 virtual void LastPut(
const byte *inString,
size_t length) =0;
385 virtual void FlushDerived() {}
388 size_t PutMaybeModifiable(byte *begin,
size_t length,
int messageEnd,
bool blocking,
bool modifiable);
389 void NextPutMaybeModifiable(byte *inString,
size_t length,
bool modifiable)
391 if (modifiable) NextPutModifiable(inString, length);
392 else NextPutMultiple(inString, length);
397 virtual int NextPut(
const byte *inString,
size_t length)
398 {CRYPTOPP_UNUSED(inString); CRYPTOPP_UNUSED(length);
CRYPTOPP_ASSERT(
false);
return 0;}
403 void ResetQueue(
size_t blockSize,
size_t maxBlocks);
405 byte *GetContigousBlocks(
size_t &numberOfBytes);
406 size_t GetAll(byte *outString);
407 void Put(
const byte *inString,
size_t length);
408 size_t CurrentSize()
const {
return m_size;}
409 size_t MaxSize()
const {
return m_buffer.size();}
413 size_t m_blockSize, m_maxBlocks, m_size;
417 size_t m_firstSize, m_blockSize, m_lastSize;
418 bool m_firstInputDone;
435 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking)
440 m_inQueue.Put(inString, length);
443 IsolatedMessageEnd(blocking);
444 Output(0, NULLPTR, 0, messageEnd, blocking);
450 virtual bool IsolatedMessageEnd(
bool blocking) =0;
452 {CRYPTOPP_UNUSED(parameters); m_inQueue.Clear();}
532 void InitializeDerivedAndReturnNewSizes(
const NameValuePairs ¶meters,
size_t &firstSize,
size_t &blockSize,
size_t &lastSize);
533 void FirstPut(
const byte *inString);
534 void NextPutMultiple(
const byte *inString,
size_t length);
535 void NextPutModifiable(byte *inString,
size_t length);
536 void LastPut(
const byte *inString,
size_t length);
542 unsigned int m_mandatoryBlockSize;
543 unsigned int m_optimalBufferSize;
544 unsigned int m_reservedBufferSize;
566 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking);
567 byte *
CreatePutSpace(
size_t &size) {
return m_hashModule.CreateUpdateSpace(size);}
572 unsigned int m_digestSize;
574 std::string m_messagePutChannel, m_hashPutChannel;
589 :
Exception(DATA_INTEGRITY_CHECK_FAILED,
"HashVerificationFilter: message hash or MAC not valid") {}
609 DEFAULT_FLAGS = HASH_AT_BEGIN | PUT_RESULT
621 bool GetLastResult()
const {
return m_verified;}
624 void InitializeDerivedAndReturnNewSizes(
const NameValuePairs ¶meters,
size_t &firstSize,
size_t &blockSize,
size_t &lastSize);
625 void FirstPut(
const byte *inString);
626 void NextPutMultiple(
const byte *inString,
size_t length);
627 void LastPut(
const byte *inString,
size_t length);
634 unsigned int m_digestSize;
662 size_t ChannelPut2(
const std::string &channel,
const byte *begin,
size_t length,
int messageEnd,
bool blocking);
674 void LastPut(
const byte *inString,
size_t length);
699 DEFAULT_FLAGS = THROW_EXCEPTION
717 size_t ChannelPut2(
const std::string &channel,
const byte *begin,
size_t length,
int messageEnd,
bool blocking);
718 bool GetLastResult()
const {
return m_hashVerifier.GetLastResult();}
721 void InitializeDerivedAndReturnNewSizes(
const NameValuePairs ¶meters,
size_t &firstSize,
size_t &blockSize,
size_t &lastSize);
722 void FirstPut(
const byte *inString);
723 void NextPutMultiple(
const byte *inString,
size_t length);
735 void LastPut(
const byte *inString,
size_t length);
754 : m_rng(rng), m_signer(signer), m_messageAccumulator(signer.NewSignatureAccumulator(rng)), m_putMessage(putMessage) {Detach(attachment);}
759 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking);
780 :
Exception(DATA_INTEGRITY_CHECK_FAILED,
"VerifierFilter: digital signature not valid") {}
790 SIGNATURE_AT_BEGIN=1,
800 DEFAULT_FLAGS = SIGNATURE_AT_BEGIN | PUT_RESULT
818 void InitializeDerivedAndReturnNewSizes(
const NameValuePairs ¶meters,
size_t &firstSize,
size_t &blockSize,
size_t &lastSize);
819 void FirstPut(
const byte *inString);
820 void NextPutMultiple(
const byte *inString,
size_t length);
821 void LastPut(
const byte *inString,
size_t length);
845 PASS_WAIT_OBJECTS = 0x02,
848 PASS_EVERYTHING = PASS_SIGNALS | PASS_WAIT_OBJECTS
854 Redirector() : m_target(NULLPTR), m_behavior(PASS_EVERYTHING) {}
860 : m_target(&target), m_behavior(behavior) {}
868 Behavior GetBehavior() {
return static_cast<Behavior
>(m_behavior);}
869 void SetBehavior(Behavior behavior) {m_behavior=behavior;}
870 bool GetPassSignals()
const {
return (m_behavior & PASS_SIGNALS) != 0;}
871 void SetPassSignals(
bool pass) {
if (pass) m_behavior |= PASS_SIGNALS;
else m_behavior &= ~static_cast<word32>(PASS_SIGNALS); }
872 bool GetPassWaitObjects()
const {
return (m_behavior & PASS_WAIT_OBJECTS) != 0;}
873 void SetPassWaitObjects(
bool pass) {
if (pass) m_behavior |= PASS_WAIT_OBJECTS;
else m_behavior &= ~static_cast<word32>(PASS_WAIT_OBJECTS); }
876 {
return m_target ? m_target->CanModifyInput() :
false;}
882 return m_target->CreatePutSpace(size);
889 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking)
890 {
return m_target ? m_target->Put2(inString, length, GetPassSignals() ? messageEnd : 0, blocking) : 0;}
891 bool Flush(
bool hardFlush,
int propagation=-1,
bool blocking=
true)
892 {
return m_target && GetPassSignals() ? m_target->Flush(hardFlush, propagation, blocking) :
false;}
894 {
return m_target && GetPassSignals() ? m_target->MessageSeriesEnd(propagation, blocking) :
false;}
899 return m_target->ChannelCreatePutSpace(channel, size);
906 size_t ChannelPut2(
const std::string &channel,
const byte *begin,
size_t length,
int messageEnd,
bool blocking)
907 {
return m_target ? m_target->ChannelPut2(channel, begin, length, GetPassSignals() ? messageEnd : 0, blocking) : 0;}
909 {
return m_target ? m_target->ChannelPutModifiable2(channel, begin, length, GetPassSignals() ? messageEnd : 0, blocking) : 0;}
910 bool ChannelFlush(
const std::string &channel,
bool completeFlush,
int propagation=-1,
bool blocking=
true)
911 {
return m_target && GetPassSignals() ? m_target->ChannelFlush(channel, completeFlush, propagation, blocking) :
false;}
913 {
return m_target && GetPassSignals() ? m_target->ChannelMessageSeriesEnd(channel, propagation, blocking) :
false;}
916 {
return m_target && GetPassWaitObjects() ? m_target->GetMaxWaitObjectCount() : 0; }
918 {
if (m_target && GetPassWaitObjects()) m_target->GetWaitObjects(container, callStack); }
946 {
return m_owner.AttachedTransformation()->CreatePutSpace(size);}
947 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking)
948 {
return m_owner.AttachedTransformation()->Put2(inString, length, m_passSignal ? messageEnd : 0, blocking);}
950 {
return m_owner.AttachedTransformation()->PutModifiable2(begin, length, m_passSignal ? messageEnd : 0, blocking);}
952 {
if (m_passSignal) m_owner.AttachedTransformation()->Initialize(parameters, propagation);}
953 bool Flush(
bool hardFlush,
int propagation=-1,
bool blocking=
true)
954 {
return m_passSignal ? m_owner.AttachedTransformation()->Flush(hardFlush, propagation, blocking) :
false;}
956 {
return m_passSignal ? m_owner.AttachedTransformation()->MessageSeriesEnd(propagation, blocking) :
false;}
959 {
return m_owner.AttachedTransformation()->ChannelCreatePutSpace(channel, size);}
960 size_t ChannelPut2(
const std::string &channel,
const byte *begin,
size_t length,
int messageEnd,
bool blocking)
961 {
return m_owner.AttachedTransformation()->ChannelPut2(channel, begin, length, m_passSignal ? messageEnd : 0, blocking);}
963 {
return m_owner.AttachedTransformation()->ChannelPutModifiable2(channel, begin, length, m_passSignal ? messageEnd : 0, blocking);}
964 bool ChannelFlush(
const std::string &channel,
bool completeFlush,
int propagation=-1,
bool blocking=
true)
965 {
return m_passSignal ? m_owner.AttachedTransformation()->ChannelFlush(channel, completeFlush, propagation, blocking) :
false;}
967 {
return m_passSignal ? m_owner.AttachedTransformation()->ChannelMessageSeriesEnd(channel, propagation, blocking) :
false;}
992 void SetFilter(
Filter *filter);
993 void NextPutMultiple(
const byte *s,
size_t len);
994 void NextPutModifiable(byte *inString,
size_t length);
1011 void FirstPut(
const byte * inString)
1012 {CRYPTOPP_UNUSED(inString);}
1025 {CRYPTOPP_UNUSED(inString), CRYPTOPP_UNUSED(length); m_filter->MessageEnd();}
1066 typedef typename T::value_type value_type;
1075 {
if (!parameters.
GetValue(
"OutputStringPointer", m_output))
throw InvalidArgument(
"StringSink: OutputStringPointer not specified");}
1077 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking)
1079 CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking);
1082 typename T::size_type size = m_output->size();
1083 if (length < size && size + length > m_output->capacity())
1084 m_output->reserve(2*size);
1085 m_output->insert(m_output->end(), (
const value_type *)inString, (
const value_type *)inString+length);
1123 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking);
1145 : m_buf(NULLPTR), m_size(0), m_total(0) {IsolatedInitialize(parameters);}
1151 : m_buf(buf), m_size(size), m_total(0) {}
1162 byte * CreatePutSpace(
size_t &size);
1163 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking);
1189 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking);
1219 CRYPTOPP_DLL
void StoreInitialize(
const NameValuePairs ¶meters);
1221 const byte *m_store;
1222 size_t m_length, m_count;
1233 : m_rng(NULLPTR), m_length(0), m_count(0) {}
1236 : m_rng(&rng), m_length(length), m_count(0) {}
1244 CRYPTOPP_UNUSED(target); CRYPTOPP_UNUSED(begin); CRYPTOPP_UNUSED(end); CRYPTOPP_UNUSED(channel); CRYPTOPP_UNUSED(blocking);
1245 throw NotImplemented(
"RandomNumberStore: CopyRangeTo2() is not supported by this store");
1252 lword m_length, m_count;
1260 NullStore(lword size = ULONG_MAX) : m_size(size) {}
1262 {CRYPTOPP_UNUSED(parameters);}
1303 {Pump2(pumpMax);
return pumpMax;}
1310 {PumpMessages2(count);
return count;}
1329 virtual size_t Pump2(lword &byteCount,
bool blocking=
true) =0;
1335 virtual size_t PumpMessages2(
unsigned int &messageCount,
bool blocking=
true) =0;
1341 virtual size_t PumpAll2(
bool blocking=
true);
1345 virtual bool SourceExhausted()
const =0;
1350 void SourceInitialize(
bool pumpAll,
const NameValuePairs ¶meters)
1352 IsolatedInitialize(parameters);
1372 {m_store.IsolatedInitialize(parameters);}
1373 size_t Pump2(lword &byteCount,
bool blocking=
true)
1380 {
return !m_store.AnyRetrievable() && !m_store.AnyMessages();}
1382 {m_store.SetAutoSignalPropagation(propagation);}
1384 {
return m_store.GetAutoSignalPropagation();}
1454 {SourceInitialize(pumpAll,
MakeParameters(
"RandomNumberGeneratorPointer", &rng)(
"RandomNumberStoreSize", length));}
1459 #if CRYPTOPP_MSC_VERSION 1460 # pragma warning(pop) Used to pass byte array input as part of a NameValuePairs object.
Create a working space in a BufferedTransformation.
Base class for all exceptions thrown by the library.
Append input to a string object.
bool GetLastResult() const
Retrieves the result of the last verification.
An invalid argument was detected.
byte * HelpCreatePutSpace(BufferedTransformation &target, const std::string &channel, size_t minSize, size_t bufferSize)
Create a working space in a BufferedTransformation.
StringSource(const char *string, bool pumpAll, BufferedTransformation *attachment=NULL)
Construct a StringSource.
SimpleProxyFilter(BufferedTransformation *filter, BufferedTransformation *attachment)
Construct a SimpleProxyFilter.
void IsolatedInitialize(const NameValuePairs ¶meters)
Initialize or reinitialize this object, without signal propagation.
Pointer-based implementation of the Source interface.
Classes for working with NameValuePairs.
virtual void Initialize(const NameValuePairs ¶meters=g_nullNameValuePairs, int propagation=-1)=0
Initialize or reinitialize this object, with signal propagation.
byte * CreatePutSpace(size_t &size)
Request space which can be written into by the caller.
Filter wrapper for PK_Verifier.
Base class for Filter classes that are proxies for a chain of other filters.
Implementation of BufferedTransformation's attachment interface.
lword MaxRetrievable() const
Provides the number of bytes ready for retrieval.
Classes providing basic library services.
Utility functions for the Crypto++ library.
bool SourceExhausted() const
Determines if the Source is exhausted.
PK_DecryptorFilter(RandomNumberGenerator &rng, const PK_Decryptor &decryptor, BufferedTransformation *attachment=NULL)
Construct a PK_DecryptorFilter.
MeterFilter(BufferedTransformation *attachment=NULL, bool transparent=true)
Construct a MeterFilter.
std::vector-based implementation of the Source interface
void SetAutoSignalPropagation(int propagation)
Set propagation of automatically generated and transferred signals.
VectorSource(BufferedTransformation *attachment=NULL)
Construct a VectorSource.
BlockPaddingScheme
Padding schemes used for block ciphers.
Interface for authenticated encryption modes of operation.
Filter class that is a proxy for a sink.
bool AnyRetrievable() const
Determines whether bytes are ready for retrieval.
size_t ChannelPutModifiable2(const std::string &channel, byte *begin, size_t length, int messageEnd, bool blocking)
Input multiple bytes that may be modified by callee on a channel.
size_t ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking)
Input multiple bytes for processing on a channel.
byte * HelpCreatePutSpace(BufferedTransformation &target, const std::string &channel, size_t minSize)
Create a working space in a BufferedTransformation.
Interface for public-key signers.
size_t ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking)
Input multiple bytes for processing on a channel.
Interface for public-key encryptors.
void PumpAll()
Pump all data to attached transformation.
size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking)
Input multiple bytes for processing.
unsigned int PumpMessages(unsigned int count=UINT_MAX)
Pump messages to attached transformation.
const char * BlockPaddingScheme()
StreamTransformationFilter::BlockPaddingScheme.
Abstract base classes that provide a uniform interface to this library.
lword Pump(lword pumpMax=...)
Pump data to attached transformation.
void IsolatedInitialize(const NameValuePairs ¶meters)
Initialize or reinitialize this object, without signal propagation.
size_t PumpAll2(bool blocking=true)
Pump all data to attached transformation.
Classes for automatic resource management.
Filter wrapper for PK_Signer.
bool ChannelMessageSeriesEnd(const std::string &channel, int propagation=-1, bool blocking=true)
Marks the end of a series of messages on a channel.
Acts as a Source for pre-existing, static data.
StringStore(const T &string)
Construct a StringStore.
StringSource(const byte *string, size_t length, bool pumpAll, BufferedTransformation *attachment=NULL)
Construct a StringSource.
Interface for random number generators.
unsigned int GetMaxWaitObjectCount() const
Retrieves the maximum number of waitable objects.
size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking)
Input multiple bytes for processing.
byte * CreatePutSpace(size_t &size)
Request space which can be written into by the caller.
Append input to a string object.
std::string AlgorithmName() const
Provides the name of this algorithm.
StringSource(const std::string &string, bool pumpAll, BufferedTransformation *attachment=NULL)
Construct a StringSource.
Exception thrown when an invalid signature is encountered.
Flags
Flags controlling filter behavior.
String-based implementation of the Source interface.
StringStore(const byte *string, size_t length)
Construct a StringStore.
bool ChannelFlush(const std::string &channel, bool completeFlush, int propagation=-1, bool blocking=true)
Flush buffered input and/or output on a channel.
byte * ChannelCreatePutSpace(const std::string &channel, size_t &size)
Request space which can be written into by the caller.
Exception thrown when a data integrity check failure is encountered.
Classes and functions for secure memory allocations.
1 and 0's padding added to a block
Redirector(BufferedTransformation &target, Behavior behavior=PASS_EVERYTHING)
Construct a Redirector.
Copy input to a memory buffer.
std::string AlgorithmName() const
Provides the name of this algorithm.
Flags
Flags controlling filter behavior.
byte * ChannelCreatePutSpace(const std::string &channel, size_t &size)
Request space which can be written into by the caller.
Transform a Store into a Source.
Append input to a std::vector<byte> object.
Classes for an unlimited queue to store bytes.
Xor input to a memory buffer.
RandomNumberSink(RandomNumberGenerator &rng)
Construct a RandomNumberSink.
Interface for public-key decryptors.
bool operator<(const OID &lhs, const OID &rhs)
Compare two OIDs for ordering.
A method was called which was not implemented.
Filter wrapper for HashTransformation.
Filter wrapper for HashTransformation.
RNG-based implementation of Source interface.
size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking)
Input multiple bytes for processing.
Filter wrapper for decrypting with AuthenticatedSymmetricCipher.
void Detach(BufferedTransformation *newAttachment=NULL)
Replace an attached transformation.
const std::string DEFAULT_CHANNEL
Default channel for BufferedTransformation.
AlgorithmParameters MakeParameters(const char *name, const T &value, bool throwIfNotUsed=true)
Create an object that implements NameValuePairs.
bool GetPassSignal() const
Retrieve passSignal flag.
OutputProxy(BufferedTransformation &owner, bool passSignal)
Construct an OutputProxy.
A non-transparent MeterFilter.
Filter wrapper for encrypting with AuthenticatedSymmetricCipher.
size_t PumpMessages2(unsigned int &messageCount, bool blocking=true)
Pump messages to attached transformation.
Flags
Flags controlling filter behavior.
VectorSource(const std::vector< byte > &vec, bool pumpAll, BufferedTransformation *attachment=NULL)
Construct a VectorSource.
Proxy filter that doesn't modify the underlying filter's input or output.
BufferedTransformation * AttachedTransformation()
Retrieve attached transformation.
void Initialize(const NameValuePairs ¶meters=g_nullNameValuePairs, int propagation=-1)
Initialize or reinitialize this object, with signal propagation.
bool MessageSeriesEnd(int propagation=-1, bool blocking=true)
Marks the end of a series of messages, with signal propagation.
bool CanModifyInput() const
Determines whether input can be modified by the callee.
std::string AlgorithmName() const
Provides the name of this algorithm.
T1 SaturatingSubtract(const T1 &a, const T2 &b)
Performs a saturating subtract clamped at 0.
void StopRedirection()
Stop redirecting input.
size_t AvailableSize()
Provides the size remaining in the Sink.
Filter wrapper for PK_Decryptor.
size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking)
Input multiple bytes for processing.
const NameValuePairs & g_nullNameValuePairs
An empty set of name-value pairs.
size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const
Copy bytes from this object to another BufferedTransformation.
Incorporates input into RNG as additional entropy.
void IsolatedInitialize(const NameValuePairs ¶meters)
Initialize or reinitialize this object, without signal propagation.
RandomNumberSink()
Construct a RandomNumberSink.
size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true) const
Copy bytes from this object to another BufferedTransformation.
StringSource(BufferedTransformation *attachment=NULL)
Construct a StringSource.
String-based implementation of Store interface.
#define CRYPTOPP_ASSERT(exp)
Debugging and diagnostic assertion.
Redirect input to another BufferedTransformation without owning it.
size_t Pump2(lword &byteCount, bool blocking=true)
Pump data to attached transformation.
Data structure used to store byte strings.
TransparentFilter(BufferedTransformation *attachment=NULL)
Construct a TransparentFilter.
Redirector()
Construct a Redirector.
lword MaxRetrievable() const
Provides the number of bytes ready for retrieval.
size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking)
Input multiple bytes for processing.
Filter wrapper for PK_Encryptor.
W3C padding added to a block.
void Redirect(BufferedTransformation &target)
Redirect input to another BufferedTransformation.
Behavior
Controls signal propagation behavior.
byte * CreatePutSpace(size_t &size)
Request space which can be written into by the caller.
Base class for unflushable filters.
Interface for public-key signature verifiers.
bool Attachable()
Determine if attachable.
A transparent MeterFilter.
SecByteBlock m_tempSpace
Temporay working space.
void SetPassSignal(bool passSignal)
Set passSignal flag.
SignerFilter(RandomNumberGenerator &rng, const PK_Signer &signer, BufferedTransformation *attachment=NULL, bool putMessage=false)
Construct a SignerFilter.
bool ChannelFlush(const std::string &channel, bool completeFlush, int propagation=-1, bool blocking=true)
Flush buffered input and/or output on a channel.
0's padding added to a block
void SetTransparent(bool transparent)
Set or change the transparent mode of this object.
ArraySink(const NameValuePairs ¶meters=g_nullNameValuePairs)
Construct an ArraySink.
Implementation of BufferedTransformation's attachment interface.
Access a block of memory.
void IsolatedInitialize(const NameValuePairs ¶meters)
Initialize or reinitialize this object, without signal propagation.
Measure how many bytes and messages pass through the filter.
void GetWaitObjects(WaitObjectContainer &container, CallStack const &callStack)
Retrieves waitable objects.
No padding added to a block.
Crypto++ library namespace.
ArrayXorSink(byte *buf, size_t size)
Construct an ArrayXorSink.
size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true)
Transfer bytes from this object to another BufferedTransformation.
PKCS #5 padding added to a block.
Padding schemes used for block ciphers.
bool GetValue(const char *name, T &value) const
Get a named value.
PK_EncryptorFilter(RandomNumberGenerator &rng, const PK_Encryptor &encryptor, BufferedTransformation *attachment=NULL)
Construct a PK_EncryptorFilter.
ArraySink(byte *buf, size_t size)
Construct an ArraySink.
StringSinkTemplate(T &output)
Construct a StringSinkTemplate.
RNG-based implementation of Source interface.
bool ChannelMessageSeriesEnd(const std::string &channel, int propagation=-1, bool blocking=true)
Marks the end of a series of messages on a channel.
size_t PutModifiable2(byte *begin, size_t length, int messageEnd, bool blocking)
Input multiple bytes that may be modified by callee.
byte * HelpCreatePutSpace(BufferedTransformation &target, const std::string &channel, size_t minSize, size_t desiredSize, size_t &bufferSize)
Create a working space in a BufferedTransformation.
OpaqueFilter(BufferedTransformation *attachment=NULL)
Construct an OpaqueFilter.
Ensures an object is not copyable.
bool Flush(bool hardFlush, int propagation=-1, bool blocking=true)
Flush buffered input and/or output, with signal propagation.
byte * CreatePutSpace(size_t &size)
Request space which can be written into by the caller.
StringStore(const char *string=NULL)
Construct a StringStore.
Interface for custom flush signals.
bool Flush(bool hardFlush, int propagation=-1, bool blocking=true)
Flush buffered input and/or output, with signal propagation.
std::string AlgorithmName() const
Provides the name of this algorithm.
size_t ChannelPutModifiable2(const std::string &channel, byte *begin, size_t length, int messageEnd, bool blocking)
Input multiple bytes that may be modified by callee on a channel.
lword TotalPutLength()
Provides the number of bytes written to the Sink.
void LastPut(const byte *inString, size_t length)
Input the last block of data.
std::string AlgorithmName() const
Provides the name of this algorithm.
Base class for bufferless filters.
#define SIZE_MAX
The maximum value of a machine word.
byte * CreatePutSpace(size_t &size)
Request space which can be written into by the caller.
int GetAutoSignalPropagation() const
Retrieve automatic signal propagation value.
Interface for retrieving values given their names.
bool MessageSeriesEnd(int propagation=-1, bool blocking=true)
Marks the end of a series of messages, with signal propagation.
Source(BufferedTransformation *attachment=NULL)
Construct a Source.