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) lword Pump(lword pumpMax=(size_t) ...)
Pump data to attached transformation.
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.
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.
container of wait objects
Classes for working with NameValuePairs.
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.
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...
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.
Abstract base classes that provide a uniform interface to this library.
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.
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)
std::string as source
Exception thrown when an invalid signature is encountered.
Flags
Flags controlling filter behavior.
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.
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.
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.
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.
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.
bool CanModifyInput() const
Determines whether input can be modifed 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.
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.
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.
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.
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.
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.
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.
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.
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.