Crypt-Sodium-XS
view release on metacpan or search on metacpan
inc/base64.xs view on Meta::CPAN
MODULE = Crypt::Sodium::XS PACKAGE = Crypt::Sodium::XS::Base64
void _define_constants()
PREINIT:
HV *stash = gv_stashpv("Crypt::Sodium::XS::Base64", 0);
PPCODE:
newCONSTSUB(stash, "BASE64_VARIANT_ORIGINAL",
newSVuv(sodium_base64_VARIANT_ORIGINAL));
newCONSTSUB(stash, "BASE64_VARIANT_ORIGINAL_NO_PADDING",
newSVuv(sodium_base64_VARIANT_ORIGINAL_NO_PADDING));
newCONSTSUB(stash, "BASE64_VARIANT_URLSAFE",
newSVuv(sodium_base64_VARIANT_URLSAFE));
newCONSTSUB(stash, "BASE64_VARIANT_URLSAFE_NO_PADDING",
newSVuv(sodium_base64_VARIANT_URLSAFE_NO_PADDING));
XSRETURN_YES;
SV * sodium_bin2base64(SV * bytes, int variant = sodium_base64_VARIANT_URLSAFE_NO_PADDING)
PREINIT:
char *bytes_buf;
char *out_buf;
STRLEN bytes_len;
STRLEN out_len;
CODE:
switch (variant) {
case sodium_base64_VARIANT_ORIGINAL: /* fallthrough */
case sodium_base64_VARIANT_ORIGINAL_NO_PADDING: /* fallthrough */
case sodium_base64_VARIANT_URLSAFE: /* fallthrough */
case sodium_base64_VARIANT_URLSAFE_NO_PADDING:
break;
default:
croak("Invalid base64 variant");
}
bytes_buf = SvPVbyte(bytes, bytes_len);
out_len = sodium_base64_encoded_len(bytes_len, variant);
Newx(out_buf, out_len, char);
if (out_buf == NULL)
croak("Failed to allocate memory");
/* sodium_bin2base64 adds null */
sodium_bin2base64(out_buf, out_len, (unsigned char *)bytes_buf, bytes_len, variant);
RETVAL = newSV(0);
sv_usepvn_flags(RETVAL, out_buf, out_len - 1, SV_HAS_TRAILING_NUL);
OUTPUT:
RETVAL
SV * sodium_base642bin(SV * bytes, int variant = sodium_base64_VARIANT_URLSAFE_NO_PADDING)
PREINIT:
char *bytes_buf;
char *out_buf;
STRLEN bytes_len;
STRLEN out_len;
CODE:
switch (variant) {
case sodium_base64_VARIANT_ORIGINAL: /* fallthrough */
case sodium_base64_VARIANT_ORIGINAL_NO_PADDING: /* fallthrough */
case sodium_base64_VARIANT_URLSAFE: /* fallthrough */
case sodium_base64_VARIANT_URLSAFE_NO_PADDING:
break;
default:
croak("Invalid base64 variant");
}
( run in 0.803 second using v1.01-cache-2.11-cpan-71847e10f99 )