source: terepaima/signHash/cryptotoken.cpp @ 0f7c727

Last change on this file since 0f7c727 was 0f7c727, checked in by Antonio Araujo <aaraujo@…>, 7 years ago

Agregado directorio signHash que corrresponde a prueba de concepto para firmar un hash con un dispositivo criptográfico en C++. El objetivo es que desde Terepaima se pueda firmar el hash que se recibe del servicio web Murachí.

  • Property mode set to 100644
File size: 23.2 KB
Line 
1#include "cryptotoken.h"
2
3#include <assert.h>
4#include <iostream>
5
6CryptoToken::CryptoToken()
7{
8}
9
10
11CryptoToken::~CryptoToken()
12{
13}
14
15
16bool CryptoToken::initializeCriptoki()
17{
18    QString error("");
19    CK_RV rv;
20    rv = C_Initialize(NULL_PTR);
21    if (rv != CKR_OK)
22    {
23        if (rv == CKR_DEVICE_ERROR)
24        {
25            error = returnErrorToQString(rv);
26            qDebug(qPrintable(error));
27            return false;
28        }
29        error = returnErrorToQString(rv);
30        qDebug(qPrintable(error));
31        return false;
32    }
33    else
34    {
35        return true;
36    }
37}
38
39void CryptoToken::finalize() {
40    CK_RV rv;
41    rv = C_Finalize(NULL_PTR);
42    QString error("");
43    if (rv != CKR_OK)
44    {
45        qDebug("** Destruyendo ... ~SmartCard");
46        if (rv == CKR_DEVICE_ERROR)
47        {
48            error = returnErrorToQString(rv);
49            qDebug(qPrintable(error));
50        }
51        error = returnErrorToQString(rv);
52        qDebug(qPrintable(error));
53    }
54}
55
56CK_SESSION_HANDLE CryptoToken::openSession(char * Pin, CK_SLOT_ID & slotID, bool requiredlogin)
57{
58    qDebug("openSession()");
59    QString error("");
60
61    CK_RV rv;
62
63    CK_SLOT_ID SlotList[10];
64    CK_ULONG ulCount = sizeof(SlotList)/sizeof(CK_SLOT_ID);
65
66    CK_SESSION_HANDLE hSession;
67
68    /*
69    ** Find the first slot available that has a token present
70    */
71    rv = C_GetSlotList(TRUE,SlotList,&ulCount);
72    //assert(rv==CKR_OK);
73    //assert(ulCount>0);
74    //if ( (rv != CKR_OK) && (ulCount<=0) )
75    if ( (rv != CKR_OK) || (ulCount<=0) )
76    {
77        error = returnErrorToQString(rv);
78        qDebug(qPrintable("Insertar una tarjeta en el lector. " + error));
79        return CK_INVALID_HANDLE;
80
81    }
82    //slotID = new CK_SLOT_ID() ;
83    slotID = SlotList[0];
84
85    /*
86    ** Open a read/write session with this slot's token
87    */
88    //rv = C_OpenSession(slotID,CKF_SERIAL_SESSION|CKF_RW_SESSION,0,0,&hSession);
89    rv = C_OpenSession(slotID,CKF_SERIAL_SESSION|CKF_RW_SESSION,NULL_PTR,(CK_NOTIFY)NULL_PTR,&hSession);
90
91    //assert(rv==CKR_OK);
92    if (rv != CKR_OK)
93    {
94        error = returnErrorToQString(rv);
95        qDebug(qPrintable("C_OpenSession" + error));
96        return CK_INVALID_HANDLE;
97    }
98
99    /*
100    ** Log in the User to session
101    */
102    if ( requiredlogin ) {
103        rv = C_Login(hSession,CKU_USER, (unsigned char *) Pin,strlen(Pin));
104        //assert(rv==CKR_OK);
105        if (rv != CKR_OK)
106        {
107            error = returnErrorToQString(rv);
108            QString plus("");
109            if ((rv == CKR_PIN_INCORRECT) || (rv == CKR_DATA_LEN_RANGE) || (rv == CKR_ARGUMENTS_BAD))
110                plus = "El PIN introducido es incorrecto!";
111            qDebug(qPrintable("C_login: "  + error + plus));
112            return CK_INVALID_HANDLE;
113        }
114
115    }
116    /*
117    ** Return the session handle and exit
118    */
119    return hSession;
120}
121
122
123
124void CryptoToken::closeSession(CK_SESSION_HANDLE hSession)
125{
126    CK_RV rv;
127    rv = C_CloseSession(hSession);
128    QString error("");
129    if (rv != CKR_OK){
130        qDebug("** Destruyendo ... ~SmartCard");
131        if (rv == CKR_DEVICE_ERROR)
132        {
133            error = returnErrorToQString(rv);
134            qDebug(qPrintable("C_Finalize" + error));
135
136        }
137        error = returnErrorToQString(rv);
138        qDebug(qPrintable("C_Finalize" + error));
139    }
140
141}
142
143
144CK_OBJECT_HANDLE CryptoToken::getPrivateKey(CK_SESSION_HANDLE hSession, CK_SLOT_ID slotID, QString id)
145{
146    QString error("");
147
148    CK_RV rv;
149    CK_OBJECT_HANDLE hObject = CK_INVALID_HANDLE;
150    CK_OBJECT_CLASS objClass = CKO_PRIVATE_KEY;
151    CK_ULONG ulCount = 0;
152
153
154    //CK_BYTE keyid[strlen(id)+1];
155    //strcpy((char *)keyid,id);
156    int idLen = strlen(qPrintable(id))+1;
157
158    CK_UTF8CHAR label[idLen];
159
160    strcpy((char *) label, qPrintable(id));
161    qDebug("SmartCard::getPrivateKey label:");
162    qDebug((char *) label);
163
164    //qDebug("VALOR DE keyid");
165    //qDebug((char *)keyid);
166
167    CK_ATTRIBUTE privateKeyTemplate[] = {
168        { CKA_CLASS, &objClass, sizeof (objClass) },
169        { CKA_LABEL, label, sizeof(label)-1 }
170        //{CKA_ID, keyid, sizeof (keyid)}
171    };
172
173    CK_ULONG ulTemplateCount = sizeof (privateKeyTemplate) / sizeof (privateKeyTemplate[0]);
174
175    /* Pre-condition checks. */
176    assert (hSession != NULL_PTR);
177
178    // comienza la busqueda de clave privada
179    qDebug ("Inicia busqueda de clave privada ... \n");
180
181    rv = C_FindObjectsInit(hSession, privateKeyTemplate, ulTemplateCount);
182    qDebug ("C_FindObjectsInit rv = %x",rv);
183    qDebug ("\n");
184    //assert(rv==CKR_OK);
185    if (rv != CKR_OK)
186    {
187        error = returnErrorToQString(rv);
188        qDebug(qPrintable("C_FindObjectsInit: "+error));
189        return CK_INVALID_HANDLE;
190
191    }
192
193
194    // se realiza la busqueda
195    rv = C_FindObjects(hSession, &hObject, 1, &ulCount);
196    qDebug ("C_FindObjects rv = %x",rv);
197    qDebug ("\n");
198    //assert(rv==CKR_OK);
199
200    qDebug("*-*-*-*-*getPrivateKey VALOR DE ulCount %u: ", ulCount);
201    //if (rv != CKR_OK)
202    if ((rv != CKR_OK) )//|| (ulCount == 0))
203    {
204        if (ulCount == 0)
205            qDebug("ulCount == 0");
206
207        error = returnErrorToQString(rv);
208        qDebug(qPrintable("C_FindObjects: "+error));
209        return CK_INVALID_HANDLE;
210
211    }
212
213    rv = C_FindObjectsFinal(hSession);
214    qDebug ("C_FindObjectsFinal rv = %x",rv);
215    qDebug ("\n");
216    //assert(rv==CKR_OK);
217    if (rv != CKR_OK)
218    {
219        error = returnErrorToQString(rv);
220        qDebug(qPrintable("C_FindObjectsFinal: "+error));
221        return CK_INVALID_HANDLE;
222    }
223
224    if (ulCount == 0)
225    {
226        qDebug (" \nNinguna clave privada encontrada!\n");
227        // cerrar la sesion
228        /*rv = C_CloseAllSessions(slotID);
229        qDebug("C_CloseAllSessions rv = %x", rv);
230        qDebug ("\n");
231        assert(rv==CKR_OK);*/
232        return CK_INVALID_HANDLE;
233        }
234    else
235    {
236        //qDebug (" \nObjeto encontrado (object=0x%04X)\n", hObject);
237        qDebug (" \nClave privada encontrada:  (clave = 0x%4X)\n", hObject);
238        return hObject;
239    }
240}
241
242
243
244bool CryptoToken::signSomeData(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE privateKey, CK_BYTE_PTR someData,
245        CK_ULONG someDataLen, CK_BYTE_PTR sign, CK_ULONG_PTR signLen )
246{
247    CK_RV rv;
248    qDebug (" \nProceso de firma digital de datos con la clave privada que mantiene la tarjeta...\n");
249    qDebug("valor de sign antes de firmar: \n %s\n", sign);
250
251    //CK_ULONG someDataLen, slen;
252    //someDataLen = strlen((char *) someData);
253
254    //CK_ULONG slen;
255    //slen = BUFFERSIZ;
256    //slen = signLen;
257
258    // definicion del algoritmo de firma
259    CK_MECHANISM signMechanism = { CKM_SHA1_RSA_PKCS, NULL_PTR, 0};
260
261    rv = C_SignInit(hSession, &signMechanism, privateKey);
262
263    if (rv != CKR_OK) {
264        qDebug("C_SignInit: rv = 0x%.8X\n", rv);
265        rv = C_CloseSession(hSession);
266        qDebug ("C_CloseSession: rv = %x",rv);
267        qDebug ("\n");
268        assert(rv == CKR_OK);
269        rv = C_Finalize(NULL_PTR);
270        qDebug ("C_Finalize: rv = %x",rv);
271        qDebug ("\n");
272        assert(rv == CKR_OK);
273        return false;
274    }
275
276    qDebug("C_SignInit: rv = 0x%.8X\n", rv);
277    qDebug ("\n");
278    assert(rv==CKR_OK);
279
280    rv = C_Sign(hSession, someData, someDataLen, sign, signLen);
281
282    if (rv != CKR_OK) {
283        qDebug("C_Sign: rv = 0x%.8X\n", rv);
284        rv = C_CloseSession(hSession);
285        qDebug ("C_CloseSession: rv = %x",rv);
286        qDebug ("\n");
287        assert(rv == CKR_OK);
288        rv = C_Finalize(NULL_PTR);
289        qDebug ("C_Finalize: rv = %x",rv);
290        qDebug ("\n");
291        assert(rv == CKR_OK);
292        return false;//1;
293    }
294
295    qDebug("Valor de la firma sign: \n%s\n", sign);
296    qDebug("\nValor de signLen: \n%u\n", *signLen);
297
298    qDebug("C_Sign: rv = 0x%.8X\n", rv);
299    qDebug ("\n");
300    assert(rv==CKR_OK);
301
302
303    qDebug("\nMessage was successfully signed with private key!\n");
304    return true;
305
306}
307
308// slot para obtener informacion del modulo PKCS11
309QString CryptoToken::getInfoCryptoki()
310{
311    // Generales
312    //if ( !CHECKACCESS_ONE("smartcard information", "execute") ) return;
313    CK_INFO info;
314
315    /* Valor devuelto por las funciones */
316    CK_RV rv;
317
318    QString error("");
319    QString mensaje;
320    mensaje.clear();
321
322    rv = C_Initialize(NULL_PTR);
323
324    //fqDebug(stderr, "C_Initialize: rv = 0x%.8X\n", rv);
325    //cout << "valor decimal de rv: " << rv ;
326
327    //assert(rv == CKR_OK);
328    //mensaje->append("C_Initialize\n");
329    if (rv != CKR_OK)
330    {
331
332        if (rv == CKR_DEVICE_ERROR)
333        {
334            error = returnErrorToQString(rv);
335            qDebug("Probablemente el lector no este conectado");
336            return error;
337        }
338        error = returnErrorToQString(rv);
339        qDebug("valor de x despues de returnError: %s", qPrintable(error));
340        return error;
341    }
342
343
344    rv = C_GetInfo(&info);
345    //fqDebug(stderr, "C_GetInfo: rv = 0x%.8X\n", rv);
346    //cout << "valor decimal de rv: " << rv ;
347
348    if (rv != CKR_OK)
349    {
350        error = returnErrorToQString(rv);
351        return error;
352    }
353    //assert(rv == CKR_OK);
354
355    QString y("Descripcion: ");
356    y.append((const char *) info.libraryDescription);
357    mensaje.append(y);
358
359    QString x("Fabricante: ");
360    x.append((const char *) info.manufacturerID);
361    mensaje.append(x);
362
363    QString cryptokiVersion("Version: ");
364    cryptokiVersion.append(QString::number(info.cryptokiVersion.major));
365    cryptokiVersion.append(".");
366    cryptokiVersion.append(QString::number(info.cryptokiVersion.minor));
367    qDebug(qPrintable(cryptokiVersion));
368    mensaje.append(cryptokiVersion);
369
370    rv = C_Finalize(NULL_PTR);
371    if (rv != CKR_OK)
372    {
373        error = returnErrorToQString(rv);
374        return error;
375    }
376    assert(rv == CKR_OK);
377    //mensaje->append("C_Finalize\n");
378
379    //qDebug("***********************mensaje:");
380    //qDebug(qPrintable(mensaje));
381    return mensaje;
382}
383
384QString CryptoToken::returnErrorToQString(CK_RV rv)
385{
386    QString x("");
387    qDebug("returnErrorToQString");
388    //qDebug("valor de x: ", x);
389    //qDebug("valor de rv: "+ QString::number(rv,16));
390
391    /* CK_RV is a value that identifies the return value of a
392    * Cryptoki function */
393    /* CK_RV was changed from CK_USHORT to CK_ULONG for v2.0 */
394    //typedef CK_ULONG          CK_RV;
395
396    if (rv == CKR_OK) // CKR_OK 0x00000000
397    {
398        x = "CKR_OK";
399    } else if (rv == CKR_CANCEL)  // CKR_CANCEL 0x00000001
400    {
401        x = "CKR_CANCEL";
402    } else if (rv == CKR_HOST_MEMORY) //CKR_HOST_MEMORY 0x00000002
403    {
404        x = "CKR_HOST_MEMORY";
405    } else if (rv == CKR_SLOT_ID_INVALID) //CKR_SLOT_ID_INVALID 0x00000003
406    {
407        x = "CKR_SLOT_ID_INVALID";
408    }
409    /* CKR_FLAGS_INVALID was removed for v2.0 */
410    /* CKR_GENERAL_ERROR and CKR_FUNCTION_FAILED are new for v2.0 */
411    else if (rv == CKR_GENERAL_ERROR)           //CKR_GENERAL_ERROR 0x00000005
412    {
413        x = "CKR_GENERAL_ERROR";
414    } else if (rv == CKR_FUNCTION_FAILED)    //CKR_FUNCTION_FAILED 0x00000006
415    {
416        x = "CKR_FUNCTION_FAILED";
417        return x;
418    }
419    /* CKR_ARGUMENTS_BAD, CKR_NO_EVENT, CKR_NEED_TO_CREATE_THREADS,
420    * and CKR_CANT_LOCK are new for v2.01 */
421    else if (rv == CKR_ARGUMENTS_BAD)       // CKR_ARGUMENTS_BAD 0x00000007
422    {
423        x = "CKR_ARGUMENTS_BAD";
424    } else if (rv == CKR_NO_EVENT) //CKR_NO_EVENT                          0x00000008
425    {
426        x = "CKR_NO_EVENT";
427    } else if (rv == CKR_NEED_TO_CREATE_THREADS) //CKR_NEED_TO_CREATE_THREADS            0x00000009
428    {
429        x = "CKR_NEED_TO_CREATE_THREADS";
430    } else if (rv == CKR_CANT_LOCK) // CKR_CANT_LOCK                         0x0000000A
431    {
432        x = "CKR_CANT_LOCK";
433    } else if (rv == CKR_ATTRIBUTE_READ_ONLY) // CKR_ATTRIBUTE_READ_ONLY               0x00000010
434    {
435        x = "CKR_ATTRIBUTE_READ_ONLY";
436    } else if (rv == CKR_ATTRIBUTE_SENSITIVE) // CKR_ATTRIBUTE_SENSITIVE               0x00000011
437    {
438        x = "CKR_ATTRIBUTE_SENSITIVE";
439    } else if (rv == CKR_ATTRIBUTE_TYPE_INVALID) // CKR_ATTRIBUTE_TYPE_INVALID            0x00000012
440    {
441        x = "CKR_ATTRIBUTE_TYPE_INVALID";
442        return x;
443    } else if (rv == CKR_ATTRIBUTE_VALUE_INVALID)// CKR_ATTRIBUTE_VALUE_INVALID           0x00000013
444    {
445        x = "CKR_ATTRIBUTE_VALUE_INVALID";
446    } else if (rv == CKR_DATA_INVALID)//#define CKR_DATA_INVALID                      0x00000020
447    {
448        x = "CKR_DATA_INVALID";
449    } else if (rv == CKR_DATA_LEN_RANGE) //#define CKR_DATA_LEN_RANGE                    0x00000021
450    {
451        x = "CKR_DATA_LEN_RANGE";
452    } else if (rv == CKR_DEVICE_ERROR) //#define CKR_DEVICE_ERROR                      0x00000030
453    {
454        x = "CKR_DEVICE_ERROR";
455        qDebug("FUCK");
456    } else if (rv == CKR_DEVICE_MEMORY) //#define CKR_DEVICE_MEMORY                     0x00000031
457    {
458        x = "CKR_DEVICE_MEMORY";
459
460    } else if (rv == CKR_DEVICE_REMOVED) //#define CKR_DEVICE_REMOVED                    0x00000032
461    {
462        x = "CKR_DEVICE_REMOVED";
463    } else if (rv == CKR_ENCRYPTED_DATA_INVALID) //#define CKR_ENCRYPTED_DATA_INVALID            0x00000040
464    {
465        x = "CKR_ENCRYPTED_DATA_INVALID";
466    } else if (rv == CKR_ENCRYPTED_DATA_LEN_RANGE) //#define CKR_ENCRYPTED_DATA_LEN_RANGE          0x00000041
467    {
468        x = "CKR_ENCRYPTED_DATA_LEN_RANGE";
469    } else if (rv == CKR_FUNCTION_CANCELED) //#define CKR_FUNCTION_CANCELED                 0x00000050
470    {
471        x = "CKR_FUNCTION_CANCELED";
472    } else if (rv == CKR_FUNCTION_NOT_PARALLEL) //#define CKR_FUNCTION_NOT_PARALLEL             0x00000051
473    {
474        x = "CKR_FUNCTION_NOT_PARALLEL";
475    }
476    /* CKR_FUNCTION_NOT_SUPPORTED is new for v2.0 */
477    else if (rv == CKR_FUNCTION_NOT_SUPPORTED) //#define CKR_FUNCTION_NOT_SUPPORTED            0x00000054
478    {
479        x = "CKR_FUNCTION_NOT_SUPPORTED";
480    } else if (rv == CKR_KEY_HANDLE_INVALID) //#define CKR_KEY_HANDLE_INVALID                0x00000060
481    {
482        x = "CKR_KEY_HANDLE_INVALID";
483    }
484    /* CKR_KEY_SENSITIVE was removed for v2.0 */
485    else if (rv == CKR_KEY_SIZE_RANGE)     //#define CKR_KEY_SIZE_RANGE                    0x00000062
486    {
487        x = "CKR_KEY_SIZE_RANGE";
488    } else if (rv == CKR_KEY_TYPE_INCONSISTENT)//#define CKR_KEY_TYPE_INCONSISTENT             0x00000063
489    {
490        x = "CKR_KEY_TYPE_INCONSISTENT";
491    }
492    /* CKR_KEY_NOT_NEEDED, CKR_KEY_CHANGED, CKR_KEY_NEEDED,
493    * CKR_KEY_INDIGESTIBLE, CKR_KEY_FUNCTION_NOT_PERMITTED,
494    * CKR_KEY_NOT_WRAPPABLE, and CKR_KEY_UNEXTRACTABLE are new for
495    * v2.0 */
496    else if (rv == CKR_KEY_NOT_NEEDED) //#define CKR_KEY_NOT_NEEDED                    0x00000064
497    {
498        x = "CKR_KEY_NOT_NEEDED";
499    } else if (rv == CKR_KEY_CHANGED) //#define CKR_KEY_CHANGED                       0x00000065
500    {
501        x = "CKR_KEY_CHANGED";
502    } else if (rv == CKR_KEY_NEEDED) //#define CKR_KEY_NEEDED                        0x00000066
503    {
504        x = "CKR_KEY_NEEDED";
505    } else if (rv == CKR_KEY_INDIGESTIBLE)//#define CKR_KEY_INDIGESTIBLE                  0x00000067
506    {
507        x = "CKR_KEY_INDIGESTIBLE";
508    } else if (rv == CKR_KEY_FUNCTION_NOT_PERMITTED)//#define CKR_KEY_FUNCTION_NOT_PERMITTED        0x00000068
509    {
510        x = "CKR_KEY_FUNCTION_NOT_PERMITTED";
511    } else if (rv == CKR_KEY_NOT_WRAPPABLE)//#define CKR_KEY_NOT_WRAPPABLE                 0x00000069
512    {
513        x = "CKR_KEY_NOT_WRAPPABLE";
514    } else if (rv == CKR_KEY_UNEXTRACTABLE)//#define CKR_KEY_UNEXTRACTABLE                 0x0000006A
515    {
516        x = "CKR_KEY_UNEXTRACTABLE";
517    } else if (rv == CKR_MECHANISM_INVALID)//#define CKR_MECHANISM_INVALID                 0x00000070
518    {
519        x = "CKR_SLOTCKR_MECHANISM_INVALID";
520    } else if (rv == CKR_MECHANISM_PARAM_INVALID)//#define CKR_MECHANISM_PARAM_INVALID           0x00000071
521    {
522        x = "CKR_MECHANISM_PARAM_INVALID";
523    }
524    /* CKR_OBJECT_CLASS_INCONSISTENT and CKR_OBJECT_CLASS_INVALID
525    * were removed for v2.0 */
526    else if (rv == CKR_OBJECT_HANDLE_INVALID)//#define CKR_OBJECT_HANDLE_INVALID             0x00000082
527    {
528        x = "CKR_OBJECT_HANDLE_INVALID";
529    } else if (rv == CKR_OPERATION_ACTIVE)//#define CKR_OPERATION_ACTIVE                  0x00000090
530    {
531        x = "CKR_OPERATION_ACTIVE";
532    } else if (rv == CKR_OPERATION_NOT_INITIALIZED)//#define CKR_OPERATION_NOT_INITIALIZED         0x00000091
533    {
534        x = "CKR_OPERATION_NOT_INITIALIZED";
535    } else if (rv == CKR_PIN_INCORRECT)//#define CKR_PIN_INCORRECT                     0x000000A0
536    {
537        x = "CKR_PIN_INCORRECT";
538    } else if (rv == CKR_PIN_INVALID)//#define CKR_PIN_INVALID                       0x000000A1
539    {
540        x = "CKR_PIN_INVALID";
541    } else if (rv == CKR_PIN_LEN_RANGE)//#define CKR_PIN_LEN_RANGE                     0x000000A2
542    {
543        x = "CKR_PIN_LEN_RANGE";
544    } /* CKR_PIN_EXPIRED and CKR_PIN_LOCKED are new for v2.0 */
545    else if (rv == CKR_PIN_EXPIRED)//#define CKR_PIN_EXPIRED                       0x000000A3
546    {
547        x = "CKR_PIN_EXPIRED";
548    } else if (rv == CKR_PIN_LOCKED)//#define CKR_PIN_LOCKED                        0x000000A4
549    {
550        x = "CKR_PIN_LOCKED";
551    } else if (rv == CKR_SESSION_CLOSED)//#define CKR_SESSION_CLOSED                    0x000000B0
552    {
553        x = "CKR_SESSION_CLOSED";
554    } else if (rv == CKR_SESSION_COUNT)//#define CKR_SESSION_COUNT                     0x000000B1
555    {
556        x = "CKR_SESSION_COUNT";
557    } else if (rv == CKR_SESSION_HANDLE_INVALID)//#define CKR_SESSION_HANDLE_INVALID            0x000000B3
558    {
559        x = "CKR_SESSION_HANDLE_INVALID";
560    } else if (rv == CKR_SESSION_PARALLEL_NOT_SUPPORTED)//#define CKR_SESSION_PARALLEL_NOT_SUPPORTED    0x000000B4
561    {
562        x = "CKR_SESSION_PARALLEL_NOT_SUPPORTED";
563    } else if (rv == CKR_SESSION_READ_ONLY)//#define CKR_SESSION_READ_ONLY                 0x000000B5
564    {
565        x = "CKR_SESSION_READ_ONLY";
566    } else if (rv == CKR_SESSION_EXISTS)//#define CKR_SESSION_EXISTS                    0x000000B6
567    {
568        x = "CKR_SESSION_EXISTS";
569    }
570    /* CKR_SESSION_READ_ONLY_EXISTS and
571    * CKR_SESSION_READ_WRITE_SO_EXISTS are new for v2.0 */
572
573    else if (rv == CKR_SESSION_READ_ONLY_EXISTS)//#define CKR_SESSION_READ_ONLY_EXISTS          0x000000B7
574    {
575        x = "CKR_SESSION_READ_ONLY_EXISTS";
576    } else if (rv == CKR_SESSION_READ_WRITE_SO_EXISTS)//#define CKR_SESSION_READ_WRITE_SO_EXISTS      0x000000B8
577    {
578        x = "CKR_SESSION_READ_WRITE_SO_EXISTS";
579    } else if (rv == CKR_SIGNATURE_INVALID)//#define CKR_SIGNATURE_INVALID                 0x000000C0
580    {
581        x = "CKR_SIGNATURE_INVALID";
582    } else if (rv == CKR_SIGNATURE_LEN_RANGE)//#define CKR_SIGNATURE_LEN_RANGE               0x000000C1
583    {
584        x = "CKR_SIGNATURE_LEN_RANGE";
585    } else if (rv == CKR_TEMPLATE_INCOMPLETE)//#define CKR_TEMPLATE_INCOMPLETE               0x000000D0
586    {
587        x = "CKR_TEMPLATE_INCOMPLETE";
588    } else if (rv == CKR_TEMPLATE_INCONSISTENT)//#define CKR_TEMPLATE_INCONSISTENT             0x000000D1
589    {
590        x = "CKR_TEMPLATE_INCONSISTENT";
591    } else if (rv == CKR_TOKEN_NOT_PRESENT)//#define CKR_TOKEN_NOT_PRESENT                 0x000000E0
592    {
593        x = "CKR_TOKEN_NOT_PRESENT";
594    } else if (rv == CKR_TOKEN_NOT_RECOGNIZED)//#define CKR_TOKEN_NOT_RECOGNIZED              0x000000E1
595    {
596        x = "CKR_TOKEN_NOT_RECOGNIZED";
597    } else if (rv == CKR_TOKEN_WRITE_PROTECTED)//#define CKR_TOKEN_WRITE_PROTECTED             0x000000E2
598    {
599        x = "CKR_TOKEN_WRITE_PROTECTED";
600    } else if (rv == CKR_UNWRAPPING_KEY_HANDLE_INVALID)//#define CKR_UNWRAPPING_KEY_HANDLE_INVALID     0x000000F0
601    {
602        x = "CKR_UNWRAPPING_KEY_HANDLE_INVALID";
603    } else if (rv == CKR_UNWRAPPING_KEY_SIZE_RANGE)//#define CKR_UNWRAPPING_KEY_SIZE_RANGE         0x000000F1
604    {
605        x = "CKR_UNWRAPPING_KEY_SIZE_RANGE";
606    } else if (rv == CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT)//#define CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT  0x000000F2
607    {
608        x = "CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT";
609    } else if (rv == CKR_USER_ALREADY_LOGGED_IN)//#define CKR_USER_ALREADY_LOGGED_IN            0x00000100
610    {
611        x = "CKR_USER_ALREADY_LOGGED_IN";
612    } else if (rv == CKR_USER_NOT_LOGGED_IN)//#define CKR_USER_NOT_LOGGED_IN                0x00000101
613    {
614        x = "CKR_USER_NOT_LOGGED_IN";
615    } else if (rv == CKR_USER_PIN_NOT_INITIALIZED)//#define CKR_USER_PIN_NOT_INITIALIZED          0x00000102
616    {
617        x = "CKR_USER_PIN_NOT_INITIALIZED";
618    } else if (rv == CKR_USER_TYPE_INVALID)//#define CKR_USER_TYPE_INVALID                 0x00000103
619    {
620        x = "CKR_USER_TYPE_INVALID";
621    }
622    /* CKR_USER_ANOTHER_ALREADY_LOGGED_IN and CKR_USER_TOO_MANY_TYPES
623    * are new to v2.01 */
624    else if (rv == CKR_USER_ANOTHER_ALREADY_LOGGED_IN)//#define CKR_USER_ANOTHER_ALREADY_LOGGED_IN    0x00000104
625    {
626        x = "CKR_USER_ANOTHER_ALREADY_LOGGED_IN";
627    } else if (rv == CKR_USER_TOO_MANY_TYPES)//#define CKR_USER_TOO_MANY_TYPES               0x00000105
628    {
629        x = "CKR_USER_TOO_MANY_TYPES";
630    } else if (rv == CKR_WRAPPED_KEY_INVALID)//#define CKR_WRAPPED_KEY_INVALID               0x00000110
631    {
632        x = "CKR_WRAPPED_KEY_INVALID";
633    } else if (rv == CKR_WRAPPED_KEY_LEN_RANGE)//#define CKR_WRAPPED_KEY_LEN_RANGE             0x00000112
634    {
635        x = "CKR_SLOT_CKR_WRAPPED_KEY_LEN_RANGE";
636    } else if (rv == CKR_WRAPPING_KEY_HANDLE_INVALID)//#define CKR_WRAPPING_KEY_HANDLE_INVALID       0x00000113
637    {
638        x = "CKR_WRAPPING_KEY_HANDLE_INVALID";
639    } else if (rv == CKR_WRAPPING_KEY_SIZE_RANGE)//#define CKR_WRAPPING_KEY_SIZE_RANGE           0x00000114
640    {
641        x = "CKR_WRAPPING_KEY_SIZE_RANGE";
642    } else if (rv == CKR_WRAPPING_KEY_TYPE_INCONSISTENT)//#define CKR_WRAPPING_KEY_TYPE_INCONSISTENT    0x00000115
643    {
644        x = "CKR_WRAPPING_KEY_TYPE_INCONSISTENT";
645    } else if (rv == CKR_RANDOM_SEED_NOT_SUPPORTED)//#define CKR_RANDOM_SEED_NOT_SUPPORTED         0x00000120
646    {
647        x = "CKR_RANDOM_SEED_NOT_SUPPORTED";
648    }
649    /* These are new to v2.0 */
650    else if (rv == CKR_RANDOM_NO_RNG)//#define CKR_RANDOM_NO_RNG                     0x00000121
651    {
652        x = "CKR_RANDOM_NO_RNG";
653    }
654    /* These are new to v2.11 */
655    else if (rv == CKR_DOMAIN_PARAMS_INVALID)//#define CKR_DOMAIN_PARAMS_INVALID             0x00000130
656    {
657        x = "CKR_DOMAIN_PARAMS_INVALID";
658    }
659    /* These are new to v2.0 */
660    else if (rv == CKR_BUFFER_TOO_SMALL)//#define CKR_BUFFER_TOO_SMALL                  0x00000150
661    {
662        x = "CKR_BUFFER_TOO_SMALL";
663    } else if (rv == CKR_SAVED_STATE_INVALID)//#define CKR_SAVED_STATE_INVALID               0x00000160
664    {
665        x = "CKR_SAVED_STATE_INVALID";
666    } else if (rv == CKR_INFORMATION_SENSITIVE)//#define CKR_INFORMATION_SENSITIVE             0x00000170
667    {
668        x = "CKR_INFORMATION_SENSITIVE";
669    } else if (rv == CKR_STATE_UNSAVEABLE)//#define CKR_STATE_UNSAVEABLE                  0x00000180
670    {
671        x = "CKR_STATE_UNSAVEABLE";
672    }
673    /* These are new to v2.01 */
674    else if (rv == CKR_CRYPTOKI_NOT_INITIALIZED)//#define CKR_CRYPTOKI_NOT_INITIALIZED          0x00000190
675    {
676        x = "CKR_CRYPTOKI_NOT_INITIALIZED";
677    } else if (rv == CKR_CRYPTOKI_ALREADY_INITIALIZED)    //#define CKR_CRYPTOKI_ALREADY_INITIALIZED      0x00000191
678    {
679        x = "CKR_CRYPTOKI_ALREADY_INITIALIZED";
680    } else if (rv == CKR_MUTEX_BAD)//#define CKR_MUTEX_BAD                         0x000001A0
681    {
682        x = "CKR_MUTEX_BAD";
683    } else if (rv == CKR_MUTEX_NOT_LOCKED)//#define CKR_MUTEX_NOT_LOCKED                  0x000001A1
684    {
685        x = "CKR_MUTEX_NOT_LOCKED";
686
687    } else if (rv == CKR_VENDOR_DEFINED)//#define CKR_VENDOR_DEFINED                    0x80000000
688    {
689        x = "CKR_VENDOR_DEFINED";
690    } else
691    {
692        x = "-1";
693    }
694
695    return x;
696}
Note: See TracBrowser for help on using the repository browser.