Crypto++
8.8
Free C++ class library of cryptographic schemes
|
5 #ifndef CRYPTOPP_IMPORTS
12 : m_queue(nodeSize), m_lengths(1, 0U), m_messageCounts(1, 0U)
27 size_t blockedBytes = m_queue.
TransferTo2(target, transferBytes, channel, blocking);
28 m_lengths.front() -= transferBytes;
36 m_lengths.pop_front();
37 if (m_messageCounts[0] == 0 && m_messageCounts.size() > 1)
38 m_messageCounts.pop_front();
48 std::deque<lword>::const_iterator it = m_lengths.begin();
50 for (i=0; i<count && it != --m_lengths.end(); ++i, ++it)
52 walker.TransferTo(target, *it, channel);
61 m_queue.
swap(rhs.m_queue);
62 m_lengths.swap(rhs.m_lengths);
67 const byte *result = m_queue.
Spy(contiguousSize);
74 unsigned int EqualityComparisonFilter::MapChannel(
const std::string &channel)
const
76 if (channel == m_firstChannel)
78 else if (channel == m_secondChannel)
87 throw BlockingInputOnly(
"EqualityComparisonFilter");
89 unsigned int i = MapChannel(channel);
92 return Output(3, inString, length, messageEnd, blocking, channel);
93 else if (m_mismatchDetected)
99 if (q2.AnyMessages() && q2.MaxRetrievable() < length)
102 while (length > 0 && q2.AnyRetrievable())
105 const byte *data = q2.
Spy(len);
106 len =
STDMIN(len, length);
107 if (std::memcmp(inString, data, len) != 0)
114 q1.
Put(inString, length);
118 if (q2.AnyRetrievable())
120 else if (q2.AnyMessages())
122 else if (q2.NumberOfMessageSeries() > 0)
131 return HandleMismatchDetected(blocking);
137 unsigned int i = MapChannel(channel);
141 OutputMessageSeriesEnd(4, propagation, blocking, channel);
144 else if (m_mismatchDetected)
150 if (q2.AnyRetrievable() || q2.AnyMessages())
152 else if (q2.NumberOfMessageSeries() > 0)
153 return Output(2, (
const byte *)
"\1", 1, 0, blocking) != 0;
160 return HandleMismatchDetected(blocking);
164 bool EqualityComparisonFilter::HandleMismatchDetected(
bool blocking)
166 m_mismatchDetected =
true;
167 if (m_throwIfNotEqual)
168 throw MismatchDetected();
169 const byte b[1] = {0};
170 return Output(1, b, 1, 0, blocking) != 0;
MessageQueue(unsigned int nodeSize=256)
Construct a MessageQueue.
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.
void swap(ByteQueue &rhs)
Swap contents with another ByteQueue.
size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true)
Transfer bytes from this object to another BufferedTransformation.
const T1 UnsignedMin(const T1 &a, const T2 &b)
Safe comparison of values that could be negative and incorrectly promoted.
unsigned int CopyMessagesTo(BufferedTransformation &target, unsigned int count=UINT_MAX, const std::string &channel=DEFAULT_CHANNEL) const
Copy messages from this object to another BufferedTransformation.
lword MaxRetrievable() const
Provides the number of bytes ready for retrieval.
bool AnyRetrievable() const
Determines whether bytes are ready for retrieval.
void swap(MessageQueue &rhs)
Swap contents with another MessageQueue.
const T & STDMIN(const T &a, const T &b)
Replacement function for std::min.
int GetAutoSignalPropagation() const
Retrieve automatic signal propagation value.
const byte * Spy(size_t &contiguousSize) const
Peek data in the queue.
const byte * Spy(size_t &contiguousSize) const
Peek data in the queue.
size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=DEFAULT_CHANNEL, bool blocking=true)
Transfer bytes from this object to another BufferedTransformation.
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.
bool GetNextMessage()
Start retrieving the next message.
word64 lword
Large word type.
Data structure used to store messages.
Crypto++ library namespace.
Classes for an unlimited queue to store messages.
unsigned int NumberOfMessages() const
Provides the number of meesages processed by this object.
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.
bool ChannelMessageSeriesEnd(const std::string &channel, int propagation=-1, bool blocking=true)
Marks the end of a series of messages on a channel.