mov r8,r3,lsl #2
add r8,r8,r4
and r9,r6,#1
cmp r9,#1 ;判断CoefMix[i,k]的最低位是否为1
bne notequal ;若不为1,转向执行
ldrb r9,[r2,r8] ;若为1,则Temp[i,j)+=State[k,j]
eor r9,r9,r7
strb r9,[r2,r8]
notequal
mov r6,r6,lsr #1 ;CoefMix[i,k]逻辑右移1位
and r9,r7,#0x80
mov r7,r7,lsl #1 ;State[k,j]逻辑左移1位
and r7,r7,#0xff
cmp r9,#0x80 ;移位后State[k,j]最高位是否为1
blt littlethan ;如不为1,转向执行
eor r7,r7,#0xlb ;如为1,则State[k,j]与#0xlb异或littlethan
cmp r6,#0 ;CoefMix[i,k]与0比较
bgt loop_temp ;如大于0,转到标号loop_temp处执行,否则读取CoefMix[i,k+1]
add r5,r5,#1
cmp r5,#4
blt loop_k ;执行k循环
add r4,r4,#1
cmp r4,#4
blt loop_j ;执行j循环
add r3,r3,#1
cmp r3,#4
blt loop_I ;执行i循环
mov r3,#0
renew ;用Temp更新State
ldrb r4,[r2,r3]
strb r4[r0,r3]
add r3,r3,#1
cmp r3,#16
blt renew
MixColumnend
mov pc,lr ;子程序返回
3 Rijndael加密算法实现效率比较
在调用ARM汇编程序实现Rijndael加密算法之余,还在嵌入式微处理器ARM上通过调用C子程序实现了Rijndael算法,同样获得了正确结果。表1、表2是两种实现方式的空间与时间效率比较。
由表1知,ARM子程序比C子程序所占用的空间明显小得多,前者仅为后者的55%。由表2,运行一次ARM汇编程序Rijndael.s程序完成加密算法,仅需约0.657 tick(此处,1000 tick=1s),而运行一次c子程序约需0.996 tick,比前者增加了52%。
结语
高级加密标准Rijndael算法在嵌入式微处理器ARM上的实现具有一定的实用价值。经University of Califor-nia,San Diego在因特网上提供的测试程序Interactive Ri-jndael Test Vectors in JavaScript验证,本实现算法是正确的。