Changeset ce57b45 in terepaima
- Timestamp:
- Sep 21, 2017, 4:47:45 PM (7 years ago)
- Branches:
- master
- Children:
- 2506bdb
- Parents:
- f626f58
- Location:
- signHash
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
signHash/cryptotoken.cpp
rf626f58 rce57b45 461 461 } 462 462 463 /* 464 std::vector<CK_OBJECT_HANDLE> CryptoToken::findObject(CK_OBJECT_CLASS objectClass, CK_ULONG max = 2) const { 465 if (!fl) { 466 throw std::runtime_error("PKCS11 is not loaded"); 467 } 468 CK_ATTRIBUTE searchAttribute = {CKA_CLASS, &objectClass, sizeof(objectClass)}; 469 470 471 472 C(FindObjectsInit, session, &searchAttribute, 1); 473 CK_ULONG objectCount = max; 474 std::vector<CK_OBJECT_HANDLE> objectHandle(objectCount); 475 C(FindObjects, session, objectHandle.data(), objectHandle.size(), &objectCount); 476 C(FindObjectsFinal, session); 477 objectHandle.resize(objectCount); 478 return objectHandle; 479 } 480 */ 481 482 QStringList CryptoToken::getPrivateKeyLabels(QString pin) 483 { 484 QStringList list; 485 486 QString error(""); 487 CK_RV rv; 488 489 CK_SESSION_HANDLE hSession = CK_INVALID_HANDLE; 490 CK_SLOT_ID slotID; 491 492 // initialize criptoki 493 rv = C_Initialize(NULL_PTR); 494 if (rv != CKR_OK) 495 { 496 if (rv == CKR_DEVICE_ERROR) 497 { 498 error = returnErrorToQString(rv); 499 qDebug(qPrintable(error)); 500 throw std::runtime_error(qPrintable(error)); 501 } 502 error = returnErrorToQString(rv); 503 qDebug(qPrintable(error)); 504 throw std::runtime_error(qPrintable(error)); 505 } 506 507 hSession = openSession((char *) qPrintable(pin), slotID); 508 if (hSession == CK_INVALID_HANDLE) 509 { 510 qDebug("Fallo ptr_SC->openSession"); 511 rv = C_Finalize(NULL_PTR); 512 qDebug("C_Finalize: rv = %x",rv); 513 assert(rv == CKR_OK); 514 throw std::runtime_error("Error openning a session"); 515 } 516 517 CK_OBJECT_CLASS objectClass = CKO_PRIVATE_KEY; 518 //CK_OBJECT_CLASS objectClass = CKO_PUBLIC_KEY; 519 //CK_OBJECT_CLASS objectClass = CKO_CERTIFICATE; 520 521 CK_OBJECT_HANDLE hObject = CK_INVALID_HANDLE; 522 CK_ATTRIBUTE searchAttribute = {CKA_CLASS, &objectClass, sizeof(objectClass)}; 523 CK_ULONG ulCount = 0; 524 525 rv = C_FindObjectsInit(hSession, &searchAttribute, 1); 526 qDebug ("C_FindObjectsInit rv = %x",rv); 527 qDebug ("\n"); 528 //assert(rv==CKR_OK); 529 if (rv != CKR_OK) 530 { 531 error = returnErrorToQString(rv); 532 qDebug("%s", qPrintable("C_FindObjectsInit: "+error)); 533 return list; 534 } 535 536 CK_ULONG objectCount = 3; 537 std::vector<CK_OBJECT_HANDLE> objectHandle(objectCount); 538 539 // se realiza la busqueda 540 //rv = C_FindObjects(hSession, &hObject, 2, &ulCount); 541 rv = C_FindObjects(hSession, objectHandle.data(), objectHandle.size(), &objectCount); 542 543 qDebug ("C_FindObjects rv = %x",rv); 544 qDebug ("\n"); 545 //assert(rv==CKR_OK); 546 547 qDebug("*-*-*-*-*getPrivateKeyLabels VALOR DE objectCount %u: ", objectCount); 548 //if (rv != CKR_OK) 549 if ((rv != CKR_OK) )//|| (ulCount == 0)) 550 { 551 if (ulCount == 0) 552 qDebug("ulCount == 0"); 553 554 error = returnErrorToQString(rv); 555 qDebug(qPrintable("C_FindObjects: "+error)); 556 return list; 557 558 } 559 560 rv = C_FindObjectsFinal(hSession); 561 qDebug ("C_FindObjectsFinal rv = %x",rv); 562 qDebug ("\n"); 563 //assert(rv==CKR_OK); 564 if (rv != CKR_OK) 565 { 566 error = returnErrorToQString(rv); 567 qDebug(qPrintable("C_FindObjectsFinal: "+error)); 568 return list; 569 } 570 objectHandle.resize(objectCount); 571 572 //if (ulCount == 0) 573 if (objectHandle.size() == 0) 574 { 575 qDebug (" \nNinguna clave privada encontrada!\n"); 576 // cerrar la sesion 577 /*rv = C_CloseAllSessions(slotID); 578 qDebug("C_CloseAllSessions rv = %x", rv); 579 qDebug ("\n"); 580 assert(rv==CKR_OK);*/ 581 return list; 582 } 583 else 584 { 585 //qDebug (" \nObjeto encontrado (object=0x%04X)\n", hObject); 586 qDebug("se econtraron %d claves", objectHandle.size()); 587 //qDebug (" \nClave privada encontrada: (clave = 0x%4X)\n", hObject); 588 for (int i=0; i< objectHandle.size(); i++) 589 { 590 qDebug("clave encontrada: 0x%4X", objectHandle[i]); 591 } 592 return list; 593 } 594 595 return list; 596 } 463 597 464 598 // slot para obtener informacion del modulo PKCS11 -
signHash/cryptotoken.h
rf626f58 rce57b45 3 3 4 4 #include <QObject> 5 #include <QStringList> 5 6 6 7 #include "pkcs11.h" … … 70 71 * 71 72 * @param hashToSign hash to be signed 72 * @param pin pin of cryptographic device73 * @param pin pin of the cryptographic device 73 74 * @param label label of the private key stored in the cryptographic device 74 75 * @return signed hash 75 76 */ 76 77 std::vector<unsigned char> signHash(QString hashToSign, QString pin, QString label); 78 79 80 std::vector<CK_OBJECT_HANDLE> findObject(CK_OBJECT_CLASS objectClass, CK_ULONG max) const; 81 82 /** 83 * @brief Returns a list of key labels 84 * 85 * @param pin pin of the cryptographic device 86 * @return QStringList of labels 87 */ 88 QStringList getPrivateKeyLabels(QString pin); 77 89 78 90 /** -
signHash/main.cpp
rf626f58 rce57b45 66 66 assert(ct->toHex(result) == "6cea780ecd21141bfe460d4fd2172f52366c8e357303e9914310f1553951876f2b3d6127571f645b52b8148dfc9f6016e851641ff2c6f785dd84186fe82d802982afd2f88951e22f03dc6982600277a1c18faeda0da89a60d2afb4a51a865bbd4fc3871b8516e8a02afe309b626f8aadb53b6543d99e9c4ab5b334634edcd0898171cb6753b2abe00f64303a1398795e25d64f960ea73041b7178ba539f6bc0cedd16b87f366b4e752fbb7ca4e33fddee8b5adf3bc70f5406a3c69ac8ff62d99ff77a7e340ad6e1d18a7b25e8652653dec5b653a07a8bb289dd6ad9fa876094008864bf475e8589a9cefd2240f2f1f537593e3a94ce01fbea90e9f18bbf3783d"); 67 67 68 69 qDebug("lista de claves privadas:"); 70 ct->getPrivateKeyLabels("123456"); 68 71 69 72 //return a.exec();
Note: See TracChangeset
for help on using the changeset viewer.