XTEA Cipher

From Gezel2

Jump to: navigation, search

[edit] xtea.fdl

This is an implementation of the XTEA algorithm. [XTEA] was designed by Needham and Wheeler at the University of Cambridge.

// XTEA algorithm
// Design by Pengyuan Yu (peyu1983@vt.edu)

dp xtea(in start :ns(1);					      
        in v0, v1 :ns(32);					      
        in k0, k1, k2, k3 :ns(32);				      
        out o :ns(64) ) {					      
								      
        reg sum, y, z :ns(32);					      
        reg key0, key1, key2, key3 :ns(32);			      
        sig DELTA, LIMIT :ns(32);				      
        sig ys, sums, zs :ns(32);				      
								      
								      
        always {						      
                DELTA = 0x9e3779b9;				      
                LIMIT = DELTA << 5;				      
        }							      
        sfg disp{						      
                $display($cycle,"    y: ", y);			      
                $display($cycle,"    z: ", z);			      
                $display($cycle,"    s: ", sum);		      
                $display("");					      
        }							      
        sfg load {						      
                ys = 0;						      
                zs = 0;						      
                sums = 0;					      
                y = v0;						      
                z = v1;						      
                key0 = k0;					      
                key1 = k1;					      
                key2 = k2;					      
                key3 = k3;					      
                sum = 0;					      
                o = 0;						      
        }							      
        sfg reset {						      
                y = 0;						      
                z = 0;						      
                sum = 0;					      
                ys = 0;						      
                zs = 0;						      
                sums = 0;					      
                key0 = 0;					      
                key1 = 0;					      
                key2 = 0;					      
                key3 = 0;					      
                o = 0;						      
        }							      
        sfg encode {						      
                ys = y+(((z<<4)^(z>>5))+z^sum);			      
                sums = sum + DELTA;				      
                zs = z +(((ys<<4)^(ys>>5))+ys^sums);		      
                y = ys;						      
                sum = sums;					      
                z = zs;						      
                o = 0;						      
        }							      
}								      
fsm fsm_c(xtea) {						      
        initial s0;						      
        state s1;						      
								      
        @s0 (load, disp) -> s1;					      
        @s1 if (sum!=LIMIT) then (encode, disp) -> s1;		      
            else (reset, disp) -> s0;				      
}								      
								      
dp test () {							      
        sig en :ns(1);						      
        sig v0, v1, k0, k1, k2, k3 :ns(32);			      
        sig output :ns(64);					      
								      
        use xtea(en, v0, v1, k0, k1,k2,k3,output);		      
								      
        always {						      
                en=1;						      
                v0 = 0x11111111;				      
                v1 = 0x11111111;				      
                k0 = 0;						      
                k1 = 0;						      
                k2 = 0;						      
                k3 = 0;						      
        }							      
}								      
								      
system s {							      
        test;							      
}