void SymmetricAlgorithmTests::setUp() { // printf("\nObjectTests\n"); setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); CK_RV rv; CK_UTF8CHAR pin[] = SLOT_0_USER1_PIN; CK_ULONG pinLength = sizeof(pin) - 1; CK_UTF8CHAR sopin[] = SLOT_0_SO1_PIN; CK_ULONG sopinLength = sizeof(sopin) - 1; CK_SESSION_HANDLE hSession; CK_UTF8CHAR label[32]; memset(label, ' ', 32); memcpy(label, "token1", strlen("token1")); // (Re)initialize the token rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_InitToken(SLOT_INIT_TOKEN, sopin,sopinLength, label); CPPUNIT_ASSERT(rv == CKR_OK); // Open session rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION | CKF_RW_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Login SO rv = C_Login(hSession,CKU_SO, sopin, sopinLength); CPPUNIT_ASSERT(rv == CKR_OK); // Initialize the user pin rv = C_InitPIN(hSession, pin, pinLength); CPPUNIT_ASSERT(rv == CKR_OK); }
/* * Initialize the token */ int PKCS11_init_token(PKCS11_TOKEN * token, const char *pin, const char *label) { PKCS11_SLOT_private *priv = PRIVSLOT(TOKEN2SLOT(token)); PKCS11_CTX *ctx = priv->parent; int rv; CHECK_FORK(ctx); if (label == NULL) label = "PKCS#11 Token"; rv = CRYPTOKI_call(ctx, C_InitToken(priv->id, (CK_UTF8CHAR *) pin, strlen(pin), (CK_UTF8CHAR *) label)); CRYPTOKI_checkerr(PKCS11_F_PKCS11_INIT_TOKEN, rv); /* FIXME: how to update the token? * PKCS11_CTX_private *cpriv; * int n; * cpriv = PRIVCTX(ctx); * for (n = 0; n < cpriv->nslots; n++) { * if (pkcs11_check_token(ctx, cpriv->slots + n) < 0) * return -1; * } */ return 0; }
CK_RV RunC_InitToken( CK_SLOT_ID slotID, // ID of the token's slot CK_CHAR_PTR pPin, // the SO's initial PIN CK_ULONG ulPinLen, // length in bytes of the PIN CK_CHAR_PTR pLabel // 32-byte token label (blank padded) ) { //convert ANSI to UTF8 CK_ULONG ulPinUtf8_length = 0; CK_ULONG ulLabelutf8_length = 0; char *pszPinUtf8 = NULL; char szUtf8TokenName[32]; memset(szUtf8TokenName, 0x20/*blank*/, 32); if(ulPinLen > 0) { ulPinUtf8_length = AppStringToUtf8String((const char *)pPin,ulPinLen, NULL); if(ulPinUtf8_length > 0) { pszPinUtf8 = new char[ulPinUtf8_length+1]; memset(pszPinUtf8, 0x00, ulPinUtf8_length+1); AppStringToUtf8String((const char *)pPin,ulPinLen, pszPinUtf8); } } if(pLabel != NULL) { CK_ULONG ulLabelutf8_length = AppStringToUtf8String((const char *)pLabel,strlen((const char *)pLabel), NULL); if(ulLabelutf8_length > 32) { return CKR_DATA_LEN_RANGE; } if(ulLabelutf8_length > 0) { char * pBuff = new char[ulLabelutf8_length+1]; memset(pBuff, 0x00, ulLabelutf8_length+1); AppStringToUtf8String((const char *)pLabel, strlen((const char *)pLabel), pBuff); memcpy(szUtf8TokenName, pBuff, ulLabelutf8_length); if(pBuff != NULL) { delete[] pBuff; pBuff = NULL; } } } //end convert CK_RV rv = C_InitToken(slotID, (unsigned char *)pszPinUtf8, ulPinUtf8_length, (unsigned char *)szUtf8TokenName); if(pszPinUtf8 != NULL) { delete[] pszPinUtf8; pszPinUtf8 = NULL; } return rv; }
void TokenTests::testInitToken() { CK_RV rv; CK_UTF8CHAR pin[] = SLOT_0_SO1_PIN; CK_ULONG pinLength = sizeof(pin) - 1; CK_UTF8CHAR label[32]; CK_SESSION_HANDLE hSession; memset(label, ' ', 32); memcpy(label, "token1", strlen("token1")); // Just make sure that we finalize any previous failed tests C_Finalize(NULL_PTR); rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); CPPUNIT_ASSERT(rv == CKR_CRYPTOKI_NOT_INITIALIZED); rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_InitToken(SLOT_INIT_TOKEN, NULL_PTR, pinLength, label); CPPUNIT_ASSERT(rv == CKR_ARGUMENTS_BAD); rv = C_InitToken(SLOT_INVALID, pin, pinLength, label); CPPUNIT_ASSERT(rv == CKR_SLOT_ID_INVALID); // Initialize rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); CPPUNIT_ASSERT(rv == CKR_OK); // Initialize with wrong password rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength - 1, label); CPPUNIT_ASSERT(rv == CKR_PIN_INCORRECT); rv = C_OpenSession(SLOT_INIT_TOKEN, CKF_SERIAL_SESSION, NULL_PTR, NULL_PTR, &hSession); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); CPPUNIT_ASSERT(rv == CKR_SESSION_EXISTS); rv = C_CloseSession(hSession); CPPUNIT_ASSERT(rv == CKR_OK); // Re-initialize rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); CPPUNIT_ASSERT(rv == CKR_OK); C_Finalize(NULL_PTR); }
void UserTests::setUp() { // printf("\nUserTests\n"); setenv("SOFTHSM2_CONF", "./softhsm2.conf", 1); CK_UTF8CHAR pin[] = SLOT_0_SO1_PIN; CK_ULONG pinLength = sizeof(pin) - 1; CK_UTF8CHAR label[32]; memset(label, ' ', 32); memcpy(label, "token1", strlen("token1")); // (Re)initialize the token CK_RV rv = C_Initialize(NULL_PTR); CPPUNIT_ASSERT(rv == CKR_OK); rv = C_InitToken(SLOT_INIT_TOKEN, pin, pinLength, label); CPPUNIT_ASSERT(rv == CKR_OK); C_Finalize(NULL_PTR); }