2011-01-05 123 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