// 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])); } }
void WriteBigEndian(T v) { v = ToBigEndian(v); Write(&v,sizeof(v)); }
T ReadBigEndian() { T v; Read(&v,sizeof(v)); return ToBigEndian(v); }