Digest-ECHO
view release on metacpan or search on metacpan
void
echo_224 (...)
ALIAS:
echo_224 = 0
echo_224_hex = 1
echo_224_base64 = 2
echo_256 = 3
echo_256_hex = 4
echo_256_base64 = 5
echo_384 = 6
echo_384_hex = 7
echo_384_base64 = 8
echo_512 = 9
echo_512_hex = 10
echo_512_base64 = 11
PREINIT:
hashState ctx;
int bitlen, i;
unsigned char *data;
STRLEN len;
unsigned char result[64];
CODE:
static const int ix2bits[] =
{224, 224, 224, 256, 256, 256, 384, 384, 384, 512, 512, 512};
bitlen = ix2bits[ix];
if (Init(&ctx, bitlen) != SUCCESS)
XSRETURN_UNDEF;
for (i = 0; i < items; i++) {
data = (unsigned char *)(SvPV(ST(i), len));
if (Update(&ctx, data, len << 3) != SUCCESS)
XSRETURN_UNDEF;
}
if (Final(&ctx, result) != SUCCESS)
XSRETURN_UNDEF;
ST(0) = make_mortal_sv(aTHX_ result, bitlen, ix % 3);
XSRETURN(1);
Digest::ECHO
new (class, hashsize)
SV *class
int hashsize
CODE:
Newx(RETVAL, 1, hashState);
if (Init(RETVAL, hashsize) != SUCCESS)
XSRETURN_UNDEF;
OUTPUT:
RETVAL
Digest::ECHO
clone (self)
Digest::ECHO self
CODE:
Newx(RETVAL, 1, hashState);
Copy(self, RETVAL, 1, hashState);
OUTPUT:
RETVAL
void
reset (self)
Digest::ECHO self
PPCODE:
if (Init(self, self->hashbitlen) != SUCCESS)
XSRETURN_UNDEF;
XSRETURN(1);
int
hashsize(self)
Digest::ECHO self
ALIAS:
algorithm = 1
CODE:
RETVAL = self->hashbitlen;
OUTPUT:
RETVAL
void
add (self, ...)
Digest::ECHO self
PREINIT:
int i;
unsigned char *data;
STRLEN len;
PPCODE:
for (i = 1; i < items; i++) {
data = (unsigned char *)(SvPV(ST(i), len));
if (Update(self, data, len << 3) != SUCCESS)
XSRETURN_UNDEF;
}
XSRETURN(1);
void
_add_bits (self, msg, bitlen)
Digest::ECHO self
SV *msg
int bitlen
PREINIT:
int i;
unsigned char *data;
STRLEN len;
PPCODE:
if (! bitlen)
XSRETURN(1);
data = (unsigned char *)(SvPV(msg, len));
if (bitlen > len << 3)
bitlen = len << 3;
if (Update(self, data, bitlen) != SUCCESS)
XSRETURN_UNDEF;
XSRETURN(1);
void *
digest (self)
Digest::ECHO self
ALIAS:
digest = 0
hexdigest = 1
b64digest = 2
PREINIT:
unsigned char result[64];
CODE:
if (Final(self, result) != SUCCESS)
XSRETURN_UNDEF;
Init(self, self->hashbitlen);
ST(0) = make_mortal_sv(aTHX_ result, self->hashbitlen, ix);
XSRETURN(1);
void
DESTROY (self)
Digest::ECHO self
CODE:
Safefree(self);
( run in 2.065 seconds using v1.01-cache-2.11-cpan-71847e10f99 )