XTEA Cipher
From Gezel2
[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;
}
