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 4514) 39 #ifndef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY_562 49 Filter(BufferedTransformation *attachment = NULL);
58 BufferedTransformation *AttachedTransformation();
62 const BufferedTransformation *AttachedTransformation()
const;
68 void Detach(BufferedTransformation *newAttachment = NULL);
73 size_t TransferTo2(BufferedTransformation &target, lword &transferBytes,
const std::string &channel=
DEFAULT_CHANNEL,
bool blocking=
true);
74 size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX,
const std::string &channel=
DEFAULT_CHANNEL,
bool blocking=
true)
const;
78 bool Flush(
bool hardFlush,
int propagation=-1,
bool blocking=
true);
79 bool MessageSeriesEnd(
int propagation=-1,
bool blocking=
true);
82 virtual BufferedTransformation * NewDefaultAttachment()
const;
83 void Insert(
Filter *nextFilter);
85 virtual bool ShouldPropagateMessageEnd()
const {
return true;}
86 virtual bool ShouldPropagateMessageSeriesEnd()
const {
return true;}
88 void PropagateInitialize(
const NameValuePairs ¶meters,
int propagation);
98 size_t Output(
int outputSite,
const byte *inString,
size_t length,
int messageEnd,
bool blocking,
const std::string &channel=
DEFAULT_CHANNEL);
108 size_t OutputModifiable(
int outputSite, byte *inString,
size_t length,
int messageEnd,
bool blocking,
const std::string &channel=
DEFAULT_CHANNEL);
118 bool OutputMessageEnd(
int outputSite,
int propagation,
bool blocking,
const std::string &channel=
DEFAULT_CHANNEL);
137 bool OutputFlush(
int outputSite,
bool hardFlush,
int propagation,
bool blocking,
const std::string &channel=
DEFAULT_CHANNEL);
150 bool OutputMessageSeriesEnd(
int outputSite,
int propagation,
bool blocking,
const std::string &channel=
DEFAULT_CHANNEL);
156 size_t m_inputPosition;
179 assert(desiredSize >= minSize && bufferSize >= minSize);
180 if (m_tempSpace.size() < minSize)
183 if (desiredSize >= minSize)
185 bufferSize = desiredSize;
188 m_tempSpace.New(bufferSize);
191 bufferSize = m_tempSpace.size();
192 return m_tempSpace.begin();
201 {
return HelpCreatePutSpace(target, channel, minSize, minSize, minSize);}
210 {
return HelpCreatePutSpace(target, channel, minSize, minSize, bufferSize);}
229 : m_transparent(transparent), m_currentMessageBytes(0), m_totalBytes(0)
230 , m_currentSeriesMessages(0), m_totalMessages(0), m_totalMessageSeries(0)
231 , m_begin(NULL), m_length(0) {Detach(attachment); ResetMeter();}
244 void AddRangeToSkip(
unsigned int message, lword position, lword size,
bool sortNow =
true);
252 {CRYPTOPP_UNUSED(parameters); ResetMeter();}
254 lword GetCurrentMessageBytes()
const {
return m_currentMessageBytes;}
255 lword GetTotalBytes()
const {
return m_totalBytes;}
256 unsigned int GetCurrentSeriesMessages()
const {
return m_currentSeriesMessages;}
257 unsigned int GetTotalMessages()
const {
return m_totalMessages;}
258 unsigned int GetTotalMessageSeries()
const {
return m_totalMessageSeries;}
261 {
return AttachedTransformation()->CreatePutSpace(size);}
262 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking);
263 size_t PutModifiable2(byte *inString,
size_t length,
int messageEnd,
bool blocking);
264 bool IsolatedMessageSeriesEnd(
bool blocking);
267 size_t PutMaybeModifiable(byte *inString,
size_t length,
int messageEnd,
bool blocking,
bool modifiable);
268 bool ShouldPropagateMessageEnd()
const {
return m_transparent;}
269 bool ShouldPropagateMessageSeriesEnd()
const {
return m_transparent;}
273 inline bool operator<(
const MessageRange &b)
const 274 {
return message < b.message || (message == b.message && position < b.position);}
275 unsigned int message; lword position; lword size;
279 lword m_currentMessageBytes, m_totalBytes;
280 unsigned int m_currentSeriesMessages, m_totalMessages, m_totalMessageSeries;
281 std::deque<MessageRange> m_rangesToSkip;
319 #if !defined(CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY_562) 337 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking)
339 return PutMaybeModifiable(const_cast<byte *>(inString), length, messageEnd, blocking,
false);
341 size_t PutModifiable2(byte *inString,
size_t length,
int messageEnd,
bool blocking)
343 return PutMaybeModifiable(inString, length, messageEnd, blocking,
true);
346 bool IsolatedFlush(
bool hardFlush,
bool blocking);
354 bool DidFirstPut() {
return m_firstInputDone;}
356 virtual void InitializeDerivedAndReturnNewSizes(
const NameValuePairs ¶meters,
size_t &firstSize,
size_t &blockSize,
size_t &lastSize)
357 {CRYPTOPP_UNUSED(parameters); CRYPTOPP_UNUSED(firstSize); CRYPTOPP_UNUSED(blockSize); CRYPTOPP_UNUSED(lastSize); InitializeDerived(parameters);}
359 {CRYPTOPP_UNUSED(parameters);}
362 virtual void FirstPut(
const byte *inString) =0;
364 virtual void NextPutSingle(
const byte *inString)
365 {CRYPTOPP_UNUSED(inString); assert(
false);}
368 virtual void NextPutMultiple(
const byte *inString,
size_t length);
370 virtual void NextPutModifiable(byte *inString,
size_t length)
371 {NextPutMultiple(inString, length);}
376 virtual void LastPut(
const byte *inString,
size_t length) =0;
377 virtual void FlushDerived() {}
380 size_t PutMaybeModifiable(byte *begin,
size_t length,
int messageEnd,
bool blocking,
bool modifiable);
381 void NextPutMaybeModifiable(byte *inString,
size_t length,
bool modifiable)
383 if (modifiable) NextPutModifiable(inString, length);
384 else NextPutMultiple(inString, length);
389 virtual int NextPut(
const byte *inString,
size_t length)
390 {CRYPTOPP_UNUSED(inString); CRYPTOPP_UNUSED(length); assert(
false);
return 0;}
395 void ResetQueue(
size_t blockSize,
size_t maxBlocks);
397 byte *GetContigousBlocks(
size_t &numberOfBytes);
398 size_t GetAll(byte *outString);
399 void Put(
const byte *inString,
size_t length);
400 size_t CurrentSize()
const {
return m_size;}
401 size_t MaxSize()
const {
return m_buffer.size();}
405 size_t m_blockSize, m_maxBlocks, m_size;
409 size_t m_firstSize, m_blockSize, m_lastSize;
410 bool m_firstInputDone;
426 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking)
431 m_inQueue.Put(inString, length);
434 IsolatedMessageEnd(blocking);
435 Output(0, NULL, 0, messageEnd, blocking);
441 virtual bool IsolatedMessageEnd(
bool blocking) =0;
443 {CRYPTOPP_UNUSED(parameters); m_inQueue.Clear();}
489 void InitializeDerivedAndReturnNewSizes(
const NameValuePairs ¶meters,
size_t &firstSize,
size_t &blockSize,
size_t &lastSize);
490 void FirstPut(
const byte *inString);
491 void NextPutMultiple(
const byte *inString,
size_t length);
492 void NextPutModifiable(byte *inString,
size_t length);
493 void LastPut(
const byte *inString,
size_t length);
499 unsigned int m_optimalBufferSize;
502 #ifdef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY 522 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking);
523 byte *
CreatePutSpace(
size_t &size) {
return m_hashModule.CreateUpdateSpace(size);}
528 unsigned int m_digestSize;
530 std::string m_messagePutChannel, m_hashPutChannel;
544 :
Exception(DATA_INTEGRITY_CHECK_FAILED,
"HashVerificationFilter: message hash or MAC not valid") {}
564 DEFAULT_FLAGS = HASH_AT_BEGIN | PUT_RESULT
576 bool GetLastResult()
const {
return m_verified;}
579 void InitializeDerivedAndReturnNewSizes(
const NameValuePairs ¶meters,
size_t &firstSize,
size_t &blockSize,
size_t &lastSize);
580 void FirstPut(
const byte *inString);
581 void NextPutMultiple(
const byte *inString,
size_t length);
582 void LastPut(
const byte *inString,
size_t length);
589 unsigned int m_digestSize;
613 byte * ChannelCreatePutSpace(
const std::string &channel,
size_t &size);
614 size_t ChannelPut2(
const std::string &channel,
const byte *begin,
size_t length,
int messageEnd,
bool blocking);
615 void LastPut(
const byte *inString,
size_t length);
638 DEFAULT_FLAGS = THROW_EXCEPTION
652 byte * ChannelCreatePutSpace(
const std::string &channel,
size_t &size);
653 size_t ChannelPut2(
const std::string &channel,
const byte *begin,
size_t length,
int messageEnd,
bool blocking);
654 bool GetLastResult()
const {
return m_hashVerifier.GetLastResult();}
657 void InitializeDerivedAndReturnNewSizes(
const NameValuePairs ¶meters,
size_t &firstSize,
size_t &blockSize,
size_t &lastSize);
658 void FirstPut(
const byte *inString);
659 void NextPutMultiple(
const byte *inString,
size_t length);
660 void LastPut(
const byte *inString,
size_t length);
677 : m_rng(rng), m_signer(signer), m_messageAccumulator(signer.NewSignatureAccumulator(rng)), m_putMessage(putMessage) {Detach(attachment);}
682 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking);
702 :
Exception(DATA_INTEGRITY_CHECK_FAILED,
"VerifierFilter: digital signature not valid") {}
712 SIGNATURE_AT_BEGIN=1,
722 DEFAULT_FLAGS = SIGNATURE_AT_BEGIN | PUT_RESULT
738 void InitializeDerivedAndReturnNewSizes(
const NameValuePairs ¶meters,
size_t &firstSize,
size_t &blockSize,
size_t &lastSize);
739 void FirstPut(
const byte *inString);
740 void NextPutMultiple(
const byte *inString,
size_t length);
741 void LastPut(
const byte *inString,
size_t length);
767 PASS_WAIT_OBJECTS = 0x02,
770 PASS_EVERYTHING = PASS_SIGNALS | PASS_WAIT_OBJECTS
774 Redirector() : m_target(NULL), m_behavior(PASS_EVERYTHING) {}
780 : m_target(&target), m_behavior(behavior) {}
789 void SetBehavior(
Behavior behavior) {m_behavior=behavior;}
790 bool GetPassSignals()
const {
return (m_behavior & PASS_SIGNALS) != 0;}
791 void SetPassSignals(
bool pass) {
if (pass) m_behavior |= PASS_SIGNALS;
else m_behavior &= ~(word32) PASS_SIGNALS; }
792 bool GetPassWaitObjects()
const {
return (m_behavior & PASS_WAIT_OBJECTS) != 0;}
793 void SetPassWaitObjects(
bool pass) {
if (pass) m_behavior |= PASS_WAIT_OBJECTS;
else m_behavior &= ~(word32) PASS_WAIT_OBJECTS; }
796 {
return m_target ? m_target->CanModifyInput() :
false;}
798 void Initialize(
const NameValuePairs ¶meters,
int propagation);
802 return m_target->CreatePutSpace(size);
809 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking)
810 {
return m_target ? m_target->Put2(inString, length, GetPassSignals() ? messageEnd : 0, blocking) : 0;}
811 bool Flush(
bool hardFlush,
int propagation=-1,
bool blocking=
true)
812 {
return m_target && GetPassSignals() ? m_target->Flush(hardFlush, propagation, blocking) :
false;}
814 {
return m_target && GetPassSignals() ? m_target->MessageSeriesEnd(propagation, blocking) :
false;}
819 return m_target->ChannelCreatePutSpace(channel, size);
826 size_t ChannelPut2(
const std::string &channel,
const byte *begin,
size_t length,
int messageEnd,
bool blocking)
827 {
return m_target ? m_target->ChannelPut2(channel, begin, length, GetPassSignals() ? messageEnd : 0, blocking) : 0;}
829 {
return m_target ? m_target->ChannelPutModifiable2(channel, begin, length, GetPassSignals() ? messageEnd : 0, blocking) : 0;}
830 bool ChannelFlush(
const std::string &channel,
bool completeFlush,
int propagation=-1,
bool blocking=
true)
831 {
return m_target && GetPassSignals() ? m_target->ChannelFlush(channel, completeFlush, propagation, blocking) :
false;}
833 {
return m_target && GetPassSignals() ? m_target->ChannelMessageSeriesEnd(channel, propagation, blocking) :
false;}
836 {
return m_target && GetPassWaitObjects() ? m_target->GetMaxWaitObjectCount() : 0; }
838 {
if (m_target && GetPassWaitObjects()) m_target->GetWaitObjects(container, callStack); }
851 bool GetPassSignal()
const {
return m_passSignal;}
852 void SetPassSignal(
bool passSignal) {m_passSignal = passSignal;}
855 {
return m_owner.AttachedTransformation()->CreatePutSpace(size);}
856 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking)
857 {
return m_owner.AttachedTransformation()->Put2(inString, length, m_passSignal ? messageEnd : 0, blocking);}
859 {
return m_owner.AttachedTransformation()->PutModifiable2(begin, length, m_passSignal ? messageEnd : 0, blocking);}
861 {
if (m_passSignal) m_owner.AttachedTransformation()->Initialize(parameters, propagation);}
862 bool Flush(
bool hardFlush,
int propagation=-1,
bool blocking=
true)
863 {
return m_passSignal ? m_owner.AttachedTransformation()->Flush(hardFlush, propagation, blocking) :
false;}
865 {
return m_passSignal ? m_owner.AttachedTransformation()->MessageSeriesEnd(propagation, blocking) :
false;}
868 {
return m_owner.AttachedTransformation()->ChannelCreatePutSpace(channel, size);}
869 size_t ChannelPut2(
const std::string &channel,
const byte *begin,
size_t length,
int messageEnd,
bool blocking)
870 {
return m_owner.AttachedTransformation()->ChannelPut2(channel, begin, length, m_passSignal ? messageEnd : 0, blocking);}
872 {
return m_owner.AttachedTransformation()->ChannelPutModifiable2(channel, begin, length, m_passSignal ? messageEnd : 0, blocking);}
873 bool ChannelFlush(
const std::string &channel,
bool completeFlush,
int propagation=-1,
bool blocking=
true)
874 {
return m_passSignal ? m_owner.AttachedTransformation()->ChannelFlush(channel, completeFlush, propagation, blocking) :
false;}
876 {
return m_passSignal ? m_owner.AttachedTransformation()->ChannelMessageSeriesEnd(channel, propagation, blocking) :
false;}
895 bool IsolatedFlush(
bool hardFlush,
bool blocking);
899 void SetFilter(
Filter *filter);
900 void NextPutMultiple(
const byte *s,
size_t len);
901 void NextPutModifiable(byte *inString,
size_t length);
918 void FirstPut(
const byte * inString)
919 {CRYPTOPP_UNUSED(inString);}
920 void LastPut(
const byte *inString,
size_t length)
921 {CRYPTOPP_UNUSED(inString), CRYPTOPP_UNUSED(length); m_filter->MessageEnd();}
963 typedef typename T::traits_type::char_type char_type;
968 : m_output(&output) {assert(
sizeof(output[0])==1);}
971 {
if (!parameters.
GetValue(
"OutputStringPointer", m_output))
throw InvalidArgument(
"StringSink: OutputStringPointer not specified");}
973 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking)
975 CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking);
978 typename T::size_type size = m_output->size();
979 if (length < size && size + length > m_output->capacity())
980 m_output->reserve(2*size);
981 m_output->append((
const char_type *)inString, (
const char_type *)inString+length);
1008 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking);
1023 : m_buf(NULL), m_size(0), m_total(0) {IsolatedInitialize(parameters);}
1029 : m_buf(buf), m_size(size), m_total(0) {}
1040 byte * CreatePutSpace(
size_t &size);
1041 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking);
1060 size_t Put2(
const byte *inString,
size_t length,
int messageEnd,
bool blocking);
1090 CRYPTOPP_DLL
void StoreInitialize(
const NameValuePairs ¶meters);
1092 const byte *m_store;
1093 size_t m_length, m_count;
1101 : m_rng(NULL), m_length(0), m_count(0) {}
1104 : m_rng(&rng), m_length(length), m_count(0) {}
1112 CRYPTOPP_UNUSED(target); CRYPTOPP_UNUSED(begin); CRYPTOPP_UNUSED(end); CRYPTOPP_UNUSED(channel); CRYPTOPP_UNUSED(blocking);
1113 throw NotImplemented(
"RandomNumberStore: CopyRangeTo2() is not supported by this store");
1120 lword m_length, m_count;
1127 NullStore(lword size = ULONG_MAX) : m_size(size) {}
1129 {CRYPTOPP_UNUSED(parameters);}
1151 #ifndef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY_562 1170 {Pump2(pumpMax);
return pumpMax;}
1177 {PumpMessages2(count);
return count;}
1191 virtual size_t Pump2(lword &byteCount,
bool blocking=
true) =0;
1197 virtual size_t PumpMessages2(
unsigned int &messageCount,
bool blocking=
true) =0;
1202 virtual size_t PumpAll2(
bool blocking=
true);
1206 virtual bool SourceExhausted()
const =0;
1211 void SourceInitialize(
bool pumpAll,
const NameValuePairs ¶meters)
1213 IsolatedInitialize(parameters);
1232 {m_store.IsolatedInitialize(parameters);}
1233 size_t Pump2(lword &byteCount,
bool blocking=
true)
1234 {
return m_store.TransferTo2(*AttachedTransformation(), byteCount,
DEFAULT_CHANNEL, blocking);}
1236 {
return m_store.TransferMessagesTo2(*AttachedTransformation(), messageCount,
DEFAULT_CHANNEL, blocking);}
1238 {
return m_store.TransferAllTo2(*AttachedTransformation(),
DEFAULT_CHANNEL, blocking);}
1240 {
return !m_store.AnyRetrievable() && !m_store.AnyMessages();}
1242 {m_store.SetAutoSignalPropagation(propagation);}
1244 {
return m_store.GetAutoSignalPropagation();}
1283 {SourceInitialize(pumpAll,
MakeParameters(
"RandomNumberGeneratorPointer", &rng)(
"RandomNumberStoreSize", length));}
1288 #if CRYPTOPP_MSC_VERSION 1289 # 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.
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.
container of wait objects
Classes for working with NameValuePairs.
byte * CreatePutSpace(size_t &size)
Request space which can be written into by the caller.
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.
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.
std::string AlgorithmName() const
Provides the name of this algorithm.
Classes providing basic library services.
Utility functions for the Crypto++ library.
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::string AlgorithmName() const
Provides the name of this algorithm.
void SetAutoSignalPropagation(int propagation)
Set propagation of automatically generated and transferred signals.
BlockPaddingScheme
Padding schemes used for block ciphers.
Interface for one direction (encryption or decryption) of a stream cipher or block cipher mode with a...
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.
Abstract base classes that provide a uniform interface to this library.
std::string AlgorithmName() const
Provides the name of this algorithm.
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)
binary byte array as source
Interface for random number generators.
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.
StringSource(const std::string &string, bool pumpAll, BufferedTransformation *attachment=NULL)
std::string as source
Exception thrown when an invalid signature is encountered.
Flags
Flags controlling filter behavior.
std::string AlgorithmName() const
Provides the name of this algorithm.
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.
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.
Classes for an unlimited queue to store bytes.
Xor input to a memory buffer.
RandomNumberSink(RandomNumberGenerator &rng)
Construct a RandomNumberSink.
bool GetValue(const char *name, T &value) const
Get a named value.
bool CanModifyInput() const
Determines whether input can be modifed by the callee.
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.
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.
lword MaxRetrievable() const
Provides the number of bytes ready for retrieval.
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.
std::string AlgorithmName() const
Provides the name of this algorithm.
Proxy filter that doesn't modify the underlying filter's input or output.
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.
unsigned int GetMaxWaitObjectCount() const
Retrieves the maximum number of waitable objects.
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.
Incorporates input into RNG as additional entropy.
void IsolatedInitialize(const NameValuePairs ¶meters)
Initialize or reinitialize this object, without signal propagation.
RandomNumberSink()
Construct a RandomNumberSink.
StringSource(BufferedTransformation *attachment=NULL)
Construct a StringSource.
String-based implementation of Store interface.
int GetAutoSignalPropagation() const
Retrieve automatic signal propagation value.
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.
bool GetLastResult() const
Retrieves the result of the last verification.
bool AnyRetrievable() const
Determines whether bytes are ready for retrieval.
lword Pump(lword pumpMax=(size_t)...)
Pump data to attached transformation.
Filter wrapper for PK_Encryptor.
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.
bool SourceExhausted() const
Determines if the Source is exhausted.
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
lword MaxRetrievable() const
Provides the number of bytes ready for retrieval.
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.
PKCS #5 padding added to a block.
Padding schemes used for block ciphers.
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.
Provides interface for initialization of derived filters.
bool Flush(bool hardFlush, int propagation=-1, bool blocking=true)
Flush buffered input and/or output, with signal propagation.
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.
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.
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.