summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/cast/asm
diff options
context:
space:
mode:
authorryker <>1998-10-05 20:13:14 +0000
committerryker <>1998-10-05 20:13:14 +0000
commitaeeae06a79815dc190061534d47236cec09f9e32 (patch)
tree851692b9c2f9c04f077666855641900f19fdb217 /src/lib/libcrypto/cast/asm
parenta4f79641824cbf9f60ca9d1168d1fcc46717a82a (diff)
downloadopenbsd-aeeae06a79815dc190061534d47236cec09f9e32.tar.gz
openbsd-aeeae06a79815dc190061534d47236cec09f9e32.tar.bz2
openbsd-aeeae06a79815dc190061534d47236cec09f9e32.zip
Import of SSLeay-0.9.0b with RSA and IDEA stubbed + OpenBSD build
functionality for shared libs. Note that routines such as sslv2_init and friends that use RSA will not work due to lack of RSA in this library. Needs documentation and help from ports for easy upgrade to full functionality where legally possible.
Diffstat (limited to 'src/lib/libcrypto/cast/asm')
-rw-r--r--src/lib/libcrypto/cast/asm/cast-586.pl167
1 files changed, 167 insertions, 0 deletions
diff --git a/src/lib/libcrypto/cast/asm/cast-586.pl b/src/lib/libcrypto/cast/asm/cast-586.pl
new file mode 100644
index 0000000000..d0be004c99
--- /dev/null
+++ b/src/lib/libcrypto/cast/asm/cast-586.pl
@@ -0,0 +1,167 @@
1#!/usr/bin/perl
2
3# define for pentium pro friendly version
4$ppro=1;
5
6push(@INC,"perlasm","../../perlasm");
7require "x86asm.pl";
8require "cbc.pl";
9
10&asm_init($ARGV[0],"cast-586.pl");
11
12$CAST_ROUNDS=16;
13$L="edi";
14$R="esi";
15$K="ebp";
16$tmp1="ecx";
17$tmp2="ebx";
18$tmp3="eax";
19$tmp4="edx";
20$S1="CAST_S_table0";
21$S2="CAST_S_table1";
22$S3="CAST_S_table2";
23$S4="CAST_S_table3";
24
25@F1=("add","xor","sub");
26@F2=("xor","sub","add");
27@F3=("sub","add","xor");
28
29&CAST_encrypt("CAST_encrypt",1);
30&CAST_encrypt("CAST_decrypt",0);
31&cbc("CAST_cbc_encrypt","CAST_encrypt","CAST_decrypt",1,4,5,3,-1,-1);
32
33&asm_finish();
34
35sub CAST_encrypt
36 {
37 local($name,$enc)=@_;
38
39 local($win_ex)=<<"EOF";
40EXTERN _CAST_S_table0:DWORD
41EXTERN _CAST_S_table1:DWORD
42EXTERN _CAST_S_table2:DWORD
43EXTERN _CAST_S_table3:DWORD
44EOF
45 &main'external_label(
46 "CAST_S_table0",
47 "CAST_S_table1",
48 "CAST_S_table2",
49 "CAST_S_table3",
50 );
51
52 &function_begin_B($name,$win_ex);
53
54 &comment("");
55
56 &push("ebp");
57 &push("ebx");
58 &mov($tmp2,&wparam(0));
59 &mov($K,&wparam(1));
60 &push("esi");
61 &push("edi");
62
63 &comment("Load the 2 words");
64 &mov($L,&DWP(0,$tmp2,"",0));
65 &mov($R,&DWP(4,$tmp2,"",0));
66
67 &xor( $tmp3, $tmp3);
68
69 # encrypting part
70
71 if ($enc)
72 {
73 &E_CAST( 0,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4);
74 &E_CAST( 1,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4);
75 &E_CAST( 2,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4);
76 &E_CAST( 3,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4);
77 &E_CAST( 4,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4);
78 &E_CAST( 5,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4);
79 &E_CAST( 6,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4);
80 &E_CAST( 7,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4);
81 &E_CAST( 8,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4);
82 &E_CAST( 9,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4);
83 &E_CAST(10,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4);
84 &E_CAST(11,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4);
85 &E_CAST(12,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4);
86 &E_CAST(13,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4);
87 &E_CAST(14,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4);
88 &E_CAST(15,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4,1);
89 }
90 else
91 {
92 &E_CAST(15,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4);
93 &E_CAST(14,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4);
94 &E_CAST(13,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4);
95 &E_CAST(12,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4);
96 &E_CAST(11,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4);
97 &E_CAST(10,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4);
98 &E_CAST( 9,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4);
99 &E_CAST( 8,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4);
100 &E_CAST( 7,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4);
101 &E_CAST( 6,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4);
102 &E_CAST( 5,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4);
103 &E_CAST( 4,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4);
104 &E_CAST( 3,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4);
105 &E_CAST( 2,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4);
106 &E_CAST( 1,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4);
107 &E_CAST( 0,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4,1);
108 }
109
110 &nop();
111 &mov(&DWP(4,$tmp3,"",0),$L);
112 &mov(&DWP(0,$tmp3,"",0),$R);
113 &function_end($name);
114 }
115
116sub E_CAST
117 {
118 local($i,$S,$L,$R,$K,$OP1,$OP2,$OP3,$tmp1,$tmp2,$tmp3,$tmp4,$lst)=@_;
119 # Ri needs to have 16 pre added.
120
121 &comment("round $i");
122 &mov( $tmp4, &DWP($i*8,$K,"",1));
123
124 &mov( $tmp1, &DWP($i*8+4,$K,"",1));# must be word
125 &$OP1( $tmp4, $R);
126
127 &rotl( $tmp4, &LB($tmp1));
128
129 if ($ppro)
130 {
131 &mov( $tmp2, $tmp4); # B
132 &xor( $tmp1, $tmp1);
133
134 &movb( &LB($tmp1), &HB($tmp4)); # A
135 &and( $tmp2, 0xff);
136
137 &shr( $tmp4, 16); #
138 &xor( $tmp3, $tmp3);
139 }
140 else
141 {
142 &mov( $tmp2, $tmp4); # B
143 &movb( &LB($tmp1), &HB($tmp4)); # A # BAD BAD BAD
144
145 &shr( $tmp4, 16); #
146 &and( $tmp2, 0xff);
147 }
148
149 &movb( &LB($tmp3), &HB($tmp4)); # C # BAD BAD BAD
150 &and( $tmp4, 0xff); # D
151
152 &mov( $tmp1, &DWP($S1,"",$tmp1,4));
153 &mov( $tmp2, &DWP($S2,"",$tmp2,4));
154
155 &$OP2( $tmp1, $tmp2);
156 &mov( $tmp2, &DWP($S3,"",$tmp3,4));
157
158 &$OP3( $tmp1, $tmp2);
159 &mov( $tmp2, &DWP($S4,"",$tmp4,4));
160
161 &$OP1( $tmp1, $tmp2);
162 &mov($tmp3,&wparam(0)) if $lst;
163 # XXX
164
165 &xor( $L, $tmp1);
166 # XXX
167 }