diff --git a/cmd/mtrtoken/main.go b/cmd/mtrtoken/main.go deleted file mode 100644 index 6d55738..0000000 --- a/cmd/mtrtoken/main.go +++ /dev/null @@ -1,218 +0,0 @@ -package mtrtoken - -/* -#include - - -//Шаблон для поиска сертификата - -CK_ATTRIBUTE certificateTemplate[] = -{ - { CKA_CLASS, &certificateObject, sizeof(certificateObject)}, // Класс - сертификат - { CKA_TOKEN, &attributeTrue, sizeof(attributeTrue)}, // Сертификат является объектом токена - { CKA_PRIVATE, &attributeFalse, sizeof(attributeFalse)}, // Сертификат доступен без аутентификации - { CKA_CERTIFICATE_TYPE, &certificateType, sizeof(certificateType)}, // Тип сертификата - X.509 - { CKA_ID, &keyPairIdGost2012_512_1, sizeof(keyPairIdGost2012_512_1) - 1}, // Идентификатор сертификата, должен совпадать с CKA_ID соответствующей ключевой пары - { CKA_CERTIFICATE_CATEGORY, &tokenUserCertificate, sizeof(tokenUserCertificate)}, // Категория сертификата - пользовательский -}; - -int test() -{ - HMODULE module; // Хэндл загруженной библиотеки PKCS#11 - CK_SESSION_HANDLE session; // Хэндл открытой сессии - - CK_FUNCTION_LIST_PTR functionList; // Указатель на список функций PKCS#11, хранящийся в структуре CK_FUNCTION_LIST - CK_C_GetFunctionList getFunctionList; // Указатель на функцию C_GetFunctionList - - CK_FUNCTION_LIST_EXTENDED_PTR functionListEx; // Указатель на список функций расширения PKCS#11, хранящийся в структуре CK_FUNCTION_LIST_EXTENDED - CK_C_EX_GetFunctionListExtended getFunctionListEx; // Указатель на функцию C_EX_GetFunctionListExtended - - CK_SLOT_ID_PTR slots; // Указатель на массив идентификаторов слотов - CK_ULONG slotCount; // Количество идентификаторов слотов в массиве - - CK_OBJECT_HANDLE_PTR certificates; // Указатель на массив хэндлов объектов, соответствующих критериям поиска - CK_ULONG objectCount; // Количество хэндлов объектов в массиве - - CK_BYTE_PTR info; // Указатель на буфер, содержащий информацию о сертификате - CK_ULONG size; // Размер буфера, содержащего информацию о сертификате, в байтах - - CK_RV rv; // Код возврата. Могут быть возвращены только ошибки, определенные в PKCS#11 - int r; // Код возврата для функций, возвращающих int - - int errorCode = 1; // Флаг ошибки - - - //Выполнить действия для начала работы с библиотекой PKCS#11 - - printf("Initialization...\n"); - - - //Загрузить библиотеку - - module = LoadLibrary(PKCS11ECP_LIBRARY_NAME); - CHECK(" LoadLibrary", module != NULL, exit); - - - //Получить адрес функции запроса структуры с указателями на функции - - getFunctionList = (CK_C_GetFunctionList)GetProcAddress(module, "C_GetFunctionList"); - CHECK(" GetProcAddress (C_GetFunctionList)", getFunctionList != NULL, unload_pkcs11); - - - //Получить адрес функции запроса структуры с указателями на функции - //расширения стандарта PKCS#11 - - getFunctionListEx = (CK_C_EX_GetFunctionListExtended)GetProcAddress(module, "C_EX_GetFunctionListExtended"); - CHECK(" GetProcAddress (C_EX_GetFunctionListExtended)", getFunctionList != NULL, unload_pkcs11); - - - //Получить структуру с указателями на функции - - rv = getFunctionList(&functionList); - CHECK_AND_LOG(" Get function list", rv == CKR_OK, rvToStr(rv), unload_pkcs11); - - - //Получить структуру с указателями на функции расширения стандарта - - rv = getFunctionListEx(&functionListEx); - CHECK_AND_LOG(" Get function list extended", rv == CKR_OK, rvToStr(rv), unload_pkcs11); - - - //Инициализировать библиотеку - - rv = functionList->C_Initialize(NULL_PTR); - CHECK_AND_LOG(" C_Initialize", rv == CKR_OK, rvToStr(rv), unload_pkcs11); - - - //Получить количество слотов c подключенными токенами - - rv = functionList->C_GetSlotList(CK_TRUE, NULL_PTR, &slotCount); - CHECK_AND_LOG(" C_GetSlotList (number of slots)", rv == CKR_OK, rvToStr(rv), finalize_pkcs11); - - CHECK_AND_LOG(" Checking available tokens", slotCount > 0, " No tokens available", finalize_pkcs11); - - - //Получить список слотов c подключенными токенами - - slots = (CK_SLOT_ID_PTR)malloc(slotCount * sizeof(CK_SLOT_ID)); - CHECK(" Memory allocation for slots", slots != NULL_PTR, finalize_pkcs11); - - rv = functionList->C_GetSlotList(CK_TRUE, slots, &slotCount); - CHECK_AND_LOG(" C_GetSlotList", rv == CKR_OK, rvToStr(rv), free_slots); - printf(" Slots available: %d\n", (int)slotCount); - - - //Открыть RW сессию в первом доступном слоте - - rv = functionList->C_OpenSession(slots[0], CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &session); - CHECK_AND_LOG(" C_OpenSession", rv == CKR_OK, rvToStr(rv), free_slots); - - - //Выполнить аутентификацию Пользователя - - rv = functionList->C_Login(session, CKU_USER, USER_PIN, USER_PIN_LEN); - CHECK_AND_LOG(" C_Login", rv == CKR_OK, rvToStr(rv), close_session); - printf("Initialization has been completed successfully.\n"); - - - //Получение информации о сертификате - - printf("\nGetting information...\n"); - - - //Получить массив хэндлов сертификатов - - printf(" Getting certificates...\n"); - r = findObjects(functionList, session, certificateTemplate, arraysize(certificateTemplate), - &certificates, &objectCount); - CHECK(" findObjects", r == 0, logout); - - CHECK_AND_LOG(" Checking number of certificates", objectCount != 0, "No objects found\n", logout); - - - //Получение информации о сертификате - - rv = functionListEx->C_EX_GetCertificateInfoText(session, certificates[0], &info, &size); - CHECK_AND_LOG(" C_EX_GetCertificateInfoText", rv == CKR_OK, rvToStr(rv), logout); - - - //Распечатать буфер, содержащий информацию о сертификате - - r = printUTF8String(info); - CHECK(" Print info", r == 0, free_buffer); - - printf("Information has been acquired successfully.\n"); - - - //Выставить признак успешного завершения программы - - errorCode = 0; - - - //Выполнить действия для завершения работы с библиотекой PKCS#11 - - printf("\nFinalizing... \n"); - - - //Освобождение буфера, содержащего информацию о сертификате - -free_buffer: - rv = functionListEx->C_EX_FreeBuffer(info); - CHECK_RELEASE_AND_LOG(" C_EX_FreeBuffer", rv == CKR_OK, rvToStr(rv), errorCode); - - - //Сбросить права доступа - -logout: - rv = functionList->C_Logout(session); - CHECK_RELEASE_AND_LOG(" C_Logout", rv == CKR_OK, rvToStr(rv), errorCode); - - - //Закрыть открытую сессию в слоте - -close_session: - rv = functionList->C_CloseSession(session); - CHECK_RELEASE_AND_LOG(" C_CloseSession", rv == CKR_OK, rvToStr(rv), errorCode); - - - //Очистить память из-под слотов - -free_slots: - free(slots); - - - //Деинициализировать библиотеку - -finalize_pkcs11: - rv = functionList->C_Finalize(NULL_PTR); - CHECK_RELEASE_AND_LOG(" C_Finalize", rv == CKR_OK, rvToStr(rv), errorCode); - - - //Выгрузить библиотеку из памяти - -unload_pkcs11: - CHECK_RELEASE(" FreeLibrary", FreeLibrary(module), errorCode); - -exit: - if (errorCode) { - printf("\n\nSome error occurred. Sample failed.\n"); - } else { - printf("\n\nSample has been completed successfully.\n"); - } - - return errorCode; -} -*/ -import "C" - -import ( - "fmt" - "time" -) - -func main() { - fmt.Printf("Invoking c library...\n") - C.test() - time.Sleep(16 * time.Second) - // fmt.Println("Done ", C.x(10) ) -}