>>5
Its a family of ciphers i wrote few years ago. They were posted on my blog before i deleted it.Quite strong in encryption strength though not optimized for fast encryption. The idea is to diffuse bytes into larger stream, and in the process transform the bytes themself. Here is example of one of old ciphers.
Crypteria5.c Cipher
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ull unsigned long long
#define ll long long int
#define ui unsigned int
#define lu unsigned long
#define li long int
#define ch char
#define uc unsigned char
#define chp char*
#define ucp unsigned char*
#define stdargs int argc,char **argv
//==DEBUG
#define thisline ;printf("%d,",__LINE__) ;
//debug scan,print number of last executed line
//==ASM
#define rdt(timer) ;asm volatile("rdtsc\n\t":"=A"(timer)) ;
// unsigned long long timer
//==Bitutil//byte rotate left/right
#define brol(value,shift) ((value << shift) | (value >> (8 - shift)))
#define getbit(byte,place) (byte&(1<<place))
#define delbit(byte,place) (byte&(0xFF^(1<<place)))
//get 2chunks of byte
#define byte04(bt) bt&0xc0
//chunk[11000000]
#define byte14(bt) bt&0x30
//chunk[00110000]
#define byte24(bt) bt&0xc
//chunk[00001100]
#define byte34(bt) bt&0x3
//chunk[00000011]
//erase 2chunks of byte
#define byte40(bt) bt&0x3f
//chunk[00111111]
#define byte41(bt) bt&0xcf
//chunk[11001111]
#define byte42(bt) bt&0xf3
//chunk[11110011]
#define byte43(bt) bt&0xfc
//chunk[11111100]
//get 1bit from byte
#define gbit0(bt) bt&0x80
#define gbit1(bt) bt&0x40
#define gbit2(bt) bt&0x20
#define gbit3(bt) bt&0x10
#define gbit4(bt) bt&0x8
#define gbit5(bt) bt&0x4
#define gbit6(bt) bt&0x2
#define gbit7(bt) bt&0x1
//erase 1 bit from byte
#define cbit0(bt) bt&0x7f
#define cbit1(bt) bt&0xbf
#define cbit2(bt) bt&0xdf
#define cbit3(bt) bt&0xef
#define cbit4(bt) bt&0xf7
#define cbit5(bt) bt&0xfb
#define cbit6(bt) bt&0xfd
#define cbit7(bt) bt&0xfe
//==File IO
#define fseekend(file) ;fseek(file,0,SEEK_END) ;
#define fseekstart(file) ;fseek(file,0,SEEK_SET) ;
#define rfp(pointer,filename) ;FILE* pointer=fopen(filename,"rb") ;
#define srfp(pointer2,file) ;FILE* pointer2=fopen(file,"rb") ;if(!pointer2){printf("%s",file) ;perror("<=srfp:") ;exit(1) ;}
#define wfp(pointer,filename) ;FILE* pointer=fopen(filename,"wb") ;
#define swfp(pointer2,file) ;FILE* pointer2=fopen(file,"wb") ;if(!pointer2){printf("%s",file) ;perror("<=swfp:") ;exit(1) ;}
#define fsize(name,rsize) ;srfp(temp_1,name) ;fseekend(temp_1) ;rsize=ftell(temp_1) ;fclose(temp_1)
#define rdf(pointer3,name,rsize) ;srfp(temp_2,name) ;fseekend(temp_2) ;li rsize=ftell(temp_2) ;rewind(temp_2) ;uc* pointer3=malloc(rsize) ;fread(pointer3,1,rsize,temp_2) ;fclose(temp_2) ;
#define wrf(pointer,name,size) ;swfp(temp_3,name) ;fwrite(pointer,1,size,temp_3) ;fclose(temp_3) ;
#define SYNTAX ;printf("Syntax : %s inputfile password [-decode]\n .ecf files are encrypted, .src files are decrypted",argv[0]) ;
inline uc rndbyte(void){ull tmp ;rdt(tmp) ;uc a,c,b,d ;a=tmp&0xFF ;d=a%5 ;if(d< ;3){d++ ;}rdt(tmp) ;b=tmp&0xFF ;d=(d*(b%5))^a ;if(d> ;10){d-=10 ;} ;rdt(tmp) ;c=tmp&0xFF ;if(d&1){return a^b^c ;}else{return b^c^a ;}}
void main(stdargs){
if(argc<3){SYNTAX ;return ;};
rdf(input,argv[1],inpsize) ;
int pwlen=strlen(argv[2]) ;
if(pwlen<8){printf("Password too short!\n") ;exit(1) ;}
uc pwshift=((pwlen%256)^(argv[2][0])) ;
chp outputname=malloc(512) ;
sprintf(outputname,"%s%s",argv[1],argv[3]?".src":".ecf") ;
printf("%s '%s' to '%s'",argv[3]?"Decoding":"Encoding",argv[1],outputname) ;
swfp(output,outputname) ;
li loop=0 ;
li gapbyte=0 ;
uc bitarr[8] ;
uc bitpos,byten,curgap,curgaph,s1,s2,endbyte ;
if(!argv[3]){for(loop=0 ;loop<inpsize ;loop++){
curgap=argv[2][loop%pwlen] ;
s2=((pwshift++)^curgap)%8 ;
curgaph=(brol(curgap,s2))%(((pwshift++)%16)+16) ;
for(gapbyte=0 ;gapbyte< (curgaph) ;gapbyte++){
fputc(rndbyte(),output) ;} ;
for(bitpos=0 ;bitpos< 8 ;bitpos++){
s2=((pwshift++)^curgap)%8 ;
s1=(brol(curgap,s2))%8 ;
s1+=((pwshift++)|curgap) ;
s1%=8 ;
bitarr[bitpos]=((getbit(input[loop],(7-bitpos)))|(delbit(rndbyte(),(7-bitpos))))^(brol(curgap,s1))^((s1+s2)*(s1-s2)) ;
fputc(brol(bitarr[bitpos],(8-s1)),output) ;
}}}else{
while(1){
if(gapbyte==pwlen){gapbyte=0 ;} ;
curgap=argv[2][gapbyte++] ;
s2=((pwshift++)^curgap)%8 ;
loop+=((brol(curgap,s2))%(((pwshift++)%16)+16)) ;
if(loop> inpsize){break ;} ;
endbyte=0 ;
for(bitpos=0 ;bitpos< 8 ;bitpos++){
s2=((pwshift++)^curgap)%8 ;
bitarr[bitpos]=input[loop++] ;
s1=(brol(curgap,s2))%8 ;
s1+=((pwshift++)|curgap) ;
s1%=8 ;
byten=(brol(bitarr[bitpos],s1))^(brol(curgap,s1))^((s1+s2)*(s1-s2)) ;
endbyte|=(getbit(byten,(7-bitpos))) ;}
fputc(endbyte,output) ;}}}