1 .text 2 .code 32 3 4 .type K256,%object 5 .align 5 6 K256: 7 .word 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 8 .word 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 9 .word 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 10 .word 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 11 .word 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc 12 .word 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da 13 .word 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 14 .word 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 15 .word 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 16 .word 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 17 .word 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 18 .word 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 19 .word 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 20 .word 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 21 .word 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 22 .word 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 23 .size K256,.-K256 24 25 .global sha256_block_data_order 26 .type sha256_block_data_order,%function 27 sha256_block_data_order: 28 sub r3,pc,#8 @ sha256_block_data_order 29 add r2,r1,r2,lsl#6 @ len to point at the end of inp 30 stmdb sp!,{r0,r1,r2,r4-r12,lr} 31 ldmia r0,{r4,r5,r6,r7,r8,r9,r10,r11} 32 sub r14,r3,#256 @ K256 33 sub sp,sp,#16*4 @ alloca(X[16]) 34 .Loop: 35 ldrb r3,[r1,#3] @ 0 36 ldrb r12,[r1,#2] 37 ldrb r2,[r1,#1] 38 ldrb r0,[r1],#4 39 orr r3,r3,r12,lsl#8 40 orr r3,r3,r2,lsl#16 41 orr r3,r3,r0,lsl#24 42 43 ldr r12,[r14],#4 @ *K256++ 44 mov r0,r8,ror#6 45 str r3,[sp,#0*4] 46 eor r0,r0,r8,ror#11 47 eor r2,r9,r10 48 eor r0,r0,r8,ror#25 @ Sigma1(e) 49 and r2,r2,r8 50 add r3,r3,r0 51 eor r2,r2,r10 @ Ch(e,f,g) 52 add r3,r3,r11 53 mov r11,r4,ror#2 54 add r3,r3,r2 55 eor r11,r11,r4,ror#13 56 add r3,r3,r12 57 eor r11,r11,r4,ror#22 @ Sigma0(a) 58 orr r0,r4,r5 59 and r2,r4,r5 60 and r0,r0,r6 61 add r11,r11,r3 62 orr r0,r0,r2 @ Maj(a,b,c) 63 add r7,r7,r3 64 add r11,r11,r0 65 ldrb r3,[r1,#3] @ 1 66 ldrb r12,[r1,#2] 67 ldrb r2,[r1,#1] 68 ldrb r0,[r1],#4 69 orr r3,r3,r12,lsl#8 70 orr r3,r3,r2,lsl#16 71 orr r3,r3,r0,lsl#24 72 73 ldr r12,[r14],#4 @ *K256++ 74 mov r0,r7,ror#6 75 str r3,[sp,#1*4] 76 eor r0,r0,r7,ror#11 77 eor r2,r8,r9 78 eor r0,r0,r7,ror#25 @ Sigma1(e) 79 and r2,r2,r7 80 add r3,r3,r0 81 eor r2,r2,r9 @ Ch(e,f,g) 82 add r3,r3,r10 83 mov r10,r11,ror#2 84 add r3,r3,r2 85 eor r10,r10,r11,ror#13 86 add r3,r3,r12 87 eor r10,r10,r11,ror#22 @ Sigma0(a) 88 orr r0,r11,r4 89 and r2,r11,r4 90 and r0,r0,r5 91 add r10,r10,r3 92 orr r0,r0,r2 @ Maj(a,b,c) 93 add r6,r6,r3 94 add r10,r10,r0 95 ldrb r3,[r1,#3] @ 2 96 ldrb r12,[r1,#2] 97 ldrb r2,[r1,#1] 98 ldrb r0,[r1],#4 99 orr r3,r3,r12,lsl#8 100 orr r3,r3,r2,lsl#16 101 orr r3,r3,r0,lsl#24 102 103 ldr r12,[r14],#4 @ *K256++ 104 mov r0,r6,ror#6 105 str r3,[sp,#2*4] 106 eor r0,r0,r6,ror#11 107 eor r2,r7,r8 108 eor r0,r0,r6,ror#25 @ Sigma1(e) 109 and r2,r2,r6 110 add r3,r3,r0 111 eor r2,r2,r8 @ Ch(e,f,g) 112 add r3,r3,r9 113 mov r9,r10,ror#2 114 add r3,r3,r2 115 eor r9,r9,r10,ror#13 116 add r3,r3,r12 117 eor r9,r9,r10,ror#22 @ Sigma0(a) 118 orr r0,r10,r11 119 and r2,r10,r11 120 and r0,r0,r4 121 add r9,r9,r3 122 orr r0,r0,r2 @ Maj(a,b,c) 123 add r5,r5,r3 124 add r9,r9,r0 125 ldrb r3,[r1,#3] @ 3 126 ldrb r12,[r1,#2] 127 ldrb r2,[r1,#1] 128 ldrb r0,[r1],#4 129 orr r3,r3,r12,lsl#8 130 orr r3,r3,r2,lsl#16 131 orr r3,r3,r0,lsl#24 132 133 ldr r12,[r14],#4 @ *K256++ 134 mov r0,r5,ror#6 135 str r3,[sp,#3*4] 136 eor r0,r0,r5,ror#11 137 eor r2,r6,r7 138 eor r0,r0,r5,ror#25 @ Sigma1(e) 139 and r2,r2,r5 140 add r3,r3,r0 141 eor r2,r2,r7 @ Ch(e,f,g) 142 add r3,r3,r8 143 mov r8,r9,ror#2 144 add r3,r3,r2 145 eor r8,r8,r9,ror#13 146 add r3,r3,r12 147 eor r8,r8,r9,ror#22 @ Sigma0(a) 148 orr r0,r9,r10 149 and r2,r9,r10 150 and r0,r0,r11 151 add r8,r8,r3 152 orr r0,r0,r2 @ Maj(a,b,c) 153 add r4,r4,r3 154 add r8,r8,r0 155 ldrb r3,[r1,#3] @ 4 156 ldrb r12,[r1,#2] 157 ldrb r2,[r1,#1] 158 ldrb r0,[r1],#4 159 orr r3,r3,r12,lsl#8 160 orr r3,r3,r2,lsl#16 161 orr r3,r3,r0,lsl#24 162 163 ldr r12,[r14],#4 @ *K256++ 164 mov r0,r4,ror#6 165 str r3,[sp,#4*4] 166 eor r0,r0,r4,ror#11 167 eor r2,r5,r6 168 eor r0,r0,r4,ror#25 @ Sigma1(e) 169 and r2,r2,r4 170 add r3,r3,r0 171 eor r2,r2,r6 @ Ch(e,f,g) 172 add r3,r3,r7 173 mov r7,r8,ror#2 174 add r3,r3,r2 175 eor r7,r7,r8,ror#13 176 add r3,r3,r12 177 eor r7,r7,r8,ror#22 @ Sigma0(a) 178 orr r0,r8,r9 179 and r2,r8,r9 180 and r0,r0,r10 181 add r7,r7,r3 182 orr r0,r0,r2 @ Maj(a,b,c) 183 add r11,r11,r3 184 add r7,r7,r0 185 ldrb r3,[r1,#3] @ 5 186 ldrb r12,[r1,#2] 187 ldrb r2,[r1,#1] 188 ldrb r0,[r1],#4 189 orr r3,r3,r12,lsl#8 190 orr r3,r3,r2,lsl#16 191 orr r3,r3,r0,lsl#24 192 193 ldr r12,[r14],#4 @ *K256++ 194 mov r0,r11,ror#6 195 str r3,[sp,#5*4] 196 eor r0,r0,r11,ror#11 197 eor r2,r4,r5 198 eor r0,r0,r11,ror#25 @ Sigma1(e) 199 and r2,r2,r11 200 add r3,r3,r0 201 eor r2,r2,r5 @ Ch(e,f,g) 202 add r3,r3,r6 203 mov r6,r7,ror#2 204 add r3,r3,r2 205 eor r6,r6,r7,ror#13 206 add r3,r3,r12 207 eor r6,r6,r7,ror#22 @ Sigma0(a) 208 orr r0,r7,r8 209 and r2,r7,r8 210 and r0,r0,r9 211 add r6,r6,r3 212 orr r0,r0,r2 @ Maj(a,b,c) 213 add r10,r10,r3 214 add r6,r6,r0 215 ldrb r3,[r1,#3] @ 6 216 ldrb r12,[r1,#2] 217 ldrb r2,[r1,#1] 218 ldrb r0,[r1],#4 219 orr r3,r3,r12,lsl#8 220 orr r3,r3,r2,lsl#16 221 orr r3,r3,r0,lsl#24 222 223 ldr r12,[r14],#4 @ *K256++ 224 mov r0,r10,ror#6 225 str r3,[sp,#6*4] 226 eor r0,r0,r10,ror#11 227 eor r2,r11,r4 228 eor r0,r0,r10,ror#25 @ Sigma1(e) 229 and r2,r2,r10 230 add r3,r3,r0 231 eor r2,r2,r4 @ Ch(e,f,g) 232 add r3,r3,r5 233 mov r5,r6,ror#2 234 add r3,r3,r2 235 eor r5,r5,r6,ror#13 236 add r3,r3,r12 237 eor r5,r5,r6,ror#22 @ Sigma0(a) 238 orr r0,r6,r7 239 and r2,r6,r7 240 and r0,r0,r8 241 add r5,r5,r3 242 orr r0,r0,r2 @ Maj(a,b,c) 243 add r9,r9,r3 244 add r5,r5,r0 245 ldrb r3,[r1,#3] @ 7 246 ldrb r12,[r1,#2] 247 ldrb r2,[r1,#1] 248 ldrb r0,[r1],#4 249 orr r3,r3,r12,lsl#8 250 orr r3,r3,r2,lsl#16 251 orr r3,r3,r0,lsl#24 252 253 ldr r12,[r14],#4 @ *K256++ 254 mov r0,r9,ror#6 255 str r3,[sp,#7*4] 256 eor r0,r0,r9,ror#11 257 eor r2,r10,r11 258 eor r0,r0,r9,ror#25 @ Sigma1(e) 259 and r2,r2,r9 260 add r3,r3,r0 261 eor r2,r2,r11 @ Ch(e,f,g) 262 add r3,r3,r4 263 mov r4,r5,ror#2 264 add r3,r3,r2 265 eor r4,r4,r5,ror#13 266 add r3,r3,r12 267 eor r4,r4,r5,ror#22 @ Sigma0(a) 268 orr r0,r5,r6 269 and r2,r5,r6 270 and r0,r0,r7 271 add r4,r4,r3 272 orr r0,r0,r2 @ Maj(a,b,c) 273 add r8,r8,r3 274 add r4,r4,r0 275 ldrb r3,[r1,#3] @ 8 276 ldrb r12,[r1,#2] 277 ldrb r2,[r1,#1] 278 ldrb r0,[r1],#4 279 orr r3,r3,r12,lsl#8 280 orr r3,r3,r2,lsl#16 281 orr r3,r3,r0,lsl#24 282 283 ldr r12,[r14],#4 @ *K256++ 284 mov r0,r8,ror#6 285 str r3,[sp,#8*4] 286 eor r0,r0,r8,ror#11 287 eor r2,r9,r10 288 eor r0,r0,r8,ror#25 @ Sigma1(e) 289 and r2,r2,r8 290 add r3,r3,r0 291 eor r2,r2,r10 @ Ch(e,f,g) 292 add r3,r3,r11 293 mov r11,r4,ror#2 294 add r3,r3,r2 295 eor r11,r11,r4,ror#13 296 add r3,r3,r12 297 eor r11,r11,r4,ror#22 @ Sigma0(a) 298 orr r0,r4,r5 299 and r2,r4,r5 300 and r0,r0,r6 301 add r11,r11,r3 302 orr r0,r0,r2 @ Maj(a,b,c) 303 add r7,r7,r3 304 add r11,r11,r0 305 ldrb r3,[r1,#3] @ 9 306 ldrb r12,[r1,#2] 307 ldrb r2,[r1,#1] 308 ldrb r0,[r1],#4 309 orr r3,r3,r12,lsl#8 310 orr r3,r3,r2,lsl#16 311 orr r3,r3,r0,lsl#24 312 313 ldr r12,[r14],#4 @ *K256++ 314 mov r0,r7,ror#6 315 str r3,[sp,#9*4] 316 eor r0,r0,r7,ror#11 317 eor r2,r8,r9 318 eor r0,r0,r7,ror#25 @ Sigma1(e) 319 and r2,r2,r7 320 add r3,r3,r0 321 eor r2,r2,r9 @ Ch(e,f,g) 322 add r3,r3,r10 323 mov r10,r11,ror#2 324 add r3,r3,r2 325 eor r10,r10,r11,ror#13 326 add r3,r3,r12 327 eor r10,r10,r11,ror#22 @ Sigma0(a) 328 orr r0,r11,r4 329 and r2,r11,r4 330 and r0,r0,r5 331 add r10,r10,r3 332 orr r0,r0,r2 @ Maj(a,b,c) 333 add r6,r6,r3 334 add r10,r10,r0 335 ldrb r3,[r1,#3] @ 10 336 ldrb r12,[r1,#2] 337 ldrb r2,[r1,#1] 338 ldrb r0,[r1],#4 339 orr r3,r3,r12,lsl#8 340 orr r3,r3,r2,lsl#16 341 orr r3,r3,r0,lsl#24 342 343 ldr r12,[r14],#4 @ *K256++ 344 mov r0,r6,ror#6 345 str r3,[sp,#10*4] 346 eor r0,r0,r6,ror#11 347 eor r2,r7,r8 348 eor r0,r0,r6,ror#25 @ Sigma1(e) 349 and r2,r2,r6 350 add r3,r3,r0 351 eor r2,r2,r8 @ Ch(e,f,g) 352 add r3,r3,r9 353 mov r9,r10,ror#2 354 add r3,r3,r2 355 eor r9,r9,r10,ror#13 356 add r3,r3,r12 357 eor r9,r9,r10,ror#22 @ Sigma0(a) 358 orr r0,r10,r11 359 and r2,r10,r11 360 and r0,r0,r4 361 add r9,r9,r3 362 orr r0,r0,r2 @ Maj(a,b,c) 363 add r5,r5,r3 364 add r9,r9,r0 365 ldrb r3,[r1,#3] @ 11 366 ldrb r12,[r1,#2] 367 ldrb r2,[r1,#1] 368 ldrb r0,[r1],#4 369 orr r3,r3,r12,lsl#8 370 orr r3,r3,r2,lsl#16 371 orr r3,r3,r0,lsl#24 372 373 ldr r12,[r14],#4 @ *K256++ 374 mov r0,r5,ror#6 375 str r3,[sp,#11*4] 376 eor r0,r0,r5,ror#11 377 eor r2,r6,r7 378 eor r0,r0,r5,ror#25 @ Sigma1(e) 379 and r2,r2,r5 380 add r3,r3,r0 381 eor r2,r2,r7 @ Ch(e,f,g) 382 add r3,r3,r8 383 mov r8,r9,ror#2 384 add r3,r3,r2 385 eor r8,r8,r9,ror#13 386 add r3,r3,r12 387 eor r8,r8,r9,ror#22 @ Sigma0(a) 388 orr r0,r9,r10 389 and r2,r9,r10 390 and r0,r0,r11 391 add r8,r8,r3 392 orr r0,r0,r2 @ Maj(a,b,c) 393 add r4,r4,r3 394 add r8,r8,r0 395 ldrb r3,[r1,#3] @ 12 396 ldrb r12,[r1,#2] 397 ldrb r2,[r1,#1] 398 ldrb r0,[r1],#4 399 orr r3,r3,r12,lsl#8 400 orr r3,r3,r2,lsl#16 401 orr r3,r3,r0,lsl#24 402 403 ldr r12,[r14],#4 @ *K256++ 404 mov r0,r4,ror#6 405 str r3,[sp,#12*4] 406 eor r0,r0,r4,ror#11 407 eor r2,r5,r6 408 eor r0,r0,r4,ror#25 @ Sigma1(e) 409 and r2,r2,r4 410 add r3,r3,r0 411 eor r2,r2,r6 @ Ch(e,f,g) 412 add r3,r3,r7 413 mov r7,r8,ror#2 414 add r3,r3,r2 415 eor r7,r7,r8,ror#13 416 add r3,r3,r12 417 eor r7,r7,r8,ror#22 @ Sigma0(a) 418 orr r0,r8,r9 419 and r2,r8,r9 420 and r0,r0,r10 421 add r7,r7,r3 422 orr r0,r0,r2 @ Maj(a,b,c) 423 add r11,r11,r3 424 add r7,r7,r0 425 ldrb r3,[r1,#3] @ 13 426 ldrb r12,[r1,#2] 427 ldrb r2,[r1,#1] 428 ldrb r0,[r1],#4 429 orr r3,r3,r12,lsl#8 430 orr r3,r3,r2,lsl#16 431 orr r3,r3,r0,lsl#24 432 433 ldr r12,[r14],#4 @ *K256++ 434 mov r0,r11,ror#6 435 str r3,[sp,#13*4] 436 eor r0,r0,r11,ror#11 437 eor r2,r4,r5 438 eor r0,r0,r11,ror#25 @ Sigma1(e) 439 and r2,r2,r11 440 add r3,r3,r0 441 eor r2,r2,r5 @ Ch(e,f,g) 442 add r3,r3,r6 443 mov r6,r7,ror#2 444 add r3,r3,r2 445 eor r6,r6,r7,ror#13 446 add r3,r3,r12 447 eor r6,r6,r7,ror#22 @ Sigma0(a) 448 orr r0,r7,r8 449 and r2,r7,r8 450 and r0,r0,r9 451 add r6,r6,r3 452 orr r0,r0,r2 @ Maj(a,b,c) 453 add r10,r10,r3 454 add r6,r6,r0 455 ldrb r3,[r1,#3] @ 14 456 ldrb r12,[r1,#2] 457 ldrb r2,[r1,#1] 458 ldrb r0,[r1],#4 459 orr r3,r3,r12,lsl#8 460 orr r3,r3,r2,lsl#16 461 orr r3,r3,r0,lsl#24 462 463 ldr r12,[r14],#4 @ *K256++ 464 mov r0,r10,ror#6 465 str r3,[sp,#14*4] 466 eor r0,r0,r10,ror#11 467 eor r2,r11,r4 468 eor r0,r0,r10,ror#25 @ Sigma1(e) 469 and r2,r2,r10 470 add r3,r3,r0 471 eor r2,r2,r4 @ Ch(e,f,g) 472 add r3,r3,r5 473 mov r5,r6,ror#2 474 add r3,r3,r2 475 eor r5,r5,r6,ror#13 476 add r3,r3,r12 477 eor r5,r5,r6,ror#22 @ Sigma0(a) 478 orr r0,r6,r7 479 and r2,r6,r7 480 and r0,r0,r8 481 add r5,r5,r3 482 orr r0,r0,r2 @ Maj(a,b,c) 483 add r9,r9,r3 484 add r5,r5,r0 485 ldrb r3,[r1,#3] @ 15 486 ldrb r12,[r1,#2] 487 ldrb r2,[r1,#1] 488 ldrb r0,[r1],#4 489 orr r3,r3,r12,lsl#8 490 orr r3,r3,r2,lsl#16 491 orr r3,r3,r0,lsl#24 492 str r1,[sp,#17*4] 493 ldr r12,[r14],#4 @ *K256++ 494 mov r0,r9,ror#6 495 str r3,[sp,#15*4] 496 eor r0,r0,r9,ror#11 497 eor r2,r10,r11 498 eor r0,r0,r9,ror#25 @ Sigma1(e) 499 and r2,r2,r9 500 add r3,r3,r0 501 eor r2,r2,r11 @ Ch(e,f,g) 502 add r3,r3,r4 503 mov r4,r5,ror#2 504 add r3,r3,r2 505 eor r4,r4,r5,ror#13 506 add r3,r3,r12 507 eor r4,r4,r5,ror#22 @ Sigma0(a) 508 orr r0,r5,r6 509 and r2,r5,r6 510 and r0,r0,r7 511 add r4,r4,r3 512 orr r0,r0,r2 @ Maj(a,b,c) 513 add r8,r8,r3 514 add r4,r4,r0 515 .Lrounds_16_xx: 516 ldr r2,[sp,#1*4] @ 16 517 ldr r12,[sp,#14*4] 518 ldr r3,[sp,#0*4] 519 mov r0,r2,ror#7 520 ldr r1,[sp,#9*4] 521 eor r0,r0,r2,ror#18 522 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 523 mov r2,r12,ror#17 524 add r3,r3,r0 525 eor r2,r2,r12,ror#19 526 add r3,r3,r1 527 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 528 add r3,r3,r2 529 ldr r12,[r14],#4 @ *K256++ 530 mov r0,r8,ror#6 531 str r3,[sp,#0*4] 532 eor r0,r0,r8,ror#11 533 eor r2,r9,r10 534 eor r0,r0,r8,ror#25 @ Sigma1(e) 535 and r2,r2,r8 536 add r3,r3,r0 537 eor r2,r2,r10 @ Ch(e,f,g) 538 add r3,r3,r11 539 mov r11,r4,ror#2 540 add r3,r3,r2 541 eor r11,r11,r4,ror#13 542 add r3,r3,r12 543 eor r11,r11,r4,ror#22 @ Sigma0(a) 544 orr r0,r4,r5 545 and r2,r4,r5 546 and r0,r0,r6 547 add r11,r11,r3 548 orr r0,r0,r2 @ Maj(a,b,c) 549 add r7,r7,r3 550 add r11,r11,r0 551 ldr r2,[sp,#2*4] @ 17 552 ldr r12,[sp,#15*4] 553 ldr r3,[sp,#1*4] 554 mov r0,r2,ror#7 555 ldr r1,[sp,#10*4] 556 eor r0,r0,r2,ror#18 557 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 558 mov r2,r12,ror#17 559 add r3,r3,r0 560 eor r2,r2,r12,ror#19 561 add r3,r3,r1 562 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 563 add r3,r3,r2 564 ldr r12,[r14],#4 @ *K256++ 565 mov r0,r7,ror#6 566 str r3,[sp,#1*4] 567 eor r0,r0,r7,ror#11 568 eor r2,r8,r9 569 eor r0,r0,r7,ror#25 @ Sigma1(e) 570 and r2,r2,r7 571 add r3,r3,r0 572 eor r2,r2,r9 @ Ch(e,f,g) 573 add r3,r3,r10 574 mov r10,r11,ror#2 575 add r3,r3,r2 576 eor r10,r10,r11,ror#13 577 add r3,r3,r12 578 eor r10,r10,r11,ror#22 @ Sigma0(a) 579 orr r0,r11,r4 580 and r2,r11,r4 581 and r0,r0,r5 582 add r10,r10,r3 583 orr r0,r0,r2 @ Maj(a,b,c) 584 add r6,r6,r3 585 add r10,r10,r0 586 ldr r2,[sp,#3*4] @ 18 587 ldr r12,[sp,#0*4] 588 ldr r3,[sp,#2*4] 589 mov r0,r2,ror#7 590 ldr r1,[sp,#11*4] 591 eor r0,r0,r2,ror#18 592 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 593 mov r2,r12,ror#17 594 add r3,r3,r0 595 eor r2,r2,r12,ror#19 596 add r3,r3,r1 597 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 598 add r3,r3,r2 599 ldr r12,[r14],#4 @ *K256++ 600 mov r0,r6,ror#6 601 str r3,[sp,#2*4] 602 eor r0,r0,r6,ror#11 603 eor r2,r7,r8 604 eor r0,r0,r6,ror#25 @ Sigma1(e) 605 and r2,r2,r6 606 add r3,r3,r0 607 eor r2,r2,r8 @ Ch(e,f,g) 608 add r3,r3,r9 609 mov r9,r10,ror#2 610 add r3,r3,r2 611 eor r9,r9,r10,ror#13 612 add r3,r3,r12 613 eor r9,r9,r10,ror#22 @ Sigma0(a) 614 orr r0,r10,r11 615 and r2,r10,r11 616 and r0,r0,r4 617 add r9,r9,r3 618 orr r0,r0,r2 @ Maj(a,b,c) 619 add r5,r5,r3 620 add r9,r9,r0 621 ldr r2,[sp,#4*4] @ 19 622 ldr r12,[sp,#1*4] 623 ldr r3,[sp,#3*4] 624 mov r0,r2,ror#7 625 ldr r1,[sp,#12*4] 626 eor r0,r0,r2,ror#18 627 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 628 mov r2,r12,ror#17 629 add r3,r3,r0 630 eor r2,r2,r12,ror#19 631 add r3,r3,r1 632 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 633 add r3,r3,r2 634 ldr r12,[r14],#4 @ *K256++ 635 mov r0,r5,ror#6 636 str r3,[sp,#3*4] 637 eor r0,r0,r5,ror#11 638 eor r2,r6,r7 639 eor r0,r0,r5,ror#25 @ Sigma1(e) 640 and r2,r2,r5 641 add r3,r3,r0 642 eor r2,r2,r7 @ Ch(e,f,g) 643 add r3,r3,r8 644 mov r8,r9,ror#2 645 add r3,r3,r2 646 eor r8,r8,r9,ror#13 647 add r3,r3,r12 648 eor r8,r8,r9,ror#22 @ Sigma0(a) 649 orr r0,r9,r10 650 and r2,r9,r10 651 and r0,r0,r11 652 add r8,r8,r3 653 orr r0,r0,r2 @ Maj(a,b,c) 654 add r4,r4,r3 655 add r8,r8,r0 656 ldr r2,[sp,#5*4] @ 20 657 ldr r12,[sp,#2*4] 658 ldr r3,[sp,#4*4] 659 mov r0,r2,ror#7 660 ldr r1,[sp,#13*4] 661 eor r0,r0,r2,ror#18 662 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 663 mov r2,r12,ror#17 664 add r3,r3,r0 665 eor r2,r2,r12,ror#19 666 add r3,r3,r1 667 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 668 add r3,r3,r2 669 ldr r12,[r14],#4 @ *K256++ 670 mov r0,r4,ror#6 671 str r3,[sp,#4*4] 672 eor r0,r0,r4,ror#11 673 eor r2,r5,r6 674 eor r0,r0,r4,ror#25 @ Sigma1(e) 675 and r2,r2,r4 676 add r3,r3,r0 677 eor r2,r2,r6 @ Ch(e,f,g) 678 add r3,r3,r7 679 mov r7,r8,ror#2 680 add r3,r3,r2 681 eor r7,r7,r8,ror#13 682 add r3,r3,r12 683 eor r7,r7,r8,ror#22 @ Sigma0(a) 684 orr r0,r8,r9 685 and r2,r8,r9 686 and r0,r0,r10 687 add r7,r7,r3 688 orr r0,r0,r2 @ Maj(a,b,c) 689 add r11,r11,r3 690 add r7,r7,r0 691 ldr r2,[sp,#6*4] @ 21 692 ldr r12,[sp,#3*4] 693 ldr r3,[sp,#5*4] 694 mov r0,r2,ror#7 695 ldr r1,[sp,#14*4] 696 eor r0,r0,r2,ror#18 697 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 698 mov r2,r12,ror#17 699 add r3,r3,r0 700 eor r2,r2,r12,ror#19 701 add r3,r3,r1 702 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 703 add r3,r3,r2 704 ldr r12,[r14],#4 @ *K256++ 705 mov r0,r11,ror#6 706 str r3,[sp,#5*4] 707 eor r0,r0,r11,ror#11 708 eor r2,r4,r5 709 eor r0,r0,r11,ror#25 @ Sigma1(e) 710 and r2,r2,r11 711 add r3,r3,r0 712 eor r2,r2,r5 @ Ch(e,f,g) 713 add r3,r3,r6 714 mov r6,r7,ror#2 715 add r3,r3,r2 716 eor r6,r6,r7,ror#13 717 add r3,r3,r12 718 eor r6,r6,r7,ror#22 @ Sigma0(a) 719 orr r0,r7,r8 720 and r2,r7,r8 721 and r0,r0,r9 722 add r6,r6,r3 723 orr r0,r0,r2 @ Maj(a,b,c) 724 add r10,r10,r3 725 add r6,r6,r0 726 ldr r2,[sp,#7*4] @ 22 727 ldr r12,[sp,#4*4] 728 ldr r3,[sp,#6*4] 729 mov r0,r2,ror#7 730 ldr r1,[sp,#15*4] 731 eor r0,r0,r2,ror#18 732 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 733 mov r2,r12,ror#17 734 add r3,r3,r0 735 eor r2,r2,r12,ror#19 736 add r3,r3,r1 737 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 738 add r3,r3,r2 739 ldr r12,[r14],#4 @ *K256++ 740 mov r0,r10,ror#6 741 str r3,[sp,#6*4] 742 eor r0,r0,r10,ror#11 743 eor r2,r11,r4 744 eor r0,r0,r10,ror#25 @ Sigma1(e) 745 and r2,r2,r10 746 add r3,r3,r0 747 eor r2,r2,r4 @ Ch(e,f,g) 748 add r3,r3,r5 749 mov r5,r6,ror#2 750 add r3,r3,r2 751 eor r5,r5,r6,ror#13 752 add r3,r3,r12 753 eor r5,r5,r6,ror#22 @ Sigma0(a) 754 orr r0,r6,r7 755 and r2,r6,r7 756 and r0,r0,r8 757 add r5,r5,r3 758 orr r0,r0,r2 @ Maj(a,b,c) 759 add r9,r9,r3 760 add r5,r5,r0 761 ldr r2,[sp,#8*4] @ 23 762 ldr r12,[sp,#5*4] 763 ldr r3,[sp,#7*4] 764 mov r0,r2,ror#7 765 ldr r1,[sp,#0*4] 766 eor r0,r0,r2,ror#18 767 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 768 mov r2,r12,ror#17 769 add r3,r3,r0 770 eor r2,r2,r12,ror#19 771 add r3,r3,r1 772 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 773 add r3,r3,r2 774 ldr r12,[r14],#4 @ *K256++ 775 mov r0,r9,ror#6 776 str r3,[sp,#7*4] 777 eor r0,r0,r9,ror#11 778 eor r2,r10,r11 779 eor r0,r0,r9,ror#25 @ Sigma1(e) 780 and r2,r2,r9 781 add r3,r3,r0 782 eor r2,r2,r11 @ Ch(e,f,g) 783 add r3,r3,r4 784 mov r4,r5,ror#2 785 add r3,r3,r2 786 eor r4,r4,r5,ror#13 787 add r3,r3,r12 788 eor r4,r4,r5,ror#22 @ Sigma0(a) 789 orr r0,r5,r6 790 and r2,r5,r6 791 and r0,r0,r7 792 add r4,r4,r3 793 orr r0,r0,r2 @ Maj(a,b,c) 794 add r8,r8,r3 795 add r4,r4,r0 796 ldr r2,[sp,#9*4] @ 24 797 ldr r12,[sp,#6*4] 798 ldr r3,[sp,#8*4] 799 mov r0,r2,ror#7 800 ldr r1,[sp,#1*4] 801 eor r0,r0,r2,ror#18 802 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 803 mov r2,r12,ror#17 804 add r3,r3,r0 805 eor r2,r2,r12,ror#19 806 add r3,r3,r1 807 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 808 add r3,r3,r2 809 ldr r12,[r14],#4 @ *K256++ 810 mov r0,r8,ror#6 811 str r3,[sp,#8*4] 812 eor r0,r0,r8,ror#11 813 eor r2,r9,r10 814 eor r0,r0,r8,ror#25 @ Sigma1(e) 815 and r2,r2,r8 816 add r3,r3,r0 817 eor r2,r2,r10 @ Ch(e,f,g) 818 add r3,r3,r11 819 mov r11,r4,ror#2 820 add r3,r3,r2 821 eor r11,r11,r4,ror#13 822 add r3,r3,r12 823 eor r11,r11,r4,ror#22 @ Sigma0(a) 824 orr r0,r4,r5 825 and r2,r4,r5 826 and r0,r0,r6 827 add r11,r11,r3 828 orr r0,r0,r2 @ Maj(a,b,c) 829 add r7,r7,r3 830 add r11,r11,r0 831 ldr r2,[sp,#10*4] @ 25 832 ldr r12,[sp,#7*4] 833 ldr r3,[sp,#9*4] 834 mov r0,r2,ror#7 835 ldr r1,[sp,#2*4] 836 eor r0,r0,r2,ror#18 837 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 838 mov r2,r12,ror#17 839 add r3,r3,r0 840 eor r2,r2,r12,ror#19 841 add r3,r3,r1 842 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 843 add r3,r3,r2 844 ldr r12,[r14],#4 @ *K256++ 845 mov r0,r7,ror#6 846 str r3,[sp,#9*4] 847 eor r0,r0,r7,ror#11 848 eor r2,r8,r9 849 eor r0,r0,r7,ror#25 @ Sigma1(e) 850 and r2,r2,r7 851 add r3,r3,r0 852 eor r2,r2,r9 @ Ch(e,f,g) 853 add r3,r3,r10 854 mov r10,r11,ror#2 855 add r3,r3,r2 856 eor r10,r10,r11,ror#13 857 add r3,r3,r12 858 eor r10,r10,r11,ror#22 @ Sigma0(a) 859 orr r0,r11,r4 860 and r2,r11,r4 861 and r0,r0,r5 862 add r10,r10,r3 863 orr r0,r0,r2 @ Maj(a,b,c) 864 add r6,r6,r3 865 add r10,r10,r0 866 ldr r2,[sp,#11*4] @ 26 867 ldr r12,[sp,#8*4] 868 ldr r3,[sp,#10*4] 869 mov r0,r2,ror#7 870 ldr r1,[sp,#3*4] 871 eor r0,r0,r2,ror#18 872 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 873 mov r2,r12,ror#17 874 add r3,r3,r0 875 eor r2,r2,r12,ror#19 876 add r3,r3,r1 877 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 878 add r3,r3,r2 879 ldr r12,[r14],#4 @ *K256++ 880 mov r0,r6,ror#6 881 str r3,[sp,#10*4] 882 eor r0,r0,r6,ror#11 883 eor r2,r7,r8 884 eor r0,r0,r6,ror#25 @ Sigma1(e) 885 and r2,r2,r6 886 add r3,r3,r0 887 eor r2,r2,r8 @ Ch(e,f,g) 888 add r3,r3,r9 889 mov r9,r10,ror#2 890 add r3,r3,r2 891 eor r9,r9,r10,ror#13 892 add r3,r3,r12 893 eor r9,r9,r10,ror#22 @ Sigma0(a) 894 orr r0,r10,r11 895 and r2,r10,r11 896 and r0,r0,r4 897 add r9,r9,r3 898 orr r0,r0,r2 @ Maj(a,b,c) 899 add r5,r5,r3 900 add r9,r9,r0 901 ldr r2,[sp,#12*4] @ 27 902 ldr r12,[sp,#9*4] 903 ldr r3,[sp,#11*4] 904 mov r0,r2,ror#7 905 ldr r1,[sp,#4*4] 906 eor r0,r0,r2,ror#18 907 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 908 mov r2,r12,ror#17 909 add r3,r3,r0 910 eor r2,r2,r12,ror#19 911 add r3,r3,r1 912 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 913 add r3,r3,r2 914 ldr r12,[r14],#4 @ *K256++ 915 mov r0,r5,ror#6 916 str r3,[sp,#11*4] 917 eor r0,r0,r5,ror#11 918 eor r2,r6,r7 919 eor r0,r0,r5,ror#25 @ Sigma1(e) 920 and r2,r2,r5 921 add r3,r3,r0 922 eor r2,r2,r7 @ Ch(e,f,g) 923 add r3,r3,r8 924 mov r8,r9,ror#2 925 add r3,r3,r2 926 eor r8,r8,r9,ror#13 927 add r3,r3,r12 928 eor r8,r8,r9,ror#22 @ Sigma0(a) 929 orr r0,r9,r10 930 and r2,r9,r10 931 and r0,r0,r11 932 add r8,r8,r3 933 orr r0,r0,r2 @ Maj(a,b,c) 934 add r4,r4,r3 935 add r8,r8,r0 936 ldr r2,[sp,#13*4] @ 28 937 ldr r12,[sp,#10*4] 938 ldr r3,[sp,#12*4] 939 mov r0,r2,ror#7 940 ldr r1,[sp,#5*4] 941 eor r0,r0,r2,ror#18 942 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 943 mov r2,r12,ror#17 944 add r3,r3,r0 945 eor r2,r2,r12,ror#19 946 add r3,r3,r1 947 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 948 add r3,r3,r2 949 ldr r12,[r14],#4 @ *K256++ 950 mov r0,r4,ror#6 951 str r3,[sp,#12*4] 952 eor r0,r0,r4,ror#11 953 eor r2,r5,r6 954 eor r0,r0,r4,ror#25 @ Sigma1(e) 955 and r2,r2,r4 956 add r3,r3,r0 957 eor r2,r2,r6 @ Ch(e,f,g) 958 add r3,r3,r7 959 mov r7,r8,ror#2 960 add r3,r3,r2 961 eor r7,r7,r8,ror#13 962 add r3,r3,r12 963 eor r7,r7,r8,ror#22 @ Sigma0(a) 964 orr r0,r8,r9 965 and r2,r8,r9 966 and r0,r0,r10 967 add r7,r7,r3 968 orr r0,r0,r2 @ Maj(a,b,c) 969 add r11,r11,r3 970 add r7,r7,r0 971 ldr r2,[sp,#14*4] @ 29 972 ldr r12,[sp,#11*4] 973 ldr r3,[sp,#13*4] 974 mov r0,r2,ror#7 975 ldr r1,[sp,#6*4] 976 eor r0,r0,r2,ror#18 977 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 978 mov r2,r12,ror#17 979 add r3,r3,r0 980 eor r2,r2,r12,ror#19 981 add r3,r3,r1 982 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 983 add r3,r3,r2 984 ldr r12,[r14],#4 @ *K256++ 985 mov r0,r11,ror#6 986 str r3,[sp,#13*4] 987 eor r0,r0,r11,ror#11 988 eor r2,r4,r5 989 eor r0,r0,r11,ror#25 @ Sigma1(e) 990 and r2,r2,r11 991 add r3,r3,r0 992 eor r2,r2,r5 @ Ch(e,f,g) 993 add r3,r3,r6 994 mov r6,r7,ror#2 995 add r3,r3,r2 996 eor r6,r6,r7,ror#13 997 add r3,r3,r12 998 eor r6,r6,r7,ror#22 @ Sigma0(a) 999 orr r0,r7,r8 1000 and r2,r7,r8 1001 and r0,r0,r9 1002 add r6,r6,r3 1003 orr r0,r0,r2 @ Maj(a,b,c) 1004 add r10,r10,r3 1005 add r6,r6,r0 1006 ldr r2,[sp,#15*4] @ 30 1007 ldr r12,[sp,#12*4] 1008 ldr r3,[sp,#14*4] 1009 mov r0,r2,ror#7 1010 ldr r1,[sp,#7*4] 1011 eor r0,r0,r2,ror#18 1012 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1013 mov r2,r12,ror#17 1014 add r3,r3,r0 1015 eor r2,r2,r12,ror#19 1016 add r3,r3,r1 1017 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 1018 add r3,r3,r2 1019 ldr r12,[r14],#4 @ *K256++ 1020 mov r0,r10,ror#6 1021 str r3,[sp,#14*4] 1022 eor r0,r0,r10,ror#11 1023 eor r2,r11,r4 1024 eor r0,r0,r10,ror#25 @ Sigma1(e) 1025 and r2,r2,r10 1026 add r3,r3,r0 1027 eor r2,r2,r4 @ Ch(e,f,g) 1028 add r3,r3,r5 1029 mov r5,r6,ror#2 1030 add r3,r3,r2 1031 eor r5,r5,r6,ror#13 1032 add r3,r3,r12 1033 eor r5,r5,r6,ror#22 @ Sigma0(a) 1034 orr r0,r6,r7 1035 and r2,r6,r7 1036 and r0,r0,r8 1037 add r5,r5,r3 1038 orr r0,r0,r2 @ Maj(a,b,c) 1039 add r9,r9,r3 1040 add r5,r5,r0 1041 ldr r2,[sp,#0*4] @ 31 1042 ldr r12,[sp,#13*4] 1043 ldr r3,[sp,#15*4] 1044 mov r0,r2,ror#7 1045 ldr r1,[sp,#8*4] 1046 eor r0,r0,r2,ror#18 1047 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1048 mov r2,r12,ror#17 1049 add r3,r3,r0 1050 eor r2,r2,r12,ror#19 1051 add r3,r3,r1 1052 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14]) 1053 add r3,r3,r2 1054 ldr r12,[r14],#4 @ *K256++ 1055 mov r0,r9,ror#6 1056 str r3,[sp,#15*4] 1057 eor r0,r0,r9,ror#11 1058 eor r2,r10,r11 1059 eor r0,r0,r9,ror#25 @ Sigma1(e) 1060 and r2,r2,r9 1061 add r3,r3,r0 1062 eor r2,r2,r11 @ Ch(e,f,g) 1063 add r3,r3,r4 1064 mov r4,r5,ror#2 1065 add r3,r3,r2 1066 eor r4,r4,r5,ror#13 1067 add r3,r3,r12 1068 eor r4,r4,r5,ror#22 @ Sigma0(a) 1069 orr r0,r5,r6 1070 and r2,r5,r6 1071 and r0,r0,r7 1072 add r4,r4,r3 1073 orr r0,r0,r2 @ Maj(a,b,c) 1074 add r8,r8,r3 1075 add r4,r4,r0 1076 and r12,r12,#0xff 1077 cmp r12,#0xf2 1078 bne .Lrounds_16_xx 1079 1080 ldr r3,[sp,#16*4] @ pull ctx 1081 ldr r0,[r3,#0] 1082 ldr r2,[r3,#4] 1083 ldr r12,[r3,#8] 1084 add r4,r4,r0 1085 ldr r0,[r3,#12] 1086 add r5,r5,r2 1087 ldr r2,[r3,#16] 1088 add r6,r6,r12 1089 ldr r12,[r3,#20] 1090 add r7,r7,r0 1091 ldr r0,[r3,#24] 1092 add r8,r8,r2 1093 ldr r2,[r3,#28] 1094 add r9,r9,r12 1095 ldr r1,[sp,#17*4] @ pull inp 1096 ldr r12,[sp,#18*4] @ pull inp+len 1097 add r10,r10,r0 1098 add r11,r11,r2 1099 stmia r3,{r4,r5,r6,r7,r8,r9,r10,r11} 1100 cmp r1,r12 1101 sub r14,r14,#256 @ rewind Ktbl 1102 bne .Loop 1103 1104 add sp,sp,#19*4 @ destroy frame 1105 ldmia sp!,{r4-r12,lr} 1106 tst lr,#1 1107 moveq pc,lr @ be binary compatible with V4, yet 1108 .word 0xe12fff1e @ interoperable with Thumb ISA:-) 1109 .size sha256_block_data_order,.-sha256_block_data_order 1110 .asciz "SHA256 block transform for ARMv4, CRYPTOGAMS by <appro (at) openssl.org>" 1111 .align 2 1112