1 .text 2 .code 32 3 .type K512,%object 4 .align 5 5 K512: 6 .word 0x428a2f98,0xd728ae22, 0x71374491,0x23ef65cd 7 .word 0xb5c0fbcf,0xec4d3b2f, 0xe9b5dba5,0x8189dbbc 8 .word 0x3956c25b,0xf348b538, 0x59f111f1,0xb605d019 9 .word 0x923f82a4,0xaf194f9b, 0xab1c5ed5,0xda6d8118 10 .word 0xd807aa98,0xa3030242, 0x12835b01,0x45706fbe 11 .word 0x243185be,0x4ee4b28c, 0x550c7dc3,0xd5ffb4e2 12 .word 0x72be5d74,0xf27b896f, 0x80deb1fe,0x3b1696b1 13 .word 0x9bdc06a7,0x25c71235, 0xc19bf174,0xcf692694 14 .word 0xe49b69c1,0x9ef14ad2, 0xefbe4786,0x384f25e3 15 .word 0x0fc19dc6,0x8b8cd5b5, 0x240ca1cc,0x77ac9c65 16 .word 0x2de92c6f,0x592b0275, 0x4a7484aa,0x6ea6e483 17 .word 0x5cb0a9dc,0xbd41fbd4, 0x76f988da,0x831153b5 18 .word 0x983e5152,0xee66dfab, 0xa831c66d,0x2db43210 19 .word 0xb00327c8,0x98fb213f, 0xbf597fc7,0xbeef0ee4 20 .word 0xc6e00bf3,0x3da88fc2, 0xd5a79147,0x930aa725 21 .word 0x06ca6351,0xe003826f, 0x14292967,0x0a0e6e70 22 .word 0x27b70a85,0x46d22ffc, 0x2e1b2138,0x5c26c926 23 .word 0x4d2c6dfc,0x5ac42aed, 0x53380d13,0x9d95b3df 24 .word 0x650a7354,0x8baf63de, 0x766a0abb,0x3c77b2a8 25 .word 0x81c2c92e,0x47edaee6, 0x92722c85,0x1482353b 26 .word 0xa2bfe8a1,0x4cf10364, 0xa81a664b,0xbc423001 27 .word 0xc24b8b70,0xd0f89791, 0xc76c51a3,0x0654be30 28 .word 0xd192e819,0xd6ef5218, 0xd6990624,0x5565a910 29 .word 0xf40e3585,0x5771202a, 0x106aa070,0x32bbd1b8 30 .word 0x19a4c116,0xb8d2d0c8, 0x1e376c08,0x5141ab53 31 .word 0x2748774c,0xdf8eeb99, 0x34b0bcb5,0xe19b48a8 32 .word 0x391c0cb3,0xc5c95a63, 0x4ed8aa4a,0xe3418acb 33 .word 0x5b9cca4f,0x7763e373, 0x682e6ff3,0xd6b2b8a3 34 .word 0x748f82ee,0x5defb2fc, 0x78a5636f,0x43172f60 35 .word 0x84c87814,0xa1f0ab72, 0x8cc70208,0x1a6439ec 36 .word 0x90befffa,0x23631e28, 0xa4506ceb,0xde82bde9 37 .word 0xbef9a3f7,0xb2c67915, 0xc67178f2,0xe372532b 38 .word 0xca273ece,0xea26619c, 0xd186b8c7,0x21c0c207 39 .word 0xeada7dd6,0xcde0eb1e, 0xf57d4f7f,0xee6ed178 40 .word 0x06f067aa,0x72176fba, 0x0a637dc5,0xa2c898a6 41 .word 0x113f9804,0xbef90dae, 0x1b710b35,0x131c471b 42 .word 0x28db77f5,0x23047d84, 0x32caab7b,0x40c72493 43 .word 0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c 44 .word 0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a 45 .word 0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817 46 .size K512,.-K512 47 48 .global sha512_block_data_order 49 .type sha512_block_data_order,%function 50 sha512_block_data_order: 51 sub r3,pc,#8 @ sha512_block_data_order 52 add r2,r1,r2,lsl#7 @ len to point at the end of inp 53 stmdb sp!,{r4-r12,lr} 54 sub r14,r3,#640 @ K512 55 sub sp,sp,#9*8 56 57 ldr r7,[r0,#32+4] 58 ldr r8,[r0,#32+0] 59 ldr r9, [r0,#48+4] 60 ldr r10, [r0,#48+0] 61 ldr r11, [r0,#56+4] 62 ldr r12, [r0,#56+0] 63 .Loop: 64 str r9, [sp,#48+0] 65 str r10, [sp,#48+4] 66 str r11, [sp,#56+0] 67 str r12, [sp,#56+4] 68 ldr r5,[r0,#0+4] 69 ldr r6,[r0,#0+0] 70 ldr r3,[r0,#8+4] 71 ldr r4,[r0,#8+0] 72 ldr r9, [r0,#16+4] 73 ldr r10, [r0,#16+0] 74 ldr r11, [r0,#24+4] 75 ldr r12, [r0,#24+0] 76 str r3,[sp,#8+0] 77 str r4,[sp,#8+4] 78 str r9, [sp,#16+0] 79 str r10, [sp,#16+4] 80 str r11, [sp,#24+0] 81 str r12, [sp,#24+4] 82 ldr r3,[r0,#40+4] 83 ldr r4,[r0,#40+0] 84 str r3,[sp,#40+0] 85 str r4,[sp,#40+4] 86 87 .L00_15: 88 ldrb r3,[r1,#7] 89 ldrb r9, [r1,#6] 90 ldrb r10, [r1,#5] 91 ldrb r11, [r1,#4] 92 ldrb r4,[r1,#3] 93 ldrb r12, [r1,#2] 94 orr r3,r3,r9,lsl#8 95 ldrb r9, [r1,#1] 96 orr r3,r3,r10,lsl#16 97 ldrb r10, [r1],#8 98 orr r3,r3,r11,lsl#24 99 orr r4,r4,r12,lsl#8 100 orr r4,r4,r9,lsl#16 101 orr r4,r4,r10,lsl#24 102 str r3,[sp,#64+0] 103 str r4,[sp,#64+4] 104 ldr r11,[sp,#56+0] @ h.lo 105 ldr r12,[sp,#56+4] @ h.hi 106 @ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41)) 107 @ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23 108 @ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23 109 mov r9,r7,lsr#14 110 mov r10,r8,lsr#14 111 eor r9,r9,r8,lsl#18 112 eor r10,r10,r7,lsl#18 113 eor r9,r9,r7,lsr#18 114 eor r10,r10,r8,lsr#18 115 eor r9,r9,r8,lsl#14 116 eor r10,r10,r7,lsl#14 117 eor r9,r9,r8,lsr#9 118 eor r10,r10,r7,lsr#9 119 eor r9,r9,r7,lsl#23 120 eor r10,r10,r8,lsl#23 @ Sigma1(e) 121 adds r3,r3,r9 122 ldr r9,[sp,#40+0] @ f.lo 123 adc r4,r4,r10 @ T += Sigma1(e) 124 ldr r10,[sp,#40+4] @ f.hi 125 adds r3,r3,r11 126 ldr r11,[sp,#48+0] @ g.lo 127 adc r4,r4,r12 @ T += h 128 ldr r12,[sp,#48+4] @ g.hi 129 130 eor r9,r9,r11 131 str r7,[sp,#32+0] 132 eor r10,r10,r12 133 str r8,[sp,#32+4] 134 and r9,r9,r7 135 str r5,[sp,#0+0] 136 and r10,r10,r8 137 str r6,[sp,#0+4] 138 eor r9,r9,r11 139 ldr r11,[r14,#4] @ K[i].lo 140 eor r10,r10,r12 @ Ch(e,f,g) 141 ldr r12,[r14,#0] @ K[i].hi 142 143 adds r3,r3,r9 144 ldr r7,[sp,#24+0] @ d.lo 145 adc r4,r4,r10 @ T += Ch(e,f,g) 146 ldr r8,[sp,#24+4] @ d.hi 147 adds r3,r3,r11 148 adc r4,r4,r12 @ T += K[i] 149 adds r7,r7,r3 150 adc r8,r8,r4 @ d += T 151 152 and r9,r11,#0xff 153 teq r9,#148 154 orreq r14,r14,#1 155 156 ldr r11,[sp,#8+0] @ b.lo 157 ldr r12,[sp,#16+0] @ c.lo 158 @ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39)) 159 @ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25 160 @ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25 161 mov r9,r5,lsr#28 162 mov r10,r6,lsr#28 163 eor r9,r9,r6,lsl#4 164 eor r10,r10,r5,lsl#4 165 eor r9,r9,r6,lsr#2 166 eor r10,r10,r5,lsr#2 167 eor r9,r9,r5,lsl#30 168 eor r10,r10,r6,lsl#30 169 eor r9,r9,r6,lsr#7 170 eor r10,r10,r5,lsr#7 171 eor r9,r9,r5,lsl#25 172 eor r10,r10,r6,lsl#25 @ Sigma0(a) 173 adds r3,r3,r9 174 adc r4,r4,r10 @ T += Sigma0(a) 175 176 and r9,r5,r11 177 orr r5,r5,r11 178 ldr r10,[sp,#8+4] @ b.hi 179 ldr r11,[sp,#16+4] @ c.hi 180 and r5,r5,r12 181 orr r5,r5,r9 @ Maj(a,b,c).lo 182 and r12,r6,r10 183 orr r6,r6,r10 184 and r6,r6,r11 185 orr r6,r6,r12 @ Maj(a,b,c).hi 186 adds r5,r5,r3 187 adc r6,r6,r4 @ h += T 188 189 sub sp,sp,#8 190 add r14,r14,#8 191 tst r14,#1 192 beq .L00_15 193 bic r14,r14,#1 194 195 .L16_79: 196 ldr r9,[sp,#184+0] 197 ldr r10,[sp,#184+4] 198 ldr r11,[sp,#80+0] 199 ldr r12,[sp,#80+4] 200 201 @ sigma0(x) (ROTR((x),1) ^ ROTR((x),8) ^ ((x)>>7)) 202 @ LO lo>>1^hi<<31 ^ lo>>8^hi<<24 ^ lo>>7^hi<<25 203 @ HI hi>>1^lo<<31 ^ hi>>8^lo<<24 ^ hi>>7 204 mov r3,r9,lsr#1 205 mov r4,r10,lsr#1 206 eor r3,r3,r10,lsl#31 207 eor r4,r4,r9,lsl#31 208 eor r3,r3,r9,lsr#8 209 eor r4,r4,r10,lsr#8 210 eor r3,r3,r10,lsl#24 211 eor r4,r4,r9,lsl#24 212 eor r3,r3,r9,lsr#7 213 eor r4,r4,r10,lsr#7 214 eor r3,r3,r10,lsl#25 215 216 @ sigma1(x) (ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6)) 217 @ LO lo>>19^hi<<13 ^ hi>>29^lo<<3 ^ lo>>6^hi<<26 218 @ HI hi>>19^lo<<13 ^ lo>>29^hi<<3 ^ hi>>6 219 mov r9,r11,lsr#19 220 mov r10,r12,lsr#19 221 eor r9,r9,r12,lsl#13 222 eor r10,r10,r11,lsl#13 223 eor r9,r9,r12,lsr#29 224 eor r10,r10,r11,lsr#29 225 eor r9,r9,r11,lsl#3 226 eor r10,r10,r12,lsl#3 227 eor r9,r9,r11,lsr#6 228 eor r10,r10,r12,lsr#6 229 eor r9,r9,r12,lsl#26 230 231 ldr r11,[sp,#120+0] 232 ldr r12,[sp,#120+4] 233 adds r3,r3,r9 234 adc r4,r4,r10 235 236 ldr r9,[sp,#192+0] 237 ldr r10,[sp,#192+4] 238 adds r3,r3,r11 239 adc r4,r4,r12 240 adds r3,r3,r9 241 adc r4,r4,r10 242 str r3,[sp,#64+0] 243 str r4,[sp,#64+4] 244 ldr r11,[sp,#56+0] @ h.lo 245 ldr r12,[sp,#56+4] @ h.hi 246 @ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41)) 247 @ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23 248 @ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23 249 mov r9,r7,lsr#14 250 mov r10,r8,lsr#14 251 eor r9,r9,r8,lsl#18 252 eor r10,r10,r7,lsl#18 253 eor r9,r9,r7,lsr#18 254 eor r10,r10,r8,lsr#18 255 eor r9,r9,r8,lsl#14 256 eor r10,r10,r7,lsl#14 257 eor r9,r9,r8,lsr#9 258 eor r10,r10,r7,lsr#9 259 eor r9,r9,r7,lsl#23 260 eor r10,r10,r8,lsl#23 @ Sigma1(e) 261 adds r3,r3,r9 262 ldr r9,[sp,#40+0] @ f.lo 263 adc r4,r4,r10 @ T += Sigma1(e) 264 ldr r10,[sp,#40+4] @ f.hi 265 adds r3,r3,r11 266 ldr r11,[sp,#48+0] @ g.lo 267 adc r4,r4,r12 @ T += h 268 ldr r12,[sp,#48+4] @ g.hi 269 270 eor r9,r9,r11 271 str r7,[sp,#32+0] 272 eor r10,r10,r12 273 str r8,[sp,#32+4] 274 and r9,r9,r7 275 str r5,[sp,#0+0] 276 and r10,r10,r8 277 str r6,[sp,#0+4] 278 eor r9,r9,r11 279 ldr r11,[r14,#4] @ K[i].lo 280 eor r10,r10,r12 @ Ch(e,f,g) 281 ldr r12,[r14,#0] @ K[i].hi 282 283 adds r3,r3,r9 284 ldr r7,[sp,#24+0] @ d.lo 285 adc r4,r4,r10 @ T += Ch(e,f,g) 286 ldr r8,[sp,#24+4] @ d.hi 287 adds r3,r3,r11 288 adc r4,r4,r12 @ T += K[i] 289 adds r7,r7,r3 290 adc r8,r8,r4 @ d += T 291 292 and r9,r11,#0xff 293 teq r9,#23 294 orreq r14,r14,#1 295 296 ldr r11,[sp,#8+0] @ b.lo 297 ldr r12,[sp,#16+0] @ c.lo 298 @ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39)) 299 @ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25 300 @ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25 301 mov r9,r5,lsr#28 302 mov r10,r6,lsr#28 303 eor r9,r9,r6,lsl#4 304 eor r10,r10,r5,lsl#4 305 eor r9,r9,r6,lsr#2 306 eor r10,r10,r5,lsr#2 307 eor r9,r9,r5,lsl#30 308 eor r10,r10,r6,lsl#30 309 eor r9,r9,r6,lsr#7 310 eor r10,r10,r5,lsr#7 311 eor r9,r9,r5,lsl#25 312 eor r10,r10,r6,lsl#25 @ Sigma0(a) 313 adds r3,r3,r9 314 adc r4,r4,r10 @ T += Sigma0(a) 315 316 and r9,r5,r11 317 orr r5,r5,r11 318 ldr r10,[sp,#8+4] @ b.hi 319 ldr r11,[sp,#16+4] @ c.hi 320 and r5,r5,r12 321 orr r5,r5,r9 @ Maj(a,b,c).lo 322 and r12,r6,r10 323 orr r6,r6,r10 324 and r6,r6,r11 325 orr r6,r6,r12 @ Maj(a,b,c).hi 326 adds r5,r5,r3 327 adc r6,r6,r4 @ h += T 328 329 sub sp,sp,#8 330 add r14,r14,#8 331 tst r14,#1 332 beq .L16_79 333 bic r14,r14,#1 334 335 ldr r3,[sp,#8+0] 336 ldr r4,[sp,#8+4] 337 ldr r9, [r0,#0+4] 338 ldr r10, [r0,#0+0] 339 ldr r11, [r0,#8+4] 340 ldr r12, [r0,#8+0] 341 adds r9,r5,r9 342 adc r10,r6,r10 343 adds r11,r3,r11 344 adc r12,r4,r12 345 str r9, [r0,#0+4] 346 str r10, [r0,#0+0] 347 str r11, [r0,#8+4] 348 str r12, [r0,#8+0] 349 350 ldr r5,[sp,#16+0] 351 ldr r6,[sp,#16+4] 352 ldr r3,[sp,#24+0] 353 ldr r4,[sp,#24+4] 354 ldr r9, [r0,#16+4] 355 ldr r10, [r0,#16+0] 356 ldr r11, [r0,#24+4] 357 ldr r12, [r0,#24+0] 358 adds r9,r5,r9 359 adc r10,r6,r10 360 adds r11,r3,r11 361 adc r12,r4,r12 362 str r9, [r0,#16+4] 363 str r10, [r0,#16+0] 364 str r11, [r0,#24+4] 365 str r12, [r0,#24+0] 366 367 ldr r3,[sp,#40+0] 368 ldr r4,[sp,#40+4] 369 ldr r9, [r0,#32+4] 370 ldr r10, [r0,#32+0] 371 ldr r11, [r0,#40+4] 372 ldr r12, [r0,#40+0] 373 adds r7,r7,r9 374 adc r8,r8,r10 375 adds r11,r3,r11 376 adc r12,r4,r12 377 str r7,[r0,#32+4] 378 str r8,[r0,#32+0] 379 str r11, [r0,#40+4] 380 str r12, [r0,#40+0] 381 382 ldr r5,[sp,#48+0] 383 ldr r6,[sp,#48+4] 384 ldr r3,[sp,#56+0] 385 ldr r4,[sp,#56+4] 386 ldr r9, [r0,#48+4] 387 ldr r10, [r0,#48+0] 388 ldr r11, [r0,#56+4] 389 ldr r12, [r0,#56+0] 390 adds r9,r5,r9 391 adc r10,r6,r10 392 adds r11,r3,r11 393 adc r12,r4,r12 394 str r9, [r0,#48+4] 395 str r10, [r0,#48+0] 396 str r11, [r0,#56+4] 397 str r12, [r0,#56+0] 398 399 add sp,sp,#640 400 sub r14,r14,#640 401 402 teq r1,r2 403 bne .Loop 404 405 add sp,sp,#8*9 @ destroy frame 406 ldmia sp!,{r4-r12,lr} 407 tst lr,#1 408 moveq pc,lr @ be binary compatible with V4, yet 409 .word 0xe12fff1e @ interoperable with Thumb ISA:-) 410 .size sha512_block_data_order,.-sha512_block_data_order 411 .asciz "SHA512 block transform for ARMv4, CRYPTOGAMS by <appro (at) openssl.org>" 412 .align 2 413