Updated documentation

pull/118/merge
Jeffrey Walton 2016-01-17 12:48:28 -05:00
parent 56e9ad363e
commit a991b29f97
4 changed files with 49 additions and 47 deletions

View File

@ -13,7 +13,7 @@ NAMESPACE_BEGIN(CryptoPP)
//! \class Base32Encoder //! \class Base32Encoder
//! \brief Base32 encodes data //! \brief Base32 encodes data
//! \details Converts data to base32. The default code is based on draft-ietf-idn-dude-02.txt. //! \details Converts data to base32. The default code is based on <A HREF="http://www.ietf.org/proceedings/51/I-D/draft-ietf-idn-dude-02.txt">Differential Unicode Domain Encoding (DUDE) (draft-ietf-idn-dude-02.txt)</A>.
class Base32Encoder : public SimpleProxyFilter class Base32Encoder : public SimpleProxyFilter
{ {
public: public:
@ -41,25 +41,23 @@ public:
//! <pre> //! <pre>
//! Base32Encoder encoder; //! Base32Encoder encoder;
//! AlgorithmParameters params = MakeParameters(Pad(), false)(InsertLineBreaks(), false); //! AlgorithmParameters params = MakeParameters(Pad(), false)(InsertLineBreaks(), false);
//! encoder.IsolatedInitialize(params); //! encoder.IsolatedInitialize(params);</pre>
//! </pre> //! \details You can change the encoding to <A HREF="http://tools.ietf.org/html/rfc4648#page-10">RFC 4648, Base
//! \details The default encoding alpahbet is DUDE. You can change the encoding to RFC 4648 alphabet by //! 32 Encoding with Extended Hex Alphabet</A> by performing the following:
//! performing the following:
//! <pre> //! <pre>
//! Base32Encoder encoder; //! Base32Encoder encoder;
//! const byte ALPHABET[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; //! const byte ALPHABET[] = "0123456789ABCDEFGHIJKLMNOPQRSTUV";
//! AlgorithmParameters params = MakeParameters(Name::EncodingLookupArray(),(const byte *)ALPHABET); //! AlgorithmParameters params = MakeParameters(Name::EncodingLookupArray(),(const byte *)ALPHABET);
//! encoder.IsolatedInitialize(params); //! encoder.IsolatedInitialize(params);</pre>
//! </pre>
//! \details If you change the encoding alphabet, then you will need to change the decoding alphabet \a and //! \details If you change the encoding alphabet, then you will need to change the decoding alphabet \a and
//! the decoder's lookup table. //! the decoder's lookup table.
//! \sa IsolatedInitialize() for an example of modifying a Base32Encoder after construction. //! \sa Base32Decoder::IsolatedInitialize() for an example of changing a Base32Decoder's lookup table.
void IsolatedInitialize(const NameValuePairs &parameters); void IsolatedInitialize(const NameValuePairs &parameters);
}; };
//! \class Base32Decoder //! \class Base32Decoder
//! \brief Base32 decodes data //! \brief Base32 decodes data
//! \details Decode base32 data. The default code is based on draft-ietf-idn-dude-02.txt //! \details Decode base32 data. The default code is based on <A HREF="http://www.ietf.org/proceedings/51/I-D/draft-ietf-idn-dude-02.txt">Differential Unicode Domain Encoding (DUDE) (draft-ietf-idn-dude-02.txt)</A>.
class Base32Decoder : public BaseN_Decoder class Base32Decoder : public BaseN_Decoder
{ {
public: public:
@ -74,17 +72,17 @@ public:
//! \details IsolatedInitialize() is used to initialize or reinitialize an object using a variable //! \details IsolatedInitialize() is used to initialize or reinitialize an object using a variable
//! number of arbitrarily typed arguments. IsolatedInitialize() does not call Initialize() on attached //! number of arbitrarily typed arguments. IsolatedInitialize() does not call Initialize() on attached
//! transformations. If initialization should be propagated, then use the Initialize() function. //! transformations. If initialization should be propagated, then use the Initialize() function.
//! \details The default decoding alpahbet is DUDE. You can change the to RFC 4868 alphabet by //! \details You can change the encoding to <A HREF="http://tools.ietf.org/html/rfc4648#page-10">RFC 4648, Base
//! performing the following: //! 32 Encoding with Extended Hex Alphabet</A> by performing the following:
//! <pre> //! <pre>
//! int lookup[256]; //! int lookup[256];
//! const byte ALPHABET[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; //! const byte ALPHABET[] = "0123456789ABCDEFGHIJKLMNOPQRSTUV";
//! Base32Decoder::InitializeDecodingLookupArray(lookup, ALPHABET, 32, true /*insensitive*/); //! Base32Decoder::InitializeDecodingLookupArray(lookup, ALPHABET, 32, true /*insensitive*/);
//! //!
//! Base32Decoder decoder; //! Base32Decoder decoder;
//! AlgorithmParameters params = MakeParameters(Name::DecodingLookupArray(),(const int *)lookup); //! AlgorithmParameters params = MakeParameters(Name::DecodingLookupArray(),(const int *)lookup);
//! decoder.IsolatedInitialize(params); //! decoder.IsolatedInitialize(params);</pre>
//! </pre> //! \sa Base32Encoder::IsolatedInitialize() for an example of changing a Base32Encoder's alphabet.
void IsolatedInitialize(const NameValuePairs &parameters); void IsolatedInitialize(const NameValuePairs &parameters);
private: private:

View File

@ -13,7 +13,7 @@ NAMESPACE_BEGIN(CryptoPP)
//! \class Base64Encoder //! \class Base64Encoder
//! \brief Base64 encodes data //! \brief Base64 encodes data
//! \details Base64 encodes data per RFC 4648 (http://tools.ietf.org/html/rfc4648#section-4) //! \details Base64 encodes data per <A HREF="http://tools.ietf.org/html/rfc4648#section-4">RFC 4648, Base 64 Encoding</A>.
class Base64Encoder : public SimpleProxyFilter class Base64Encoder : public SimpleProxyFilter
{ {
public: public:
@ -21,9 +21,9 @@ public:
//! \param attachment a BufferedTrasformation to attach to this object //! \param attachment a BufferedTrasformation to attach to this object
//! \param insertLineBreaks a BufferedTrasformation to attach to this object //! \param insertLineBreaks a BufferedTrasformation to attach to this object
//! \param maxLineLength the lenght of a line if line breaks are used //! \param maxLineLength the lenght of a line if line breaks are used
//! \details Base64Encoder() constructs a default encoder. The constructor lacks parameters for padding. //! \details Base64Encoder constructs a default encoder. The constructor lacks a parameter for padding, and you must
//! You must use IsolatedInitialize() to modify the Base64Encoder after construction. //! use IsolatedInitialize() to modify the Base64Encoder after construction.
//! \sa Base64URLEncoder(), and IsolatedInitialize() for an example of modifying a Base64Encoder after construction. //! \sa IsolatedInitialize() for an example of modifying an encoder after construction.
Base64Encoder(BufferedTransformation *attachment = NULL, bool insertLineBreaks = true, int maxLineLength = 72) Base64Encoder(BufferedTransformation *attachment = NULL, bool insertLineBreaks = true, int maxLineLength = 72)
: SimpleProxyFilter(new BaseN_Encoder(new Grouper), attachment) : SimpleProxyFilter(new BaseN_Encoder(new Grouper), attachment)
{ {
@ -39,31 +39,29 @@ public:
//! <pre> //! <pre>
//! Base64Encoder encoder; //! Base64Encoder encoder;
//! AlgorithmParameters params = MakeParameters(Pad(), false)(InsertLineBreaks(), false); //! AlgorithmParameters params = MakeParameters(Pad(), false)(InsertLineBreaks(), false);
//! encoder.IsolatedInitialize(params); //! encoder.IsolatedInitialize(params);</pre>
//! </pre> //! \details You can change the encoding to RFC 4648 web safe alphabet by performing the following:
//! \details The default encoding alpahbet is DUDE. You can change the encoding to RFC 4648 web safe alphabet
//! by performing the following:
//! <pre> //! <pre>
//! Base64Encoder encoder; //! Base64Encoder encoder;
//! const byte ALPHABET[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; //! const byte ALPHABET[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
//! AlgorithmParameters params = MakeParameters(Name::EncodingLookupArray(),(const byte *)ALPHABET); //! AlgorithmParameters params = MakeParameters(Name::EncodingLookupArray(),(const byte *)ALPHABET);
//! encoder.IsolatedInitialize(params); //! encoder.IsolatedInitialize(params);</pre>
//! </pre>
//! \details If you change the encoding alphabet, then you will need to change the decoding alphabet \a and //! \details If you change the encoding alphabet, then you will need to change the decoding alphabet \a and
//! the decoder's lookup table. //! the decoder's lookup table.
//! \sa Base64URLEncoder(), and IsolatedInitialize() for an example of modifying a Base64Encoder after construction. //! \sa Base64URLEncoder for an encoder that provides the web safe alphabet, and Base64Decoder::IsolatedInitialize()
//! for an example of modifying a decoder's lookup table after construction.
void IsolatedInitialize(const NameValuePairs &parameters); void IsolatedInitialize(const NameValuePairs &parameters);
}; };
//! \class Base64Decoder //! \class Base64Decoder
//! \brief Base64 decodes data //! \brief Base64 decodes data
//! \details Base64 decodes data per RFC 4648 (http://tools.ietf.org/html/rfc4648#section-4) //! \details Base64 encodes data per <A HREF="http://tools.ietf.org/html/rfc4648#section-4">RFC 4648, Base 64 Encoding</A>.
class Base64Decoder : public BaseN_Decoder class Base64Decoder : public BaseN_Decoder
{ {
public: public:
//! \brief Construct a Base64Decoder //! \brief Construct a Base64Decoder
//! \param attachment a BufferedTrasformation to attach to this object //! \param attachment a BufferedTrasformation to attach to this object
//! \sa Base64URLDecoder(), and IsolatedInitialize() for an example of modifying a Base64Decoder after construction. //! \sa IsolatedInitialize() for an example of modifying an encoder after construction.
Base64Decoder(BufferedTransformation *attachment = NULL) Base64Decoder(BufferedTransformation *attachment = NULL)
: BaseN_Decoder(GetDecodingLookupArray(), 6, attachment) {} : BaseN_Decoder(GetDecodingLookupArray(), 6, attachment) {}
@ -81,9 +79,9 @@ public:
//! //!
//! Base64Decoder decoder; //! Base64Decoder decoder;
//! AlgorithmParameters params = MakeParameters(Name::DecodingLookupArray(),(const int *)lookup); //! AlgorithmParameters params = MakeParameters(Name::DecodingLookupArray(),(const int *)lookup);
//! decoder.IsolatedInitialize(params); //! decoder.IsolatedInitialize(params);</pre>
//! </pre> //! \sa Base64URLDecoder for a decoder that provides the web safe alphabet, and Base64Encoder::IsolatedInitialize()
//! \sa Base64URLDecoder(), and IsolatedInitialize() for an example of modifying a Base64Decoder after construction. //! for an example of modifying an encoder's alphabet after construction.
void IsolatedInitialize(const NameValuePairs &parameters); void IsolatedInitialize(const NameValuePairs &parameters);
private: private:
@ -94,7 +92,8 @@ private:
//! \class Base64URLEncoder //! \class Base64URLEncoder
//! \brief Base64 encodes data using a web safe alphabet //! \brief Base64 encodes data using a web safe alphabet
//! \details Base64 encodes data using a web safe alphabet per RFC 4648 (http://tools.ietf.org/html/rfc4648#section-5) //! \details Base64 encodes data per <A HREF="http://tools.ietf.org/html/rfc4648#section-5">RFC 4648, Base 64 Encoding
//! with URL and Filename Safe Alphabet</A>.
class Base64URLEncoder : public SimpleProxyFilter class Base64URLEncoder : public SimpleProxyFilter
{ {
public: public:
@ -102,13 +101,14 @@ public:
//! \param attachment a BufferedTrasformation to attach to this object //! \param attachment a BufferedTrasformation to attach to this object
//! \param insertLineBreaks a BufferedTrasformation to attach to this object //! \param insertLineBreaks a BufferedTrasformation to attach to this object
//! \param maxLineLength the lenght of a line if line breaks are used //! \param maxLineLength the lenght of a line if line breaks are used
//! \details Base64URLEncoder() constructs a default encoder. The constructor ignores insertLineBreaks //! \details Base64URLEncoder() constructs a default encoder using a web safe alphabet. The constructor ignores
//! and maxLineLength because the web and URL safe specifications don't use them. They are present //! insertLineBreaks and maxLineLength because the web and URL safe specifications don't use them. They are
//! in the constructor for API compatibility with Base64Encoder (drop-in replacement). The //! present in the constructor for API compatibility with Base64Encoder so it is a drop-in replacement. The
//! constructor also disables padding on the encoder for the same reason. //! constructor also disables padding on the encoder for the same reason.
//! \details If you need line breaks or padding, then you must use IsolatedInitialize() to set them //! \details If you need line breaks or padding, then you must use IsolatedInitialize() to set them
//! after constructing a Base64URLEncoder. //! after constructing a Base64URLEncoder.
//! \sa Base64Encoder(), and IsolatedInitialize() for an example of modifying a Base64URLEncoder after construction. //! \sa Base64Encoder for an encoder that provides a classic alphabet, and Base64URLEncoder::IsolatedInitialize
//! for an example of modifying an encoder after construction.
Base64URLEncoder(BufferedTransformation *attachment = NULL, bool insertLineBreaks = false, int maxLineLength = -1) Base64URLEncoder(BufferedTransformation *attachment = NULL, bool insertLineBreaks = false, int maxLineLength = -1)
: SimpleProxyFilter(new BaseN_Encoder(new Grouper), attachment) : SimpleProxyFilter(new BaseN_Encoder(new Grouper), attachment)
{ {
@ -123,21 +123,22 @@ public:
//! <pre> //! <pre>
//! Base64URLEncoder encoder; //! Base64URLEncoder encoder;
//! AlgorithmParameters params = MakeParameters(Name::Pad(), true)(Name::InsertLineBreaks(), true); //! AlgorithmParameters params = MakeParameters(Name::Pad(), true)(Name::InsertLineBreaks(), true);
//! encoder.IsolatedInitialize(params); //! encoder.IsolatedInitialize(params);</pre>
//! </pre> //! \sa Base64Encoder for an encoder that provides a classic alphabet.
//! \sa Base64Encoder(), and IsolatedInitialize() for an example of modifying a Base64URLEncoder after construction.
void IsolatedInitialize(const NameValuePairs &parameters); void IsolatedInitialize(const NameValuePairs &parameters);
}; };
//! \class Base64URLDecoder //! \class Base64URLDecoder
//! \brief Base64 decodes data using a web safe alphabet //! \brief Base64 decodes data using a web safe alphabet
//! \details Base64 decodes data using a web safe alphabet per RFC 4648 (http://tools.ietf.org/html/rfc4648#section-5) //! \details Base64 encodes data per <A HREF="http://tools.ietf.org/html/rfc4648#section-5">RFC 4648, Base 64 Encoding
//! with URL and Filename Safe Alphabet</A>.
class Base64URLDecoder : public BaseN_Decoder class Base64URLDecoder : public BaseN_Decoder
{ {
public: public:
//! \brief Construct a Base64URLDecoder //! \brief Construct a Base64URLDecoder
//! \param attachment a BufferedTrasformation to attach to this object //! \param attachment a BufferedTrasformation to attach to this object
//! \sa Base64Decoder(), and IsolatedInitialize() for an example of modifying a Base64Decoder() after construction. //! \details Base64URLDecoder() constructs a default decoder using a web safe alphabet.
//! \sa Base64Decoder for a decoder that provides a classic alphabet.
Base64URLDecoder(BufferedTransformation *attachment = NULL) Base64URLDecoder(BufferedTransformation *attachment = NULL)
: BaseN_Decoder(GetDecodingLookupArray(), 6, attachment) {} : BaseN_Decoder(GetDecodingLookupArray(), 6, attachment) {}
@ -146,7 +147,8 @@ public:
//! \details IsolatedInitialize() is used to initialize or reinitialize an object using a variable //! \details IsolatedInitialize() is used to initialize or reinitialize an object using a variable
//! number of arbitrarily typed arguments. IsolatedInitialize() does not call Initialize() on //! number of arbitrarily typed arguments. IsolatedInitialize() does not call Initialize() on
//! attached transformations. If initialization should be propagated, then use the Initialize() function. //! attached transformations. If initialization should be propagated, then use the Initialize() function.
//! \sa Base64Decoder(), and IsolatedInitialize() for an example of modifying a Base64Decoder() after construction. //! \sa Base64Decoder for a decoder that provides a classic alphabet, and Base64URLEncoder::IsolatedInitialize
//! for an example of modifying an encoder after construction.
void IsolatedInitialize(const NameValuePairs &parameters); void IsolatedInitialize(const NameValuePairs &parameters);
private: private:

View File

@ -2579,6 +2579,7 @@ class CRYPTOPP_DLL CRYPTOPP_NO_VTABLE PK_Verifier : public PK_SignatureScheme, p
{ {
public: public:
//! \brief Create a new HashTransformation to accumulate the message to be verified //! \brief Create a new HashTransformation to accumulate the message to be verified
//! \return a pointer to a PK_MessageAccumulator
//! \details NewVerificationAccumulator() can be used with all verification methods. Verify() will autimatically delete //! \details NewVerificationAccumulator() can be used with all verification methods. Verify() will autimatically delete
//! the accumulator pointer. The caller is responsible for deletion if a method is called that takes a reference. //! the accumulator pointer. The caller is responsible for deletion if a method is called that takes a reference.
virtual PK_MessageAccumulator * NewVerificationAccumulator() const =0; virtual PK_MessageAccumulator * NewVerificationAccumulator() const =0;
@ -2591,6 +2592,7 @@ public:
//! \brief Check whether messageAccumulator contains a valid signature and message //! \brief Check whether messageAccumulator contains a valid signature and message
//! \param messageAccumulator a pointer to a PK_MessageAccumulator derived class //! \param messageAccumulator a pointer to a PK_MessageAccumulator derived class
//! \return true if the signature is valid, false otherwise
//! \details Verify() deletes the messageAccumulator, even if an exception is thrown. //! \details Verify() deletes the messageAccumulator, even if an exception is thrown.
virtual bool Verify(PK_MessageAccumulator *messageAccumulator) const; virtual bool Verify(PK_MessageAccumulator *messageAccumulator) const;

10
rng.h
View File

@ -42,7 +42,8 @@ private:
//! \class X917RNG //! \class X917RNG
//! \brief ANSI X9.17 RNG //! \brief ANSI X9.17 RNG
//! \details X917RNG is from ANSI X9.17 Appendix C. //! \details X917RNG is from ANSI X9.17 Appendix C, and it uses a 64-bit block cipher, like TripleDES.
//! If you use a 128-bit block cipher, like AES, then you are effectively using an ANSI X9.31 generator.
//! \sa AutoSeededX917RNG, DefaultAutoSeededRNG //! \sa AutoSeededX917RNG, DefaultAutoSeededRNG
class CRYPTOPP_DLL X917RNG : public RandomNumberGenerator, public NotCopyable class CRYPTOPP_DLL X917RNG : public RandomNumberGenerator, public NotCopyable
{ {
@ -54,15 +55,14 @@ public:
//! \details <tt>cipher</tt> will be deleted by the destructor. <tt>seed</tt> must be at least //! \details <tt>cipher</tt> will be deleted by the destructor. <tt>seed</tt> must be at least
//! BlockSize() in length. <tt>deterministicTimeVector = 0</tt> means obtain time vector //! BlockSize() in length. <tt>deterministicTimeVector = 0</tt> means obtain time vector
//! from the system. //! from the system.
//! \details When constructing an AutoSeededX917RNG, the generator must be keyed or an //! \details When constructing a X917RNG, the generator must be keyed or an access
//! access violation will occur because the time vector is encrypted using the block cipher. //! violation will occur because the time vector is encrypted using the block cipher.
//! To key the generator during constructions, perform the following: //! To key the generator during constructions, perform the following:
//! <pre> //! <pre>
//! SecByteBlock key(AES::DEFAULT_KEYLENGTH), seed(AES::BLOCKSIZE); //! SecByteBlock key(AES::DEFAULT_KEYLENGTH), seed(AES::BLOCKSIZE);
//! OS_GenerateRandomBlock(false, key, key.size()); //! OS_GenerateRandomBlock(false, key, key.size());
//! OS_GenerateRandomBlock(false, seed, seed.size()); //! OS_GenerateRandomBlock(false, seed, seed.size());
//! X917RNG prng(new AES::Encryption(key, AES::DEFAULT_KEYLENGTH), seed, NULL); //! X917RNG prng(new AES::Encryption(key, AES::DEFAULT_KEYLENGTH), seed, NULL);</pre>
//! </pre>
//! \sa AutoSeededX917RNG //! \sa AutoSeededX917RNG
X917RNG(BlockTransformation *cipher, const byte *seed, const byte *deterministicTimeVector = 0); X917RNG(BlockTransformation *cipher, const byte *seed, const byte *deterministicTimeVector = 0);