OK, here it is. These subs will take an eight byte block of code, and encrypt it, then decrypt it. The key must be exactly the same for encrypt and decrypt, and don't mess with "Delta". This is only for the PIC18s and PBPL(2.50a)
Code:;********************************************************************** ; XTEA VARIABLES ***************************************************** ;********************************************************************** roundin con 32 ;number of loops Delta con $9E3779B9 ;5/4/2 * 2power32 round var byte Sumin var long vy var Long text_byte var byte[8] ;text coming in, going out. vz var Long tb var byte Sum var long temp var long tmp0 var temp.byte0 tmp1 var temp.byte1 tmp2 var temp.byte2 tmp3 var temp.byte3 key var long[4] ka var key[0] kb var key[1] kc var key[2] kd var key[3] limit var long block var long[2] index var word key[0] = $31323334 ;128 bit key key[1] = $93D8E9AF ;don't use mine key[2] = $275FC2BA ;must be key[3] = $95E20110 ;random ;********************************************************************** main: hserout [str text_byte\8,13] ;the unchanged block of 8 bytes gosub beep ;pause 1000 GOsub TEAenc ;scramble well hserout [str text_byte\8,13] ;show mess gosub teadec ;unscramble hserout [str text_byte\8,13] ;No s--t, it works! pause 100 stop TEAenc: for tb = 0 to 3 ; convert string into code vy.byte0[tb] = text_byte[tb] vz.byte0[tb] = text_byte[tb+4] next tb sum = 0 Limit = Delta * roundin while Sum <> limit vy = vy + (((vz<<4) ^ (vz >>5))^(Sum + Key[sum & 3])) sum = sum + Delta vz = vz + (((vy<<4) ^ (vy >>5))^(Sum + Key[sum>>11 & 3])) wend for tb = 0 to 3 text_byte[tb]= vy.byte0[tb] text_byte[tb+4] = vz.byte0[tb] next tb return ;*************************************************************************** TEAdec: ;Convert code into string for tb = 0 to 3 vy.byte0[tb] = text_byte[tb] vz.byte0[tb] = text_byte[tb+4] next tb sum = Delta * roundin while sum <> 0 vz = vz - (((vy<<4) ^ (vy >>5))^(Sum + Key[(sum>>11) & 3])) sum = sum - Delta vy = vy - (((vz<<4) ^ (vz >>5))^(Sum + Key[sum & 3])) wend for tb = 0 to 3 text_byte[tb]= vy.byte0[tb] text_byte[tb+4] = vz.byte0[tb] next tb return




Bookmarks