⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyexpansion.s

📁 aes中密钥扩展的arm汇编实现
💻 S
字号:
KeyExpansion

  	ldr r0,=Key; 取Key的地址

  	ldr r1,=RoundKey; 取扩展后的Roundkey的地址

	ldr r7,=Sbox

    ldr r8,=Rcon;
    
  	mov r2,#0x00; r2用来对i循环计数

expan_i

  	ldr r3,[r0,r2]; 取Key的4个字节

  	str r3,[r1,r2]; 放入RoundKey

 	add r2,r2,#0x04;

    cmp r2,#0x10;

  	bne expan_i; 完成将Key以4字节为单位存入RoundKey

  	add r1,r1,#0x10;更新r1的值

  	mov r2,#0x00;   r2用来计数j循环
	
expan_j  	

	mov r3,#0x00; k计数
	
expan_k 

  	ldr r4,[r1,#-0x04];  取出W[i-1]

 	cmp r3,#0x00; 比较r3与0x00的大小

  	bne LABEL;   不相等的话跳到LABEL,相等执行下面的程序
  	
  	mov r4,r4,ror #0x08; 完成RotByte的功能,即左循环一个字节
  	
  	mov r6,#24
  	
  	mov r9,#0x00

expan_l;

  	mov r0,r4,lsr r6; 将r4右逻辑循环r6位,目的在于每次取出r4的1个字节放入r0中,先取出最高的8字节

  	and r0,r0,#0xff;   将r0的高24位取零
  	
  	ldrb r5,[r7,r0];取出s盒对应的字节
  	
  	mov r9,r9,lsl #0x08
  	
  	add r9,r9,r5
  	
  	sub r6,r6,#0x08
  	
  	cmp r6,#-0x08
  	
  	bne expan_l
  	
  	ldr r5,[r8]
  	
  	add r8,r8,#0x04

  	eor r4,r5,r9;  完成轮常数加
  	
LABEL

  	ldr r5,[r1,#-0x10];  取出W[i-4]

  	eor r5,r5,r4;    将W[i-1]与W[i-4]异或,结果存入r5
  	
  	str r5,[r1];    将r5写入RoundKey中
  	
  	add r1,r1,#0x04
  	
  	add r3,r3,#0x04;   

  	cmp r3,#0x10;  

  	bne expan_k;   当r3不等于0x10时跳转到expan_k

  	add r2,r2,#0x01;
  	
  	cmp r2,#0x0a; 比较生成的轮密钥是否为10轮和最后轮所需

  	bne expan_j;

  	mov pc,lr;   返回主程序

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -