aboutsummaryrefslogtreecommitdiffstats
path: root/spelvin.c
blob: a6f21007c88ca94ed08bbd6cdfbd35184a445b88 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <linux/kernel.h>

void mix_spelvin(u32 h[4], const u32 v[4])
{
	u32 a = h[0] ^ v[0],	b = h[1] ^ v[1];
	u32 c = h[2] ^ v[2],	d = h[3] ^ v[3];

	a += b;			c += d;
	b = rol32(b, 6);	d = rol32(d, 27);
	d ^= a;			b ^= c;

	a += b;			c += d;
	b = rol32(b, 16);	d = rol32(d, 14);
	d ^= a;			b ^= c;

	a += b;			c += d;
	b = rol32(b, 6);	d = rol32(d, 27);
	d ^= a;			b ^= c;

	a += b;			c += d;
	b = rol32(b, 16);	d = rol32(d, 14);
	d ^= a;			b ^= c;

	h[0] = a; h[1] = b;
	h[2] = c; h[3] = d;
}