Crypt-Sodium-XS
view release on metacpan or search on metacpan
inc/scalarmult.xs view on Meta::CPAN
MODULE = Crypt::Sodium::XS PACKAGE = Crypt::Sodium::XS::scalarmult
void _define_constants()
PREINIT:
HV *stash = gv_stashpv("Crypt::Sodium::XS::scalarmult", 0);
PPCODE:
newCONSTSUB(stash, "scalarmult_BYTES",
newSVuv(crypto_scalarmult_BYTES));
newCONSTSUB(stash, "scalarmult_SCALARBYTES",
newSVuv(crypto_scalarmult_SCALARBYTES));
newCONSTSUB(stash, "scalarmult_x25519_BYTES",
newSVuv(crypto_scalarmult_BYTES));
newCONSTSUB(stash, "scalarmult_x25519_SCALARBYTES",
newSVuv(crypto_scalarmult_SCALARBYTES));
newCONSTSUB(stash, "scalarmult_ed25519_BYTES",
newSVuv(crypto_scalarmult_ed25519_BYTES));
newCONSTSUB(stash, "scalarmult_ed25519_SCALARBYTES",
newSVuv(crypto_scalarmult_ed25519_SCALARBYTES));
#ifdef SODIUM_HAS_RISTRETTO255
newCONSTSUB(stash, "scalarmult_ristretto255_BYTES",
newSVuv(crypto_scalarmult_ristretto255_BYTES));
newCONSTSUB(stash, "scalarmult_ristretto255_SCALARBYTES",
newSVuv(crypto_scalarmult_ristretto255_SCALARBYTES));
newCONSTSUB(stash, "scalarmult_ristretto255_available", &PL_sv_yes);
#else
newCONSTSUB(stash, "scalarmult_ristretto255_available", &PL_sv_no);
#endif
SV * scalarmult_keygen(SV * flags = &PL_sv_undef)
ALIAS:
scalarmult_ed25519_keygen = 1
scalarmult_ristretto255_keygen = 2
scalarmult_x25519_keygen = 99
PREINIT:
protmem *new_pm;
unsigned int new_flags = g_protmem_default_flags_key;
CODE:
SvGETMAGIC(flags);
if (SvOK(flags))
new_flags = SvUV_nomg(flags);
switch(ix) {
case 1:
new_pm = protmem_init(aTHX_ crypto_core_ed25519_SCALARBYTES, new_flags);
if (new_pm == NULL)
croak("scalarmult_ed25519_keygen: Failed to allocate protmem");
crypto_core_ed25519_scalar_random(new_pm->pm_ptr);
if (protmem_release(aTHX_ new_pm, PROTMEM_FLAG_MPROTECT_RW) != 0) {
croak("scalarmult_ed25519_keygen: Failed to release protmem RW");
}
RETVAL = protmem_to_sv(aTHX_ new_pm, MEMVAULT_CLASS);
break;
case 2:
#ifdef SODIUM_HAS_RISTRETTO255
new_pm = protmem_init(aTHX_ crypto_core_ed25519_SCALARBYTES, new_flags);
if (new_pm == NULL)
croak("scalarmult_ed25519_keygen: Failed to allocate protmem");
crypto_core_ristretto255_scalar_random(new_pm->pm_ptr);
if (protmem_release(aTHX_ new_pm, PROTMEM_FLAG_MPROTECT_RW) != 0) {
croak("scalarmult_ed25519_keygen: Failed to release protmem RW");
}
( run in 0.296 second using v1.01-cache-2.11-cpan-5511b514fd6 )