Crypt-Sodium-XS
view release on metacpan or search on metacpan
inc/protmem.xs view on Meta::CPAN
MODULE = Crypt::Sodium::XS PACKAGE = Crypt::Sodium::XS::ProtMem
void _define_constants()
PREINIT:
HV *stash = gv_stashpv("Crypt::Sodium::XS::ProtMem", 0);
PPCODE:
newCONSTSUB(stash, "PROTMEM_ALL_DISABLED",
newSVuv(PROTMEM_FLAG_ALL_DISABLED));
newCONSTSUB(stash, "PROTMEM_ALL_ENABLED",
newSVuv(PROTMEM_FLAG_ALL_ENABLED));
newCONSTSUB(stash, "PROTMEM_MASK_MPROTECT",
newSVuv(PROTMEM_FLAG_MPROTECT_MASK));
newCONSTSUB(stash, "PROTMEM_FLAGS_MPROTECT_NOACCESS",
newSVuv(PROTMEM_FLAG_MPROTECT_NOACCESS));
newCONSTSUB(stash, "PROTMEM_FLAGS_MPROTECT_RO",
newSVuv(PROTMEM_FLAG_MPROTECT_RO));
newCONSTSUB(stash, "PROTMEM_FLAGS_MPROTECT_RW",
newSVuv(PROTMEM_FLAG_MPROTECT_RW));
newCONSTSUB(stash, "PROTMEM_MASK_MLOCK",
newSVuv(PROTMEM_FLAG_MLOCK_MASK));
newCONSTSUB(stash, "PROTMEM_FLAGS_MLOCK_PERMISSIVE",
newSVuv(PROTMEM_FLAG_MLOCK_PERMISSIVE));
newCONSTSUB(stash, "PROTMEM_FLAGS_MLOCK_NONE",
newSVuv(PROTMEM_FLAG_MLOCK_NONE));
newCONSTSUB(stash, "PROTMEM_FLAGS_MLOCK_STRICT",
newSVuv(PROTMEM_FLAG_MLOCK_STRICT));
newCONSTSUB(stash, "PROTMEM_MASK_LOCK",
newSVuv(PROTMEM_FLAG_LOCK_MASK));
newCONSTSUB(stash, "PROTMEM_FLAGS_LOCK_LOCKED",
newSVuv(PROTMEM_FLAG_LOCK_LOCKED));
newCONSTSUB(stash, "PROTMEM_FLAGS_LOCK_UNLOCKED",
newSVuv(PROTMEM_FLAG_LOCK_UNLOCKED));
newCONSTSUB(stash, "PROTMEM_FLAGS_MPROTECT_LOCKED",
newSVuv(PROTMEM_FLAG_MPROTECT_MASK));
newCONSTSUB(stash, "PROTMEM_MASK_MEMZERO",
newSVuv(PROTMEM_FLAG_MEMZERO_MASK));
newCONSTSUB(stash, "PROTMEM_FLAGS_MEMZERO_ENABLED",
newSVuv(PROTMEM_FLAG_MEMZERO_ENABLED));
newCONSTSUB(stash, "PROTMEM_FLAGS_MEMZERO_DISABLED",
newSVuv(PROTMEM_FLAG_MEMZERO_DISABLED));
newCONSTSUB(stash, "PROTMEM_MASK_MALLOC",
newSVuv(PROTMEM_FLAG_MALLOC_MASK));
newCONSTSUB(stash, "PROTMEM_FLAGS_MALLOC_SODIUM",
newSVuv(PROTMEM_FLAG_MALLOC_SODIUM));
newCONSTSUB(stash, "PROTMEM_FLAGS_MALLOC_PLAIN",
newSVuv(PROTMEM_FLAG_MALLOC_PLAIN));
XSRETURN_YES;
void protmem_default_flags_memvault(SV * flags = &PL_sv_undef)
ALIAS:
protmem_default_flags_key = 1
protmem_default_flags_decrypt = 2
protmem_default_flags_state = 3
protmem_default_flags_memvault_mprotect = 4
protmem_default_flags_key_mprotect = 5
protmem_default_flags_decrypt_mprotect = 6
protmem_default_flags_state_mprotect = 7
protmem_default_flags_memvault_mlock = 8
protmem_default_flags_key_mlock = 9
protmem_default_flags_decrypt_mlock = 10
protmem_default_flags_state_mlock = 11
protmem_default_flags_key_lock = 12
protmem_default_flags_memvault_lock = 13
protmem_default_flags_decrypt_lock = 14
protmem_default_flags_state_lock = 15
protmem_default_flags_key_memzero = 16
protmem_default_flags_memvault_memzero = 17
protmem_default_flags_decrypt_memzero = 18
protmem_default_flags_state_memzero = 19
protmem_default_flags_key_malloc = 20
protmem_default_flags_memvault_malloc = 21
protmem_default_flags_decrypt_malloc = 22
protmem_default_flags_state_malloc = 23
PREINIT:
U32 new_flags, old_flags, *global, mask = 0;
PPCODE:
switch(ix % 4) {
case 1:
global = &g_protmem_default_flags_key;
break;
case 2:
global = &g_protmem_default_flags_decrypt;
break;
case 3:
global = &g_protmem_default_flags_state;
break;
default:
global = &g_protmem_default_flags_memvault;
}
if (ix > 3) {
if (ix <= 7)
mask = PROTMEM_FLAG_MPROTECT_MASK;
else if (ix <= 11)
mask = PROTMEM_FLAG_MLOCK_MASK;
else if (ix <= 15)
mask = PROTMEM_FLAG_LOCK_MASK;
else if (ix <= 19)
mask = PROTMEM_FLAG_MEMZERO_MASK;
else
mask = PROTMEM_FLAG_MALLOC_MASK;
}
old_flags = *global;
if (ix > 3)
old_flags &= mask;
SvGETMAGIC(flags);
if (SvOK(flags)) {
new_flags = SvUV_nomg(flags);
/* TODO: check for invalid flags */
if (ix <= 3)
*global = new_flags;
else {
*global &= ~mask;
new_flags &= mask;
*global |= new_flags;
}
}
XSRETURN_UV(old_flags);
( run in 0.874 second using v1.01-cache-2.11-cpan-71847e10f99 )