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

📄 sha.xs

📁 source of perl for linux application,
💻 XS
字号:
#include "EXTERN.h"#include "perl.h"#include "XSUB.h"#include <src/sha.c>#include <src/hmac.c>static int ix2alg[] =	{1,1,1,224,224,224,256,256,256,384,384,384,512,512,512};MODULE = Digest::SHA		PACKAGE = Digest::SHA		PROTOTYPES: ENABLE#include <src/sha.h>#include <src/hmac.h>#ifndef INT2PTR#define INT2PTR(p, i) (p) (i)#endifintshaclose(s)	SHA *	sintshadump(file, s)	char *	file	SHA *	sSHA *shadup(s)	SHA *	sSHA *shaload(file)	char *	fileSHA *shaopen(alg)	int	algvoidsharewind(s)	SHA *	sunsigned longshawrite(bitstr, bitcnt, s)	unsigned char *	bitstr	unsigned long	bitcnt	SHA *	svoidsha1(...)ALIAS:	Digest::SHA::sha1 = 0	Digest::SHA::sha1_hex = 1	Digest::SHA::sha1_base64 = 2	Digest::SHA::sha224 = 3	Digest::SHA::sha224_hex = 4	Digest::SHA::sha224_base64 = 5	Digest::SHA::sha256 = 6	Digest::SHA::sha256_hex = 7	Digest::SHA::sha256_base64 = 8	Digest::SHA::sha384 = 9	Digest::SHA::sha384_hex = 10	Digest::SHA::sha384_base64 = 11	Digest::SHA::sha512 = 12	Digest::SHA::sha512_hex = 13	Digest::SHA::sha512_base64 = 14PREINIT:	int i;	unsigned char *data;	STRLEN len;	SHA *state;	char *result;PPCODE:	if ((state = shaopen(ix2alg[ix])) == NULL)		XSRETURN_UNDEF;	for (i = 0; i < items; i++) {		data = (unsigned char *) (SvPV(ST(i), len));		shawrite(data, len << 3, state);	}	shafinish(state);	len = 0;	if (ix % 3 == 0) {		result = (char *) shadigest(state);		len = shadsize(state);	}	else if (ix % 3 == 1)		result = shahex(state);	else		result = shabase64(state);	ST(0) = sv_2mortal(newSVpv(result, len));	shaclose(state);	XSRETURN(1);voidhmac_sha1(...)ALIAS:	Digest::SHA::hmac_sha1 = 0	Digest::SHA::hmac_sha1_hex = 1	Digest::SHA::hmac_sha1_base64 = 2	Digest::SHA::hmac_sha224 = 3	Digest::SHA::hmac_sha224_hex = 4	Digest::SHA::hmac_sha224_base64 = 5	Digest::SHA::hmac_sha256 = 6	Digest::SHA::hmac_sha256_hex = 7	Digest::SHA::hmac_sha256_base64 = 8	Digest::SHA::hmac_sha384 = 9	Digest::SHA::hmac_sha384_hex = 10	Digest::SHA::hmac_sha384_base64 = 11	Digest::SHA::hmac_sha512 = 12	Digest::SHA::hmac_sha512_hex = 13	Digest::SHA::hmac_sha512_base64 = 14PREINIT:	int i;	unsigned char *key;	unsigned char *data;	STRLEN len;	HMAC *state;	char *result;PPCODE:	key = (unsigned char *) (SvPV(ST(items-1), len));	if ((state = hmacopen(ix2alg[ix], key, len)) == NULL)		XSRETURN_UNDEF;	for (i = 0; i < items - 1; i++) {		data = (unsigned char *) (SvPV(ST(i), len));		hmacwrite(data, len << 3, state);	}	hmacfinish(state);	len = 0;	if (ix % 3 == 0) {		result = (char *) hmacdigest(state);		len = shadsize(state->osha);	}	else if (ix % 3 == 1)		result = hmachex(state);	else		result = hmacbase64(state);	ST(0) = sv_2mortal(newSVpv(result, len));	hmacclose(state);	XSRETURN(1);voidhashsize(self)	SV *	selfALIAS:	Digest::SHA::hashsize = 0	Digest::SHA::algorithm = 1PREINIT:	SHA *state;	int result;PPCODE:	state = INT2PTR(SHA *, SvIV(SvRV(SvRV(self))));	result = shadsize(state) << 3;	if (ix == 1 && result == 160)		result = 1;	ST(0) = sv_2mortal(newSViv(result));	XSRETURN(1);voidadd(self, ...)	SV *	selfPREINIT:	int i;	unsigned char *data;	STRLEN len;	SHA *state;PPCODE:	state = INT2PTR(SHA *, SvIV(SvRV(SvRV(self))));	for (i = 1; i < items; i++) {		data = (unsigned char *) (SvPV(ST(i), len));		shawrite(data, len << 3, state);	}	XSRETURN(1);voiddigest(self)	SV *	selfALIAS:	Digest::SHA::digest = 0	Digest::SHA::Hexdigest = 1	Digest::SHA::B64digest = 2PREINIT:	STRLEN len;	SHA *state;	char *result;PPCODE:	state = INT2PTR(SHA *, SvIV(SvRV(SvRV(self))));	shafinish(state);	len = 0;	if (ix == 0) {		result = (char *) shadigest(state);		len = shadsize(state);	}	else if (ix == 1)		result = shahex(state);	else		result = shabase64(state);	ST(0) = sv_2mortal(newSVpv(result, len));	sharewind(state);	XSRETURN(1);

⌨️ 快捷键说明

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