Red Pike cipher
Anonymous Remailer (austria)
mixmaster@remailer.privacy.at
Thu Feb 27 05:08:24 PST 2014
/* Red Pike cipher source code */
#include <stdint.h>
typedef uint32_t word;
#define CONST 0x9E3779B9
#define ROUNDS 16
#define ROTL(X, R) (((X) << ((R) & 31)) | ((X) >> (32 - ((R) & 31))))
#define ROTR(X, R) (((X) >> ((R) & 31)) | ((X) << (32 - ((R) & 31))))
void encrypt(word * x, const word * k)
{
unsigned int i;
word rk0 = k[0];
word rk1 = k[1];
for (i = 0; i < ROUNDS; i++)
{
rk0 += CONST;
rk1 -= CONST;
x[0] ^= rk0;
x[0] += x[1];
x[0] = ROTL(x[0], x[1]);
x[1] = ROTR(x[1], x[0]);
x[1] -= x[0];
x[1] ^= rk1;
}
rk0 = x[0]; x[0] = x[1]; x[1] = rk0;
}
void decrypt(word * x, const word * k)
{
word dk[2] =
{
k[1] - CONST * (ROUNDS + 1),
k[0] + CONST * (ROUNDS + 1)
};
encrypt(x, dk);
}
More information about the cypherpunks
mailing list