| 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 |