rendered paste bodyarcfour.h
---------
// arcfour.h
// RC4 compatible stream cipher
// Copyright 2003 Sandvine Incorporated. All rights reserved.
// Arcfour: RC4 compatible algorithm - Applied Cryptography pg 397
#ifndef __ARCFOUR_H
#define __ARCFOUR_H
class Arcfour
{
protected:
int m_x;
int m_y;
unsigned char m_s[256];
public:
virtual inline void SetKey(const unsigned char* key, int len);
inline unsigned char Random();
};
void Arcfour::SetKey(const unsigned char* key, int len)
{
int i;
int j = 0;
int k = 0;
for (i=0; i<256; ++i)
{
m_s[i] = i;
}
for (i=0; i<256; ++i)
{
j = (j + m_s[i] + key[k]) & 0xFF;
if (++k == len)
{
k = 0;
}
unsigned int t = m_s[i];
m_s[i] = m_s[j];
m_s[j] = t;
}
m_x = 0;
m_y = 0;
}
unsigned char Arcfour::Random()
{
m_x = (m_x + 1) & 0xFF;
m_y = (m_y + m_s[m_x]) & 0xFF;
unsigned int t = m_s[m_x];
m_s[m_x] = m_s[m_y];
m_s[m_y] = t;
t = (m_s[m_x] + m_s[m_y]) & 0xFF;
return m_s[t];
}
#endif