生成密钥产生两个随机数p,q计算n=p*qφ(n)=(p-1)(q-1)计算1 由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。 由于我们要实现的是4核调度,所以数据量不会很大,而且RSA属于对称加密解密算法(加密和解密是互逆的),在调度上比DES有优势,所以我们最终选择了RSA算法。 4.2 RSA算法的实现 4.2.1汇编指令集 本项目为了减少占用的内核空间,采用的汇编指令是自行设计的,下面为部分汇编指令集 - 29 - 计算类指令 (1)数据传送指令 指令格式 MOV R0,#0X0 MOVS R0,#0X0 MOV R0,R1 MOVS R0,R1 (2)计算类指令---与 指令格式 ANDN R0,R1,R2 TST R0,R1,R2 AND R0,R1,R2 AND R0,R1,#0X0 ANDS R0,R1,#0X0 ANDN R0,R1,#0X0 AND{N}{S} Rd,Rs,operand2 0|00|100|0010|00000|00001|00010|0000000 0|00|101|0010|00000|00001|00010|0000000 0|00|001|0010|00000|00001|00010|0000000 0|00|011|0010|00000|00001|000000000000 0|00|111|0010|00000|00001|000000000000 0|00|010|0010|00000|00001|000000000000 MOV{S} Rd,operand2 0|00|010|0000|00000|00000|000000000000 0|00|011|0000|00000|00000|000000000000 0|00|000|0000|00000|00001|000000000000 0|00|001|0000|00000|00001|000000000000 注:ANDN == AND不写回 , ANDNS == TST 注:ORRW==ORR 异或 指令格式 EOR R0,R1,R2 TEQ R0,R1,R2 EORN R0,R1,R2 EOR{N}{S} Rd,Rs,operand2 0|00|001|0100|00000|00001|00010|0000000 0|00|100|0100|00000|00001|00010|0000000 0|00|000|0100|00000|00001|00010|0000000 - 30 - EOR R0,R1,#0X0 TEQ R0,R1,#0X0 EORN R0,R1,#0X0 注:EORW == EOR , EORS == TEQ 减法 指令格式 SUB R0,R1,R2 CMP R0,R1,R2 SUBN R0,R1,R2 SUB R0,R1,#0X0 CMP R0,R1,#0X0 SUBN R0,R1,#0X0 0|00|011|0100|00000|00001|000000000000 0|00|110|0100|00000|00001|000000000000 0|00|010|0100|00000|00001|000000000000 SUB{N}{S} Rd,Rs,operand2 0|00|001|0101|00000|00001|00010|0000000 0|00|100|0101|00000|00001|00010|0000000 0|00|000|0101|00000|00001|00010|0000000 0|00|011|0101|00000|00001|000000000000 0|00|110|0101|00000|00001|000000000000 0|00|010|0101|00000|00001|000000000000 注:SUBN == SUB不写回 , SUBNS == CMP , 没提SUBNS 加法 指令格式 ADD R0,R1,R2 CMN R0,R1,R2 ADDN R0,R1,R2 ADD R0,R1,#0X0 CMN R0,R1,#0X0 ADDN R0,R1,#0X0 ADD{N}{S} Rd,Rs,oprand2 0|00|001|0111|00000|00001|00010|0000000 0|00|100|0111|00000|00001|00010|0000000 0|00|000|0111|00000|00001|00010|0000000 0|00|011|0111|00000|00001|000000000000 0|00|110|0111|00000|00001|000000000000 0|00|010|0111|00000|00001|000000000000 注:ADDN == ADD , ADDNS == CMN - 31 - 位运算:逻辑左移 指令格式 LSL R0,R1,R2 LSLS R0,R1,R2 LSLN R0,R1,R2 LSL R0,R1,#0X0 LSLS R0,R1,#0X0 LSLN R0,R1,#0X0 逻辑右移 指令格式 LSR R0,R1,R2 LSRS R0,R1,R2 LSRN R0,R1,R2 LSR R0,R1,#0X0 LSRS R0,R1,#0X0 LSRN R0,R1,#0X0 LSR{N}{S} Rd,Rs,operand2 0|00|001|1010|00000|00001|00010|0000000 0|00|100|1010|00000|00001|00010|0000000 0|00|000|1010|00000|00001|00010|0000000 0|00|011|1010|00000|00001|000000000000 0|00|110|1010|00000|00001|000000000000 0|00|010|1010|00000|00001|000000000000 LSL{N}{S} Rd,Rs,operand2 0|00|001|1001|00000|00001|00010|0000000 0|00|100|1001|00000|00001|00010|0000000 0|00|000|1001|00000|00001|00010|0000000 0|00|011|1001|00000|00001|000000000000 0|00|110|1001|00000|00001|000000000000 0|00|010|1001|00000|00001|000000000000 访存类指令 指令格式 LDR R0,[R1,#0X4](立即数前变址) LDR R0, [R1, #0X4]! LDRS R0,[R1,#0X4] STR/LDR{S} Rd,[Rs,Rt/#0X0]{!} 0|01|0100000|00000|00001|000000000100 0|01|0101000|00000|00001|000000000100 0|01|0100010|00000|00001|000000000100 - 32 -
相关推荐: