Digest-MD4

 view release on metacpan or  search on metacpan

MD4.xs  view on Meta::CPAN


MODULE = Digest::MD4		PACKAGE = Digest::MD4

PROTOTYPES: DISABLE

void
new(xclass)
	SV* xclass
    PREINIT:
	MD4_CTX* context;
    PPCODE:
	if (!SvROK(xclass)) {
	    STRLEN my_na;
	    char *sclass = SvPV(xclass, my_na);
	    New(55, context, 1, MD4_CTX);
	    context->signature = MD4_CTX_SIGNATURE;
	    ST(0) = sv_newmortal();
	    sv_setref_pv(ST(0), sclass, (void*)context);
	    SvREADONLY_on(SvRV(ST(0)));
	} else {
	    context = get_md4_ctx(xclass);

MD4.xs  view on Meta::CPAN

        MD4Init(context);
	XSRETURN(1);

void
clone(self)
	SV* self
    PREINIT:
	MD4_CTX* cont = get_md4_ctx(self);
	const char *myname = sv_reftype(SvRV(self),TRUE);
	MD4_CTX* context;
    PPCODE:
	New(55, context, 1, MD4_CTX);
	ST(0) = sv_newmortal();
	sv_setref_pv(ST(0), myname , (void*)context);
	SvREADONLY_on(SvRV(ST(0)));
	memcpy(context,cont,sizeof(MD4_CTX));
	XSRETURN(1);

void
DESTROY(context)
	MD4_CTX* context

MD4.xs  view on Meta::CPAN

        Safefree(context);

void
add(self, ...)
	SV* self
    PREINIT:
	MD4_CTX* context = get_md4_ctx(self);
	int i;
	unsigned char *data;
	STRLEN len;
    PPCODE:
	for (i = 1; i < items; i++) {
	    data = (unsigned char *)(SvPVbyte(ST(i), len));
	    MD4Update(context, data, len);
	}
	XSRETURN(1);  /* self */

void
addfile(self, fh)
	SV* self
	InputStream fh

MD4.xs  view on Meta::CPAN


void
digest(context)
	MD4_CTX* context
    ALIAS:
	Digest::MD4::digest    = F_BIN
	Digest::MD4::hexdigest = F_HEX
	Digest::MD4::b64digest = F_B64
    PREINIT:
	unsigned char digeststr[16];
    PPCODE:
        MD4Final(digeststr, context);
	MD4Init(context);  /* In case it is reused */
        ST(0) = make_mortal_sv(digeststr, ix);
        XSRETURN(1);

void
md4(...)
    ALIAS:
	Digest::MD4::md4        = F_BIN
	Digest::MD4::md4_hex    = F_HEX
	Digest::MD4::md4_base64 = F_B64
    PREINIT:
	MD4_CTX ctx;
	int i;
	unsigned char *data;
        STRLEN len;
	unsigned char digeststr[16];
    PPCODE:
	MD4Init(&ctx);

	if (DOWARN) {
            char *msg = 0;
	    if (items == 1) {
		if (SvROK(ST(0))) {
                    SV* sv = SvRV(ST(0));
		    if (SvOBJECT(sv) && strEQ(HvNAME(SvSTASH(sv)), "Digest::MD4"))
		        msg = "probably called as method";
		    else



( run in 0.690 second using v1.01-cache-2.11-cpan-5511b514fd6 )