Ho scritto la fonte TEA di pubblico dominio da wikipedia ( link ), sembra così -
uint32_t v0=v[0], v1=v[1], sum=0, i; /* set up */
uint32_t delta=0x9e3779b9; /* a key schedule constant */
uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */
for (i = 0; i < 32; i++) { /* basic cycle start */
sum += delta;
v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1);
v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3);
} /* end cycle */
v[0] = v0;
v[1] = v1;
}
Funziona bene, ma sto cercando di capire cripto un po 'di più in modo da ottimizzare e esplorare. Avrei pensato che la modifica del numero di round (32 nell'esempio) avrebbe funzionato benissimo fintanto che la funzione di decifrazione è cambiata per usare lo stesso numero. Tuttavia, l'ho raggiunto a 50 da ciascun lato e ora il mio output non corrisponde al testo in chiaro iniziale. Pensando che potrebbe essere troppo alto, ho provato 20; niente da fare. Poi ho pensato di provare molto vicino, impostarlo su 31 e poi su 33, e nessuno dei due ha funzionato.
Il numero di proiettili in TEA richiede 32 anni per qualche motivo? Non riesco a capire perché, ma sono lontano dall'esperto.