diff options
Diffstat (limited to 'src/lib/libcrypto/md5/asm/md5-586.pl')
-rw-r--r-- | src/lib/libcrypto/md5/asm/md5-586.pl | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/src/lib/libcrypto/md5/asm/md5-586.pl b/src/lib/libcrypto/md5/asm/md5-586.pl index 2c7fb7dd98..5fc6a205ce 100644 --- a/src/lib/libcrypto/md5/asm/md5-586.pl +++ b/src/lib/libcrypto/md5/asm/md5-586.pl | |||
@@ -1,4 +1,4 @@ | |||
1 | #!/usr/bin/perl | 1 | #!/usr/local/bin/perl |
2 | 2 | ||
3 | # Normal is the | 3 | # Normal is the |
4 | # md5_block_x86(MD5_CTX *c, ULONG *X); | 4 | # md5_block_x86(MD5_CTX *c, ULONG *X); |
@@ -29,7 +29,7 @@ $X="esi"; | |||
29 | 0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9, # R3 | 29 | 0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9, # R3 |
30 | ); | 30 | ); |
31 | 31 | ||
32 | &md5_block("md5_block_x86"); | 32 | &md5_block("md5_block_asm_host_order"); |
33 | &asm_finish(); | 33 | &asm_finish(); |
34 | 34 | ||
35 | sub Np | 35 | sub Np |
@@ -44,7 +44,7 @@ sub R0 | |||
44 | local($pos,$a,$b,$c,$d,$K,$ki,$s,$t)=@_; | 44 | local($pos,$a,$b,$c,$d,$K,$ki,$s,$t)=@_; |
45 | 45 | ||
46 | &mov($tmp1,$C) if $pos < 0; | 46 | &mov($tmp1,$C) if $pos < 0; |
47 | &mov($tmp2,&DWP($xo[$ki]*4,$K,"",0)) if $pos < 0; # very first one | 47 | &mov($tmp2,&DWP($xo[$ki]*4,$K,"",0)) if $pos < 0; # very first one |
48 | 48 | ||
49 | # body proper | 49 | # body proper |
50 | 50 | ||
@@ -54,7 +54,6 @@ sub R0 | |||
54 | &and($tmp1,$b); # F function - part 3 | 54 | &and($tmp1,$b); # F function - part 3 |
55 | &lea($a,&DWP($t,$a,$tmp2,1)); | 55 | &lea($a,&DWP($t,$a,$tmp2,1)); |
56 | 56 | ||
57 | &mov($tmp2,&DWP($xo[$ki+1]*4,$K,"",0)) if ($pos != 2); | ||
58 | &xor($tmp1,$d); # F function - part 4 | 57 | &xor($tmp1,$d); # F function - part 4 |
59 | 58 | ||
60 | &add($a,$tmp1); | 59 | &add($a,$tmp1); |
@@ -62,8 +61,10 @@ sub R0 | |||
62 | &mov($tmp1,&Np($c)) if $pos == 1; # next tmp1 for R1 | 61 | &mov($tmp1,&Np($c)) if $pos == 1; # next tmp1 for R1 |
63 | 62 | ||
64 | &rotl($a,$s); | 63 | &rotl($a,$s); |
65 | &add($a,$b); | ||
66 | 64 | ||
65 | &mov($tmp2,&DWP($xo[$ki+1]*4,$K,"",0)) if ($pos != 2); | ||
66 | |||
67 | &add($a,$b); | ||
67 | } | 68 | } |
68 | 69 | ||
69 | sub R1 | 70 | sub R1 |
@@ -100,16 +101,16 @@ if (($n & 1) == 0) | |||
100 | # make sure to do 'D' first, not 'B', else we clash with | 101 | # make sure to do 'D' first, not 'B', else we clash with |
101 | # the last add from the previous round. | 102 | # the last add from the previous round. |
102 | 103 | ||
103 | &xor($tmp1,$d); # H function - part 2 | 104 | &xor($tmp1,$d); # H function - part 2 |
104 | 105 | ||
105 | &xor($tmp1,$b); # H function - part 3 | 106 | &xor($tmp1,$b); # H function - part 3 |
106 | &lea($a,&DWP($t,$a,$tmp2,1)); | 107 | &lea($a,&DWP($t,$a,$tmp2,1)); |
107 | 108 | ||
108 | &add($a,$tmp1); | 109 | &add($a,$tmp1); |
109 | &mov($tmp2,&DWP($xo[$ki+1]*4,$K,"",0)); | ||
110 | 110 | ||
111 | &rotl($a,$s); | 111 | &rotl($a,$s); |
112 | 112 | ||
113 | &mov($tmp2,&DWP($xo[$ki+1]*4,$K,"",0)); | ||
113 | &mov($tmp1,&Np($c)); | 114 | &mov($tmp1,&Np($c)); |
114 | } | 115 | } |
115 | else | 116 | else |
@@ -118,17 +119,17 @@ else | |||
118 | # make sure to do 'D' first, not 'B', else we clash with | 119 | # make sure to do 'D' first, not 'B', else we clash with |
119 | # the last add from the previous round. | 120 | # the last add from the previous round. |
120 | 121 | ||
121 | &lea($a,&DWP($t,$a,$tmp2,1)); | 122 | &lea($a,&DWP($t,$a,$tmp2,1)); |
122 | 123 | ||
123 | &add($b,$c); # MOVED FORWARD | 124 | &add($b,$c); # MOVED FORWARD |
124 | &xor($tmp1,$d); # H function - part 2 | 125 | &xor($tmp1,$d); # H function - part 2 |
125 | 126 | ||
126 | &xor($tmp1,$b); # H function - part 3 | 127 | &xor($tmp1,$b); # H function - part 3 |
127 | &mov($tmp2,&DWP($xo[$ki+1]*4,$K,"",0)) if ($pos != 2); | 128 | &mov($tmp2,&DWP($xo[$ki+1]*4,$K,"",0)) if ($pos != 2); |
128 | 129 | ||
129 | &add($a,$tmp1); | 130 | &add($a,$tmp1); |
130 | &mov($tmp1,&Np($c)) if $pos < 1; # H function - part 1 | 131 | &mov($tmp1,&Np($c)) if $pos < 1; # H function - part 1 |
131 | &mov($tmp1,-1) if $pos == 1; # I function - part 1 | 132 | &mov($tmp1,-1) if $pos == 1; # I function - part 1 |
132 | 133 | ||
133 | &rotl($a,$s); | 134 | &rotl($a,$s); |
134 | 135 | ||
@@ -146,21 +147,21 @@ sub R3 | |||
146 | &xor($tmp1,$d) if $pos < 0; # I function - part 2 | 147 | &xor($tmp1,$d) if $pos < 0; # I function - part 2 |
147 | 148 | ||
148 | &or($tmp1,$b); # I function - part 3 | 149 | &or($tmp1,$b); # I function - part 3 |
149 | &lea($a,&DWP($t,$a,$tmp2,1)); | 150 | &lea($a,&DWP($t,$a,$tmp2,1)); |
150 | 151 | ||
151 | &xor($tmp1,$c); # I function - part 4 | 152 | &xor($tmp1,$c); # I function - part 4 |
152 | &mov($tmp2,&DWP($xo[$ki+1]*4,$K,"",0)) if $pos != 2; # load X/k value | 153 | &mov($tmp2,&DWP($xo[$ki+1]*4,$K,"",0)) if $pos != 2; # load X/k value |
153 | &mov($tmp2,&wparam(0)) if $pos == 2; | 154 | &mov($tmp2,&wparam(0)) if $pos == 2; |
154 | 155 | ||
155 | &add($a,$tmp1); | 156 | &add($a,$tmp1); |
156 | &mov($tmp1,-1) if $pos < 1; # H function - part 1 | 157 | &mov($tmp1,-1) if $pos < 1; # H function - part 1 |
157 | &add($K,64) if $pos >=1 && !$normal; | 158 | &add($K,64) if $pos >=1 && !$normal; |
158 | 159 | ||
159 | &rotl($a,$s); | 160 | &rotl($a,$s); |
160 | 161 | ||
161 | &xor($tmp1,&Np($d)) if $pos <= 0; # I function - part = first time | 162 | &xor($tmp1,&Np($d)) if $pos <= 0; # I function - part = first time |
162 | &mov($tmp1,&DWP( 0,$tmp2,"",0)) if $pos > 0; | 163 | &mov($tmp1,&DWP( 0,$tmp2,"",0)) if $pos > 0; |
163 | &add($a,$b); | 164 | &add($a,$b); |
164 | } | 165 | } |
165 | 166 | ||
166 | 167 | ||
@@ -182,6 +183,7 @@ sub md5_block | |||
182 | &mov($X, &wparam(1)); # esi | 183 | &mov($X, &wparam(1)); # esi |
183 | &mov($C, &wparam(2)); | 184 | &mov($C, &wparam(2)); |
184 | &push("ebp"); | 185 | &push("ebp"); |
186 | &shl($C, 6); | ||
185 | &push("ebx"); | 187 | &push("ebx"); |
186 | &add($C, $X); # offset we end at | 188 | &add($C, $X); # offset we end at |
187 | &sub($C, 64); | 189 | &sub($C, 64); |