Auf der Suche nach einer schnellen und kompakten Verschlüsselung für kleine AVRs (soll vorallem auf einem Tiny2313 zum Einsatz kommen) bin ich - wie wahrscheinlich viele vor mir - auf XTEA gestoßen. Also den Code von der AVR-Crypto-Lib runtergeladen (allerdings scheint git nur mit Passwort zu funktionieren, waren also möglicherweise veraltete SVN Dateien). So richtig berauschend war selbst die ASM Variante nicht (zumal ich mit der nicht wirklich verschlüsseln konnte). Da der Bootloader von Hagen Re nur entschlüsselt brachte mich das auch nur bedingt weiter. Aber auf jedenfall hat er den Code schon mal deutlich abgespeckt und beschleunigt. Anbei also zwei Varianten. Das eigentliche Ziel (möglichst kleine Codegröße) erreicht xtea_size.S natürlich besser. Variante Code Encode Decode Stack size 198 5391 5239 0 speed 170 4163 4360 4 Code und Stack in Bytes Encode und Decode Zeiten für ein Block (8 Byte) in Takten gemessen mit dem Simulator (keine Ahnung wie genau der ist) Auf den ersten Blick scheint natürlich auch die speed Variante die kleinere und schneller zu sein. Der Geschwindigkeitszuwachs hierbei kommt jedoch von einer vorberechneten Key-Tabelle. Damit kann man sich die Berechnung der Rundenkeys sparen, dafür braucht die Tabelle 256 Bytes im Flash. Bei beiden Varianten sind die Routinen so geschrieben das der Cipher-/Klartest wieder an der gleichen Stelle zu liegen kommt. Somit wird nur ein Pointer übergeben. Falls man also die Daten noch andersweitig braucht muss man die vorher wegkopieren. Andernfalls kann das zurückkopieren an eine andere Stelle auch relativ einfach wieder eingebaut werden (auf kosten von zusätzlichen Befehlen). Die size routine braucht zwar mehr register als die speed Variante benötigt aber dennoch keinen Stack da die benötigten Register nicht auf den Stack geschoben werden sondern einfach mit den Daten die verschlüsselt werden sollen (und ja im RAM liegen) getauscht werden. Somit kann die Memswap-Routine auch gleich doppelt genutzt werden. Also viel Spaß beim verschlüsseln. Und vielen Dank für alle Vordenker (Hagen Re und die Jungs von der AVR-Crypto-Lib). PS.: Um genau zu sein schafft der xtea_size code nur die 99 Befehle wenn man nur einen Key verwendet, denn dann wird dieser direkt aus dem Flash gelesen und muss nicht als Parameter übergeben werden in diesem Fall XTEA_SINGLE_KEY setzen. Der Code geht dann davon aus das der Key unter XTEAKey zu finden ist.
:
Bearbeitet durch User
Es ist zwar 7 Jahre später, aber ich möchte mich hiermit für den Code bedanken. Hat mir einiges an Zeit gespart :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.