Crypt-Sodium-XS
view release on metacpan or search on metacpan
inc/util.xs view on Meta::CPAN
croak("Failed to allocate memory");
memcpy(realloc_buf, y_buf, y_len);
y_buf = realloc_buf;
y_len = x_len;
}
RETVAL = newSV(0);
Newxz(out_buf, x_len + 1, unsigned char);
if (out_buf == NULL) {
if (realloc_buf)
Safefree(realloc_buf);
croak("Could not allocate memory");
}
memcpy(out_buf, x_buf, x_len);
sodium_sub(out_buf, y_buf, x_len);
if (realloc_buf)
Safefree(realloc_buf);
sv_usepvn_flags(RETVAL, (char *)out_buf, x_len, SV_HAS_TRAILING_NUL);
OUTPUT:
RETVAL
SV * sodium_unpad(SV * buf, STRLEN blocksize);
PREINIT:
unsigned char *buf_buf, *unpadded_buf;
STRLEN buf_len, unpadded_len;
CODE:
if (blocksize <= 0)
croak("sodium_unpad: Invalid blocksize <= 0");
buf_buf = (unsigned char *)SvPVbyte(buf, buf_len);
if (buf_len < blocksize)
croak("sodium_unpad: Buffer is shorter than blocksize");
if (sodium_unpad(&unpadded_len, buf_buf, buf_len, blocksize) != 0)
croak("sodium_unpad: Invalid padded buffer");
Newx(unpadded_buf, unpadded_len + 1, unsigned char);
if (unpadded_buf == NULL)
croak("sodium_pad: Failed to allocate memory");
unpadded_buf[unpadded_len] = '\0';
memcpy(unpadded_buf, buf_buf, unpadded_len);
RETVAL=newSV(0);
sv_usepvn_flags(RETVAL, (char *)unpadded_buf, unpadded_len, SV_HAS_TRAILING_NUL);
OUTPUT:
RETVAL
void sodium_memzero(...)
PREINIT:
unsigned char *arg_buf;
STRLEN arg_len;
int i;
PPCODE:
if (!items)
croak("Missing arguments");
for (i = 0; i < items; i++) {
arg_buf = (unsigned char *)SvPVbyte_force(ST(i), arg_len);
sodium_memzero(arg_buf, arg_len);
}
XSRETURN_EMPTY;
( run in 0.739 second using v1.01-cache-2.11-cpan-71847e10f99 )