Digest-BLAKE2
view release on metacpan or search on metacpan
in/src/BLAKE2x.xs view on Meta::CPAN
#elif (defined BLAKE2b) || (defined BLAKE2bp)
/* remove trailing padding 2 characters */
return sv_2mortal(newSVpv(buffer, encoded_len - 2));
#endif
}
break;
case encode_type_base64url:
{
char buffer[modp_b64w_encode_len(BLAKE2x_OUTBYTES)];
encoded_len = modp_b64w_encode(buffer, src, BLAKE2x_OUTBYTES);
#if (defined BLAKE2s) || (defined BLAKE2sp)
/* remove trailing padding 1 characters */
return sv_2mortal(newSVpv(buffer, encoded_len - 1));
#elif (defined BLAKE2b) || (defined BLAKE2bp)
/* remove trailing padding 2 characters */
return sv_2mortal(newSVpv(buffer, encoded_len - 2));
#endif
}
break;
case encode_type_ascii85:
{
char buffer[modp_b85_encode_len(BLAKE2x_OUTBYTES)];
encoded_len = modp_b85_encode(buffer, src, BLAKE2x_OUTBYTES);
return sv_2mortal(newSVpv(buffer, encoded_len));
}
break;
}
}
typedef blake2x_state *Digest__BLAKE2x;
MODULE = Digest::BLAKE2x PACKAGE = Digest::BLAKE2x
Digest::BLAKE2x
new (class)
SV *class
CODE:
Newx(RETVAL, 1, blake2x_state);
if (blake2x_init(RETVAL, BLAKE2x_OUTBYTES)) {
XSRETURN_UNDEF;
}
OUTPUT:
RETVAL
Digest::BLAKE2x
clone (self)
Digest::BLAKE2x self
CODE:
Newx(RETVAL, 1, blake2x_state);
Copy(self, RETVAL, 1, blake2x_state);
OUTPUT:
RETVAL
void
add (self, ...)
Digest::BLAKE2x self
PREINIT:
int i;
uint8_t *in;
STRLEN inlen;
PPCODE:
for (i = 1; i < items; i++) {
in = (uint8_t *)(SvPV(ST(i), inlen));
blake2x_update(self, in, inlen);
}
XSRETURN(1);
void
digest (self)
Digest::BLAKE2x self
PREINIT:
uint8_t out[BLAKE2x_OUTBYTES];
CODE:
blake2x_final(self, out, BLAKE2x_OUTBYTES);
ST(0) = sv_2mortal(newSVpv((const char *)out, BLAKE2x_OUTBYTES));
XSRETURN(1);
void
DESTROY (self)
Digest::BLAKE2x self
CODE:
Safefree(self);
void
blake2x (...)
ALIAS:
blake2x = encode_type_raw
blake2x_hex = encode_type_hex
blake2x_base64 = encode_type_base64
blake2x_base64url = encode_type_base64url
blake2x_ascii85 = encode_type_ascii85
PREINIT:
int i;
uint8_t *in;
STRLEN inlen;
blake2x_state *state;
uint8_t out[BLAKE2x_OUTBYTES];
CODE:
Newx(state, 1, blake2x_state);
if (blake2x_init(state, BLAKE2x_OUTBYTES)) {
XSRETURN_UNDEF;
}
for (i = 0; i < items; i++) {
in = (uint8_t *)(SvPV(ST(i), inlen));
blake2x_update(state, in, inlen);
}
blake2x_final(state, out, BLAKE2x_OUTBYTES);
Safefree(state);
ST(0) = encode_string(aTHX_ (char *)out, ix);
XSRETURN(1);
( run in 0.891 second using v1.01-cache-2.11-cpan-5511b514fd6 )