| /* Test for PKCS#11 calls. */ |
| |
| #include <stdio.h> |
| #include <security/cryptoki.h> |
| #include <security/pkcs11.h> |
| |
| int main(void) |
| { |
| CK_RV ret = C_Initialize(NULL); |
| if (ret != CKR_OK) { |
| fprintf(stderr, "Initialize: %lu\n", ret); |
| return 1; |
| } |
| |
| CK_ULONG slot_count; |
| ret = C_GetSlotList(0, NULL, &slot_count); |
| if (ret != CKR_OK) { |
| fprintf(stderr, "GetSlotList(NULL): %lu\n", ret); |
| return 1; |
| } |
| |
| CK_SLOT_ID_PTR slots = malloc(slot_count * sizeof(CK_SLOT_ID)); |
| if (slots == NULL) { |
| fprintf(stderr, "malloc(slots)\n"); |
| return 1; |
| } |
| |
| ret = C_GetSlotList(0, slots, &slot_count); |
| if (ret != CKR_OK) { |
| fprintf(stderr, "GetSlotList(slots): %lu\n", ret); |
| return 1; |
| } |
| |
| CK_ULONG i; |
| for (i = 0; i < slot_count; i++) { |
| CK_SLOT_ID slot_id = slots[i]; |
| |
| CK_ULONG mech_count; |
| ret = C_GetMechanismList(slot_id, NULL, &mech_count); |
| if (ret != CKR_OK) { |
| fprintf(stderr, "GetMechanismList(NULL): %lu\n", ret); |
| return 1; |
| } |
| |
| CK_MECHANISM_TYPE_PTR mechs = malloc(mech_count * sizeof(CK_MECHANISM_TYPE)); |
| if (slots == NULL) { |
| fprintf(stderr, "malloc(mechs)\n"); |
| return 1; |
| } |
| |
| ret = C_GetMechanismList(slot_id, mechs, &mech_count); |
| if (ret != CKR_OK) { |
| fprintf(stderr, "GetMechanismList(mechs): %lu\n", ret); |
| return 1; |
| } |
| |
| free(mechs); |
| } |
| |
| free(slots); |
| C_Finalize(NULL_PTR); |
| return 0; |
| } |
| |