Esto es sobre el XTEA de la Wikipedia:
http://en.wikipedia.org/wiki/XTEA
Código:
void decipher(unsigned int num_rounds, unsigned long* v, unsigned long* k) {
unsigned long v0=v[0], v1=v[1], i;
unsigned long delta=0x9E3779B9, sum=delta*num_rounds;
for(i=0; i<num_rounds; i++) {
v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
sum -= delta;
v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
}
v[0]=v0; v[1]=v1;
}
Y aquí una composición con el desensamblado del bootloader de "MAX_S_v137_071017.bin":
[CODE]ROM:BFC0DD90 lw $t0, 0($a1)
ROM:BFC0DD94 lw $t1, 4($a1)
[COLOR="DarkRed"][B]unsigned long delta=0x9E3779B9, sum=delta*num_rounds;[/B][/COLOR]
ROM:BFC0DD98 li $t3, 0x9E3779B9
ROM:BFC0DDA0 mult $a0, $t3
ROM:BFC0DDA4 mflo $a3
ROM:BFC0DDA8 beqz $a0, loc_BFC0DE18
ROM:BFC0DDAC move $t2, $0
ROM:BFC0DDB0
ROM:BFC0DDB0 loc_BFC0DDB0: # CODE XREF: ROM:BFC0DE10j
[COLOR="DarkRed"][B] v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);[/B][/COLOR]
ROM:BFC0DDB0 sll $v1, $t0, 4
ROM:BFC0DDB4 srl $v0, $t0, 5
ROM:BFC0DDB8 xor $v1, $v0
ROM:BFC0DDBC addu $v1, $t0
ROM:BFC0DDC0 srl $v0, $a3, [COLOR="MediumTurquoise"]9[/COLOR]
ROM:BFC0DDC4 andi $v0, [COLOR="MediumTurquoise"]0xC[/COLOR]
ROM:BFC0DDC8 addu $v0, $a2
ROM:BFC0DDCC lw $v0, 0($v0)
ROM:BFC0DDD0 addu $v0, $a3, $v0
ROM:BFC0DDD4 xor $v1, $v0
[COLOR="DarkRed"][B] sum -= delta;[/B][/COLOR]
ROM:BFC0DDD8 subu $t1, $v1
ROM:BFC0DDDC subu $a3, $t3
[COLOR="DarkRed"] [B]v0 -= ((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + k[sum & 3]);[/B][/COLOR]
ROM:BFC0DDE0 sll $v1, $t1, 4
ROM:BFC0DDE4 srl $v0, $t1, 5
ROM:BFC0DDE8 xor $v1, $v0
ROM:BFC0DDEC addu $v1, $t1
ROM:BFC0DDF0 andi $v0, $a3, 3
ROM:BFC0DDF4 sll $v0, 2
ROM:BFC0DDF8 addu $v0, $a2
ROM:BFC0DDFC lw $v0, 0($v0)
ROM:BFC0DE00 addu $v0, $a3, $v0
ROM:BFC0DE04 xor $v1, $v0
[B][COLOR="DarkRed"]for(i=0; i<num_rounds; i++) [/COLOR][/B]
ROM:BFC0DE08 addiu $t2, 1
ROM:BFC0DE0C sltu $v0, $t2, $a0
ROM:BFC0DE10 bnez $v0, loc_BFC0DDB0
ROM:BFC0DE14 subu $t0, $v1
ROM:BFC0DE18
ROM:BFC0DE18 loc_BFC0DE18: # CODE XREF: ROM:BFC0DDA8j
ROM:BFC0DE18 sw $t0, 0($a1)
ROM:BFC0DE1C jr $ra
ROM:BFC0DE20 sw $t1, 4($a1)[/CODE]
Pues salvo ligeras diferencias es muy similar al código escrito en "C" para desencriptar mediante XTEA y explicado en la wikipedia.
Saludos Santi.