WvStreams
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes
WvRSAEncoder Class Reference

An encoder implementing the RSA public key encryption method. More...

#include <wvrsa.h>

Inheritance diagram for WvRSAEncoder:
Inheritance graph
[legend]

List of all members.

Public Types

enum  Mode { Encrypt, Decrypt, SignEncrypt, SignDecrypt }

Public Member Functions

 WvRSAEncoder (Mode mode, const WvRSAKey &key)
 Creates a new RSA cipher encoder.
bool isok () const
 Returns true if the encoder has not encountered an error.
bool isfinished () const
 Returns true if the encoder can no longer encode data.
WvString geterror () const
 Returns an error message if any is available.
bool encode (WvBuf &inbuf, WvBuf &outbuf, bool flush=false, bool finish=false)
 Reads data from the input buffer, encodes it, and writes the result to the output buffer.
bool flush (WvBuf &inbuf, WvBuf &outbuf, bool finish=false)
 Flushes the encoder and optionally finishes it.
bool finish (WvBuf &outbuf)
 Tells the encoder that NO MORE DATA will ever be encoded.
bool reset ()
 Asks an encoder to reset itself to its initial state at creation time, if supported.
bool flushstrbuf (WvStringParm instr, WvBuf &outbuf, bool finish=false)
 Flushes data through the encoder from a string to a buffer.
bool flushstrstr (WvStringParm instr, WvString &outstr, bool finish=false)
 Flushes data through the encoder from a string to a string.
bool encodebufstr (WvBuf &inbuf, WvString &outstr, bool flush=false, bool finish=false)
 Encodes data from a buffer to a string.
bool flushbufstr (WvBuf &inbuf, WvString &outstr, bool finish=false)
 Flushes data through the encoder from a buffer to a string.
WvString strflushstr (WvStringParm instr, bool finish=false)
 Flushes data through the encoder from a string to a string.
WvString strflushbuf (WvBuf &inbuf, bool finish=false)
 Flushes data through the encoder from a buffer to a string.
bool flushmembuf (const void *inmem, size_t inlen, WvBuf &outbuf, bool finish=false)
 Flushes data through the encoder from memory to a buffer.
bool flushmemmem (const void *inmem, size_t inlen, void *outmem, size_t *outlen, bool finish=false)
 Flushes data through the encoder from memory to memory.
bool encodebufmem (WvBuf &inbuf, void *outmem, size_t *outlen, bool flush=false, bool finish=false)
 Encodes data from a buffer to memory.
bool flushbufmem (WvBuf &inbuf, void *outmem, size_t *outlen, bool finish=false)
 Flushes data through the encoder from a buffer to memory.
bool flushstrmem (WvStringParm instr, void *outmem, size_t *outlen, bool finish=false)
 Flushes data through the encoder from a string to memory.
WvString strflushmem (const void *inmem, size_t inlen, bool finish=false)
 Flushes data through the encoder from memory to a string.

Protected Member Functions

virtual bool _encode (WvBuf &in, WvBuf &out, bool flush)
 Template method implementation of encode().
virtual bool _reset ()
 Template method implementation of reset().
void setnotok ()
 Sets 'okay' to false explicitly.
void seterror (WvStringParm message)
 Sets an error condition, then setnotok().
void seterror (WVSTRING_FORMAT_DECL)
 Sets an error condition, then setnotok().
void setfinished ()
 Sets 'finished' to true explicitly.
virtual bool _isok () const
 Template method implementation of isok().
virtual bool _isfinished () const
 Template method implementation of isfinished().
virtual WvString _geterror () const
 Template method implementation of geterror().
virtual bool _finish (WvBuf &outbuf)
 Template method implementation of finish().

Protected Attributes

bool okay
bool finished
WvString errstr

Detailed Description

An encoder implementing the RSA public key encryption method.

This encoder really slow, particularly for decryption, so should only be used to negotiate session initiation information. For more intensive work, consider exchanging a key for use with a faster symmetric cipher like Blowfish.

Supports reset().

Definition at line 84 of file wvrsa.h.


Member Enumeration Documentation

Enumerator:
Encrypt 

Encrypt with public key

Decrypt 

Decrypt with private key

SignEncrypt 

Encrypt digital signature with private key

SignDecrypt 

Decrypt digital signature with public key

Definition at line 87 of file wvrsa.h.


Constructor & Destructor Documentation

WvRSAEncoder::WvRSAEncoder ( Mode  mode,
const WvRSAKey key 
)

Creates a new RSA cipher encoder.

"mode" is the encryption mode "key" is the public key if mode is Encrypt or SignDecrypt, otherwise the private key

Definition at line 221 of file wvrsa.cc.


Member Function Documentation

bool WvRSAEncoder::_encode ( WvBuf inbuf,
WvBuf outbuf,
bool  flush 
) [protected, virtual]

Template method implementation of encode().

Not called if any of the following cases are true:

  • okay == false
  • finished == true
  • in.used() == 0 && flush == false

All implementations MUST define this.

If you also override _isok() or _isfinished(), note that they will NOT be consulted when determining whether or not to invoke this function. This allows finer control over the semantics of isok() and isfinished() with respect to encode().

"inbuf" is the input buffer "outbuf" is the output buffer "flush" is if true, flushes the encoder Returns: true on success

See also:
encode

Implements WvEncoder.

Definition at line 242 of file wvrsa.cc.

References WvBufBaseCommonImpl< T >::alloc(), Decrypt, Encrypt, WvBufBaseCommonImpl< T >::get(), SignDecrypt, SignEncrypt, WvBufBaseCommonImpl< T >::unalloc(), WvBufBaseCommonImpl< T >::used(), and WvBufBaseCommonImpl< T >::zap().

bool WvRSAEncoder::_reset ( ) [protected, virtual]

Template method implementation of reset().

When this method is invoked, the current local state will be okay == true and finished == false. If false is returned, then okay will be set to false.

May set a detailed error message if an error occurs.

Returns: true on success, false on error or if not supported

See also:
reset

Reimplemented from WvEncoder.

Definition at line 236 of file wvrsa.cc.

bool WvEncoder::isok ( ) const [inline, inherited]

Returns true if the encoder has not encountered an error.

This should only be used to record permanent failures. Transient errors (eg. bad block, but recoverable) should be detected in a different fashion.

Returns: true if the encoder is ok

Definition at line 90 of file wvencoder.h.

References WvEncoder::_isok(), and WvEncoder::okay.

Referenced by WvEncoder::geterror().

bool WvEncoder::isfinished ( ) const [inline, inherited]

Returns true if the encoder can no longer encode data.

This will be set when the encoder detects and end-of-data mark in its input, or when finish() is called.

Returns: true if the encoder is finished

Definition at line 101 of file wvencoder.h.

References WvEncoder::_isfinished(), and WvEncoder::finished.

WvString WvEncoder::geterror ( ) const [inherited]

Returns an error message if any is available.

Returns: the error message, or the null string is isok() == true

Definition at line 23 of file wvencoder.cc.

References WvEncoder::_geterror(), WvEncoder::errstr, and WvEncoder::isok().

bool WvEncoder::encode ( WvBuf inbuf,
WvBuf outbuf,
bool  flush = false,
bool  finish = false 
) [inherited]

Reads data from the input buffer, encodes it, and writes the result to the output buffer.

If flush == true, the input buffer will be drained and the output buffer will contain all of the encoded data including any that might have been buffered internally from previous calls. Thus it is possible that new data will be written to the output buffer even though the input buffer was empty when encode() was called. If the buffer could not be fully drained because there was insufficient data, this function returns false and leaves the remaining unflushed data in the buffer.

If flush == false, the encoder will read and encode as much data as possible (or as is convenient) from the input buffer and store the results in the output buffer. Partial results may be buffered internally by the encoder to be written to the output buffer later when the encoder is flushed.

If finish = true, the encode() will be followed up by a call to finish(). The return values will be ANDed together to yield the final result. Most useful when flush is also true.

If a permanent error occurs, then isok() will return false, this function will return false and the input buffer will be left in an undefined state.

If a recoverable error occurs, the encoder should discard the problematic data from the input buffer and return false from this function, but isok() will remain true.

A stream might become isfinished() == true if an encoder- specific end-of-data marker was detected in the input.

"inbuf" is the input buffer "outbuf" is the output buffer "flush" is if true, flushes the encoder "finish" is if true, calls finish() on success Returns: true on success

See also:
_encode for the actual implementation

Definition at line 36 of file wvencoder.cc.

References WvEncoder::_encode(), WvEncoder::finish(), WvEncoder::finished, WvEncoder::flush(), WvEncoder::okay, and WvBufBaseCommonImpl< T >::used().

Referenced by WvCounterModeEncoder::_encode(), WvEncoder::encodebufmem(), WvEncoder::encodebufstr(), WvEncoder::flush(), WvEncoder::flushmembuf(), WvEncoder::flushstrbuf(), and WvEncoder::flushstrstr().

bool WvEncoder::flush ( WvBuf inbuf,
WvBuf outbuf,
bool  finish = false 
) [inline, inherited]

Flushes the encoder and optionally finishes it.

"inbuf" is the input buffer "outbuf" is the output buffer "finish" is if true, calls finish() on success Returns: true on success

Definition at line 163 of file wvencoder.h.

References WvEncoder::encode(), and WvEncoder::finish().

Referenced by WvBackslashEncoder::_encode(), WvEncoder::encode(), WvEncoderStream::finish_read(), and WvEncoderStream::flush_read().

bool WvEncoder::finish ( WvBuf outbuf) [inherited]

Tells the encoder that NO MORE DATA will ever be encoded.

The encoder will flush out any internally buffered data and write out whatever end-of-data marking it needs to the supplied output buffer before returning.

Clients should invoke flush() on the input buffer before finish() if the input buffer was not yet empty.

It is safe to call this function multiple times. The implementation will simply return isok() and do nothing else.

"outbuf" is the output buffer Returns: true on success

See also:
_finish for the actual implementation

Definition at line 49 of file wvencoder.cc.

References WvEncoder::_finish(), WvEncoder::finished, WvEncoder::okay, and WvEncoder::setfinished().

Referenced by WvEncoder::encode(), WvEncoderStream::finish_read(), WvEncoder::flush(), WvEncoder::flushbufmem(), and WvEncoder::flushbufstr().

bool WvEncoder::reset ( ) [inherited]

Asks an encoder to reset itself to its initial state at creation time, if supported.

This function may be called at any time, even if isok() == false, or isfinished() == true.

If the behaviour is not supported or an error occurs, then false is returned and afterwards isok() == false.

Returns: true on success

See also:
_reset for the actual implementation

Definition at line 60 of file wvencoder.cc.

References WvEncoder::_reset(), WvEncoder::errstr, WvEncoder::finished, WvEncoder::okay, and WvEncoder::seterror().

bool WvEncoder::flushstrbuf ( WvStringParm  instr,
WvBuf outbuf,
bool  finish = false 
) [inherited]

Flushes data through the encoder from a string to a buffer.

"instr" is the input string "outbuf" is the output buffer "finish" is if true, calls finish() on success Returns: true on success

Definition at line 77 of file wvencoder.cc.

References WvEncoder::encode().

bool WvEncoder::flushstrstr ( WvStringParm  instr,
WvString outstr,
bool  finish = false 
) [inherited]

Flushes data through the encoder from a string to a string.

The output data is appended to the target string.

"instr" is the input string "outstr" is the output string "finish" is if true, calls finish() on success Returns: true on success

Definition at line 86 of file wvencoder.cc.

References WvEncoder::encode(), and WvBufBase< unsigned char >::getstr().

Referenced by WvEncoder::strflushstr().

bool WvEncoder::encodebufstr ( WvBuf inbuf,
WvString outstr,
bool  flush = false,
bool  finish = false 
) [inherited]

Encodes data from a buffer to a string.

The output data is appended to the target string.

"inbuf" is the input buffer "outstr" is the output string "flush" is if true, flushes the encoder "finish" is if true, calls finish() on success Returns: true on success

Definition at line 97 of file wvencoder.cc.

References WvEncoder::encode(), and WvBufBase< unsigned char >::getstr().

Referenced by WvEncoder::flushbufstr().

bool WvEncoder::flushbufstr ( WvBuf inbuf,
WvString outstr,
bool  finish = false 
) [inline, inherited]

Flushes data through the encoder from a buffer to a string.

The output data is appended to the target string.

"inbuf" is the input buffer "outstr" is the output string "finish" is if true, calls finish() on success Returns: true on success

Definition at line 249 of file wvencoder.h.

References WvEncoder::encodebufstr(), and WvEncoder::finish().

Referenced by WvEncoder::strflushbuf().

WvString WvEncoder::strflushstr ( WvStringParm  instr,
bool  finish = false 
) [inherited]

Flushes data through the encoder from a string to a string.

"inbuf" is the input buffer "finish" is if true, calls finish() on success Returns: the resulting encoded string, does not signal errors

Definition at line 107 of file wvencoder.cc.

References WvEncoder::flushstrstr().

Referenced by WvDBusServerAuth::authorize().

WvString WvEncoder::strflushbuf ( WvBuf inbuf,
bool  finish = false 
) [inherited]

Flushes data through the encoder from a buffer to a string.

"inbuf" is the input buffer "finish" is if true, calls finish() on success Returns: the resulting encoded string, does not signal errors

Definition at line 115 of file wvencoder.cc.

References WvEncoder::flushbufstr().

Referenced by WvX509Mgr::sign(), and WvEncoder::strflushmem().

bool WvEncoder::flushmembuf ( const void *  inmem,
size_t  inlen,
WvBuf outbuf,
bool  finish = false 
) [inherited]

Flushes data through the encoder from memory to a buffer.

"inmem" is the input data pointer "inlen" is the input data length "outbuf" is the output buffer "finish" is if true, calls finish() on success Returns: true on success

Definition at line 123 of file wvencoder.cc.

References WvEncoder::encode().

bool WvEncoder::flushmemmem ( const void *  inmem,
size_t  inlen,
void *  outmem,
size_t *  outlen,
bool  finish = false 
) [inherited]

Flushes data through the encoder from memory to memory.

The outlen parameter specifies by reference the length of the output buffer. It is updated in place to reflect the number of bytes copied to the output buffer. If the buffer was too small to hold the data, the overflow bytes will be discarded and false will be returned.

"inmem" is the input data pointer "inlen" is the input data length "outmem" is the output data pointer "outlen" is the output data length, by reference "finish" is if true, calls finish() on success Returns: true on success

Definition at line 132 of file wvencoder.cc.

References WvEncoder::encodebufmem().

Referenced by unhexify().

bool WvEncoder::encodebufmem ( WvBuf inbuf,
void *  outmem,
size_t *  outlen,
bool  flush = false,
bool  finish = false 
) [inherited]

Encodes data from a buffer to memory.

The outlen parameter specifies by reference the length of the output buffer. It is updated in place to reflect the number of bytes copied to the output buffer. If the buffer was too small to hold the data, the overflow bytes will be discarded and false will be returned.

"inmem" is the input data pointer "inlen" is the input data length "outmem" is the output data pointer "outlen" is the output data length, by reference "flush" is if true, flushes the encoder "finish" is if true, calls finish() on success Returns: true on success

Definition at line 140 of file wvencoder.cc.

References WvEncoder::encode(), and WvBufBaseCommonImpl< T >::used().

Referenced by WvEncoder::flushbufmem(), and WvEncoder::flushmemmem().

bool WvEncoder::flushbufmem ( WvBuf inbuf,
void *  outmem,
size_t *  outlen,
bool  finish = false 
) [inline, inherited]

Flushes data through the encoder from a buffer to memory.

The outlen parameter specifies by reference the length of the output buffer. It is updated in place to reflect the number of bytes copied to the output buffer. If the buffer was too small to hold the data, the overflow bytes will be discarded and false will be returned.

"inbuf" is the input buffer "outmem" is the output data pointer "outlen" is the output data length, by reference "finish" is if true, calls finish() on success Returns: true on success

Definition at line 337 of file wvencoder.h.

References WvEncoder::encodebufmem(), and WvEncoder::finish().

Referenced by WvEncoder::flushstrmem().

bool WvEncoder::flushstrmem ( WvStringParm  instr,
void *  outmem,
size_t *  outlen,
bool  finish = false 
) [inherited]

Flushes data through the encoder from a string to memory.

The outlen parameter specifies by reference the length of the output buffer. It is updated in place to reflect the number of bytes copied to the output buffer. If the buffer was too small to hold the data, the overflow bytes will be discarded and false will be returned.

"instr" is the input string "outmem" is the output data pointer "outlen" is the output data length, by reference "finish" is if true, calls finish() on success Returns: true on success

Definition at line 150 of file wvencoder.cc.

References WvEncoder::flushbufmem().

Referenced by WvX509::verify().

WvString WvEncoder::strflushmem ( const void *  inmem,
size_t  inlen,
bool  finish = false 
) [inherited]

Flushes data through the encoder from memory to a string.

"inmem" is the input data pointer "inlen" is the input data length "finish" is if true, calls finish() on success Returns: the resulting encoded string, does not signal errors

Definition at line 158 of file wvencoder.cc.

References WvEncoder::strflushbuf().

void WvEncoder::setnotok ( ) [inline, protected, inherited]

Sets 'okay' to false explicitly.

Definition at line 371 of file wvencoder.h.

References WvEncoder::okay.

Referenced by WvEncoder::seterror().

void WvEncoder::seterror ( WvStringParm  message) [inline, protected, inherited]

Sets an error condition, then setnotok().

Definition at line 375 of file wvencoder.h.

References WvEncoder::errstr, and WvEncoder::setnotok().

Referenced by WvBase64Decoder::_encode(), WvHexDecoder::_encode(), and WvEncoder::reset().

void WvEncoder::seterror ( WVSTRING_FORMAT_DECL  ) [inline, protected, inherited]

Sets an error condition, then setnotok().

Definition at line 379 of file wvencoder.h.

References WvEncoder::seterror().

Referenced by WvEncoder::seterror().

void WvEncoder::setfinished ( ) [inline, protected, inherited]

Sets 'finished' to true explicitly.

Definition at line 383 of file wvencoder.h.

References WvEncoder::finished.

Referenced by WvBase64Decoder::_encode(), and WvEncoder::finish().

virtual bool WvEncoder::_isok ( ) const [inline, protected, virtual, inherited]

Template method implementation of isok().

Not called if any of the following cases are true:

  • okay == false

Most implementations do not need to override this.

Returns: true if the encoder is ok

See also:
setnotok

Reimplemented in WvEncoderChain.

Definition at line 400 of file wvencoder.h.

Referenced by WvEncoder::isok().

virtual bool WvEncoder::_isfinished ( ) const [inline, protected, virtual, inherited]

Template method implementation of isfinished().

Not called if any of the following cases are true:

  • finished == true

Most implementations do not need to override this.

Returns: true if the encoder is finished

See also:
setfinished

Reimplemented in WvEncoderChain.

Definition at line 416 of file wvencoder.h.

Referenced by WvEncoder::isfinished().

virtual WvString WvEncoder::_geterror ( ) const [inline, protected, virtual, inherited]

Template method implementation of geterror().

Not called if any of the following cases are true:

  • isok() == true
  • errstr is not null

Most implementations do not need to override this.

Returns: the error message, or the null string if _isok() == true

See also:
seterror

Reimplemented in WvEncoderChain.

Definition at line 433 of file wvencoder.h.

Referenced by WvEncoder::geterror().

virtual bool WvEncoder::_finish ( WvBuf outbuf) [inline, protected, virtual, inherited]

Template method implementation of finish().

Not called if any of the following cases are true:

  • okay == false
  • finished == true

The encoder is marked finished AFTER this function exits.

Many implementations do not need to override this.

If you also override _isok() or _isfinished(), note that they will NOT be consulted when determining whether or not to invoke this function. This allows finer control over the semantics of isok() and isfinished() with respect to finish().

"outbuf" is the output buffer Returns: true on success

See also:
finish

Reimplemented in WvEncoderChain, WvAdler32Digest, WvCrc32Digest, WvHMACDigest, WvTypedEncoder< IT, OT >, WvGzipEncoder, WvEVPMDDigest, and WvBase64Encoder.

Definition at line 483 of file wvencoder.h.

Referenced by WvEncoder::finish().


Member Data Documentation

bool WvEncoder::okay [protected, inherited]
bool WvEncoder::finished [protected, inherited]
WvString WvEncoder::errstr [protected, inherited]

the error message

Definition at line 72 of file wvencoder.h.

Referenced by WvEncoder::geterror(), WvEncoder::reset(), and WvEncoder::seterror().


The documentation for this class was generated from the following files: