2011-01-05 7 views
3

안녕하세요 여러분 어셈블리에서 AES 암호화를 수행하는 데 필요한 코드를 작성하려고합니다. 최신 인텔 설명서가어셈블리에서 AES 구현

을 갖는다

AESENC의 XMM1, XMM2/제 소스 피연산자에서 128 비트의 데이터 (상태)에서 동작하는 제 2 소스 피연산자 , AES 암호화 흐름 M128 -Perform 일주 라운드 키 및 결과를 대상 피연산자에 저장합니다.

AESENCLAST의 XMM1, XMM2/M128 -Perform하여 마지막 AES 암호화 흐름 제 소스 피연산자에서 128 비트의 데이터 (상태)에서 동작하는 제 2 소스 피연산자에서 라운드 키 , 라운드 및 저장 결과 대상 피연산자에 있습니다.

AESKEYGENASSIST의 XMM1는 XMM2/M128은 IMM8 라운드 128 비트 소스 피연산자에 지정된 데이터와 8 비트를 이용하여 암호화하는 라운드 키를 생성 향해 단계를 계산함으로써, AES 암호 키를 확대 도와 상수로 지정된 상수는 결과를 대상인 피연산자에 저장합니다.

이렇게하려면 인라인 어셈블리를 시도 할 것이고 C로 수행 된 일반적인 AES와 속도를 비교하기 위해 빌드 할 것입니다! 당신은 128 비트 값으로를 얻고 싶다면 내 첫 브레인 스토밍은 일반적으로 내 probs이나 아이디어에 관한 인라인 어셈블리 에 어떤 도움/브레인 스토밍/공유 아이디어를 XMM을 사용하는 방법을 환영 환호 =)

+0

어셈블리에서 어셈블리의 모든 암호화보다 COBOL 컴파일러를 코딩하고 싶습니다. –

+3

@SanJacint : 암호는 손으로 만들어진 어셈블리가 실제로 좋은 아이디어 인 몇 가지 유스 케이스 중 하나입니다. 고성능을 필요로하는 짧고 잘 정의 된 코드입니다. 그리고 AES의 경우 특별한 지시가 있습니다. – CodesInChaos

+0

FWIW VIA 프로세서의 PadLock (xcrypt *) 명령어는 AES 알고리즘도 지원하며 Intel의 확장 버전보다 오래 동안 사용되었으므로 벤치 마크 된 자료가 많이 있습니다. – ephemient

답변

2

입니다 생각 날 데려 갔어 XMM 레지스터는 MOVDQA 및 MOVDQU 명령어를 참조하십시오.

+0

그것으로 보았지만 둘 다 xmm 또는 mem128로 두 번째 피연산자를 사용합니다 ... 나는 xmm으로 즉시 이동할 수있는 방법을 원합니다. Im 인라인 어셈블리에 새로운 것이므로 잘못 알았을 때 –

+0

@Syntax_Error : MOVD를 사용하여 범용 레지스터를 XMM으로 옮긴다.하지만 128 비트로 제로 확장 할 것이다. 작은 상수에서는 잘 작동합니다. 어쨌든 스택에 앉아있는 것보다 큰 것. –

+0

그래서 ur는 64 비트 피연산자로 제한 될 것입니다. –