Crypt-Sodium-XS

 view release on metacpan or  search on metacpan

inc/ipcrypt.xs  view on Meta::CPAN

MODULE = Crypt::Sodium::XS PACKAGE = Crypt::Sodium::XS::ipcrypt

=for doc

# NB: some constants added for consistency which are not provided by libsodium.
# for deterministic and pfx INPUTBYTES and OUTPUTBYTES are defined to be the
# same as BYTES. TWEAKBYTES is also defined as a constant of 0.

=cut

void _define_constants()
  PREINIT:
  HV *stash = gv_stashpv("Crypt::Sodium::XS::ipcrypt", 0);

  PPCODE:
#ifdef SODIUM_HAS_IPCRYPT
  newCONSTSUB(stash, "ipcrypt_BYTES",
              newSVuv(crypto_ipcrypt_BYTES));
  newCONSTSUB(stash, "ipcrypt_INPUTBYTES",
              newSVuv(crypto_ipcrypt_BYTES));
  newCONSTSUB(stash, "ipcrypt_KEYBYTES",
              newSVuv(crypto_ipcrypt_KEYBYTES));
  newCONSTSUB(stash, "ipcrypt_OUTPUTBYTES",
              newSVuv(crypto_ipcrypt_BYTES));
  newCONSTSUB(stash, "ipcrypt_TWEAKBYTES",
              newSVuv(0));
  newCONSTSUB(stash, "ipcrypt_ND_INPUTBYTES",
              newSVuv(crypto_ipcrypt_ND_INPUTBYTES));
  newCONSTSUB(stash, "ipcrypt_ND_KEYBYTES",
              newSVuv(crypto_ipcrypt_ND_KEYBYTES));
  newCONSTSUB(stash, "ipcrypt_ND_OUTPUTBYTES",
              newSVuv(crypto_ipcrypt_ND_OUTPUTBYTES));
  newCONSTSUB(stash, "ipcrypt_ND_TWEAKBYTES",
              newSVuv(crypto_ipcrypt_ND_TWEAKBYTES));
  newCONSTSUB(stash, "ipcrypt_NDX_INPUTBYTES",
              newSVuv(crypto_ipcrypt_NDX_INPUTBYTES));
  newCONSTSUB(stash, "ipcrypt_NDX_KEYBYTES",
              newSVuv(crypto_ipcrypt_NDX_KEYBYTES));
  newCONSTSUB(stash, "ipcrypt_NDX_OUTPUTBYTES",
              newSVuv(crypto_ipcrypt_NDX_OUTPUTBYTES));
  newCONSTSUB(stash, "ipcrypt_NDX_TWEAKBYTES",
              newSVuv(crypto_ipcrypt_NDX_TWEAKBYTES));
  newCONSTSUB(stash, "ipcrypt_PFX_BYTES",
              newSVuv(crypto_ipcrypt_PFX_BYTES));
  newCONSTSUB(stash, "ipcrypt_PFX_INPUTBYTES",
              newSVuv(crypto_ipcrypt_PFX_BYTES));
  newCONSTSUB(stash, "ipcrypt_PFX_KEYBYTES",
              newSVuv(crypto_ipcrypt_PFX_KEYBYTES));
  newCONSTSUB(stash, "ipcrypt_PFX_OUTPUTBYTES",
              newSVuv(crypto_ipcrypt_PFX_BYTES));
  newCONSTSUB(stash, "ipcrypt_PFX_TWEAKBYTES",
              newSVuv(0));
  newCONSTSUB(stash, "ipcrypt_available", &PL_sv_yes);
#else
  newCONSTSUB(stash, "ipcrypt_available", &PL_sv_no);
#endif

SV * ipcrypt_keygen(SV * flags = &PL_sv_undef)

  ALIAS:
  ipcrypt_nd_keygen = 1
  ipcrypt_ndx_keygen = 2
  ipcrypt_pfx_keygen = 3

  CODE:
#ifdef SODIUM_HAS_IPCRYPT
  switch(ix) {
    case 1:
      RETVAL = sv_keygen(aTHX_ crypto_ipcrypt_ND_KEYBYTES, flags);
      break;
    case 2:
      RETVAL = sv_keygen(aTHX_ crypto_ipcrypt_NDX_KEYBYTES, flags);
      break;
    case 3:
      RETVAL = sv_keygen(aTHX_ crypto_ipcrypt_PFX_KEYBYTES, flags);



( run in 0.723 second using v1.01-cache-2.11-cpan-71847e10f99 )