2011-01-05 24 views
3

大家好 我正在試圖構建一個代碼來演示如何在彙編中進行AES加密。 Intel最新手冊有AES在彙編中的實現

AESENC xmm1中,XMM2/m128中-Perform AES加密流的一個圓輪密鑰 從第二源操作數,從第一 源操作數上的128位數據(狀態)下操作,並將結果存儲在目標操作數中。

AESENCLAST xmm1中,XMM2/AES加密流 的循環密鑰 從第二源操作數,從第一 源操作數上的128位數據(狀態)下操作,m128中的最後-Perform回合和存儲結果在目標操作數中。

AESKEYGENASSIST xmm1中,XMM2/m128中,imm8指定 協助擴展AES加密密鑰,通過計算向生成用於加密的 回合密鑰步驟,使用圓在源操作數指定的128位數據和 8位常數指定爲立即數,將結果存儲在目標操作數 中。

要做到這一點,我會嘗試內聯彙編,我會建立它來比較在C中完成的正常AES的速度!我第一次頭腦風暴帶我思考如何在聯彙編 使用XMM任何幫助/集思廣益/共享的思想有關,一般我probs或想法,歡迎 乾杯=)

+0

我寧願在程序集中編寫COBOL編譯器,也不願意使用程序集中的任何加密。 – 2011-01-05 22:07:30

+3

@SanJacint:密碼學是少數幾個使用手工製作裝配真的是個好主意的例子之一。它是短小的,定義明確的代碼,需要高性能。而在AES的情況下,甚至還有特別的說明。 – CodesInChaos 2011-01-05 22:09:41

+0

FWIW VIA處理器上的PadLock(xcrypt *)指令也支持AES算法,並且已經比英特爾的擴展功能延長了許多時間,這裏有更多的基準測試材料。 – ephemient 2011-01-05 22:19:42

回答

2

如果你想獲得一個128位的值成XMM寄存器,查看MOVDQA和MOVDQU指令。

+0

看着它,但都採取第二個操作數爲xmm或mem128 ...我想要一些方法來立即移動到xmm ....我新內聯大會,所以如果我錯了讓我知道:) – 2011-01-05 22:28:07

+0

@Syntax_Error:你可以使用'MOVD'將通用寄存器移動到XMM中,但是它會將其擴展到128位。對於小常量來說,我認爲它工作正常。無論如何,任何比你可能坐在堆疊上的東西都要大的東西。 – 2011-01-05 22:37:17

+0

所以你說什麼,生病只限於64位操作數? – 2011-01-05 22:41:13