OLD | NEW |
| (Empty) |
1 #include "EXTERN.h" | |
2 #include "perl.h" | |
3 #include "XSUB.h" | |
4 #include "des.h" | |
5 | |
6 #define deschar char | |
7 static STRLEN len; | |
8 | |
9 static int | |
10 not_here(s) | |
11 char *s; | |
12 { | |
13 croak("%s not implemented on this architecture", s); | |
14 return -1; | |
15 } | |
16 | |
17 MODULE = DES PACKAGE = DES PREFIX = des_ | |
18 | |
19 char * | |
20 des_crypt(buf,salt) | |
21 char * buf | |
22 char * salt | |
23 | |
24 void | |
25 des_set_odd_parity(key) | |
26 des_cblock * key | |
27 PPCODE: | |
28 { | |
29 SV *s; | |
30 | |
31 s=sv_newmortal(); | |
32 sv_setpvn(s,(char *)key,8); | |
33 des_set_odd_parity((des_cblock *)SvPV(s,na)); | |
34 PUSHs(s); | |
35 } | |
36 | |
37 int | |
38 des_is_weak_key(key) | |
39 des_cblock * key | |
40 | |
41 des_key_schedule | |
42 des_set_key(key) | |
43 des_cblock * key | |
44 CODE: | |
45 des_set_key(key,RETVAL); | |
46 OUTPUT: | |
47 RETVAL | |
48 | |
49 des_cblock | |
50 des_ecb_encrypt(input,ks,encrypt) | |
51 des_cblock * input | |
52 des_key_schedule * ks | |
53 int encrypt | |
54 CODE: | |
55 des_ecb_encrypt(input,&RETVAL,*ks,encrypt); | |
56 OUTPUT: | |
57 RETVAL | |
58 | |
59 void | |
60 des_cbc_encrypt(input,ks,ivec,encrypt) | |
61 char * input | |
62 des_key_schedule * ks | |
63 des_cblock * ivec | |
64 int encrypt | |
65 PPCODE: | |
66 { | |
67 SV *s; | |
68 STRLEN len,l; | |
69 char *c; | |
70 | |
71 l=SvCUR(ST(0)); | |
72 len=((((unsigned long)l)+7)/8)*8; | |
73 s=sv_newmortal(); | |
74 sv_setpvn(s,"",0); | |
75 SvGROW(s,len); | |
76 SvCUR_set(s,len); | |
77 c=(char *)SvPV(s,na); | |
78 des_cbc_encrypt((des_cblock *)input,(des_cblock *)c, | |
79 l,*ks,ivec,encrypt); | |
80 sv_setpvn(ST(2),(char *)c[len-8],8); | |
81 PUSHs(s); | |
82 } | |
83 | |
84 void | |
85 des_cbc3_encrypt(input,ks1,ks2,ivec1,ivec2,encrypt) | |
86 char * input | |
87 des_key_schedule * ks1 | |
88 des_key_schedule * ks2 | |
89 des_cblock * ivec1 | |
90 des_cblock * ivec2 | |
91 int encrypt | |
92 PPCODE: | |
93 { | |
94 SV *s; | |
95 STRLEN len,l; | |
96 | |
97 l=SvCUR(ST(0)); | |
98 len=((((unsigned long)l)+7)/8)*8; | |
99 s=sv_newmortal(); | |
100 sv_setpvn(s,"",0); | |
101 SvGROW(s,len); | |
102 SvCUR_set(s,len); | |
103 des_3cbc_encrypt((des_cblock *)input,(des_cblock *)SvPV(s,na), | |
104 l,*ks1,*ks2,ivec1,ivec2,encrypt); | |
105 sv_setpvn(ST(3),(char *)ivec1,8); | |
106 sv_setpvn(ST(4),(char *)ivec2,8); | |
107 PUSHs(s); | |
108 } | |
109 | |
110 void | |
111 des_cbc_cksum(input,ks,ivec) | |
112 char * input | |
113 des_key_schedule * ks | |
114 des_cblock * ivec | |
115 PPCODE: | |
116 { | |
117 SV *s1,*s2; | |
118 STRLEN len,l; | |
119 des_cblock c; | |
120 unsigned long i1,i2; | |
121 | |
122 s1=sv_newmortal(); | |
123 s2=sv_newmortal(); | |
124 l=SvCUR(ST(0)); | |
125 des_cbc_cksum((des_cblock *)input,(des_cblock *)c, | |
126 l,*ks,ivec); | |
127 i1=c[4]|(c[5]<<8)|(c[6]<<16)|(c[7]<<24); | |
128 i2=c[0]|(c[1]<<8)|(c[2]<<16)|(c[3]<<24); | |
129 sv_setiv(s1,i1); | |
130 sv_setiv(s2,i2); | |
131 sv_setpvn(ST(2),(char *)c,8); | |
132 PUSHs(s1); | |
133 PUSHs(s2); | |
134 } | |
135 | |
136 void | |
137 des_cfb_encrypt(input,numbits,ks,ivec,encrypt) | |
138 char * input | |
139 int numbits | |
140 des_key_schedule * ks | |
141 des_cblock * ivec | |
142 int encrypt | |
143 PPCODE: | |
144 { | |
145 SV *s; | |
146 STRLEN len; | |
147 char *c; | |
148 | |
149 len=SvCUR(ST(0)); | |
150 s=sv_newmortal(); | |
151 sv_setpvn(s,"",0); | |
152 SvGROW(s,len); | |
153 SvCUR_set(s,len); | |
154 c=(char *)SvPV(s,na); | |
155 des_cfb_encrypt((unsigned char *)input,(unsigned char *)c, | |
156 (int)numbits,(long)len,*ks,ivec,encrypt); | |
157 sv_setpvn(ST(3),(char *)ivec,8); | |
158 PUSHs(s); | |
159 } | |
160 | |
161 des_cblock * | |
162 des_ecb3_encrypt(input,ks1,ks2,encrypt) | |
163 des_cblock * input | |
164 des_key_schedule * ks1 | |
165 des_key_schedule * ks2 | |
166 int encrypt | |
167 CODE: | |
168 { | |
169 des_cblock c; | |
170 | |
171 des_ecb3_encrypt((des_cblock *)input,(des_cblock *)&c, | |
172 *ks1,*ks2,encrypt); | |
173 RETVAL= &c; | |
174 } | |
175 OUTPUT: | |
176 RETVAL | |
177 | |
178 void | |
179 des_ofb_encrypt(input,numbits,ks,ivec) | |
180 unsigned char * input | |
181 int numbits | |
182 des_key_schedule * ks | |
183 des_cblock * ivec | |
184 PPCODE: | |
185 { | |
186 SV *s; | |
187 STRLEN len,l; | |
188 unsigned char *c; | |
189 | |
190 len=SvCUR(ST(0)); | |
191 s=sv_newmortal(); | |
192 sv_setpvn(s,"",0); | |
193 SvGROW(s,len); | |
194 SvCUR_set(s,len); | |
195 c=(unsigned char *)SvPV(s,na); | |
196 des_ofb_encrypt((unsigned char *)input,(unsigned char *)c, | |
197 numbits,len,*ks,ivec); | |
198 sv_setpvn(ST(3),(char *)ivec,8); | |
199 PUSHs(s); | |
200 } | |
201 | |
202 void | |
203 des_pcbc_encrypt(input,ks,ivec,encrypt) | |
204 char * input | |
205 des_key_schedule * ks | |
206 des_cblock * ivec | |
207 int encrypt | |
208 PPCODE: | |
209 { | |
210 SV *s; | |
211 STRLEN len,l; | |
212 char *c; | |
213 | |
214 l=SvCUR(ST(0)); | |
215 len=((((unsigned long)l)+7)/8)*8; | |
216 s=sv_newmortal(); | |
217 sv_setpvn(s,"",0); | |
218 SvGROW(s,len); | |
219 SvCUR_set(s,len); | |
220 c=(char *)SvPV(s,na); | |
221 des_pcbc_encrypt((des_cblock *)input,(des_cblock *)c, | |
222 l,*ks,ivec,encrypt); | |
223 sv_setpvn(ST(2),(char *)c[len-8],8); | |
224 PUSHs(s); | |
225 } | |
226 | |
227 des_cblock * | |
228 des_random_key() | |
229 CODE: | |
230 { | |
231 des_cblock c; | |
232 | |
233 des_random_key(c); | |
234 RETVAL=&c; | |
235 } | |
236 OUTPUT: | |
237 RETVAL | |
238 | |
239 des_cblock * | |
240 des_string_to_key(str) | |
241 char * str | |
242 CODE: | |
243 { | |
244 des_cblock c; | |
245 | |
246 des_string_to_key(str,&c); | |
247 RETVAL=&c; | |
248 } | |
249 OUTPUT: | |
250 RETVAL | |
251 | |
252 void | |
253 des_string_to_2keys(str) | |
254 char * str | |
255 PPCODE: | |
256 { | |
257 des_cblock c1,c2; | |
258 SV *s1,*s2; | |
259 | |
260 des_string_to_2keys(str,&c1,&c2); | |
261 EXTEND(sp,2); | |
262 s1=sv_newmortal(); | |
263 sv_setpvn(s1,(char *)c1,8); | |
264 s2=sv_newmortal(); | |
265 sv_setpvn(s2,(char *)c2,8); | |
266 PUSHs(s1); | |
267 PUSHs(s2); | |
268 } | |
OLD | NEW |