diff options
author | ryker <> | 1998-10-05 20:13:14 +0000 |
---|---|---|
committer | ryker <> | 1998-10-05 20:13:14 +0000 |
commit | aeeae06a79815dc190061534d47236cec09f9e32 (patch) | |
tree | 851692b9c2f9c04f077666855641900f19fdb217 /src/lib/libcrypto/bf/asm | |
parent | a4f79641824cbf9f60ca9d1168d1fcc46717a82a (diff) | |
download | openbsd-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/bf/asm')
-rw-r--r-- | src/lib/libcrypto/bf/asm/bf-586.pl | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/src/lib/libcrypto/bf/asm/bf-586.pl b/src/lib/libcrypto/bf/asm/bf-586.pl new file mode 100644 index 0000000000..5c7ab14ab0 --- /dev/null +++ b/src/lib/libcrypto/bf/asm/bf-586.pl | |||
@@ -0,0 +1,136 @@ | |||
1 | #!/usr/bin/perl | ||
2 | |||
3 | push(@INC,"perlasm","../../perlasm"); | ||
4 | require "x86asm.pl"; | ||
5 | require "cbc.pl"; | ||
6 | |||
7 | &asm_init($ARGV[0],"bf-586.pl"); | ||
8 | |||
9 | $BF_ROUNDS=16; | ||
10 | $BF_OFF=($BF_ROUNDS+2)*4; | ||
11 | $L="edi"; | ||
12 | $R="esi"; | ||
13 | $P="ebp"; | ||
14 | $tmp1="eax"; | ||
15 | $tmp2="ebx"; | ||
16 | $tmp3="ecx"; | ||
17 | $tmp4="edx"; | ||
18 | |||
19 | &BF_encrypt("BF_encrypt",1); | ||
20 | &BF_encrypt("BF_decrypt",0); | ||
21 | &cbc("BF_cbc_encrypt","BF_encrypt","BF_decrypt",1,4,5,3,-1,-1); | ||
22 | &asm_finish(); | ||
23 | |||
24 | sub BF_encrypt | ||
25 | { | ||
26 | local($name,$enc)=@_; | ||
27 | |||
28 | &function_begin_B($name,""); | ||
29 | |||
30 | &comment(""); | ||
31 | |||
32 | &push("ebp"); | ||
33 | &push("ebx"); | ||
34 | &mov($tmp2,&wparam(0)); | ||
35 | &mov($P,&wparam(1)); | ||
36 | &push("esi"); | ||
37 | &push("edi"); | ||
38 | |||
39 | &comment("Load the 2 words"); | ||
40 | &mov($L,&DWP(0,$tmp2,"",0)); | ||
41 | &mov($R,&DWP(4,$tmp2,"",0)); | ||
42 | |||
43 | &xor( $tmp1, $tmp1); | ||
44 | |||
45 | # encrypting part | ||
46 | |||
47 | if ($enc) | ||
48 | { | ||
49 | &mov($tmp2,&DWP(0,$P,"",0)); | ||
50 | &xor( $tmp3, $tmp3); | ||
51 | |||
52 | &xor($L,$tmp2); | ||
53 | for ($i=0; $i<$BF_ROUNDS; $i+=2) | ||
54 | { | ||
55 | &comment(""); | ||
56 | &comment("Round $i"); | ||
57 | &BF_ENCRYPT($i+1,$R,$L,$P,$tmp1,$tmp2,$tmp3,$tmp4,1); | ||
58 | |||
59 | &comment(""); | ||
60 | &comment("Round ".sprintf("%d",$i+1)); | ||
61 | &BF_ENCRYPT($i+2,$L,$R,$P,$tmp1,$tmp2,$tmp3,$tmp4,1); | ||
62 | } | ||
63 | # &mov($tmp1,&wparam(0)); In last loop | ||
64 | &mov($tmp4,&DWP(($BF_ROUNDS+1)*4,$P,"",0)); | ||
65 | } | ||
66 | else | ||
67 | { | ||
68 | &mov($tmp2,&DWP(($BF_ROUNDS+1)*4,$P,"",0)); | ||
69 | &xor( $tmp3, $tmp3); | ||
70 | |||
71 | &xor($L,$tmp2); | ||
72 | for ($i=$BF_ROUNDS; $i>0; $i-=2) | ||
73 | { | ||
74 | &comment(""); | ||
75 | &comment("Round $i"); | ||
76 | &BF_ENCRYPT($i,$R,$L,$P,$tmp1,$tmp2,$tmp3,$tmp4,0); | ||
77 | &comment(""); | ||
78 | &comment("Round ".sprintf("%d",$i-1)); | ||
79 | &BF_ENCRYPT($i-1,$L,$R,$P,$tmp1,$tmp2,$tmp3,$tmp4,0); | ||
80 | } | ||
81 | # &mov($tmp1,&wparam(0)); In last loop | ||
82 | &mov($tmp4,&DWP(0,$P,"",0)); | ||
83 | } | ||
84 | |||
85 | &xor($R,$tmp4); | ||
86 | &mov(&DWP(4,$tmp1,"",0),$L); | ||
87 | |||
88 | &mov(&DWP(0,$tmp1,"",0),$R); | ||
89 | &function_end($name); | ||
90 | } | ||
91 | |||
92 | sub BF_ENCRYPT | ||
93 | { | ||
94 | local($i,$L,$R,$P,$tmp1,$tmp2,$tmp3,$tmp4,$enc)=@_; | ||
95 | |||
96 | &mov( $tmp4, &DWP(&n2a($i*4),$P,"",0)); # for next round | ||
97 | |||
98 | &mov( $tmp2, $R); | ||
99 | &xor( $L, $tmp4); | ||
100 | |||
101 | &shr( $tmp2, 16); | ||
102 | &mov( $tmp4, $R); | ||
103 | |||
104 | &movb( &LB($tmp1), &HB($tmp2)); # A | ||
105 | &and( $tmp2, 0xff); # B | ||
106 | |||
107 | &movb( &LB($tmp3), &HB($tmp4)); # C | ||
108 | &and( $tmp4, 0xff); # D | ||
109 | |||
110 | &mov( $tmp1, &DWP(&n2a($BF_OFF+0x0000),$P,$tmp1,4)); | ||
111 | &mov( $tmp2, &DWP(&n2a($BF_OFF+0x0400),$P,$tmp2,4)); | ||
112 | |||
113 | &add( $tmp2, $tmp1); | ||
114 | &mov( $tmp1, &DWP(&n2a($BF_OFF+0x0800),$P,$tmp3,4)); | ||
115 | |||
116 | &xor( $tmp2, $tmp1); | ||
117 | &mov( $tmp4, &DWP(&n2a($BF_OFF+0x0C00),$P,$tmp4,4)); | ||
118 | |||
119 | &add( $tmp2, $tmp4); | ||
120 | if (($enc && ($i != 16)) || ((!$enc) && ($i != 1))) | ||
121 | { &xor( $tmp1, $tmp1); } | ||
122 | else | ||
123 | { | ||
124 | &comment("Load parameter 0 ($i) enc=$enc"); | ||
125 | &mov($tmp1,&wparam(0)); | ||
126 | } # In last loop | ||
127 | |||
128 | &xor( $L, $tmp2); | ||
129 | # delay | ||
130 | } | ||
131 | |||
132 | sub n2a | ||
133 | { | ||
134 | sprintf("%d",$_[0]); | ||
135 | } | ||
136 | |||