Name: Anonymous 2007-05-08 14:15 ID:q5/F6Oa1
Where can I find a good introduction to the features introduced in C99? I just realized that my C is still stuck with K&R ed. 2.
#include <stdio.h>
void enc_xtea(unsigned int rounds,unsigned long* v,unsigned long* k){
unsigned long i,sum=0,delta=0x9e3779b9;
for(i=0;i<rounds;++i){
v[0]+=(((v[1]<<4)^(v[1]>>5))+v[1])^(sum+k[sum&3]);
sum+=delta;
v[1]+=(((v[0]<<4)^(v[0]>>5))+v[0])^(sum+k[(sum>>11)&3]);
}
}
void dec_xtea(unsigned int rounds,unsigned long* v,unsigned long* k){
unsigned long i,delta=0x9e3779b9,sum=delta*rounds;
for(i=0;i<rounds;++i){
v[1]-=(((v[0]<<4)^(v[0]>>5))+v[0])^(sum+k[(sum>>11)&3]);
sum-=delta;
v[0]-=(((v[1]<<4)^(v[1]>>5))+v[1])^(sum+k[sum&3]);
}
}
void enc_str_xtea(unsigned int len,unsigned char* message,unsigned long* k,unsigned int rounds){
unsigned int l=len/8,i;
if(len%8)
++l;
for(i=0;i<l;++i){
if(i){
((unsigned long*)message)[i<<1]^=((unsigned long*)message)[(i-1)<<1];
((unsigned long*)message)[(i<<1)+1]^=((unsigned long*)message)[((i-1)<<1)+1];
}
enc_xtea(rounds,((unsigned long*)message)+(i<<1),k);
}
}
void dec_str_xtea(unsigned int len,unsigned char* message,unsigned long* k,unsigned int rounds){
unsigned int l=len/8,i;
unsigned long t[4]={0};
if(len%8)
++l;
for(i=0;i<l;++i){
t[0]=((unsigned long*)message)[i<<1];
t[1]=((unsigned long*)message)[(i<<1)+1];
dec_xtea(rounds,((unsigned long*)message)+(i<<1),k);
if(i){
((unsigned long*)message)[i<<1]^=t[2];
((unsigned long*)message)[(i<<1)+1]^=t[3];
}
t[2]=t[0];
t[3]=t[1];
}
}
int main(){
char message[]="lol whut";
char key[]="super sekret key";
puts(message);
enc_str_xtea(8,message,(unsigned long*)key,1024);
puts(message);
dec_str_xtea(8,message,(unsigned long*)key,1024);
puts(message);
return 0;
}