Digest-MD5
view release on metacpan or search on metacpan
MODULE = Digest::MD5 PACKAGE = Digest::MD5
PROTOTYPES: DISABLE
void
new(xclass)
SV* xclass
PREINIT:
MD5_CTX* context;
PPCODE:
if (!SvROK(xclass)) {
STRLEN my_na;
const char *sclass = SvPV(xclass, my_na);
New(55, context, 1, MD5_CTX);
ST(0) = sv_2mortal(new_md5_ctx(aTHX_ context, sclass));
} else {
context = get_md5_ctx(aTHX_ xclass);
}
MD5Init(context);
XSRETURN(1);
void
clone(self)
SV* self
PREINIT:
MD5_CTX* cont = get_md5_ctx(aTHX_ self);
const char *myname = sv_reftype(SvRV(self),TRUE);
MD5_CTX* context;
PPCODE:
New(55, context, 1, MD5_CTX);
ST(0) = sv_2mortal(new_md5_ctx(aTHX_ context, myname));
memcpy(context,cont,sizeof(MD5_CTX));
XSRETURN(1);
void
DESTROY(context)
MD5_CTX* context
CODE:
Safefree(context);
void
add(self, ...)
SV* self
PREINIT:
MD5_CTX* context = get_md5_ctx(aTHX_ self);
int i;
unsigned char *data;
STRLEN len;
PPCODE:
for (i = 1; i < items; i++) {
U32 had_utf8 = SvUTF8(ST(i));
data = (unsigned char *)(SvPVbyte(ST(i), len));
MD5Update(context, data, len);
if (had_utf8) sv_utf8_upgrade(ST(i));
}
XSRETURN(1); /* self */
void
addfile(self, fh)
void
digest(context)
MD5_CTX* context
ALIAS:
Digest::MD5::digest = F_BIN
Digest::MD5::hexdigest = F_HEX
Digest::MD5::b64digest = F_B64
PREINIT:
unsigned char digeststr[16];
PPCODE:
MD5Final(digeststr, context);
MD5Init(context); /* In case it is reused */
ST(0) = make_mortal_sv(aTHX_ digeststr, ix);
XSRETURN(1);
void
context(ctx, ...)
MD5_CTX* ctx
PREINIT:
char out[16];
U32 w;
PPCODE:
if (items > 2) {
STRLEN len;
unsigned long blocks = SvUV(ST(1));
unsigned char *buf = (unsigned char *)(SvPV(ST(2), len));
ctx->A = buf[ 0] | (buf[ 1]<<8) | (buf[ 2]<<16) | (buf[ 3]<<24);
ctx->B = buf[ 4] | (buf[ 5]<<8) | (buf[ 6]<<16) | (buf[ 7]<<24);
ctx->C = buf[ 8] | (buf[ 9]<<8) | (buf[10]<<16) | (buf[11]<<24);
ctx->D = buf[12] | (buf[13]<<8) | (buf[14]<<16) | (buf[15]<<24);
ctx->bytes_low = blocks << 6;
ctx->bytes_high = blocks >> 26;
ALIAS:
Digest::MD5::md5 = F_BIN
Digest::MD5::md5_hex = F_HEX
Digest::MD5::md5_base64 = F_B64
PREINIT:
MD5_CTX ctx;
int i;
unsigned char *data;
STRLEN len;
unsigned char digeststr[16];
PPCODE:
MD5Init(&ctx);
if ((PL_dowarn & G_WARN_ON) || ckWARN(WARN_SYNTAX)) {
const char *msg = 0;
if (items == 1) {
if (SvROK(ST(0))) {
SV* sv = SvRV(ST(0));
char *name;
if (SvOBJECT(sv) && (name = HvNAME(SvSTASH(sv)))
&& strEQ(name, "Digest::MD5"))
( run in 0.576 second using v1.01-cache-2.11-cpan-5511b514fd6 )