#include <stdio.h>
int main () {
typedef unsigned int uint32_t;
unsigned int num_rounds=2;
uint32_t v[2]={0x11223344,0xEEDDCCBB};
uint32_t const k[4]={0x00000011,0x00000022,0x00000033,0x00000044};//sa_constant1
//uint32_t const k[4]={0x00000033,0x0000005A,0x000000B7,0x00000098};//sa_constant2
unsigned int i;
uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;
for (i=0;i<num_rounds;i++)
{
v0+=(((v1<<4)^(v1>>5))+v1)^(sum+k[sum&0x03]);
sum+=delta;
v1+=(((v0<<4)^(v0>>5))+v0)^(sum+k[(sum>>11)&0x03]);
printf("%X\n",v0);
}
v[0]=v0; v[1]=v1;
printf("%X\n",v0);
}