Endianess in AES in C

C

Crymes

Guest
Ich weiß glaub warum memcpy() nicht funktioniert:
Das Endianess-Problem tritt beim laden der Daten in das CPU Register auf. Wenn ich memcpy() benutze werden die Daten zwar 1 zu 1 kopiert aber ich weiß noch nicht in welcher Reihenfolge die in die CPU geladen werden. So wird immer ein Byte genommen, zum 32 Bit Integer gecastet und in die CPU geladen. Per Konvention steht dieses Byte dann an der niederwertigsten Stelle im CPU Register und wird dann an die gewünschte Stelle geschoben, je nach Endianess des Systems geht dann ein rechtsshift nach rechts oder links. So bastel ich mir dann durch xoren meinen Integer zusammen. Beim Abspeichern das ganze dann anders herum.

Jetzt habe ich das nächste Problem: Warum wird immer abwechselnd in die Variablen t und s geschrieben ?
Ist es inperformant wenn ich so etwas mache:
Code:
s0 =
    	            Te0[(s0 >> 24)       ] ^
    	            ror(Te0[(s1 >> 16) & 0xff], 8) ^
    	            ror(Te0[(s2 >>  8) & 0xff], 16) ^
    	            ror(Te0[(s3      ) & 0xff], 24) ^
    	            rk[0];
Also wenn ich in die Variable s0 schreibe wenn ich aus der auch lese ?
 
Zurück