Home | History | Annotate | Download | only in asm
      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