summaryrefslogtreecommitdiffstats
path: root/CryptoPkg/Library/OpensslLib/IA32/crypto/sha/sha512-586.nasm
blob: a168b4a79994d0c14a5d4d7b1be2b8746d3064bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
; WARNING: do not edit!
; Generated from openssl/crypto/sha/asm/sha512-586.pl
;
; Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved.
;
; Licensed under the OpenSSL license (the "License").  You may not use
; this file except in compliance with the License.  You can obtain a copy
; in the file LICENSE in the source distribution or at
; https://www.openssl.org/source/license.html

%ifidn __OUTPUT_FORMAT__,obj
section code    use32 class=code align=64
%elifidn __OUTPUT_FORMAT__,win32
$@feat.00 equ 1
section .text   code align=64
%else
section .text   code
%endif
global  _sha512_block_data_order
align   16
_sha512_block_data_order:
L$_sha512_block_data_order_begin:
        push    ebp
        push    ebx
        push    esi
        push    edi
        mov     esi,DWORD [20+esp]
        mov     edi,DWORD [24+esp]
        mov     eax,DWORD [28+esp]
        mov     ebx,esp
        call    L$000pic_point
L$000pic_point:
        pop     ebp
        lea     ebp,[(L$001K512-L$000pic_point)+ebp]
        sub     esp,16
        and     esp,-64
        shl     eax,7
        add     eax,edi
        mov     DWORD [esp],esi
        mov     DWORD [4+esp],edi
        mov     DWORD [8+esp],eax
        mov     DWORD [12+esp],ebx
align   16
L$002loop_x86:
        mov     eax,DWORD [edi]
        mov     ebx,DWORD [4+edi]
        mov     ecx,DWORD [8+edi]
        mov     edx,DWORD [12+edi]
        bswap   eax
        bswap   ebx
        bswap   ecx
        bswap   edx
        push    eax
        push    ebx
        push    ecx
        push    edx
        mov     eax,DWORD [16+edi]
        mov     ebx,DWORD [20+edi]
        mov     ecx,DWORD [24+edi]
        mov     edx,DWORD [28+edi]
        bswap   eax
        bswap   ebx
        bswap   ecx
        bswap   edx
        push    eax
        push    ebx
        push    ecx
        push    edx
        mov     eax,DWORD [32+edi]
        mov     ebx,DWORD [36+edi]
        mov     ecx,DWORD [40+edi]
        mov     edx,DWORD [44+edi]
        bswap   eax
        bswap   ebx
        bswap   ecx
        bswap   edx
        push    eax
        push    ebx
        push    ecx
        push    edx
        mov     eax,DWORD [48+edi]
        mov     ebx,DWORD [52+edi]
        mov     ecx,DWORD [56+edi]
        mov     edx,DWORD [60+edi]
        bswap   eax
        bswap   ebx
        bswap   ecx
        bswap   edx
        push    eax
        push    ebx
        push    ecx
        push    edx
        mov     eax,DWORD [64+edi]
        mov     ebx,DWORD [68+edi]
        mov     ecx,DWORD [72+edi]
        mov     edx,DWORD [76+edi]
        bswap   eax
        bswap   ebx
        bswap   ecx
        bswap   edx
        push    eax
        push    ebx
        push    ecx
        push    edx
        mov     eax,DWORD [80+edi]
        mov     ebx,DWORD [84+edi]
        mov     ecx,DWORD [88+edi]
        mov     edx,DWORD [92+edi]
        bswap   eax
        bswap   ebx
        bswap   ecx
        bswap   edx
        push    eax
        push    ebx
        push    ecx
        push    edx
        mov     eax,DWORD [96+edi]
        mov     ebx,DWORD [100+edi]
        mov     ecx,DWORD [104+edi]
        mov     edx,DWORD [108+edi]
        bswap   eax
        bswap   ebx
        bswap   ecx
        bswap   edx
        push    eax
        push    ebx
        push    ecx
        push    edx
        mov     eax,DWORD [112+edi]
        mov     ebx,DWORD [116+edi]
        mov     ecx,DWORD [120+edi]
        mov     edx,DWORD [124+edi]
        bswap   eax
        bswap   ebx
        bswap   ecx
        bswap   edx
        push    eax
        push    ebx
        push    ecx
        push    edx
        add     edi,128
        sub     esp,72
        mov     DWORD [204+esp],edi
        lea     edi,[8+esp]
        mov     ecx,16
dd      2784229001
align   16
L$00300_15_x86:
        mov     ecx,DWORD [40+esp]
        mov     edx,DWORD [44+esp]
        mov     esi,ecx
        shr     ecx,9
        mov     edi,edx
        shr     edx,9
        mov     ebx,ecx
        shl     esi,14
        mov     eax,edx
        shl     edi,14
        xor     ebx,esi
        shr     ecx,5
        xor     eax,edi
        shr     edx,5
        xor     eax,ecx
        shl     esi,4
        xor     ebx,edx
        shl     edi,4
        xor     ebx,esi
        shr     ecx,4
        xor     eax,edi
        shr     edx,4
        xor     eax,ecx
        shl     esi,5
        xor     ebx,edx
        shl     edi,5
        xor     eax,esi
        xor     ebx,edi
        mov     ecx,DWORD [48+esp]
        mov     edx,DWORD [52+esp]
        mov     esi,DWORD [56+esp]
        mov     edi,DWORD [60+esp]
        add     eax,DWORD [64+esp]
        adc     ebx,DWORD [68+esp]
        xor     ecx,esi
        xor     edx,edi
        and     ecx,DWORD [40+esp]
        and     edx,DWORD [44+esp]
        add     eax,DWORD [192+esp]
        adc     ebx,DWORD [196+esp]
        xor     ecx,esi
        xor     edx,edi
        mov     esi,DWORD [ebp]
        mov     edi,DWORD [4+ebp]
        add     eax,ecx
        adc     ebx,edx
        mov     ecx,DWORD [32+esp]
        mov     edx,DWORD [36+esp]
        add     eax,esi
        adc     ebx,edi
        mov     DWORD [esp],eax
        mov     DWORD [4+esp],ebx
        add     eax,ecx
        adc     ebx,edx
        mov     ecx,DWORD [8+esp]
        mov     edx,DWORD [12+esp]
        mov     DWORD [32+esp],eax
        mov     DWORD [36+esp],ebx
        mov     esi,ecx
        shr     ecx,2
        mov     edi,edx
        shr     edx,2
        mov     ebx,ecx
        shl     esi,4
        mov     eax,edx
        shl     edi,4
        xor     ebx,esi
        shr     ecx,5
        xor     eax,edi
        shr     edx,5
        xor     ebx,ecx
        shl     esi,21
        xor     eax,edx
        shl     edi,21
        xor     eax,esi
        shr     ecx,21
        xor     ebx,edi
        shr     edx,21
        xor     eax,ecx
        shl     esi,5
        xor     ebx,edx
        shl     edi,5
        xor     eax,esi
        xor     ebx,edi
        mov     ecx,DWORD [8+esp]
        mov     edx,DWORD [12+esp]
        mov     esi,DWORD [16+esp]
        mov     edi,DWORD [20+esp]
        add     eax,DWORD [esp]
        adc     ebx,DWORD [4+esp]
        or      ecx,esi
        or      edx,edi
        and     ecx,DWORD [24+esp]
        and     edx,DWORD [28+esp]
        and     esi,DWORD [8+esp]
        and     edi,DWORD [12+esp]
        or      ecx,esi
        or      edx,edi
        add     eax,ecx
        adc     ebx,edx
        mov     DWORD [esp],eax
        mov     DWORD [4+esp],ebx
        mov     dl,BYTE [ebp]
        sub     esp,8
        lea     ebp,[8+ebp]
        cmp     dl,148
        jne     NEAR L$00300_15_x86
align   16
L$00416_79_x86:
        mov     ecx,DWORD [312+esp]
        mov     edx,DWORD [316+esp]
        mov     esi,ecx
        shr     ecx,1
        mov     edi,edx
        shr     edx,1
        mov     eax,ecx
        shl     esi,24
        mov     ebx,edx
        shl     edi,24
        xor     ebx,esi
        shr     ecx,6
        xor     eax,edi
        shr     edx,6
        xor     eax,ecx
        shl     esi,7
        xor     ebx,edx
        shl     edi,1
        xor     ebx,esi
        shr     ecx,1
        xor     eax,edi
        shr     edx,1
        xor     eax,ecx
        shl     edi,6
        xor     ebx,edx
        xor     eax,edi
        mov     DWORD [esp],eax
        mov     DWORD [4+esp],ebx
        mov     ecx,DWORD [208+esp]
        mov     edx,DWORD [212+esp]
        mov     esi,ecx
        shr     ecx,6
        mov     edi,edx
        shr     edx,6
        mov     eax,ecx
        shl     esi,3
        mov     ebx,edx
        shl     edi,3
        xor     eax,esi
        shr     ecx,13
        xor     ebx,edi
        shr     edx,13
        xor     eax,ecx
        shl     esi,10
        xor     ebx,edx
        shl     edi,10
        xor     ebx,esi
        shr     ecx,10
        xor     eax,edi
        shr     edx,10
        xor     ebx,ecx
        shl     edi,13
        xor     eax,edx
        xor     eax,edi
        mov     ecx,DWORD [320+esp]
        mov     edx,DWORD [324+esp]
        add     eax,DWORD [esp]
        adc     ebx,DWORD [4+esp]
        mov     esi,DWORD [248+esp]
        mov     edi,DWORD [252+esp]
        add     eax,ecx
        adc     ebx,edx
        add     eax,esi
        adc     ebx,edi
        mov     DWORD [192+esp],eax
        mov     DWORD [196+esp],ebx
        mov     ecx,DWORD [40+esp]
        mov     edx,DWORD [44+esp]
        mov     esi,ecx
        shr     ecx,9
        mov     edi,edx
        shr     edx,9
        mov     ebx,ecx
        shl     esi,14
        mov     eax,edx
        shl     edi,14
        xor     ebx,esi
        shr     ecx,5
        xor     eax,edi
        shr     edx,5
        xor     eax,ecx
        shl     esi,4
        xor     ebx,edx
        shl     edi,4
        xor     ebx,esi
        shr     ecx,4
        xor     eax,edi
        shr     edx,4
        xor     eax,ecx
        shl     esi,5
        xor     ebx,edx
        shl     edi,5
        xor     eax,esi
        xor     ebx,edi
        mov     ecx,DWORD [48+esp]
        mov     edx,DWORD [52+esp]
        mov     esi,DWORD [56+esp]
        mov     edi,DWORD [60+esp]
        add     eax,DWORD [64+esp]
        adc     ebx,DWORD [68+esp]
        xor     ecx,esi
        xor     edx,edi
        and     ecx,DWORD [40+esp]
        and     edx,DWORD [44+esp]
        add     eax,DWORD [192+esp]
        adc     ebx,DWORD [196+esp]
        xor     ecx,esi
        xor     edx,edi
        mov     esi,DWORD [ebp]
        mov     edi,DWORD [4+ebp]
        add     eax,ecx
        adc     ebx,edx
        mov     ecx,DWORD [32+esp]
        mov     edx,DWORD [36+esp]
        add     eax,esi
        adc     ebx,edi
        mov     DWORD [esp],eax
        mov     DWORD [4+esp],ebx
        add     eax,ecx
        adc     ebx,edx
        mov     ecx,DWORD [8+esp]
        mov     edx,DWORD [12+esp]
        mov     DWORD [32+esp],eax
        mov     DWORD [36+esp],ebx
        mov     esi,ecx
        shr     ecx,2
        mov     edi,edx
        shr     edx,2
        mov     ebx,ecx
        shl     esi,4
        mov     eax,edx
        shl     edi,4
        xor     ebx,esi
        shr     ecx,5
        xor     eax,edi
        shr     edx,5
        xor     ebx,ecx
        shl     esi,21
        xor     eax,edx
        shl     edi,21
        xor     eax,esi
        shr     ecx,21
        xor     ebx,edi
        shr     edx,21
        xor     eax,ecx
        shl     esi,5
        xor     ebx,edx
        shl     edi,5
        xor     eax,esi
        xor     ebx,edi
        mov     ecx,DWORD [8+esp]
        mov     edx,DWORD [12+esp]
        mov     esi,DWORD [16+esp]
        mov     edi,DWORD [20+esp]
        add     eax,DWORD [esp]
        adc     ebx,DWORD [4+esp]
        or      ecx,esi
        or      edx,edi
        and     ecx,DWORD [24+esp]
        and     edx,DWORD [28+esp]
        and     esi,DWORD [8+esp]
        and     edi,DWORD [12+esp]
        or      ecx,esi
        or      edx,edi
        add     eax,ecx
        adc     ebx,edx
        mov     DWORD [esp],eax
        mov     DWORD [4+esp],ebx
        mov     dl,BYTE [ebp]
        sub     esp,8
        lea     ebp,[8+ebp]
        cmp     dl,23
        jne     NEAR L$00416_79_x86
        mov     esi,DWORD [840+esp]
        mov     edi,DWORD [844+esp]
        mov     eax,DWORD [esi]
        mov     ebx,DWORD [4+esi]
        mov     ecx,DWORD [8+esi]
        mov     edx,DWORD [12+esi]
        add     eax,DWORD [8+esp]
        adc     ebx,DWORD [12+esp]
        mov     DWORD [esi],eax
        mov     DWORD [4+esi],ebx
        add     ecx,DWORD [16+esp]
        adc     edx,DWORD [20+esp]
        mov     DWORD [8+esi],ecx
        mov     DWORD [12+esi],edx
        mov     eax,DWORD [16+esi]
        mov     ebx,DWORD [20+esi]
        mov     ecx,DWORD [24+esi]
        mov     edx,DWORD [28+esi]
        add     eax,DWORD [24+esp]
        adc     ebx,DWORD [28+esp]
        mov     DWORD [16+esi],eax
        mov     DWORD [20+esi],ebx
        add     ecx,DWORD [32+esp]
        adc     edx,DWORD [36+esp]
        mov     DWORD [24+esi],ecx
        mov     DWORD [28+esi],edx
        mov     eax,DWORD [32+esi]
        mov     ebx,DWORD [36+esi]
        mov     ecx,DWORD [40+esi]
        mov     edx,DWORD [44+esi]
        add     eax,DWORD [40+esp]
        adc     ebx,DWORD [44+esp]
        mov     DWORD [32+esi],eax
        mov     DWORD [36+esi],ebx
        add     ecx,DWORD [48+esp]
        adc     edx,DWORD [52+esp]
        mov     DWORD [40+esi],ecx
        mov     DWORD [44+esi],edx
        mov     eax,DWORD [48+esi]
        mov     ebx,DWORD [52+esi]
        mov     ecx,DWORD [56+esi]
        mov     edx,DWORD [60+esi]
        add     eax,DWORD [56+esp]
        adc     ebx,DWORD [60+esp]
        mov     DWORD [48+esi],eax
        mov     DWORD [52+esi],ebx
        add     ecx,DWORD [64+esp]
        adc     edx,DWORD [68+esp]
        mov     DWORD [56+esi],ecx
        mov     DWORD [60+esi],edx
        add     esp,840
        sub     ebp,640
        cmp     edi,DWORD [8+esp]
        jb      NEAR L$002loop_x86
        mov     esp,DWORD [12+esp]
        pop     edi
        pop     esi
        pop     ebx
        pop     ebp
        ret
align   64
L$001K512:
dd      3609767458,1116352408
dd      602891725,1899447441
dd      3964484399,3049323471
dd      2173295548,3921009573
dd      4081628472,961987163
dd      3053834265,1508970993
dd      2937671579,2453635748
dd      3664609560,2870763221
dd      2734883394,3624381080
dd      1164996542,310598401
dd      1323610764,607225278
dd      3590304994,1426881987
dd      4068182383,1925078388
dd      991336113,2162078206
dd      633803317,2614888103
dd      3479774868,3248222580
dd      2666613458,3835390401
dd      944711139,4022224774
dd      2341262773,264347078
dd      2007800933,604807628
dd      1495990901,770255983
dd      1856431235,1249150122
dd      3175218132,1555081692
dd      2198950837,1996064986
dd      3999719339,2554220882
dd      766784016,2821834349
dd      2566594879,2952996808
dd      3203337956,3210313671
dd      1034457026,3336571891
dd      2466948901,3584528711
dd      3758326383,113926993
dd      168717936,338241895
dd      1188179964,666307205
dd      1546045734,773529912
dd      1522805485,1294757372
dd      2643833823,1396182291
dd      2343527390,1695183700
dd      1014477480,1986661051
dd      1206759142,2177026350
dd      344077627,2456956037
dd      1290863460,2730485921
dd      3158454273,2820302411
dd      3505952657,3259730800
dd      106217008,3345764771
dd      3606008344,3516065817
dd      1432725776,3600352804
dd      1467031594,4094571909
dd      851169720,275423344
dd      3100823752,430227734
dd      1363258195,506948616
dd      3750685593,659060556
dd      3785050280,883997877
dd      3318307427,958139571
dd      3812723403,1322822218
dd      2003034995,1537002063
dd      3602036899,1747873779
dd      1575990012,1955562222
dd      1125592928,2024104815
dd      2716904306,2227730452
dd      442776044,2361852424
dd      593698344,2428436474
dd      3733110249,2756734187
dd      2999351573,3204031479
dd      3815920427,3329325298
dd      3928383900,3391569614
dd      566280711,3515267271
dd      3454069534,3940187606
dd      4000239992,4118630271
dd      1914138554,116418474
dd      2731055270,174292421
dd      3203993006,289380356
dd      320620315,460393269
dd      587496836,685471733
dd      1086792851,852142971
dd      365543100,1017036298
dd      2618297676,1126000580
dd      3409855158,1288033470
dd      4234509866,1501505948
dd      987167468,1607167915
dd      1246189591,1816402316
dd      67438087,66051
dd      202182159,134810123
db      83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97
db      110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
db      67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
db      112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
db      62,0