From 7777ac3dadd2c56e0a18d25c7bc7c3123cbdf028 Mon Sep 17 00:00:00 2001 From: Alessio Di Mauro Date: Mon, 6 Jul 2015 17:08:26 +0200 Subject: [PATCH] GetInfo. --- ykcs11/pkcs11f.h | 2 +- ykcs11/ykcs11.c | 31 ++++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/ykcs11/pkcs11f.h b/ykcs11/pkcs11f.h index 9f71d49..71ee267 100644 --- a/ykcs11/pkcs11f.h +++ b/ykcs11/pkcs11f.h @@ -71,7 +71,7 @@ CK_PKCS11_FUNCTION_INFO(C_Finalize) CK_PKCS11_FUNCTION_INFO(C_GetInfo) #ifdef CK_NEED_ARG_LIST ( - CK_VOID_PTR pInfo /* location that receives information */ + CK_INFO_PTR pInfo /* location that receives information */ ); #endif diff --git a/ykcs11/ykcs11.c b/ykcs11/ykcs11.c index 2457197..32b1908 100644 --- a/ykcs11/ykcs11.c +++ b/ykcs11/ykcs11.c @@ -13,6 +13,9 @@ #define YKCS11_DBG 1 // General debug, must be either 1 or 0 #define YKCS11_DINOUT 1 // Function in/out debug, must be either 1 or 0 +#define YKCS11_MANUFACTURER "Yubico (www.yubico.com)" +#define YKCS11_LIBDESC "PKCS#11 PIV Library (SP-800-73)" + #define PIV_MIN_PIN_LEN 6 #define PIV_MAX_PIN_LEN 8 @@ -82,11 +85,24 @@ CK_DEFINE_FUNCTION(CK_RV, C_Finalize)( } CK_DEFINE_FUNCTION(CK_RV, C_GetInfo)( - CK_VOID_PTR pInfo + CK_INFO_PTR pInfo ) { - DBG(("In")); + DIN; + CK_VERSION ver = {0.0}; + pInfo->cryptokiVersion = function_list.version; + memset(pInfo->manufacturerID, ' ', sizeof(pInfo->manufacturerID)); + strcpy(pInfo->manufacturerID, YKCS11_MANUFACTURER); + + pInfo->flags = 0; + + memset(pInfo->libraryDescription, ' ', sizeof(pInfo->libraryDescription)); + strcpy(pInfo->libraryDescription, YKCS11_LIBDESC); + + pInfo->libraryVersion = ver; + + DOUT; return CKR_OK; } @@ -131,7 +147,7 @@ CK_DEFINE_FUNCTION(CK_RV, C_GetSlotList)( for (i = 0; i < n_readers; i++) { pSlotList[i] = i; } - + DBG(("%d token", tokenPresent)); DBG(("%u count", *pulCount)); @@ -180,9 +196,9 @@ CK_DEFINE_FUNCTION(CK_RV, C_GetTokenInfo)( if (vid == UNKNOWN) return CKR_TOKEN_NOT_RECOGNIZED; - + vendor = get_vendor(vid); - + memset(pInfo->label, ' ', sizeof(pInfo->label)); p = vendor.get_label(); len = strlen(p); @@ -225,7 +241,7 @@ CK_DEFINE_FUNCTION(CK_RV, C_GetTokenInfo)( ykpiv_get_version(piv_state, buf, sizeof(buf)); ver = vendor.get_version(buf, strlen(buf)); - + pInfo->hardwareVersion = ver; // version number of hardware pInfo->firmwareVersion = ver; // version number of firmware @@ -949,8 +965,9 @@ CK_DEFINE_FUNCTION(CK_RV, C_CancelFunction)( return CKR_OK; } + CK_FUNCTION_LIST function_list = { - { 2, 24 }, + { 2, 40 }, C_Initialize, C_Finalize, C_GetInfo,