Digest-Skein
view release on metacpan or search on metacpan
typedef Skein1024_Ctxt_t * Digest__Skein__1024;
MODULE = Digest::Skein PACKAGE = Digest::Skein
PROTOTYPES: ENABLE
char *
Skein(hashbitlen, data)
int hashbitlen
const BitSequence * data
PPCODE:
if (hashbitlen < 0)
croak("hashbitlen < 0");
{
BitSequence hashval[128];
char ret[256 + 1];
int i;
if ( Hash( hashbitlen, data, (DataLength) SvCUR(ST(1)) * 8, hashval ) != SUCCESS )
croak("Hash() failed");
for (i=0; i<hashbitlen/8; i++)
sprintf(&ret[2*i], "%02X", hashval[i]);
ST(0) = sv_2mortal(newSVpv(ret, hashbitlen/4));
XSRETURN(1);
}
char *
skein_256(data)
const BitSequence * data
PPCODE:
{
BitSequence hashval[256/8];
if ( Hash( 256, data, (DataLength) SvCUR(ST(0)) * 8, hashval ) != SUCCESS )
croak("Hash(256) failed");
ST(0) = sv_2mortal(newSVpv(hashval, 256/8));
XSRETURN(1);
}
char *
skein_512(data)
const BitSequence * data
PPCODE:
{
char hashval[512/8];
if ( Hash( 512, data, (DataLength) SvCUR(ST(0)) * 8, hashval ) != SUCCESS )
croak("Hash(512) failed");
ST(0) = sv_2mortal(newSVpv(hashval, 512/8));
XSRETURN(1);
}
char *
skein_1024(data)
const BitSequence * data
PPCODE:
{
char hashval[1024/8];
if ( Hash( 1024, data, (DataLength) SvCUR(ST(0)) * 8, hashval ) != SUCCESS )
croak("Hash(1024) failed");
ST(0) = sv_2mortal(newSVpv(hashval, 1024/8));
XSRETURN(1);
}
MODULE = Digest::Skein PACKAGE = Digest::Skein::256
Newx(dest, 1, Skein_256_Ctxt_t);
memcpy(dest, ctx, sizeof(*dest));
RETVAL = dest;
OUTPUT:
RETVAL
Digest::Skein::256
new(package, hashbitlen=256)
SV* package
int hashbitlen
PPCODE:
if (hashbitlen > 256)
croak("hashbitlen > 256");
if (SvROK(package)) { /* called as $digest->new or $digest->reset */
IV tmp;
Digest__Skein__256 ctx;
if (! sv_derived_from(package, "Digest::Skein::256"))
croak("meh.");
tmp = SvIV((SV*)SvRV(package));
ctx = INT2PTR(Digest__Skein__256, tmp);
if ( Skein_256_Init( ctx, items==2 ? hashbitlen : ctx->h.hashBitLen ) != SUCCESS )
int i;
for (i=1; i<items; i++)
if ( Skein_256_Update(ctx, (const u08b_t *)SvPV_nolen(ST(i)), SvCUR(ST(i))) != SUCCESS )
croak("Update() failed");
RETVAL = ctx;
}
char *
digest(ctx)
Digest::Skein::256 ctx
PPCODE:
{
char hashval[256/8];
int len = (ctx->h.hashBitLen + 7) >> 3;
if ( Skein_256_Final(ctx, hashval) != SUCCESS )
croak("final() failed");
if ( Skein_256_Init(ctx, ctx->h.hashBitLen) != SUCCESS ) /* reset */
croak("Init() failed");
ST(0) = sv_2mortal(newSVpv(hashval, len));
XSRETURN(1);
}
Newx(dest, 1, Skein_512_Ctxt_t);
memcpy(dest, ctx, sizeof(*dest));
RETVAL = dest;
OUTPUT:
RETVAL
Digest::Skein::512
new(package, hashbitlen=512)
SV* package
int hashbitlen
PPCODE:
if (hashbitlen > 512)
croak("hashbitlen > 512");
if (SvROK(package)) { /* called as $digest->new or $digest->reset */
IV tmp;
Digest__Skein__512 ctx;
if (! sv_derived_from(package, "Digest::Skein::512"))
croak("meh.");
tmp = SvIV((SV*)SvRV(package));
ctx = INT2PTR(Digest__Skein__512, tmp);
if ( Skein_512_Init( ctx, items==2 ? hashbitlen : ctx->h.hashBitLen ) != SUCCESS )
int i;
for (i=1; i<items; i++)
if ( Skein_512_Update(ctx, (const u08b_t *)SvPV_nolen(ST(i)), SvCUR(ST(i))) != SUCCESS )
croak("Update() failed");
RETVAL = ctx;
}
char *
digest(ctx)
Digest::Skein::512 ctx
PPCODE:
{
char hashval[512/8];
int len = (ctx->h.hashBitLen + 7) >> 3;
if ( Skein_512_Final(ctx, hashval) != SUCCESS )
croak("final() failed");
if ( Skein_512_Init(ctx, ctx->h.hashBitLen) != SUCCESS ) /* reset */
croak("Init() failed");
ST(0) = sv_2mortal(newSVpv(hashval, len));
XSRETURN(1);
}
Newx(dest, 1, Skein1024_Ctxt_t);
memcpy(dest, ctx, sizeof(*dest));
RETVAL = dest;
OUTPUT:
RETVAL
Digest::Skein::1024
new(package, hashbitlen=1024)
SV* package
int hashbitlen
PPCODE:
if (hashbitlen > 1024)
croak("hashbitlen > 1024");
if (SvROK(package)) { /* called as $digest->new or $digest->reset */
IV tmp;
Digest__Skein__1024 ctx;
if (! sv_derived_from(package, "Digest::Skein::1024"))
croak("meh.");
tmp = SvIV((SV*)SvRV(package));
ctx = INT2PTR(Digest__Skein__1024, tmp);
if ( Skein1024_Init( ctx, items==2 ? hashbitlen : ctx->h.hashBitLen ) != SUCCESS )
int i;
for (i=1; i<items; i++)
if ( Skein1024_Update(ctx, (const u08b_t *)SvPV_nolen(ST(i)), SvCUR(ST(i))) != SUCCESS )
croak("Update() failed");
RETVAL = ctx;
}
char *
digest(ctx)
Digest::Skein::1024 ctx
PPCODE:
{
char hashval[1024/8];
int len = (ctx->h.hashBitLen + 7) >> 3;
if ( Skein1024_Final(ctx, hashval) != SUCCESS )
croak("final() failed");
if ( Skein1024_Init(ctx, ctx->h.hashBitLen) != SUCCESS ) /* reset */
croak("Init() failed");
ST(0) = sv_2mortal(newSVpv(hashval, len));
XSRETURN(1);
}
( run in 2.890 seconds using v1.01-cache-2.11-cpan-71847e10f99 )