From d49c1a1605772ff6b0b83badc8a55168c5008df6 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Sat, 17 Aug 2019 14:49:03 -0400 Subject: [PATCH] Update documentation --- cryptlib.h | 86 +++++++++++++++++++++++++++++++++++++----------------- simple.h | 60 +++++++++++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+), 26 deletions(-) diff --git a/cryptlib.h b/cryptlib.h index 7e105a3c..445cd9b2 100644 --- a/cryptlib.h +++ b/cryptlib.h @@ -202,6 +202,9 @@ private: class CRYPTOPP_DLL InvalidArgument : public Exception { public: + /// \brief Construct an InvalidArgument + /// \param s the message for the exception + /// \details The member function what() returns s. explicit InvalidArgument(const std::string &s) : Exception(INVALID_ARGUMENT, s) {} }; @@ -209,6 +212,9 @@ public: class CRYPTOPP_DLL InvalidDataFormat : public Exception { public: + /// \brief Construct an InvalidDataFormat + /// \param s the message for the exception + /// \details The member function what() returns s. explicit InvalidDataFormat(const std::string &s) : Exception(INVALID_DATA_FORMAT, s) {} }; @@ -216,6 +222,9 @@ public: class CRYPTOPP_DLL InvalidCiphertext : public InvalidDataFormat { public: + /// \brief Construct an InvalidCiphertext + /// \param s the message for the exception + /// \details The member function what() returns s. explicit InvalidCiphertext(const std::string &s) : InvalidDataFormat(s) {} }; @@ -223,6 +232,9 @@ public: class CRYPTOPP_DLL NotImplemented : public Exception { public: + /// \brief Construct an NotImplemented + /// \param s the message for the exception + /// \details The member function what() returns s. explicit NotImplemented(const std::string &s) : Exception(NOT_IMPLEMENTED, s) {} }; @@ -230,6 +242,9 @@ public: class CRYPTOPP_DLL CannotFlush : public Exception { public: + /// \brief Construct an CannotFlush + /// \param s the message for the exception + /// \details The member function what() returns s. explicit CannotFlush(const std::string &s) : Exception(CANNOT_FLUSH, s) {} }; @@ -238,6 +253,13 @@ class CRYPTOPP_DLL OS_Error : public Exception { public: virtual ~OS_Error() throw() {} + + /// \brief Construct an OS_Error + /// \param errorType the error type + /// \param s the message for the exception + /// \param operation the operation for the exception + /// \param errorCode the error code + /// \details The member function what() returns s. OS_Error(ErrorType errorType, const std::string &s, const std::string& operation, int errorCode) : Exception(errorType, s), m_operation(operation), m_errorCode(errorCode) {} @@ -255,7 +277,8 @@ protected: struct CRYPTOPP_DLL DecodingResult { /// \brief Constructs a DecodingResult - /// \details isValidCoding is initialized to false and messageLength is initialized to 0. + /// \details isValidCoding is initialized to false and messageLength is + /// initialized to 0. explicit DecodingResult() : isValidCoding(false), messageLength(0) {} /// \brief Constructs a DecodingResult /// \param len the message length @@ -264,11 +287,13 @@ struct CRYPTOPP_DLL DecodingResult /// \brief Compare two DecodingResult /// \param rhs the other DecodingResult - /// \return true if both isValidCoding and messageLength are equal, false otherwise + /// \return true if either isValidCoding or messageLength is \a not equal, + /// false otherwise bool operator==(const DecodingResult &rhs) const {return isValidCoding == rhs.isValidCoding && messageLength == rhs.messageLength;} /// \brief Compare two DecodingResult /// \param rhs the other DecodingResult - /// \return true if either isValidCoding or messageLength is \a not equal, false otherwise + /// \return true if either isValidCoding or messageLength is \a not equal, + /// false otherwise /// \details Returns !operator==(rhs). bool operator!=(const DecodingResult &rhs) const {return !operator==(rhs);} @@ -279,24 +304,28 @@ struct CRYPTOPP_DLL DecodingResult }; /// \brief Interface for retrieving values given their names -/// \details This class is used to safely pass a variable number of arbitrarily typed arguments to functions -/// and to read values from keys and crypto parameters. -/// \details To obtain an object that implements NameValuePairs for the purpose of parameter -/// passing, use the MakeParameters() function. -/// \details To get a value from NameValuePairs, you need to know the name and the type of the value. -/// Call GetValueNames() on a NameValuePairs object to obtain a list of value names that it supports. -/// then look at the Name namespace documentation to see what the type of each value is, or -/// alternatively, call GetIntValue() with the value name, and if the type is not int, a -/// ValueTypeMismatch exception will be thrown and you can get the actual type from the exception object. +/// \details This class is used to safely pass a variable number of arbitrarily +/// typed arguments to functions and to read values from keys and crypto parameters. +/// \details To obtain an object that implements NameValuePairs for the purpose of +/// parameter passing, use the MakeParameters() function. +/// \details To get a value from NameValuePairs, you need to know the name and the +/// type of the value. Call GetValueNames() on a NameValuePairs object to obtain a +/// list of value names that it supports. then look at the Name namespace +/// documentation to see what the type of each value is, or alternatively, call +/// GetIntValue() with the value name, and if the type is not int, a +/// ValueTypeMismatch exception will be thrown and you can get the actual type from +/// the exception object. /// \sa NullNameValuePairs, g_nullNameValuePairs, -/// NameValuePairs on the Crypto++ wiki +/// NameValuePairs on the +/// Crypto++ wiki class NameValuePairs { public: virtual ~NameValuePairs() {} /// \brief Thrown when an unexpected type is encountered - /// \details Exception thrown when trying to retrieve a value using a different type than expected + /// \details Exception thrown when trying to retrieve a value using a different + /// type than expected class CRYPTOPP_DLL ValueTypeMismatch : public InvalidArgument { public: @@ -1789,18 +1818,23 @@ public: /// \brief Flush buffered input and/or output, with signal propagation /// \param hardFlush is used to indicate whether all data should be flushed - /// \param propagation the number of attached transformations the Flush() signal should be passed - /// \param blocking specifies whether the object should block when processing input - /// \details propagation count includes this object. Setting propagation to 1 means this - /// object only. Setting propagation to -1 means unlimited propagation. - /// \note Hard flushes must be used with care. It means try to process and output everything, even if - /// there may not be enough data to complete the action. For example, hard flushing a HexDecoder - /// would cause an error if you do it after inputing an odd number of hex encoded characters. - /// \note For some types of filters, like ZlibDecompressor, hard flushes can only - /// be done at "synchronization points". These synchronization points are positions in the data - /// stream that are created by hard flushes on the corresponding reverse filters, in this - /// example ZlibCompressor. This is useful when zlib compressed data is moved across a - /// network in packets and compression state is preserved across packets, as in the SSH2 protocol. + /// \param propagation the number of attached transformations the Flush() + /// signal should be passed + /// \param blocking specifies whether the object should block when processing + /// input + /// \details propagation count includes this object. Setting propagation to + /// 1 means this object only. Setting propagation to -1 + /// means unlimited propagation. + /// \note Hard flushes must be used with care. It means try to process and + /// output everything, even if there may not be enough data to complete the + /// action. For example, hard flushing a HexDecoder would cause an error if + /// you do it after inputing an odd number of hex encoded characters. + /// \note For some types of filters, like ZlibDecompressor, hard flushes can + /// only be done at "synchronization points". These synchronization points + /// are positions in the data stream that are created by hard flushes on the + /// corresponding reverse filters, in this example ZlibCompressor. This is + /// useful when zlib compressed data is moved across a network in packets + /// and compression state is preserved across packets, as in the SSH2 protocol. virtual bool Flush(bool hardFlush, int propagation=-1, bool blocking=true); /// \brief Marks the end of a series of messages, with signal propagation diff --git a/simple.h b/simple.h index f14cf2ba..37eeca85 100644 --- a/simple.h +++ b/simple.h @@ -25,6 +25,9 @@ template class CRYPTOPP_NO_VTABLE ClonableImpl : public BASE { public: + /// \brief Create a copy of this object + /// \returns a copy of this object + /// \details The caller is responsible for freeing the object. Clonable * Clone() const {return new DERIVED(*static_cast(this));} }; @@ -52,6 +55,9 @@ public: class CRYPTOPP_DLL InvalidKeyLength : public InvalidArgument { public: + /// \brief Construct an InvalidKeyLength + /// \param algorithm the Algorithm associated with the exception + /// \param length the key size associated with the exception explicit InvalidKeyLength(const std::string &algorithm, size_t length) : InvalidArgument(algorithm + ": " + IntToString(length) + " is not a valid key length") {} }; @@ -59,6 +65,9 @@ public: class CRYPTOPP_DLL InvalidRounds : public InvalidArgument { public: + /// \brief Construct an InvalidRounds + /// \param algorithm the Algorithm associated with the exception + /// \param rounds the number of rounds associated with the exception explicit InvalidRounds(const std::string &algorithm, unsigned int rounds) : InvalidArgument(algorithm + ": " + IntToString(rounds) + " is not a valid number of rounds") {} }; @@ -66,6 +75,9 @@ public: class CRYPTOPP_DLL InvalidBlockSize : public InvalidArgument { public: + /// \brief Construct an InvalidBlockSize + /// \param algorithm the Algorithm associated with the exception + /// \param length the block size associated with the exception explicit InvalidBlockSize(const std::string &algorithm, size_t length) : InvalidArgument(algorithm + ": " + IntToString(length) + " is not a valid block size") {} }; @@ -73,6 +85,9 @@ public: class CRYPTOPP_DLL InvalidDerivedKeyLength : public InvalidArgument { public: + /// \brief Construct an InvalidDerivedKeyLength + /// \param algorithm the Algorithm associated with the exception + /// \param length the size associated with the exception explicit InvalidDerivedKeyLength(const std::string &algorithm, size_t length) : InvalidArgument(algorithm + ": " + IntToString(length) + " is not a valid derived key length") {} }; @@ -80,6 +95,9 @@ public: class CRYPTOPP_DLL InvalidPersonalizationLength : public InvalidArgument { public: + /// \brief Construct an InvalidPersonalizationLength + /// \param algorithm the Algorithm associated with the exception + /// \param length the personalization size associated with the exception explicit InvalidPersonalizationLength(const std::string &algorithm, size_t length) : InvalidArgument(algorithm + ": " + IntToString(length) + " is not a valid salt length") {} }; @@ -87,6 +105,9 @@ public: class CRYPTOPP_DLL InvalidSaltLength : public InvalidArgument { public: + /// \brief Construct an InvalidSaltLength + /// \param algorithm the Algorithm associated with the exception + /// \param length the salt size associated with the exception explicit InvalidSaltLength(const std::string &algorithm, size_t length) : InvalidArgument(algorithm + ": " + IntToString(length) + " is not a valid salt length") {} }; @@ -98,6 +119,10 @@ template class CRYPTOPP_NO_VTABLE Bufferless : public T { public: + /// \brief Flushes data buffered by this object, without signal propagation + /// \param hardFlush indicates whether all data should be flushed + /// \param blocking specifies whether the object should block when processing input + /// \note hardFlush must be used with care bool IsolatedFlush(bool hardFlush, bool blocking) {CRYPTOPP_UNUSED(hardFlush); CRYPTOPP_UNUSED(blocking); return false;} }; @@ -108,10 +133,45 @@ template class CRYPTOPP_NO_VTABLE Unflushable : public T { public: + /// \brief Flush buffered input and/or output, with signal propagation + /// \param hardFlush is used to indicate whether all data should be flushed + /// \param propagation the number of attached transformations the Flush() + /// signal should be passed + /// \param blocking specifies whether the object should block when processing + /// input + /// \details propagation count includes this object. Setting propagation to + /// 1 means this object only. Setting propagation to -1 + /// means unlimited propagation. + /// \note Hard flushes must be used with care. It means try to process and + /// output everything, even if there may not be enough data to complete the + /// action. For example, hard flushing a HexDecoder would cause an error if + /// you do it after inputing an odd number of hex encoded characters. + /// \note For some types of filters, like ZlibDecompressor, hard flushes can + /// only be done at "synchronization points". These synchronization points + /// are positions in the data stream that are created by hard flushes on the + /// corresponding reverse filters, in this example ZlibCompressor. This is + /// useful when zlib compressed data is moved across a network in packets + /// and compression state is preserved across packets, as in the SSH2 protocol. bool Flush(bool completeFlush, int propagation=-1, bool blocking=true) {return ChannelFlush(DEFAULT_CHANNEL, completeFlush, propagation, blocking);} + + /// \brief Flushes data buffered by this object, without signal propagation + /// \param hardFlush indicates whether all data should be flushed + /// \param blocking specifies whether the object should block when processing input + /// \note hardFlush must be used with care bool IsolatedFlush(bool hardFlush, bool blocking) {CRYPTOPP_UNUSED(hardFlush); CRYPTOPP_UNUSED(blocking); CRYPTOPP_ASSERT(false); return false;} + + /// \brief Flush buffered input and/or output on a channel + /// \param channel the channel to flush the data + /// \param hardFlush is used to indicate whether all data should be flushed + /// \param propagation the number of attached transformations the ChannelFlush() + /// signal should be passed + /// \param blocking specifies whether the object should block when processing input + /// \return true of the Flush was successful + /// \details propagation count includes this object. Setting propagation to + /// 1 means this object only. Setting propagation to -1 means + /// unlimited propagation. bool ChannelFlush(const std::string &channel, bool hardFlush, int propagation=-1, bool blocking=true) { if (hardFlush && !InputBufferIsEmpty())