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 |