#include <stdio.h> #include <string.h> #include "f_store.h" typedef unsigned char UCHAR; typedef unsigned long ULONG; typedef unsigned char BYTE;
#include "201/WinPlatform.h" #include "pkcs11.h" typedef CK_ULONG CK_UINTX; CK_BBOOL token = 0; CK_BBOOL isPrivate = 1; CK_BBOOL derive = 0; CK_BBOOL sensitive = 0; CK_BBOOL encrypt = 1; CK_BBOOL decrypt = 1; CK_BBOOL sign = 0; CK_BBOOL verify = 0; CK_BBOOL wrap = 0; CK_BBOOL unwrap = 0; CK_UINTX valueLen = 64; void main(){ char *pin = "complo"; CK_SESSION_HANDLE SessionHandle; CK_SLOT_ID slot; CK_RV rtn, status; CK_SLOT_ID_PTR pSlotList; pSlotList = new CK_SLOT_ID[20]; ULONG Count = 20; C_Initialize(NULL_PTR); rtn = C_GetSlotList(0, pSlotList, &Count); rtn = C_GetSlotList(1, pSlotList, &Count); slot = pSlotList[0]; rtn = C_OpenSession(slot, CKF_RW_SESSION | CKF_SERIAL_SESSION, 0, NULL, &SessionHandle); if(rtn != CKR_OK) printf("Failed to open a slot\n"); //sucesss to open a slot status = C_Login(SessionHandle, CKU_USER, (UCHAR *)pin, strlen(pin)); if(status ==CKR_OK) printf("LOGIN is OK\n"); //up-to-now login is ok CK_ATTRIBUTE keyTemplate[] = //key Object { {CKA_TOKEN, &token, sizeof(token)}, {CKA_PRIVATE, &isPrivate, sizeof(isPrivate)}, {CKA_DERIVE, &derive, sizeof(derive)}, {CKA_SENSITIVE, &sensitive, sizeof(sensitive)}, {CKA_ENCRYPT, &encrypt, sizeof(encrypt)}, {CKA_DECRYPT, &decrypt, sizeof(decrypt)}, {CKA_SIGN, &sign, sizeof(sign)}, {CKA_VERIFY, &verify, sizeof(verify)}, {CKA_WRAP, &wrap, sizeof(wrap)}, {CKA_UNWRAP, &unwrap, sizeof(unwrap)}, {CKA_VALUE_LEN, &valueLen, sizeof(valueLen)}, }; const CK_UINTX keyTemplateCount = sizeof(keyTemplate) / sizeof(CK_ATTRIBUTE); CK_MECHANISM mechanism; CK_OBJECT_HANDLE keyHandle = 0; memset(&mechanism, 0, sizeof(mechanism)); mechanism.mechanism = CKM_RC4_KEY_GEN; status = C_GenerateKey(SessionHandle, &mechanism, keyTemplate, keyTemplateCount, &keyHandle); //////////////////////////////////////////////////////////////////// //after generate a Key, below start to wrap a generate key CK_OBJECT_HANDLE wKey; CK_BYTE w[100]; memset(w, '\0', sizeof(w)); CK_MECHANISM mechanism1 = { CKM_RC4, NULL_PTR, 0 }; CK_ULONG wlen; wlen = sizeof(w); status = C_WrapKey(SessionHandle, &mechanism1, wKey, keyHandle, w, &wlen); if(status != CKR_OK) printf("Failed to wrap key\n"); status = C_Logout(SessionHandle); } I don't know why C_WrapKey fail. Please help This message posted from opensolaris.org