Changeset ce57b45 in terepaima


Ignore:
Timestamp:
Sep 21, 2017, 4:47:45 PM (7 years ago)
Author:
Antonio Araujo <aaraujo@…>
Branches:
master
Children:
2506bdb
Parents:
f626f58
Message:

Avance en función getPrivateKeyLabels

Location:
signHash
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • signHash/cryptotoken.cpp

    rf626f58 rce57b45  
    461461}
    462462
     463/*
     464std::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
     482QStringList 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}
    463597
    464598// slot para obtener informacion del modulo PKCS11
  • signHash/cryptotoken.h

    rf626f58 rce57b45  
    33
    44#include <QObject>
     5#include <QStringList>
    56
    67#include "pkcs11.h"
     
    7071     *
    7172     * @param hashToSign hash to be signed
    72      * @param pin pin of cryptographic device
     73     * @param pin pin of the cryptographic device
    7374     * @param label label of the private key stored in the cryptographic device
    7475     * @return signed hash
    7576     */
    7677    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);
    7789
    7890    /**
  • signHash/main.cpp

    rf626f58 rce57b45  
    6666    assert(ct->toHex(result) == "6cea780ecd21141bfe460d4fd2172f52366c8e357303e9914310f1553951876f2b3d6127571f645b52b8148dfc9f6016e851641ff2c6f785dd84186fe82d802982afd2f88951e22f03dc6982600277a1c18faeda0da89a60d2afb4a51a865bbd4fc3871b8516e8a02afe309b626f8aadb53b6543d99e9c4ab5b334634edcd0898171cb6753b2abe00f64303a1398795e25d64f960ea73041b7178ba539f6bc0cedd16b87f366b4e752fbb7ca4e33fddee8b5adf3bc70f5406a3c69ac8ff62d99ff77a7e340ad6e1d18a7b25e8652653dec5b653a07a8bb289dd6ad9fa876094008864bf475e8589a9cefd2240f2f1f537593e3a94ce01fbea90e9f18bbf3783d");
    6767
     68
     69    qDebug("lista de claves privadas:");
     70    ct->getPrivateKeyLabels("123456");
    6871
    6972    //return a.exec();
Note: See TracChangeset for help on using the changeset viewer.