1 .cpu cortex-m4 2 .eabi_attribute 20, 1 3 .eabi_attribute 21, 1 4 .eabi_attribute 23, 3 5 .eabi_attribute 24, 1 6 .eabi_attribute 25, 1 7 .eabi_attribute 26, 1 8 .eabi_attribute 30, 4 9 .eabi_attribute 34, 1 10 .eabi_attribute 18, 4 11 .file "speck3264.c" 12 .text 13 .Ltext0: 14 .cfi_sections .debug_frame 15 .section .text.FuncER16,"ax",%progbits 16 .align 1 17 .global FuncER16 18 .arch armv7e-m 19 .syntax unified 20 .thumb 21 .thumb_func 22 .fpu softvfp 24 FuncER16: 25 .LVL0: 26 .LFB3: 27 .file 1 "speck3264.c" 1:speck3264.c **** #include <stdio.h> 2:speck3264.c **** #include <stdint.h> 3:speck3264.c **** #include "speck.h" 4:speck3264.c **** #include "helper.h" 5:speck3264.c **** 6:speck3264.c **** u8 random_seed[8] = {0x00}; 7:speck3264.c **** 8:speck3264.c **** 9:speck3264.c **** // This function is only used for the "x86" Speck compilation and as reference 10:speck3264.c **** void FuncER16(u16 *x, u16 *y, u16 k) 11:speck3264.c **** { 28 .loc 1 11 1 view -0 29 .cfi_startproc 30 @ args = 0, pretend = 0, frame = 0 31 @ frame_needed = 0, uses_anonymous_args = 0 12:speck3264.c **** u16 tmp_x = *x; 32 .loc 1 12 5 view .LVU1 11:speck3264.c **** u16 tmp_x = *x; 33 .loc 1 11 1 is_stmt 0 view .LVU2 34 0000 70B5 push {r4, r5, r6, lr} 35 .LCFI0: 36 .cfi_def_cfa_offset 16 37 .cfi_offset 4, -16 38 .cfi_offset 5, -12 39 .cfi_offset 6, -8 40 .cfi_offset 14, -4 11:speck3264.c **** u16 tmp_x = *x; 41 .loc 1 11 1 view .LVU3 42 0002 0D46 mov r5, r1 43 0004 1146 mov r1, r2 44 .LVL1: 45 .loc 1 12 9 view .LVU4 46 0006 0288 ldrh r2, [r0] 47 .LVL2: 13:speck3264.c **** u16 tmp_y = *y; 48 .loc 1 13 5 is_stmt 1 view .LVU5 49 .loc 1 13 9 is_stmt 0 view .LVU6 50 0008 2E88 ldrh r6, [r5] 51 .LVL3: 14:speck3264.c **** 15:speck3264.c **** *x = (((tmp_x)>>(7)) | ((tmp_x)<<(16-(7)))); 52 .loc 1 15 5 is_stmt 1 view .LVU7 53 .loc 1 15 36 is_stmt 0 view .LVU8 54 000a 5302 lsls r3, r2, #9 55 .loc 1 15 26 view .LVU9 56 000c 43EAD213 orr r3, r3, r2, lsr #7 57 0010 9BB2 uxth r3, r3 58 .loc 1 15 8 view .LVU10 59 0012 0380 strh r3, [r0] @ movhi 16:speck3264.c **** *x += *y; 60 .loc 1 16 5 is_stmt 1 view .LVU11 61 .loc 1 16 8 is_stmt 0 view .LVU12 62 0014 2A88 ldrh r2, [r5] 63 .LVL4: 64 .loc 1 16 8 view .LVU13 65 0016 1344 add r3, r3, r2 11:speck3264.c **** u16 tmp_x = *x; 66 .loc 1 11 1 view .LVU14 67 0018 0446 mov r4, r0 68 .loc 1 16 8 view .LVU15 69 001a 98B2 uxth r0, r3 70 .LVL5: 17:speck3264.c **** 18:speck3264.c **** //*x = *x ^ k; 19:speck3264.c **** *x = XOR(*x, k, random_seed[*x & 0x07]); 71 .loc 1 19 37 view .LVU16 72 001c 00F00703 and r3, r0, #7 73 .loc 1 19 10 view .LVU17 74 0020 084A ldr r2, .L2 16:speck3264.c **** 75 .loc 1 16 8 view .LVU18 76 0022 2080 strh r0, [r4] @ movhi 77 .loc 1 19 5 is_stmt 1 view .LVU19 78 .loc 1 19 10 is_stmt 0 view .LVU20 79 0024 D25C ldrb r2, [r2, r3] @ zero_extendqisi2 80 0026 FFF7FEFF bl XOR 81 .LVL6: 82 .loc 1 19 8 view .LVU21 83 002a 2080 strh r0, [r4] @ movhi 20:speck3264.c **** 21:speck3264.c **** *y = (((tmp_y)<<(2)) | (tmp_y>>(16-(2)))); 84 .loc 1 21 5 is_stmt 1 view .LVU22 85 .loc 1 21 19 is_stmt 0 view .LVU23 86 002c B000 lsls r0, r6, #2 87 .loc 1 21 26 view .LVU24 88 002e 40EA9633 orr r3, r0, r6, lsr #14 89 0032 98B2 uxth r0, r3 90 .loc 1 21 8 view .LVU25 91 0034 2880 strh r0, [r5] @ movhi 22:speck3264.c **** *y = XOR(*y, *x, *y); 92 .loc 1 22 5 is_stmt 1 view .LVU26 93 .loc 1 22 10 is_stmt 0 view .LVU27 94 0036 2188 ldrh r1, [r4] 95 0038 C2B2 uxtb r2, r0 96 003a FFF7FEFF bl XOR 97 .LVL7: 98 .loc 1 22 8 view .LVU28 99 003e 2880 strh r0, [r5] @ movhi 23:speck3264.c **** //*y = *y ^ *x; 24:speck3264.c **** 25:speck3264.c **** } 100 .loc 1 25 1 view .LVU29 101 0040 70BD pop {r4, r5, r6, pc} 102 .LVL8: 103 .L3: 104 .loc 1 25 1 view .LVU30 105 0042 00BF .align 2 106 .L2: 107 0044 00000000 .word .LANCHOR0 108 .cfi_endproc 109 .LFE3: 111 .section .text.FuncER16_ASM,"ax",%progbits 112 .align 1 113 .global FuncER16_ASM 114 .syntax unified 115 .thumb 116 .thumb_func 117 .fpu softvfp 119 FuncER16_ASM: 120 .LVL9: 121 .LFB4: 26:speck3264.c **** 27:speck3264.c **** 28:speck3264.c **** #ifdef ARM 29:speck3264.c **** // This function is used when running on the CW 30:speck3264.c **** void FuncER16_ASM(u16 *x, u16 *y, u16 k) 31:speck3264.c **** { 122 .loc 1 31 1 is_stmt 1 view -0 123 .cfi_startproc 124 @ args = 0, pretend = 0, frame = 0 125 @ frame_needed = 0, uses_anonymous_args = 0 126 @ link register save eliminated. 32:speck3264.c **** 33:speck3264.c **** asm volatile ( 127 .loc 1 33 5 view .LVU32 128 .syntax unified 129 @ 33 "speck3264.c" 1 130 0000 00BF nop 131 0002 30B5 push {r4, r5, lr} 132 0004 0588 ldrh r5, [r0, #0] 133 0006 0C88 ldrh r4, [r1, #0] 134 0008 6B02 lsls r3, r5, #9 135 000a 43EAD513 orr.w r3, r3, r5, lsr #7 136 000e 9BB2 uxth r3, r3 137 0010 0380 strh r3, [r0, #0] 138 0012 0D88 ldrh r5, [r1, #0] 139 0014 2B44 add r3, r5 140 0016 5A40 eors r2, r3 141 0018 A300 lsls r3, r4, #2 142 001a 43EA9433 orr.w r3, r3, r4, lsr #14 143 001e 9BB2 uxth r3, r3 144 0020 0280 strh r2, [r0, #0] 145 0022 0B80 strh r3, [r1, #0] 146 0024 0288 ldrh r2, [r0, #0] 147 0026 5340 eors r3, r2 148 0028 0B80 strh r3, [r1, #0] 149 002a 30BD pop {r4, r5, pc} 150 151 @ 0 "" 2 34:speck3264.c **** "nop\n\t" 35:speck3264.c **** "push {r4, r5, lr}\n\t" 36:speck3264.c **** "ldrh r5, [r0, #0]\n\t" 37:speck3264.c **** "ldrh r4, [r1, #0]\n\t" 38:speck3264.c **** "lsls r3, r5, #9\n\t" 39:speck3264.c **** "orr.w r3, r3, r5, lsr #7\n\t" 40:speck3264.c **** "uxth r3, r3\n\t" 41:speck3264.c **** "strh r3, [r0, #0]\n\t" 42:speck3264.c **** "ldrh r5, [r1, #0]\n\t" 43:speck3264.c **** "add r3, r5\n\t" 44:speck3264.c **** "eors r2, r3\n\t" 45:speck3264.c **** "lsls r3, r4, #2\n\t" 46:speck3264.c **** "orr.w r3, r3, r4, lsr #14\n\t" 47:speck3264.c **** "uxth r3, r3\n\t" 48:speck3264.c **** "strh r2, [r0, #0]\n\t" 49:speck3264.c **** "strh r3, [r1, #0]\n\t" 50:speck3264.c **** "ldrh r2, [r0, #0]\n\t" 51:speck3264.c **** "eors r3, r2\n\t" 52:speck3264.c **** "strh r3, [r1, #0]\n\t" 53:speck3264.c **** "pop {r4, r5, pc}\n\t" 54:speck3264.c **** ); 55:speck3264.c **** 56:speck3264.c **** } 152 .loc 1 56 1 is_stmt 0 view .LVU33 153 .thumb 154 .syntax unified 155 002c 7047 bx lr 156 .cfi_endproc 157 .LFE4: 159 .section .text.Words16ToBytes,"ax",%progbits 160 .align 1 161 .global Words16ToBytes 162 .syntax unified 163 .thumb 164 .thumb_func 165 .fpu softvfp 167 Words16ToBytes: 168 .LVL10: 169 .LFB5: 57:speck3264.c **** #endif 58:speck3264.c **** 59:speck3264.c **** 60:speck3264.c **** void Words16ToBytes(u16 words[],u8 bytes[],int numwords) 61:speck3264.c **** { 170 .loc 1 61 1 is_stmt 1 view -0 171 .cfi_startproc 172 @ args = 0, pretend = 0, frame = 0 173 @ frame_needed = 0, uses_anonymous_args = 0 62:speck3264.c **** int i,j=0; 174 .loc 1 62 5 view .LVU35 63:speck3264.c **** for(i=0;i<numwords;i++){ 175 .loc 1 63 5 view .LVU36 61:speck3264.c **** int i,j=0; 176 .loc 1 61 1 is_stmt 0 view .LVU37 177 0000 30B5 push {r4, r5, lr} 178 .LCFI1: 179 .cfi_def_cfa_offset 12 180 .cfi_offset 4, -12 181 .cfi_offset 5, -8 182 .cfi_offset 14, -4 183 0002 0238 subs r0, r0, #2 184 .LVL11: 185 .loc 1 63 10 view .LVU38 186 0004 0023 movs r3, #0 64:speck3264.c **** bytes[j]=(u8)words[i]; 65:speck3264.c **** bytes[j+1]=(u8)(words[i]>>8); 187 .loc 1 65 19 view .LVU39 188 0006 4D1C adds r5, r1, #1 189 .LVL12: 190 .L6: 63:speck3264.c **** bytes[j]=(u8)words[i]; 191 .loc 1 63 14 is_stmt 1 discriminator 1 view .LVU40 192 0008 9342 cmp r3, r2 193 000a 00DB blt .L7 66:speck3264.c **** j+=2; 67:speck3264.c **** } 68:speck3264.c **** } 194 .loc 1 68 1 is_stmt 0 view .LVU41 195 000c 30BD pop {r4, r5, pc} 196 .L7: 64:speck3264.c **** bytes[j+1]=(u8)(words[i]>>8); 197 .loc 1 64 9 is_stmt 1 discriminator 3 view .LVU42 64:speck3264.c **** bytes[j+1]=(u8)(words[i]>>8); 198 .loc 1 64 18 is_stmt 0 discriminator 3 view .LVU43 199 000e 30F8024F ldrh r4, [r0, #2]! 200 .LVL13: 64:speck3264.c **** bytes[j+1]=(u8)(words[i]>>8); 201 .loc 1 64 18 discriminator 3 view .LVU44 202 0012 01F81340 strb r4, [r1, r3, lsl #1] 65:speck3264.c **** j+=2; 203 .loc 1 65 9 is_stmt 1 discriminator 3 view .LVU45 65:speck3264.c **** j+=2; 204 .loc 1 65 20 is_stmt 0 discriminator 3 view .LVU46 205 0016 0488 ldrh r4, [r0] 206 0018 240A lsrs r4, r4, #8 207 001a 05F81340 strb r4, [r5, r3, lsl #1] 66:speck3264.c **** j+=2; 208 .loc 1 66 9 is_stmt 1 discriminator 3 view .LVU47 209 .LVL14: 63:speck3264.c **** bytes[j]=(u8)words[i]; 210 .loc 1 63 25 discriminator 3 view .LVU48 211 001e 0133 adds r3, r3, #1 212 .LVL15: 63:speck3264.c **** bytes[j]=(u8)words[i]; 213 .loc 1 63 25 is_stmt 0 discriminator 3 view .LVU49 214 0020 F2E7 b .L6 215 .cfi_endproc 216 .LFE5: 218 .section .text.BytesToWords16,"ax",%progbits 219 .align 1 220 .global BytesToWords16 221 .syntax unified 222 .thumb 223 .thumb_func 224 .fpu softvfp 226 BytesToWords16: 227 .LVL16: 228 .LFB6: 69:speck3264.c **** 70:speck3264.c **** void BytesToWords16(u8 bytes[],u16 words[],int numbytes) 71:speck3264.c **** { 229 .loc 1 71 1 is_stmt 1 view -0 230 .cfi_startproc 231 @ args = 0, pretend = 0, frame = 0 232 @ frame_needed = 0, uses_anonymous_args = 0 72:speck3264.c **** int i,j=0; for(i=0;i<numbytes/2;i++){ 233 .loc 1 72 5 view .LVU51 234 .loc 1 72 16 view .LVU52 235 .loc 1 72 34 is_stmt 0 view .LVU53 236 0000 02EBD272 add r2, r2, r2, lsr #31 237 .LVL17: 71:speck3264.c **** int i,j=0; for(i=0;i<numbytes/2;i++){ 238 .loc 1 71 1 view .LVU54 239 0004 70B5 push {r4, r5, r6, lr} 240 .LCFI2: 241 .cfi_def_cfa_offset 16 242 .cfi_offset 4, -16 243 .cfi_offset 5, -12 244 .cfi_offset 6, -8 245 .cfi_offset 14, -4 246 .loc 1 72 34 view .LVU55 247 0006 5210 asrs r2, r2, #1 248 .loc 1 72 21 view .LVU56 249 0008 0023 movs r3, #0 73:speck3264.c **** words[i]=(u16)bytes[j] | ((u16)bytes[j+1]<<8); 250 .loc 1 73 45 view .LVU57 251 000a 451C adds r5, r0, #1 252 .LVL18: 253 .L9: 72:speck3264.c **** int i,j=0; for(i=0;i<numbytes/2;i++){ 254 .loc 1 72 25 is_stmt 1 discriminator 1 view .LVU58 255 000c 9A42 cmp r2, r3 256 000e 00DC bgt .L10 74:speck3264.c **** j+=2; 75:speck3264.c **** } 76:speck3264.c **** } 257 .loc 1 76 1 is_stmt 0 view .LVU59 258 0010 70BD pop {r4, r5, r6, pc} 259 .L10: 73:speck3264.c **** words[i]=(u16)bytes[j] | ((u16)bytes[j+1]<<8); 260 .loc 1 73 9 is_stmt 1 discriminator 3 view .LVU60 73:speck3264.c **** words[i]=(u16)bytes[j] | ((u16)bytes[j+1]<<8); 261 .loc 1 73 35 is_stmt 0 discriminator 3 view .LVU61 262 0012 15F81360 ldrb r6, [r5, r3, lsl #1] @ zero_extendqisi2 73:speck3264.c **** words[i]=(u16)bytes[j] | ((u16)bytes[j+1]<<8); 263 .loc 1 73 28 discriminator 3 view .LVU62 264 0016 10F81340 ldrb r4, [r0, r3, lsl #1] @ zero_extendqisi2 73:speck3264.c **** words[i]=(u16)bytes[j] | ((u16)bytes[j+1]<<8); 265 .loc 1 73 32 discriminator 3 view .LVU63 266 001a 44EA0624 orr r4, r4, r6, lsl #8 73:speck3264.c **** words[i]=(u16)bytes[j] | ((u16)bytes[j+1]<<8); 267 .loc 1 73 17 discriminator 3 view .LVU64 268 001e 21F81340 strh r4, [r1, r3, lsl #1] @ movhi 74:speck3264.c **** j+=2; 269 .loc 1 74 9 is_stmt 1 discriminator 3 view .LVU65 270 .LVL19: 72:speck3264.c **** words[i]=(u16)bytes[j] | ((u16)bytes[j+1]<<8); 271 .loc 1 72 38 discriminator 3 view .LVU66 272 0022 0133 adds r3, r3, #1 273 .LVL20: 72:speck3264.c **** words[i]=(u16)bytes[j] | ((u16)bytes[j+1]<<8); 274 .loc 1 72 38 is_stmt 0 discriminator 3 view .LVU67 275 0024 F2E7 b .L9 276 .cfi_endproc 277 .LFE6: 279 .section .text.Speck3264KeySchedule,"ax",%progbits 280 .align 1 281 .global Speck3264KeySchedule 282 .syntax unified 283 .thumb 284 .thumb_func 285 .fpu softvfp 287 Speck3264KeySchedule: 288 .LVL21: 289 .LFB7: 77:speck3264.c **** 78:speck3264.c **** void Speck3264KeySchedule(u16 K[],u16 rk[]) 79:speck3264.c **** { 290 .loc 1 79 1 is_stmt 1 view -0 291 .cfi_startproc 292 @ args = 0, pretend = 0, frame = 8 293 @ frame_needed = 0, uses_anonymous_args = 0 80:speck3264.c **** u16 i,D=K[3],C=K[2],B=K[1],A=K[0]; 294 .loc 1 80 5 view .LVU69 79:speck3264.c **** u16 i,D=K[3],C=K[2],B=K[1],A=K[0]; 295 .loc 1 79 1 is_stmt 0 view .LVU70 296 0000 F7B5 push {r0, r1, r2, r4, r5, r6, r7, lr} 297 .LCFI3: 298 .cfi_def_cfa_offset 32 299 .cfi_offset 4, -20 300 .cfi_offset 5, -16 301 .cfi_offset 6, -12 302 .cfi_offset 7, -8 303 .cfi_offset 14, -4 304 .loc 1 80 11 view .LVU71 305 0002 C388 ldrh r3, [r0, #6] 306 0004 ADF80030 strh r3, [sp] @ movhi 307 .loc 1 80 18 view .LVU72 308 0008 8388 ldrh r3, [r0, #4] 309 000a ADF80230 strh r3, [sp, #2] @ movhi 310 .loc 1 80 25 view .LVU73 311 000e 4388 ldrh r3, [r0, #2] 312 0010 ADF80430 strh r3, [sp, #4] @ movhi 313 .loc 1 80 32 view .LVU74 314 0014 0388 ldrh r3, [r0] 315 0016 ADF80630 strh r3, [sp, #6] @ movhi 81:speck3264.c **** #ifdef ARM 82:speck3264.c **** for(i=0;i<22;){ 316 .loc 1 82 5 is_stmt 1 view .LVU75 317 .LVL22: 318 .loc 1 82 14 view .LVU76 79:speck3264.c **** u16 i,D=K[3],C=K[2],B=K[1],A=K[0]; 319 .loc 1 79 1 is_stmt 0 view .LVU77 320 001a 0E46 mov r6, r1 80:speck3264.c **** #ifdef ARM 321 .loc 1 80 32 view .LVU78 322 001c 0024 movs r4, #0 83:speck3264.c **** rk[i]=A; 84:speck3264.c **** //ER16(B,A,i++); 85:speck3264.c **** FuncER16(&B,&A,i++); 86:speck3264.c **** rk[i]=A; 323 .loc 1 86 14 view .LVU79 324 001e 8F1C adds r7, r1, #2 325 .LVL23: 326 .L12: 327 .loc 1 86 14 view .LVU80 328 0020 A5B2 uxth r5, r4 329 .LVL24: 83:speck3264.c **** rk[i]=A; 330 .loc 1 83 9 is_stmt 1 view .LVU81 83:speck3264.c **** rk[i]=A; 331 .loc 1 83 14 is_stmt 0 view .LVU82 332 0022 BDF80630 ldrh r3, [sp, #6] 333 0026 26F81430 strh r3, [r6, r4, lsl #1] @ movhi 85:speck3264.c **** rk[i]=A; 334 .loc 1 85 9 is_stmt 1 view .LVU83 335 .LVL25: 85:speck3264.c **** rk[i]=A; 336 .loc 1 85 9 is_stmt 0 view .LVU84 337 002a 2A46 mov r2, r5 338 002c 0DF10601 add r1, sp, #6 339 0030 01A8 add r0, sp, #4 340 0032 FFF7FEFF bl FuncER16 341 .LVL26: 342 .loc 1 86 9 is_stmt 1 view .LVU85 343 .loc 1 86 14 is_stmt 0 view .LVU86 344 0036 BDF80630 ldrh r3, [sp, #6] 345 003a 27F81430 strh r3, [r7, r4, lsl #1] @ movhi 87:speck3264.c **** //ER16(C,A,i++); 88:speck3264.c **** FuncER16(&C,&A,i++); 346 .loc 1 88 9 is_stmt 1 view .LVU87 347 .LVL27: 348 .loc 1 88 9 is_stmt 0 view .LVU88 349 003e 6A1C adds r2, r5, #1 350 0040 92B2 uxth r2, r2 351 0042 0DF10601 add r1, sp, #6 352 0046 0DF10200 add r0, sp, #2 353 004a FFF7FEFF bl FuncER16 354 .LVL28: 89:speck3264.c **** rk[i]=A; 355 .loc 1 89 9 is_stmt 1 view .LVU89 356 .loc 1 89 14 is_stmt 0 view .LVU90 357 004e 331D adds r3, r6, #4 358 0050 BDF80620 ldrh r2, [sp, #6] 359 0054 23F81420 strh r2, [r3, r4, lsl #1] @ movhi 90:speck3264.c **** //ER16(D,A,i++); 91:speck3264.c **** FuncER16(&D,&A,i++); 360 .loc 1 91 9 is_stmt 1 view .LVU91 361 .LVL29: 362 .loc 1 91 9 is_stmt 0 view .LVU92 363 0058 AA1C adds r2, r5, #2 364 005a 92B2 uxth r2, r2 365 005c 0DF10601 add r1, sp, #6 366 0060 6846 mov r0, sp 82:speck3264.c **** rk[i]=A; 367 .loc 1 82 14 view .LVU93 368 0062 0334 adds r4, r4, #3 369 .LVL30: 370 .loc 1 91 9 view .LVU94 371 0064 FFF7FEFF bl FuncER16 372 .LVL31: 82:speck3264.c **** rk[i]=A; 373 .loc 1 82 14 is_stmt 1 view .LVU95 374 0068 182C cmp r4, #24 375 006a D9D1 bne .L12 92:speck3264.c **** } 93:speck3264.c **** #endif 94:speck3264.c **** 95:speck3264.c **** #ifndef ARM 96:speck3264.c **** for(i=0;i<22;){ 97:speck3264.c **** 98:speck3264.c **** printf("A = 0x%x ; B = 0x%x ; C = 0x%x ; D = 0x%x\n", A, B, C, D); 99:speck3264.c **** 100:speck3264.c **** rk[i]=A; 101:speck3264.c **** //ER16(B,A,i++); 102:speck3264.c **** FuncER16(&B, &A, i++); 103:speck3264.c **** 104:speck3264.c **** printf("rk[%d] = 0x%x\n", i-1, A); 105:speck3264.c **** 106:speck3264.c **** printf("A = 0x%x ; B = 0x%x ; C = 0x%x ; D = 0x%x\n", A, B, C, D); 107:speck3264.c **** rk[i]=A; 108:speck3264.c **** //ER16(C,A,i++); 109:speck3264.c **** FuncER16(&C, &A, i++); 110:speck3264.c **** printf("rk[%d] = 0x%x\n", i-1, A); 111:speck3264.c **** 112:speck3264.c **** printf("A = 0x%x ; B = 0x%x ; C = 0x%x ; D = 0x%x\n", A, B, C, D); 113:speck3264.c **** rk[i]=A; 114:speck3264.c **** //ER16(D,A,i++); 115:speck3264.c **** FuncER16(&D, &A, i++); 116:speck3264.c **** printf("rk[%d] = 0x%x\n <- D = 0x%x", i-1, A, D); 117:speck3264.c **** printf("----------------------\n"); 118:speck3264.c **** } 119:speck3264.c **** #endif 120:speck3264.c **** } 376 .loc 1 120 1 is_stmt 0 view .LVU96 377 006c 03B0 add sp, sp, #12 378 .LCFI4: 379 .cfi_def_cfa_offset 20 380 @ sp needed 381 006e F0BD pop {r4, r5, r6, r7, pc} 382 .loc 1 120 1 view .LVU97 383 .cfi_endproc 384 .LFE7: 386 .section .text.Speck3264Encrypt,"ax",%progbits 387 .align 1 388 .global Speck3264Encrypt 389 .syntax unified 390 .thumb 391 .thumb_func 392 .fpu softvfp 394 Speck3264Encrypt: 395 .LVL32: 396 .LFB8: 121:speck3264.c **** 122:speck3264.c **** 123:speck3264.c **** void Speck3264Encrypt(u16 Pt[],u16 Ct[],u16 rk[]) 124:speck3264.c **** { 397 .loc 1 124 1 is_stmt 1 view -0 398 .cfi_startproc 399 @ args = 0, pretend = 0, frame = 0 400 @ frame_needed = 0, uses_anonymous_args = 0 401 .loc 1 124 1 is_stmt 0 view .LVU99 402 0000 F8B5 push {r3, r4, r5, r6, r7, lr} 403 .LCFI5: 404 .cfi_def_cfa_offset 24 405 .cfi_offset 3, -24 406 .cfi_offset 4, -20 407 .cfi_offset 5, -16 408 .cfi_offset 6, -12 409 .cfi_offset 7, -8 410 .cfi_offset 14, -4 125:speck3264.c **** u16 i; 126:speck3264.c **** Ct[0]=Pt[0]; Ct[1]=Pt[1]; 411 .loc 1 126 13 view .LVU100 412 0002 0388 ldrh r3, [r0] 413 .loc 1 126 10 view .LVU101 414 0004 0B80 strh r3, [r1] @ movhi 415 .loc 1 126 23 view .LVU102 416 0006 0F46 mov r7, r1 417 0008 4388 ldrh r3, [r0, #2] 418 000a 27F8023F strh r3, [r7, #2]! @ movhi 124:speck3264.c **** u16 i; 419 .loc 1 124 1 view .LVU103 420 000e 0D46 mov r5, r1 125:speck3264.c **** u16 i; 421 .loc 1 125 5 is_stmt 1 view .LVU104 422 .loc 1 126 5 view .LVU105 423 .loc 1 126 18 view .LVU106 127:speck3264.c **** 128:speck3264.c **** // full 22 rounds 129:speck3264.c **** for(i=0;i<22;) { 424 .loc 1 129 5 view .LVU107 425 .LVL33: 426 .loc 1 129 14 view .LVU108 427 0010 961E subs r6, r2, #2 428 0012 02F12A04 add r4, r2, #42 429 .LVL34: 430 .L15: 130:speck3264.c **** //ER16(Ct[1],Ct[0],rk[i++]); 131:speck3264.c **** #ifdef ARM 132:speck3264.c **** //FuncER16_ASM(&Ct[1], &Ct[0],rk[i++]); 133:speck3264.c **** FuncER16(&Ct[1], &Ct[0], rk[i++]); 431 .loc 1 133 9 view .LVU109 432 .loc 1 133 9 is_stmt 0 view .LVU110 433 0016 36F8022F ldrh r2, [r6, #2]! 434 .LVL35: 435 .loc 1 133 9 view .LVU111 436 001a 2946 mov r1, r5 437 001c 3846 mov r0, r7 438 001e FFF7FEFF bl FuncER16 439 .LVL36: 129:speck3264.c **** //ER16(Ct[1],Ct[0],rk[i++]); 440 .loc 1 129 14 is_stmt 1 view .LVU112 441 0022 A642 cmp r6, r4 442 0024 F7D1 bne .L15 134:speck3264.c **** #else 135:speck3264.c **** FuncER16(&Ct[1], &Ct[0], rk[i++]); 136:speck3264.c **** //ER16(Ct[1],Ct[0],rk[i++]); 137:speck3264.c **** #endif 138:speck3264.c **** 139:speck3264.c **** } 140:speck3264.c **** } 443 .loc 1 140 1 is_stmt 0 view .LVU113 444 0026 F8BD pop {r3, r4, r5, r6, r7, pc} 445 .loc 1 140 1 view .LVU114 446 .cfi_endproc 447 .LFE8: 449 .section .text.Speck3264Decrypt,"ax",%progbits 450 .align 1 451 .global Speck3264Decrypt 452 .syntax unified 453 .thumb 454 .thumb_func 455 .fpu softvfp 457 Speck3264Decrypt: 458 .LVL37: 459 .LFB9: 141:speck3264.c **** 142:speck3264.c **** 143:speck3264.c **** void Speck3264Decrypt(u16 Pt[],u16 Ct[],u16 rk[]) 144:speck3264.c **** { 460 .loc 1 144 1 is_stmt 1 view -0 461 .cfi_startproc 462 @ args = 0, pretend = 0, frame = 0 463 @ frame_needed = 0, uses_anonymous_args = 0 145:speck3264.c **** int i; 464 .loc 1 145 5 view .LVU116 146:speck3264.c **** Pt[0]=Ct[0]; Pt[1]=Ct[1]; 465 .loc 1 146 5 view .LVU117 466 .loc 1 146 13 is_stmt 0 view .LVU118 467 0000 0B88 ldrh r3, [r1] 468 .loc 1 146 10 view .LVU119 469 0002 0380 strh r3, [r0] @ movhi 470 .loc 1 146 18 is_stmt 1 view .LVU120 471 .loc 1 146 23 is_stmt 0 view .LVU121 472 0004 4B88 ldrh r3, [r1, #2] 473 0006 4380 strh r3, [r0, #2] @ movhi 147:speck3264.c **** 148:speck3264.c **** for(i=21;i>=0;) DR16(Pt[1],Pt[0],rk[i--]); 474 .loc 1 148 5 is_stmt 1 view .LVU122 475 .LVL38: 476 .loc 1 148 15 view .LVU123 144:speck3264.c **** int i; 477 .loc 1 144 1 is_stmt 0 view .LVU124 478 0008 30B5 push {r4, r5, lr} 479 .LCFI6: 480 .cfi_def_cfa_offset 12 481 .cfi_offset 4, -12 482 .cfi_offset 5, -8 483 .cfi_offset 14, -4 484 000a 02F12C05 add r5, r2, #44 485 .LVL39: 486 .L18: 487 .loc 1 148 21 is_stmt 1 discriminator 3 view .LVU125 488 000e 4388 ldrh r3, [r0, #2] 489 0010 0488 ldrh r4, [r0] 490 0012 5C40 eors r4, r4, r3 491 0014 A103 lsls r1, r4, #14 492 0016 41EA9401 orr r1, r1, r4, lsr #2 493 001a 89B2 uxth r1, r1 494 001c 0180 strh r1, [r0] @ movhi 495 .loc 1 148 21 is_stmt 0 discriminator 3 view .LVU126 496 001e 35F8024D ldrh r4, [r5, #-2]! 497 0022 6340 eors r3, r3, r4 498 0024 5B1A subs r3, r3, r1 499 0026 99B2 uxth r1, r3 500 0028 C3F34623 ubfx r3, r3, #9, #7 501 002c 43EAC113 orr r3, r3, r1, lsl #7 502 .loc 1 148 15 discriminator 3 view .LVU127 503 0030 AA42 cmp r2, r5 504 .loc 1 148 21 discriminator 3 view .LVU128 505 0032 4380 strh r3, [r0, #2] @ movhi 506 .loc 1 148 15 is_stmt 1 discriminator 3 view .LVU129 507 0034 EBD1 bne .L18 149:speck3264.c **** } 508 .loc 1 149 1 is_stmt 0 view .LVU130 509 0036 30BD pop {r4, r5, pc} 510 .cfi_endproc 511 .LFE9: 513 .section .text.Speck3264_EncryptBlock,"ax",%progbits 514 .align 1 515 .global Speck3264_EncryptBlock 516 .syntax unified 517 .thumb 518 .thumb_func 519 .fpu softvfp 521 Speck3264_EncryptBlock: 522 .LVL40: 523 .LFB10: 150:speck3264.c **** 151:speck3264.c **** 152:speck3264.c **** // Add a random byte array 153:speck3264.c **** void Speck3264_EncryptBlock(u8 pt[], u8 k[], u8 ct[], u8 rand[]) { 524 .loc 1 153 66 is_stmt 1 view -0 525 .cfi_startproc 526 @ args = 0, pretend = 0, frame = 88 527 @ frame_needed = 0, uses_anonymous_args = 0 154:speck3264.c **** 155:speck3264.c **** u16 Pt[2] = {0}; 528 .loc 1 155 5 view .LVU132 153:speck3264.c **** 529 .loc 1 153 66 is_stmt 0 view .LVU133 530 0000 2DE9F041 push {r4, r5, r6, r7, r8, lr} 531 .LCFI7: 532 .cfi_def_cfa_offset 24 533 .cfi_offset 4, -24 534 .cfi_offset 5, -20 535 .cfi_offset 6, -16 536 .cfi_offset 7, -12 537 .cfi_offset 8, -8 538 .cfi_offset 14, -4 539 .loc 1 155 9 view .LVU134 540 0004 0024 movs r4, #0 153:speck3264.c **** 541 .loc 1 153 66 view .LVU135 542 0006 96B0 sub sp, sp, #88 543 .LCFI8: 544 .cfi_def_cfa_offset 112 153:speck3264.c **** 545 .loc 1 153 66 view .LVU136 546 0008 8046 mov r8, r0 547 000a 0F46 mov r7, r1 548 000c 1646 mov r6, r2 156:speck3264.c **** u16 K[4] = {0}; 157:speck3264.c **** u16 rk[34] = {0}; 549 .loc 1 157 9 view .LVU137 550 000e 2146 mov r1, r4 551 .LVL41: 552 .loc 1 157 9 view .LVU138 553 0010 4422 movs r2, #68 554 .LVL42: 555 .loc 1 157 9 view .LVU139 556 0012 05A8 add r0, sp, #20 557 .LVL43: 153:speck3264.c **** 558 .loc 1 153 66 view .LVU140 559 0014 1D46 mov r5, r3 156:speck3264.c **** u16 K[4] = {0}; 560 .loc 1 156 9 view .LVU141 561 0016 CDE90344 strd r4, r4, [sp, #12] 155:speck3264.c **** u16 K[4] = {0}; 562 .loc 1 155 9 view .LVU142 563 001a 0194 str r4, [sp, #4] 156:speck3264.c **** u16 K[4] = {0}; 564 .loc 1 156 5 is_stmt 1 view .LVU143 565 .loc 1 157 5 view .LVU144 566 .loc 1 157 9 is_stmt 0 view .LVU145 567 001c FFF7FEFF bl memset 568 .LVL44: 158:speck3264.c **** u16 Ct[2] = {0}; 569 .loc 1 158 5 is_stmt 1 view .LVU146 159:speck3264.c **** 160:speck3264.c **** BytesToWords16(pt,Pt,8); 570 .loc 1 160 5 is_stmt 0 view .LVU147 571 0020 01A9 add r1, sp, #4 572 0022 4046 mov r0, r8 573 0024 0822 movs r2, #8 158:speck3264.c **** u16 Ct[2] = {0}; 574 .loc 1 158 9 view .LVU148 575 0026 0294 str r4, [sp, #8] 576 .loc 1 160 5 is_stmt 1 view .LVU149 577 0028 FFF7FEFF bl BytesToWords16 578 .LVL45: 161:speck3264.c **** BytesToWords16(k,K,16); 579 .loc 1 161 5 view .LVU150 580 002c 03A9 add r1, sp, #12 581 002e 3846 mov r0, r7 582 0030 1022 movs r2, #16 583 0032 FFF7FEFF bl BytesToWords16 584 .LVL46: 162:speck3264.c **** 163:speck3264.c **** // copy the random data to the global variable 164:speck3264.c **** memcpy(random_seed, rand, 8); 585 .loc 1 164 5 view .LVU151 586 0036 0B4A ldr r2, .L21 587 0038 2B68 ldr r3, [r5] @ unaligned 588 003a 1360 str r3, [r2] @ unaligned 589 003c 6B68 ldr r3, [r5, #4] @ unaligned 590 003e 5360 str r3, [r2, #4] @ unaligned 165:speck3264.c **** 166:speck3264.c **** Speck3264KeySchedule(K,rk); 591 .loc 1 166 5 view .LVU152 592 0040 05A9 add r1, sp, #20 593 0042 03A8 add r0, sp, #12 594 0044 FFF7FEFF bl Speck3264KeySchedule 595 .LVL47: 167:speck3264.c **** 168:speck3264.c **** #ifndef ARM 169:speck3264.c **** // DEBUG Purposes 170:speck3264.c **** for (int i=0; i < 16; i++) 171:speck3264.c **** { 172:speck3264.c **** printf("Key: 0x%x\n", rk[i]); 173:speck3264.c **** } 174:speck3264.c **** #endif 175:speck3264.c **** Speck3264Encrypt(Pt,Ct,rk); 596 .loc 1 175 5 view .LVU153 597 0048 05AA add r2, sp, #20 598 004a 02A9 add r1, sp, #8 599 004c 01A8 add r0, sp, #4 600 004e FFF7FEFF bl Speck3264Encrypt 601 .LVL48: 176:speck3264.c **** Words16ToBytes(Ct,ct,2); 602 .loc 1 176 5 view .LVU154 603 0052 0222 movs r2, #2 604 0054 3146 mov r1, r6 605 0056 02A8 add r0, sp, #8 606 0058 FFF7FEFF bl Words16ToBytes 607 .LVL49: 177:speck3264.c **** } 608 .loc 1 177 1 is_stmt 0 view .LVU155 609 005c 16B0 add sp, sp, #88 610 .LCFI9: 611 .cfi_def_cfa_offset 24 612 @ sp needed 613 005e BDE8F081 pop {r4, r5, r6, r7, r8, pc} 614 .LVL50: 615 .L22: 616 .loc 1 177 1 view .LVU156 617 0062 00BF .align 2 618 .L21: 619 0064 00000000 .word .LANCHOR0 620 .cfi_endproc 621 .LFE10: 623 .global random_seed 624 .bss 625 .set .LANCHOR0,. + 0 628 random_seed: 629 0000 00000000 .space 8 629 00000000 630 .text 631 .Letext0: 632 .file 2 "/usr/arm-none-eabi/include/machine/_default_types.h" 633 .file 3 "/usr/arm-none-eabi/include/sys/_stdint.h" 634 .file 4 "helper.h" 635 .file 5 "<built-in>" DEFINED SYMBOLS *ABS*:0000000000000000 speck3264.c /tmp/ccN3tgDA.s:16 .text.FuncER16:0000000000000000 $t /tmp/ccN3tgDA.s:24 .text.FuncER16:0000000000000000 FuncER16 /tmp/ccN3tgDA.s:107 .text.FuncER16:0000000000000044 $d /tmp/ccN3tgDA.s:112 .text.FuncER16_ASM:0000000000000000 $t /tmp/ccN3tgDA.s:119 .text.FuncER16_ASM:0000000000000000 FuncER16_ASM /tmp/ccN3tgDA.s:160 .text.Words16ToBytes:0000000000000000 $t /tmp/ccN3tgDA.s:167 .text.Words16ToBytes:0000000000000000 Words16ToBytes /tmp/ccN3tgDA.s:219 .text.BytesToWords16:0000000000000000 $t /tmp/ccN3tgDA.s:226 .text.BytesToWords16:0000000000000000 BytesToWords16 /tmp/ccN3tgDA.s:280 .text.Speck3264KeySchedule:0000000000000000 $t /tmp/ccN3tgDA.s:287 .text.Speck3264KeySchedule:0000000000000000 Speck3264KeySchedule /tmp/ccN3tgDA.s:387 .text.Speck3264Encrypt:0000000000000000 $t /tmp/ccN3tgDA.s:394 .text.Speck3264Encrypt:0000000000000000 Speck3264Encrypt /tmp/ccN3tgDA.s:450 .text.Speck3264Decrypt:0000000000000000 $t /tmp/ccN3tgDA.s:457 .text.Speck3264Decrypt:0000000000000000 Speck3264Decrypt /tmp/ccN3tgDA.s:514 .text.Speck3264_EncryptBlock:0000000000000000 $t /tmp/ccN3tgDA.s:521 .text.Speck3264_EncryptBlock:0000000000000000 Speck3264_EncryptBlock /tmp/ccN3tgDA.s:619 .text.Speck3264_EncryptBlock:0000000000000064 $d /tmp/ccN3tgDA.s:628 .bss:0000000000000000 random_seed /tmp/ccN3tgDA.s:629 .bss:0000000000000000 $d UNDEFINED SYMBOLS XOR memset