Crypt-HSM
view release on metacpan or search on metacpan
lib/Crypt/HSM.xs view on Meta::CPAN
RETVAL = newHV();
hv_stores(RETVAL, "cryptoki-version", version_to_sv(&info.cryptokiVersion));
hv_stores(RETVAL, "manufacturer-id", trimmed_value(info.manufacturerID, 32));
hv_stores(RETVAL, "flags", newRV_noinc((SV*)newHV()));
hv_stores(RETVAL, "library-description", trimmed_value(info.libraryDescription, 32));
hv_stores(RETVAL, "library-version", version_to_sv(&info.libraryVersion));
OUTPUT: RETVAL
void slots(Crypt::HSM::Provider self, CK_BBOOL tokenPresent = 1)
PPCODE:
CK_ULONG count, i;
CK_RV result = self->funcs->C_GetSlotList(tokenPresent, NULL, &count);
if ( result != CKR_OK )
croak_with("Couldn't get slots", result);
EXTEND(SP, (int)count);
CK_SLOT_ID_PTR slotList = safecalloc(count, sizeof(CK_SLOT_ID));
SAVEFREEPV(slotList);
lib/Crypt/HSM.xs view on Meta::CPAN
if (result != CKR_OK)
croak_with("Could not open session", result);
RETVAL = PerlMemShared_calloc(1, sizeof(struct Session));
refcount_init(&RETVAL->refcount, 1);
RETVAL->slot = slot_refcount_increment(self);
RETVAL->handle = handle;
OUTPUT: RETVAL
void mechanisms(Crypt::HSM::Slot self)
PPCODE:
CK_ULONG length, i;
CK_RV result = slot_funcs(self)->C_GetMechanismList(self->slot, NULL, &length);
if (result != CKR_OK)
croak_with("Couldn't get mechanisms length", result);
CK_MECHANISM_TYPE* types = safecalloc(length, sizeof(CK_MECHANISM_TYPE));
SAVEFREEPV(types);
result = slot_funcs(self)->C_GetMechanismList(self->slot, types, &length);
if (result != CKR_OK)
croak_with("Couldn't get mechanisms", result);
lib/Crypt/HSM.xs view on Meta::CPAN
CODE:
CK_ULONG flags = 0;
int i;
for (i = 1; i < items; ++i)
flags |= get_flags(mechanism_flags, ST(i));
RETVAL = (self->flags & flags) == flags;
OUTPUT: RETVAL
void flags(Crypt::HSM::Mechanism::Info self)
PPCODE:
CK_ULONG i;
for (i = 0; i < CHAR_BIT * sizeof(CK_ULONG); ++i) {
CK_ULONG right = 1ul << i;
if (self->flags & right)
mXPUSHs(entry_to_sv(map_reverse_find(mechanism_flags, right)));
}
CK_ULONG min_key_size(Crypt::HSM::Mechanism::Info self)
CODE:
lib/Crypt/HSM.xs view on Meta::CPAN
CK_OBJECT_HANDLE handle;
CK_RV result = session_funcs(self)->C_CreateObject(self->handle, template.member, template.length, &handle);
if (result != CKR_OK)
croak_with("Could not create object", result);
RETVAL = new_object(self, handle);
OUTPUT: RETVAL
void find_objects(Crypt::HSM::Session self, Attributes attributes = empty)
PPCODE:
CK_RV result = session_funcs(self)->C_FindObjectsInit(self->handle, attributes.member, attributes.length);
if (result != CKR_OK)
croak_with("Could not find objects", result);
CK_ULONG actual = 0;
do {
CK_OBJECT_HANDLE current[16];
CK_ULONG iter;
CK_RV result = session_funcs(self)->C_FindObjects(self->handle, current, sizeof(current) / sizeof(*current), &actual);
if (result != CKR_OK) {
session_funcs(self)->C_FindObjectsFinal(self->handle);
croak_with("Could not find objects", result);
}
for (iter = 0; iter < actual; ++iter)
mXPUSHs(new_object(self, current[iter]));
} while (actual > 0);
session_funcs(self)->C_FindObjectsFinal(self->handle);
void generate_keypair(Crypt::HSM::Session self, CK_MECHANISM_TYPE mechanism_type, Attributes publicKeyTemplate, Attributes privateKeyTemplate, ...)
PPCODE:
CK_OBJECT_HANDLE publicKey;
CK_OBJECT_HANDLE privateKey;
CK_MECHANISM mechanism = mechanism_from_args(mechanism_type, 4);
CK_RV result = session_funcs(self)->C_GenerateKeyPair(self->handle, &mechanism, publicKeyTemplate.member, publicKeyTemplate.length, privateKeyTemplate.member, privateKeyTemplate.length, &publicKey, &privateKey);
if (result != CKR_OK)
croak_with("Could not create keypair", result);
mXPUSHs(new_object(self, publicKey));
mXPUSHs(new_object(self, privateKey));
( run in 0.736 second using v1.01-cache-2.11-cpan-71847e10f99 )