2011-01-05 5 views
3

Hallo an alle Ich versuche, einen Code zu erstellen, um die AES-Verschlüsselung in Assembly zu demonstrieren. Das neueste Intel Handbuch hatImplementierung von AES in Assembly

AESENC XMM1, xmm2/m128 -Führen eine Runde einer AES-Verschlüsselung Umströmung Schlüssel aus dem zweiten Quellenoperanden, auf die 128-Bit-Daten (Zustand) von dem ersten Quelloperand arbeitet, und Speichern Sie das Ergebnis im Zieloperanden.

AESENCLAST XMM1, xmm2/m128 -Führen letzte Runde eines AES-Verschlüsselung Fluss einen Rundenschlüssel aus dem zweiten Quellenoperanden, auf die 128-Bit-Daten (Zustand) von dem ersten Quelloperand arbeitet, und das Ergebnis im Zieloperanden.

AESKEYGENASSIST XMM1, xmm2/m128, imm8 in Unterstützung des AES Chiffrierschlüssel erweitert, durch Schritte zur Erzeugung eines Rundenschlüssel zur Verschlüsselung der Berechnung, unter Verwendung von 128-Bit-Daten in dem Quellenoperanden spezifiziert, und eine 8-Bit-Runde Konstante, die als Sofort angegeben wird, speichert das Ergebnis im Ziel Operand.

Um dies zu tun werde ich Inline-Montage versuchen, ich werde es bauen, um Geschwindigkeiten mit normalen AES in C! mein erstes Brainstorming hat mich darüber nachzudenken, wie xmm in Inline-Assemblierung keine Hilfe/Brainstorming/Austausch von Ideen verwenden, um meine probs über oder die Idee, in der Regel willkommen Prost = ist)

+0

Ich würde lieber einen COBOL-Compiler in Assembly als jede Kryptografie in Assembly codieren. –

+3

@SanJacint: Kryptographie ist einer der wenigen Anwendungsfälle, in denen eine handgefertigte Montage wirklich eine gute Idee ist. Es ist ein kurzer, gut definierter Code, der eine hohe Performance benötigt. Und im Falle von AES gibt es sogar spezielle Anweisungen. – CodesInChaos

+0

FWIW Die PadLock (xcrypt *) - Anweisungen auf VIA-Prozessoren unterstützen auch AES-Algorithmen. Da es länger als Intels Erweiterungen existiert, gibt es mehr Benchmark-Material. – ephemient

Antwort

2

Wenn Sie einen 128-Bit-Wert erhalten mögen in ein XMM-Register, siehe MOVDQA und MOVDQU-Anweisungen.

+0

schaute hinein, aber beide nehmen den zweiten Operanden als xmm oder mem128 ... ich möchte eine Möglichkeit, sofort zu xmm zu bewegen .... Ich bin neu in der Inline-Assembly, wenn ich mich falsch informieren lassen :) –

+0

@Syntax_Error: Sie können Verwenden Sie 'MOVD', um ein Allzweckregister in ein XMM-Register zu verschieben, aber das wird Null auf 128 Bits erweitern. Was für kleine Konstanten gut ist, schätze ich. Alles, was größer ist als du, hast du wahrscheinlich sowieso auf dem Stapel sitzen. –

+0

Also, was dein Sprichwort ist, dass schlecht auf 64-Bit-Operanden beschränkt sein? –