⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des.xs

📁 des加解密算法程序包
💻 XS
字号:
#include "EXTERN.h"#include "perl.h"#include "XSUB.h"#include "des.h"#define deschar	charstatic STRLEN len;static intnot_here(s)char *s;{    croak("%s not implemented on this architecture", s);    return -1;}MODULE = DES	PACKAGE = DES	PREFIX = des_char *des_crypt(buf,salt)	char *	buf	char *	saltvoiddes_set_odd_parity(key)	des_cblock *	keyPPCODE:	{	SV *s;	s=sv_newmortal();	sv_setpvn(s,(char *)key,8);	des_set_odd_parity((des_cblock *)SvPV(s,na));	PUSHs(s);	}intdes_is_weak_key(key)	des_cblock *	keydes_key_scheduledes_set_key(key)	des_cblock *	keyCODE:	des_set_key(key,RETVAL);OUTPUT:RETVALdes_cblockdes_ecb_encrypt(input,ks,encrypt)	des_cblock *	input	des_key_schedule *	ks	int	encryptCODE:	des_ecb_encrypt(input,&RETVAL,*ks,encrypt);OUTPUT:RETVALvoiddes_cbc_encrypt(input,ks,ivec,encrypt)	char *	input	des_key_schedule *	ks	des_cblock *	ivec	int	encryptPPCODE:	{	SV *s;	STRLEN len,l;	char *c;	l=SvCUR(ST(0));	len=((((unsigned long)l)+7)/8)*8;	s=sv_newmortal();	sv_setpvn(s,"",0);	SvGROW(s,len);	SvCUR_set(s,len);	c=(char *)SvPV(s,na);	des_cbc_encrypt((des_cblock *)input,(des_cblock *)c,		l,*ks,ivec,encrypt);	sv_setpvn(ST(2),(char *)c[len-8],8);	PUSHs(s);	}voiddes_cbc3_encrypt(input,ks1,ks2,ivec1,ivec2,encrypt)	char *	input	des_key_schedule *	ks1	des_key_schedule *	ks2	des_cblock *	ivec1	des_cblock *	ivec2	int	encryptPPCODE:	{	SV *s;	STRLEN len,l;	l=SvCUR(ST(0));	len=((((unsigned long)l)+7)/8)*8;	s=sv_newmortal();	sv_setpvn(s,"",0);	SvGROW(s,len);	SvCUR_set(s,len);	des_3cbc_encrypt((des_cblock *)input,(des_cblock *)SvPV(s,na),		l,*ks1,*ks2,ivec1,ivec2,encrypt);	sv_setpvn(ST(3),(char *)ivec1,8);	sv_setpvn(ST(4),(char *)ivec2,8);	PUSHs(s);	}voiddes_cbc_cksum(input,ks,ivec)	char *	input	des_key_schedule *	ks	des_cblock *	ivecPPCODE:	{	SV *s1,*s2;	STRLEN len,l;	des_cblock c;	unsigned long i1,i2;	s1=sv_newmortal();	s2=sv_newmortal();	l=SvCUR(ST(0));	des_cbc_cksum((des_cblock *)input,(des_cblock *)c,		l,*ks,ivec);	i1=c[4]|(c[5]<<8)|(c[6]<<16)|(c[7]<<24);	i2=c[0]|(c[1]<<8)|(c[2]<<16)|(c[3]<<24);	sv_setiv(s1,i1);	sv_setiv(s2,i2);	sv_setpvn(ST(2),(char *)c,8);	PUSHs(s1);	PUSHs(s2);	}voiddes_cfb_encrypt(input,numbits,ks,ivec,encrypt)	char *	input	int	numbits	des_key_schedule *	ks	des_cblock *	ivec	int	encryptPPCODE:	{	SV *s;	STRLEN len;	char *c;	len=SvCUR(ST(0));	s=sv_newmortal();	sv_setpvn(s,"",0);	SvGROW(s,len);	SvCUR_set(s,len);	c=(char *)SvPV(s,na);	des_cfb_encrypt((unsigned char *)input,(unsigned char *)c,		(int)numbits,(long)len,*ks,ivec,encrypt);	sv_setpvn(ST(3),(char *)ivec,8);	PUSHs(s);	}des_cblock *des_ecb3_encrypt(input,ks1,ks2,encrypt)	des_cblock *	input	des_key_schedule *	ks1	des_key_schedule *	ks2	int	encryptCODE:	{	des_cblock c;	des_ecb3_encrypt((des_cblock *)input,(des_cblock *)&c,		*ks1,*ks2,encrypt);	RETVAL= &c;	}OUTPUT:RETVALvoiddes_ofb_encrypt(input,numbits,ks,ivec)	unsigned char *	input	int	numbits	des_key_schedule *	ks	des_cblock *	ivecPPCODE:	{	SV *s;	STRLEN len,l;	unsigned char *c;	len=SvCUR(ST(0));	s=sv_newmortal();	sv_setpvn(s,"",0);	SvGROW(s,len);	SvCUR_set(s,len);	c=(unsigned char *)SvPV(s,na);	des_ofb_encrypt((unsigned char *)input,(unsigned char *)c,		numbits,len,*ks,ivec);	sv_setpvn(ST(3),(char *)ivec,8);	PUSHs(s);	}voiddes_pcbc_encrypt(input,ks,ivec,encrypt)	char *	input	des_key_schedule *	ks	des_cblock *	ivec	int	encryptPPCODE:	{	SV *s;	STRLEN len,l;	char *c;	l=SvCUR(ST(0));	len=((((unsigned long)l)+7)/8)*8;	s=sv_newmortal();	sv_setpvn(s,"",0);	SvGROW(s,len);	SvCUR_set(s,len);	c=(char *)SvPV(s,na);	des_pcbc_encrypt((des_cblock *)input,(des_cblock *)c,		l,*ks,ivec,encrypt);	sv_setpvn(ST(2),(char *)c[len-8],8);	PUSHs(s);	}des_cblock *des_random_key()CODE:	{	des_cblock c;	des_random_key(c);	RETVAL=&c;	}OUTPUT:RETVALdes_cblock *des_string_to_key(str)char *	strCODE:	{	des_cblock c;	des_string_to_key(str,&c);	RETVAL=&c;	}OUTPUT:RETVALvoiddes_string_to_2keys(str)char *	strPPCODE:	{	des_cblock c1,c2;	SV *s1,*s2;	des_string_to_2keys(str,&c1,&c2);	EXTEND(sp,2);	s1=sv_newmortal();	sv_setpvn(s1,(char *)c1,8);	s2=sv_newmortal();	sv_setpvn(s2,(char *)c2,8);	PUSHs(s1);	PUSHs(s2);	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -