summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/md5/asm/md5-586.pl
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/md5/asm/md5-586.pl')
-rw-r--r--src/lib/libcrypto/md5/asm/md5-586.pl40
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
35sub Np 35sub 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
69sub R1 70sub 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 }
115else 116else
@@ -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);