| Cryptography & Encryption Ver- und Entschlüsselung, Algorithmen, Kryptoanalyse ? Kryptographie in der Praxis. Blowfish, Triple-DES, XOR u.a. |
Diskussion: XTEA für *sehr* exotische Platform im Forum Cryptography & Encryption, in der Kategorie Security Area; Anzeige Hallo Leute! Ich suche momentan eine C Implementation des XTEA Algorithmusses, aber, und hier liegt das Problem, für eine ...
![]() |
| | #1 (permalink) |
| Senior Member Registriert seit: 13.07.08 ![]() ![]() ![]() Likes: 85 | XTEA für *sehr* exotische Platform Anzeige Hallo Leute! Ich suche momentan eine C Implementation des XTEA Algorithmusses, aber, und hier liegt das Problem, für eine sehr exotische Platform. Folgende Einschränkungen: -Keine Pointer/Zeiger -Nur 16-Bit Integers (mit Vorzeichen) vorhanden, keine 32 oder 64 Bit Integers -Keine Arrays Naja vielleicht hat ja einer Zeit und Lust sich da mal ranzusetzen. Hier mal die Referenzimplementation von hier: Code: void encipher(const unsigned long *const v,unsigned long *const w,
const unsigned long * const k)
{
register unsigned long y=v[0],z=v[1],sum=0,delta=0x9E3779B9,n=32;
while(n-->0)
{
y += (z << 4 ^ z >> 5) + z ^ sum + k[sum&3];
sum += delta;
z += (y << 4 ^ y >> 5) + y ^ sum + k[sum>>11 & 3];
}
w[0]=y; w[1]=z;
}
void decipher(const unsigned long *const v,unsigned long *const w,
const unsigned long * const k)
{
register unsigned long y=v[0],z=v[1],sum=0xC6EF3720,
delta=0x9E3779B9,n=32;
/* sum = delta<<5, in general sum = delta * n */
while(n-->0)
{
z -= (y << 4 ^ y >> 5) + y ^ sum + k[sum>>11 & 3];
sum -= delta;
y -= (z << 4 ^ z >> 5) + z ^ sum + k[sum&3];
}
w[0]=y; w[1]=z;
}
__________________ "It is the human race! The deterioration of the spirit of man. Man undermining himself, causing a self-willed, self-imposed, self-evident self-destruction."+++ BREAKING +++ Troll ertrinkt im Planschbecken +++ |
| | |
| | #2 (permalink) |
| Moderator ![]() Registriert seit: 30.03.04 ![]() Likes: 14 | Hallo, das einzige Problem ist doch nur das 16 Bit Integer. Dort kann man das 32 Bit Wort einfach in zwei Blöcke zerlegen und muss dann die Operationen entsprechend anpassen. Für Arrays kann man stattdessen auf if nutzen. Ich würde dir empfehlen, für z.B. z << 4 eine Funktion (am besten für Precompiler) zu schreiben, im Muster. leftRotate(z1, z2); Code: //Muster - Ungetestet
leftRotate(int x1, int x2, int shift) {
x1 = (x1 << 4) | (x2 & (0xF000));
x2 = x2 << 4;
} |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Registriert seit: 16.06.08 ![]() Likes: 0 | Im Windows gibt es übrigens auch die sehr schnelle Möglichkeit mit Assembler (ror oder rol) um z.B. einen Integer rotieren zu lassen. |
| | |
| | #4 (permalink) |
| Senior Member Themenstarter Registriert seit: 13.07.08 ![]() ![]() ![]() Likes: 85 | Naja Thank God - BASIC++ kennt UDTs ![]() Das macht die Sache um einiges Einfacher ![]() Elderan, genau sowas habe ich gesucht! Jetzt brauch ich nur noch Shr, Xor und Addition - Ich habs leider nicht so mit Mathe und binären Zahlen. Brauche aber einen brauchbaren (was für eine Wortwahl!) Verschlüsselungsalgorithmus für eine Hardwareplattform...Okay sum und delta sind ja kein Problem; habe einfach folgenden Typen für 32 Bit Ints konstruiert: Code: type DWord
low as word
high as word
end type Code: xtea_sum.low=C6EFh
xtea_sum.high=3720h
xtea_delta.low=9E37h
xtea_delta.high=79B9h Aber bei den Shl, Shr, Xor, und Additionsfunktionen gibts bei mir jetzt eben noch Verständnissprobleme... plz Help - verstehe auch deine angehängte Funktion nicht so ganz... Warum soll den x1 gleich x1 Shl 4 Or x2 And F000h sein!? - Verstehe ich nicht @jmc: Sry aber - "XTEA für *sehr* exotische Platform" Klar es gibt Architekturen die sogar Rol/Ror nativ unterstüzten (AMD64 und IA64 meines Wissens nach) - aber ein Microcontroller (Motorola MH64C oder so ähnlich) mit knappen 240 Bytes RAM - Wohl eher weniger...
__________________ "It is the human race! The deterioration of the spirit of man. Man undermining himself, causing a self-willed, self-imposed, self-evident self-destruction."+++ BREAKING +++ Troll ertrinkt im Planschbecken +++ |
| | |
| | #5 (permalink) |
| Registriert seit: 16.06.08 ![]() Likes: 0 | Sry, ich habe das mit der sehr exotischen Platform nicht gelesen. |
| | |
| | #6 (permalink) |
| Senior Member Themenstarter Registriert seit: 13.07.08 ![]() ![]() ![]() Likes: 85 | Hat sich erledigt.
__________________ "It is the human race! The deterioration of the spirit of man. Man undermining himself, causing a self-willed, self-imposed, self-evident self-destruction."+++ BREAKING +++ Troll ertrinkt im Planschbecken +++ |
| | |
| | #7 (permalink) |
| Moderator ![]() Registriert seit: 30.03.04 ![]() Likes: 14 | Hallo, wäre schön, zu erfahren, warum es sich erledigt hat. Hast du es portiert (wenn ja, wäre nett wenn du es posts). Ansonsten: XOR sollte nicht das Problem sein. aus a = b ^ c; wird a1 = b1^c1; a2 = b2^c2; Bei Addition bin ich gerade noch am Grübeln, wie man den Übertrag hinbekommt. Und rightshift ist ähnlich wie left shift, muss sich nur mal angucken wie sich das so verhält. |
| | |
| | #8 (permalink) |
| Senior Member Themenstarter Registriert seit: 13.07.08 ![]() ![]() ![]() Likes: 85 | Es hat insofern erledigt, als dass ich es nicht mehr brauche, da ich in einem anderen Forum einen "Binärgott" gefunden habe
__________________ "It is the human race! The deterioration of the spirit of man. Man undermining himself, causing a self-willed, self-imposed, self-evident self-destruction."+++ BREAKING +++ Troll ertrinkt im Planschbecken +++ |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| exotische Schriftarten in HTML | habo4ife | (Web-) Design und webbasierte Sprachen | 5 | 08.11.09 19:11 |
| Kubuntu 9.04: Kein acer-wmi-Verzeichnis in /sys/devices/platform | lynx | Linux/UNIX | 12 | 30.04.09 15:40 |
| PC sehr sehr langsam, CPU ? | Obmud | Die Problemzone | 5 | 19.03.06 23:13 |
| Sehr geehrter... | Joschy | Fun Section | 6 | 15.02.05 18:53 |
| DNS sehr langsam | Chris | Linux/UNIX | 5 | 07.09.04 14:03 |