# PCypher Class Reference

This abstract class defines an encryption/decryption algortihm. More...

`#include <cypher.h>`

Inheritance diagram for PCypher:

List of all members.

## Public Types

| ElectronicCodebook
| ECB = ElectronicCodebook
| CypherBlockChaining
| CBC = CypherBlockChaining
| OutputFeedback
| OFB = OutputFeedback
| CypherFeedback
| CFB = CypherFeedback
| NumBlockChainModes
enum | BlockChainMode { ElectronicCodebook, ECB = ElectronicCodebook, CypherBlockChaining, CBC = CypherBlockChaining, OutputFeedback, OFB = OutputFeedback, CypherFeedback, CFB = CypherFeedback, NumBlockChainModes }
| Mechanism by which sequential blocks are linked. More...

## Public Member Functions

PString | Encode (const PString &str)
| Encode the data.
PString | Encode (const PBYTEArray &clear)
| Encode the data.
PString | Encode (const void *data, PINDEX length)
| Encode the data.
void | Encode (const PBYTEArray &clear, PBYTEArray &coded)
| Encode the data.
void | Encode (const void *data, PINDEX length, PBYTEArray &coded)
| Encode the data.
PString | Decode (const PString &cypher)
| Decode the data.
PBoolean | Decode (const PString &cypher, PString &clear)
| Decode the data.
PBoolean | Decode (const PString &cypher, PBYTEArray &clear)
| Decode the data.
PINDEX | Decode (const PString &cypher, void *data, PINDEX length)
| Decode the data.
PINDEX | Decode (const PBYTEArray &coded, void *data, PINDEX length)
| Decode the data.
PBoolean | Decode (const PBYTEArray &coded, PBYTEArray &clear)
| Decode the data.

## Protected Member Functions

| PCypher (PINDEX blockSize, BlockChainMode chainMode)
| Create a new encryption object instance.
| PCypher (const void *keyData, PINDEX keyLength, PINDEX blockSize, BlockChainMode chainMode)
virtual void | Initialise (PBoolean encoding)=0
| Initialise the encoding/decoding sequence.
virtual void | EncodeBlock (const void *in, void *out)=0
| Encode an n bit block of memory according to the encryption algorithm.
virtual void | DecodeBlock (const void *in, void *out)=0
| Dencode an n bit block of memory according to the encryption algorithm.

## Protected Attributes

PBYTEArray | key
| Key for the encryption/decryption.
PINDEX | blockSize
| Size of each encryption block in bytes.
BlockChainMode | chainMode
| Mode for sequential encryption each block.

## Detailed Description

This abstract class defines an encryption/decryption algortihm.

A specific algorithm is implemented in a descendent class.

## Member Enumeration Documentation

enum PCypher::BlockChainMode

Mechanism by which sequential blocks are linked.

Enumerator:

  ElectronicCodebook |
  ECB |
  CypherBlockChaining |
  CBC |
  OutputFeedback |
  OFB |
  CypherFeedback |
  CFB |
  NumBlockChainModes |

## Constructor & Destructor Documentation

PCypher::PCypher | ( | PINDEX | blockSize,
|  | BlockChainMode | chainMode |
| ) |  |  | `[protected]`

Create a new encryption object instance.

Parameters:

  blockSize | Size of encryption blocks (in bits)
  chainMode | Block chain mode

PCypher::PCypher | ( | const void * | keyData,
|  | PINDEX | keyLength,
|  | PINDEX | blockSize,
|  | BlockChainMode | chainMode |
| ) |  |  | `[protected]`

Parameters:

  keyData | Key for the encryption/decryption algorithm.
  keyLength | Length of the key.
  blockSize | Size of encryption blocks (in bits)
  chainMode | Block chain mode

## Member Function Documentation

PBoolean PCypher::Decode | ( | const PBYTEArray & | coded,
|  | PBYTEArray & | clear |
| ) |  |  |

Decode the data.

Decode the data using the algorithm embodied by the descendent class and the key specifed in the construction of the objects instance.

The first form takes a string and returns a decoded string. The second form takes an encoded string and returns arbitrary binary data bytes. In both cases the encoded string is always 7 bit printable ASCII suitable for use in mail systems etc.

The final form takes and arbitrary block of bytes and decodes them into another block of binary data.

Returns:
  decoded string.

Parameters:

  coded | Encoded data (cyphertext).
  clear | Clear text binary data decoded.

PINDEX PCypher::Decode | ( | const PBYTEArray & | coded,
|  | void * | data,
|  | PINDEX | length |
| ) |  |  |

Decode the data.

Parameters:

  coded | Encoded data (cyphertext).
  data | Clear text binary data decoded.
  length | Maximum number of bytes of data decoded.

PINDEX PCypher::Decode | ( | const PString & | cypher,
|  | void * | data,
|  | PINDEX | length |
| ) |  |  |

Decode the data.

Parameters:

  cypher | Base64 Cypher text string to be decoded.
  data | Clear text binary data decoded.
  length | Maximum number of bytes of data decoded.

PBoolean PCypher::Decode | ( | const PString & | cypher,
|  | PBYTEArray & | clear |
| ) |  |  |

Decode the data.

Parameters:

  cypher | Base64 Cypher text string to be decoded.
  clear | Clear text binary data decoded.

PBoolean PCypher::Decode | ( | const PString & | cypher,
|  | PString & | clear |
| ) |  |  |

Decode the data.

Parameters:

  cypher | Base64 Cypher text string to be decoded.
  clear | Clear text string decoded.

PString PCypher::Decode | ( | const PString & | cypher | ) |

Decode the data.

Parameters:

  cypher | Base64 Cypher text string to be decoded.

virtual void PCypher::DecodeBlock | ( | const void * | in,
|  | void * | out |
| ) |  |  | `[protected, pure virtual]`

Dencode an n bit block of memory according to the encryption algorithm.

Parameters:

  in | Pointer to coded n bit block.
  out | Pointer to clear n bit block.

Implemented in PTEACypher.

void PCypher::Encode | ( | const void * | data,
|  | PINDEX | length,
|  | PBYTEArray & | coded |
| ) |  |  |

Encode the data.

The data is encoded using the algorithm embodied by the descendent class and the key specifed in the construction of the objects instance.

The first form takes a string and returns an encoded string. The second form takes arbitrary binary data bytes and returns an encoded string. In both cases the encoded string is always 7 bit printable ASCII suitable for use in mail systems etc.

The final form takes and arbitrary block of bytes and encodes them into another block of binary data.

Returns:
  encoded string.

void PCypher::Encode | ( | const PBYTEArray & | clear,
|  | PBYTEArray & | coded |
| ) |  |  |

Encode the data.

Parameters:

  clear | Clear text binary data to be encoded.
  coded | Encoded data.

PString PCypher::Encode | ( | const void * | data,
|  | PINDEX | length |
| ) |  |  |

Encode the data.

Parameters:

  data | Clear text binary data to be encoded.
  length | Number of bytes of data to be encoded.

PString PCypher::Encode | ( | const PBYTEArray & | clear | ) |

Encode the data.

Parameters:

  clear | Clear text binary data to be encoded.

PString PCypher::Encode | ( | const PString & | str | ) |

Encode the data.

Parameters:

  str | Clear text string to be encoded.

virtual void PCypher::EncodeBlock | ( | const void * | in,
|  | void * | out |
| ) |  |  | `[protected, pure virtual]`

Encode an n bit block of memory according to the encryption algorithm.

Parameters:

  in | Pointer to clear n bit block.
  out | Pointer to coded n bit block.

Implemented in PTEACypher.

virtual void PCypher::Initialise | ( | PBoolean | encoding | ) | `[protected, pure virtual]`

Initialise the encoding/decoding sequence.

Parameters:

  encoding | Flag for encoding/decoding sequence about to start.

Implemented in PTEACypher.

## Member Data Documentation

PINDEX PCypher::blockSize `[protected]`

Size of each encryption block in bytes.

BlockChainMode PCypher::chainMode `[protected]`

Mode for sequential encryption each block.

PBYTEArray PCypher::key `[protected]`

Key for the encryption/decryption.

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

- cypher.h