Example #1
0
// slow
void HPRC4LikeCipher::_DoRemainingBytes(uint8 *buf, uint8 bytes)
{
    if(!bytes)
        return;
    DEBUG(ASSERT(bytes < sizeof(uint32)));
    uint8 t = uint8(_sbox[_x] + _sbox[_y]);

    union
    {
        uint8 byteval[4];
        uint32 intval;
    } u;

    u.intval = _sbox[t];

#if IS_LITTLE_ENDIAN
    ToBigEndian(u.intval);
#endif

    do
        *buf++ ^= u.byteval[--_rb];
    while(--bytes);

    DEBUG(ASSERT(_rb < sizeof(uint32)));

    if(!_rb)
    {
        // finish the uint32 round
        _sbox[t] = (_sbox[t] & 0xFF) | (0xFFFFFF00 & (_sbox[t] ^ _sbox[_y] ^ _sbox[_x]));
    }
}
Example #2
0
 	void WriteBigEndian(T v)
 	{
 		v = ToBigEndian(v);
 		Write(&v,sizeof(v));
 	}
Example #3
0
 	T ReadBigEndian()
 	{
 		T v;
 		Read(&v,sizeof(v));
 		return ToBigEndian(v);
 	}