~esignature/esignature/bdoc

34 by joger quintero
.-Se añadió el directorio debian con las fuentes para debianizar.
1
/*
2
* FirmaXML
3
*
4
* Copyright (C) 2011 Victor Bravo (vbravo@cenditel.gob.ve),
5
* Antonio Araujo (aaraujo@cenditel.gob.ve),
6
* Pedro Buitrago (pbuitrago@cenditel.gob.ve),
7
* Rodolfo Sumoza (rsumoza@cenditel.gob.ve)
8
*
9
* CENDITEL Fundacion Centro Nacional de Desarrollo e Investigacion en
10
* Tecnologias Libres
11
*
12
* Este programa es software libre; Usted puede usarlo bajo los terminos de la
13
* licencia de software GPL version 2.0 de la Free Software Foundation.
14
*
15
* Este programa se distribuye con la esperanza de que sea util, pero SIN
16
* NINGUNA GARANTIA; tampoco las implicitas garantias de MERCANTILIDAD o
17
* ADECUACION A UN PROPOSITO PARTICULAR.
18
* Consulte la licencia GPL para mas detalles. Usted debe recibir una copia
19
* de la GPL junto con este programa; si no, escriba a la Free Software
20
* Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA.
21
*
22
*/
23
24
25
#ifndef SMARTCARD_H
26
#define SMARTCARD_H
27
28
#include <QObject>
29
30
#include <QLibrary>
31
32
#include "pkcs11.h"
33
#include <stdio.h>
34
#include <assert.h>
35
36
37
38
// funcion que retorna el tipo de error que puede ocurrir cuando se manipula la tarjeta inteligente en la QString x
39
QString returnErrorToQString(CK_RV rv);
40
41
42
/**
43
* Clase SmartCard
44
*
45
* Representa un objeto SmartCard para manipular elementos de una tarjeta inteligente.
46
*
47
*/
48
49
class SmartCard : public QObject
50
{
51
    Q_OBJECT
52
public:
53
    explicit SmartCard(QObject *parent = 0);
54
55
    virtual ~SmartCard();
56
57
58
59
    /**
60
    * Carga el driver de la tarjeta inteligente
61
    *
62
    * @return Retorna si se cargo el driver de la tarjeta correctamente
63
    *
64
    */
65
    bool loadDriver( const QString &driver );
66
67
    /**
68
    * Descarga el driver de la tarjeta inteligente
69
    *
70
    */
71
    void unloadDriver();
72
73
    /**
74
    * Inicializa criptoki
75
    *
76
    * @return Retorna si se inicializo correctamente el criptoki
77
    */
78
    bool initializeCriptoki();
79
80
    /**
81
    * Finaliza criptoki
82
    *
83
    */
84
    void finalize();
85
86
    /**
87
    * Abre una sesion
88
    *
89
    * @param Pin PIN de la tarjeta
90
    * @param slotID ID de slot
91
    * @param requiredlogin verdadero si se requiere una sesion con login
92
    * @return CK_SESSION_HANDLE handle de sesion
93
    */
94
    CK_SESSION_HANDLE openSession(const char * Pin, CK_SLOT_ID & slotID, bool requiredlogin = true);
95
96
97
    /**
98
    * Cierra una sesion
99
    *
100
    * @param hSession handle de la sesion abierta
101
    */
102
    void  closeSession(CK_SESSION_HANDLE hSession);
103
104
    // Reads objects
105
    /**
106
    *   Busca Objetos en la tarjeta
107
    *
108
    * @param hSession handle de la sesion abierta
109
    * @return Retorna si se leyeron correctamente los objetos de la tarjeta
110
    */
111
    bool readObjects(CK_SESSION_HANDLE hSession);
112
113
114
    /**
115
    * Busca un certificado
116
    *
117
    * @param hSession handle de la sesion abierta
118
    * @return Retorna si se encontraron certificados
119
    */
120
    bool searchCertificate(CK_SESSION_HANDLE hSession);
121
122
    /**
123
    * Funcion para consultar un atributo de un objeto PKCS11
124
    *
125
    * @param obj objeto PKCS11 sobre el cual ejecutar la consulta
126
    * @param type tipo del atributo a consultar
127
    * @param value puntero para almacenar el valor del atributo
128
    * @param size tamano del atributo
129
    * @param hSession manejador de sesion abierta en la tarjeta
130
    *
131
    * @return Retorna si consiguio el atributo del objeto
132
    */
133
    bool attribute( CK_OBJECT_HANDLE obj, CK_ATTRIBUTE_TYPE type, CK_VOID_PTR value, CK_ULONG &size, CK_SESSION_HANDLE hSession );
134
135
    /**
136
    * Funcion para obtener un atributo de un objeto PKCS11
137
    *
138
    * @param obj objeto PKCS11 sobre el cual ejecutar la consulta
139
    * @param type tipo del atributo a consultar
140
    * @param hSession manejador de sesion abierta en la tarjeta
141
    * @return Retorna el atributo del objeto en un QByteArray
142
    */
143
    QByteArray attribute( CK_OBJECT_HANDLE obj, CK_ATTRIBUTE_TYPE type, CK_SESSION_HANDLE hSession );
144
145
    /**
146
    * Funcion para encontrar un objeto PKCS11 en la tarjeta inteligente
147
    *
148
    * @param hSession manejador de sesion abierta en la tarjeta
149
    * @param cls clase de objeto
150
    * @return Retorna el CK_OBJECT_HANDLE del objeto correspondiente; en caso
151
    * contrario retorna CK_INVALID_HANDLE
152
    */
153
    CK_OBJECT_HANDLE findObject( CK_SESSION_HANDLE hSession, CK_OBJECT_CLASS cls );
154
155
    /**
156
    * Funcion para iniciar la operacion de decifrado
157
    *
158
    * @param hSession manejador de sesion abierta en la tarjeta
159
    * @param key clave privada
160
    * @return Retorna el CKR_OK en caso de ejecutar la operacion correcta
161
    */
162
    CK_RV decryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR mechanism, CK_OBJECT_HANDLE privateKey);
163
164
    /**
165
    * Funcion para ejecutar el descifrado de datos
166
    *
167
    * @param hSession manejador de sesion abierta en la tarjeta
168
    * @param data datos cifrados
169
    * @param dataLen longitud de los datos cifrados
170
    * @param buffer buffer para almancenar los datos descifrados
171
    * @param bufferLen longitud del buffer de datos descifrados
172
    * @return Retorna el CKR_OK en caso de ejecutar la operacion correcta
173
    */
174
    CK_RV decrypt(CK_SESSION_HANDLE hSession, CK_BYTE_PTR data, CK_ULONG dataLen, CK_BYTE_PTR buffer, CK_ULONG_PTR bufferLen);
175
176
177
    /**
178
    * Manejador de la biblioteca que implementa el PKCS11.
179
    *
180
    */
181
    QLibrary		lib;
182
183
    /**
184
    * Lista de funciones disponibles en la biblioteca PKCS11 implementada.
185
    *
186
    */
187
    CK_FUNCTION_LIST *f;
188
189
};
190
191
#endif // SMARTCARD_H