Mixes for Privacy and Anonymity in the Internet
Public Member Functions | Static Public Member Functions | Protected Attributes | Private Attributes | List of all members
CASymCipherOFB Class Reference

This class could be used for encryption/decryption of data (streams) with AES using 128bit OFB mode. More...

Inheritance diagram for CASymCipherOFB:
CASymChannelCipher CALockAble

Public Member Functions

 CASymCipherOFB ()
 
 ~CASymCipherOFB ()
 
bool isKeyValid ()
 
SINT32 setKey (const UINT8 *key)
 Sets the keys for crypt1() and crypt2() to the same key. More...
 
SINT32 setKeys (const UINT8 *key, UINT32 keysize)
 Sets the keys for crypt1() and crypt2() either to the same key (if keysize==KEY_SIZE) or to different values, if keysize==2* KEY_SIZE. More...
 
SINT32 setKey (const UINT8 *key, bool bEncrypt)
 Sets the key1 and key2 used for encryption/decryption to the same value of key. More...
 
SINT32 setIVs (const UINT8 *p_iv)
 Sets iv1 and iv2 to p_iv. More...
 
SINT32 setIV2 (const UINT8 *p_iv)
 Sets iv2 to p_iv. More...
 
SINT32 crypt1 (const UINT8 *in, UINT8 *out, UINT32 len)
 Encryptes/Decrpytes in to out using iv1 and key1. More...
 
SINT32 crypt2 (const UINT8 *in, UINT8 *out, UINT32 len)
 Decryptes in to out using iv2 and key2. More...
 
- Public Member Functions inherited from CALockAble
 CALockAble ()
 
virtual ~CALockAble ()
 
SINT32 lock ()
 Locks the lockable object by threadsafe incrementing a reference counter. More...
 
SINT32 unlock ()
 Unlocks the lockable object by threadsafe decrementing a reference counter. More...
 

Static Public Member Functions

static SINT32 testSpeed ()
 
- Static Public Member Functions inherited from CASymChannelCipher
static const UINT8 *const getAlgorithmName (SYMCHANNELCIPHER_ALGORITHM alg)
 

Protected Attributes

AES_KEY * m_keyAES1
 
AES_KEY * m_keyAES2
 
UINT8m_iv1
 
UINT8m_iv2
 
bool m_bKeySet
 

Private Attributes

CAMutexm_pcsEnc
 
CAMutexm_pcsDec
 
UINT32m_pEncMsgIV
 
UINT32m_pDecMsgIV
 

Additional Inherited Members

- Protected Member Functions inherited from CALockAble
SINT32 waitForDestroy ()
 If called checks if the reference counter equals zero. More...
 

Detailed Description

This class could be used for encryption/decryption of data (streams) with AES using 128bit OFB mode.

Because of the OFB mode technical encryption and decrpytion are the same (depending on the kind of input). Therefore there is only a general crypt() function. This class has a 2-in-1 feature: Two independent IVs are available. Therefore we have crypt1() and crypt2() depending on the used IV.

Constructor & Destructor Documentation

◆ CASymCipherOFB()

CASymCipherOFB::CASymCipherOFB ( )

◆ ~CASymCipherOFB()

CASymCipherOFB::~CASymCipherOFB ( )

Member Function Documentation

◆ crypt1()

SINT32 CASymCipherOFB::crypt1 ( const UINT8 in,
UINT8 out,
UINT32  len 
)
virtual

Encryptes/Decrpytes in to out using iv1 and key1.

AES is used for encryption and the encryption is done with a special 128bit-OFB mode: In the case that (len mod 16 !=0) the unused cipher output bits are discarded and NOT used next time encryptAES() is called. That means that every time encrpytAES() is called at first new cipher output is created by calling AES-encrypt(iv).

Parameters
ininput (plain text) bytes
outoutput (encrpyted) bytes
lenlen of input. because the cipher preserves the size, len of output=len of input
Return values
E_SUCCESS

Implements CASymChannelCipher.

References E_SUCCESS, KEY_SIZE, len, m_iv1, and m_keyAES1.

Referenced by setIV2().

◆ crypt2()

SINT32 CASymCipherOFB::crypt2 ( const UINT8 in,
UINT8 out,
UINT32  len 
)
virtual

Decryptes in to out using iv2 and key2.

Parameters
ininput (encrypted) bytes
outoutput (decrpyted) bytes
lenlen of input. because the cipher preserves the size, len of output=len of input
Return values
E_SUCCESS

Implements CASymChannelCipher.

References E_SUCCESS, KEY_SIZE, len, m_iv1, m_iv2, and m_keyAES2.

Referenced by setIV2().

◆ isKeyValid()

bool CASymCipherOFB::isKeyValid ( )
virtual

Implements CASymChannelCipher.

References m_bKeySet, setKey(), and setKeys().

◆ setIV2()

SINT32 CASymCipherOFB::setIV2 ( const UINT8 p_iv)
virtual

Sets iv2 to p_iv.

Parameters
p_iv16 random bytes used for new iv2.
Return values
E_SUCCESS

Implements CASymChannelCipher.

References crypt1(), crypt2(), E_SUCCESS, len, m_iv2, and testSpeed().

◆ setIVs()

SINT32 CASymCipherOFB::setIVs ( const UINT8 p_iv)
virtual

Sets iv1 and iv2 to p_iv.

Parameters
p_iv16 random bytes used for new iv1 and iv2.
Return values
E_SUCCESS

Implements CASymChannelCipher.

References E_SUCCESS, m_iv1, and m_iv2.

◆ setKey() [1/2]

SINT32 CASymCipherOFB::setKey ( const UINT8 key)
virtual

Sets the keys for crypt1() and crypt2() to the same key.

Sets the key1 and key2 used for encryption/decryption.

Also resets the IVs to zero!

Parameters
key16 random bytes used as key
Return values
E_SUCCESS

Implements CASymChannelCipher.

Referenced by isKeyValid(), and setKeys().

◆ setKey() [2/2]

SINT32 CASymCipherOFB::setKey ( const UINT8 key,
bool  bEncrypt 
)

Sets the key1 and key2 used for encryption/decryption to the same value of key.

Also resets the IVs to zero!

Parameters
key16 random bytes used as key
bEncryptif true, the key should be used for encryption (otherwise it will be used for decryption)
Return values
E_SUCCESS

References E_SUCCESS, m_bKeySet, m_iv1, m_iv2, m_keyAES1, and m_keyAES2.

◆ setKeys()

SINT32 CASymCipherOFB::setKeys ( const UINT8 key,
UINT32  keysize 
)
virtual

Sets the keys for crypt1() and crypt2() either to the same key (if keysize==KEY_SIZE) or to different values, if keysize==2* KEY_SIZE.

Implements CASymChannelCipher.

References E_SUCCESS, E_UNKNOWN, KEY_SIZE, m_bKeySet, m_iv1, m_iv2, m_keyAES1, m_keyAES2, CAMsg::printMsg(), and setKey().

Referenced by isKeyValid().

◆ testSpeed()

static SINT32 CASymCipherOFB::testSpeed ( )
static

Referenced by setIV2().

Member Data Documentation

◆ m_bKeySet

bool CASymCipherOFB::m_bKeySet
protected

◆ m_iv1

UINT8* CASymCipherOFB::m_iv1
protected

◆ m_iv2

UINT8* CASymCipherOFB::m_iv2
protected

◆ m_keyAES1

AES_KEY* CASymCipherOFB::m_keyAES1
protected

◆ m_keyAES2

AES_KEY* CASymCipherOFB::m_keyAES2
protected

◆ m_pcsDec

CAMutex* CASymCipherOFB::m_pcsDec
private

Referenced by CASymCipherOFB(), and ~CASymCipherOFB().

◆ m_pcsEnc

CAMutex* CASymCipherOFB::m_pcsEnc
private

Referenced by CASymCipherOFB(), and ~CASymCipherOFB().

◆ m_pDecMsgIV

UINT32* CASymCipherOFB::m_pDecMsgIV
private

◆ m_pEncMsgIV

UINT32* CASymCipherOFB::m_pEncMsgIV
private