2016. 2. 17. 17:11 Game/etc
aes 코드 작성 중에......
aes 에서 sbox 변환 작성하면서 테스트 해본것들
subword32(u32 *dword)
{
u8 *bptr = (u8 *) dword;
bptr[0] = SBOX[*bptr];
bptr[1] = SBOX[*(bptr+1)];
bptr[2] = SBOX[*(bptr+2)];
bptr[3] = SBOX[*(bptr+3)];
}
subword32(u32 *dword)
{
*((u8 *) dword) = SBOX[*((u8 *) dword)];
*((u8 *) dword + 1) = SBOX[*((u8 *) dword + 1)];
*((u8 *) dword + 2) = SBOX[*((u8 *) dword + 2)];
*((u8 *) dword + 3) = SBOX[*((u8 *) dword + 3)];
}
ARMv7 1Ghz 에서 1000번 돌렸는데 아래 함수가 더 미묘하게 빨랐다
대충 5~8 usec 정도?
bptr에 선언해서 넣는거 때문에 그런듯?
그런데 의외였던 점은 (내가 코드를 못 짜서 그렇겠지만)
32비트 정수 내부에서 &하고 shift 시키는 방법은 가장 느렸다
망코드
subword32(u32 *dword)
{
*dword = SBOX[ (*dword)>>24 &0xFF]<<24 |
SBOX[ (*dword)>>16 &0xFF]<<16 |
SBOX[ *(dword)>>8 &0xFF]<<8 |
SBOX[ *(dword)];
}
shift를 엄청나게 시키기 때문에 느린거 같다
어차이 2번 방법도 레지스터 하나에서 가져오기 때문에 빠를꺼 같고
여튼 끝~
키확장 코드만 짜면 끝인데 얘를 어케할지가 참 머리 복잡하네