Sophie

Sophie

distrib > Mandriva > 2011.0 > i586 > media > contrib-release-debug > by-pkgid > 55919a653de3b6b92cb6be1402a5d54d > files > 123

clauer-debug-3.0.2-3mdv2011.0.i586.rpm


/*

                        LICENCIA

1. Este programa puede ser ejecutado sin ninguna restricción
   por parte del usuario final del mismo.

2. La  Universitat Jaume I autoriza la copia y  distribución
   del programa con cualquier fin y por cualquier medio  con
   la  única limitación de que, de forma  apropiada, se haga
   constar  en  cada  una  de las copias la  autoría de esta  
   Universidad  y  una reproducción  exacta de las presentes 
   condiciones   y   de   la   declaración  de  exención  de 
   responsabilidad.

3. La  Universitat  Jaume  I autoriza  la  modificación  del
   software  y  su  redistribución  siempre que en el cambio
   del  código  conste la autoría de la Universidad respecto  
   al  software  original  y  la  url de descarga del código
   fuente  original. Además, su denominación no debe inducir 
   a  error  o  confusión con el original. Cualquier persona
   o  entidad  que  modifique  y  redistribuya  el  software 
   modificado deberá  informar de tal circunstancia mediante
   el  envío  de  un  mensaje  de  correo  electrónico  a la 
   dirección  clauer@uji.es  y  remitir una copia del código 
   fuente modificado.

4. El  código  fuente  de todos los programas amparados bajo 
   esta licencia  está  disponible para su descarga gratuita
   desde la página web http//:clauer.uji.es.

5. El hecho en sí del uso, copia o distribución del presente 
   programa implica la aceptación de estas condiciones.

6. La  copia y distribución del programa supone la extensión 
   de las presentes condiciones al destinatario.
   El  distribuidor no puede imponer condiciones adicionales
   que limiten las aquí establecidas.

       DECLARACIÓN DE EXENCIÓN DE RESPONSABILIDAD

Este  programa  se  distribuye  gratuitamente. La Universitat 
Jaume  I  no  ofrece  ningún  tipo de garantía sobre el mismo
ni acepta ninguna responsabilidad por su uso o  imposibilidad
de uso.

*/

#ifndef __CLAUER_H__
#define __CLAUER_H__ 

#include "pkcs11.h"
#include "mechanism.h" 
#include "lobjeto.h"

#ifdef DEBUG
#include "log.h"
#endif
#include "certx509.h"
#include "clvrsa.h"
#include "clvprvda.h"
#include "threads.h"
#include <rsa.h>
#include <bn.h>

#include <CRYPTOWrapper/CRYPTOWrap.h>
#include <LIBRT/libRT.h>


// TODO: Thats have to do with openssl
//       should it be embedded into CRYPTOWrapper? 
// ----------------------
#include <openssl/bio.h>
#include <openssl/x509.h>
#include <openssl/x509v3.h>
#include <openssl/pem.h>
#include <rsa.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
// ----------------------


#define CERT_OWN   0
#define CERT_CA    1
#define CERT_ROOT  2

#if defined(LINUX)
	
#define BOOL unsigned char
#define BYTE unsigned char
#define LPTSTR char *
#define DWORD unsigned int

// Funci~n de windows, equivalente para Linux en
// CryptoWrapper
//
#define SecureZeroMemory CRYPTO_SecureZeroMemory

// Defines de windows para compatibilidad en
// Linux.

// Obtenido de windows.h
#define MAX_PATH 260

// Obtenidos de wincrypt.h
#define ALG_CLASS_KEY_EXCHANGE  (5 << 13)
#define ALG_CLASS_SIGNATURE     (1 << 13)
#define ALG_TYPE_RSA            (2 << 9)
#define ALG_SID_RSA_ANY          0

#define CALG_RSA_KEYX  (ALG_CLASS_KEY_EXCHANGE|ALG_TYPE_RSA|ALG_SID_RSA_ANY) // 0x0000a400
#define CALG_RSA_SIGN  (ALG_CLASS_SIGNATURE|ALG_TYPE_RSA|ALG_SID_RSA_ANY)    // 0x00002400
#endif

class Clauer
{
 public:
    Clauer (CK_CHAR *label,
	    CK_CHAR *manufacturerID,
	    CK_CHAR *model,
	    CK_CHAR *serialNumber,
	    CK_FLAGS flags,
	    CK_ULONG ulMaxSessionCount,
	    CK_ULONG ulSessionCount,
	    CK_ULONG ulMaxRwSessionCount,
	    CK_ULONG ulRwSessionCount,
	    CK_ULONG ulMaxPinLen,
	    CK_ULONG ulMinPinLen,
	    CK_ULONG ulTotalPublicMemory,
	    CK_ULONG ulFreePublicMemory,
	    CK_ULONG ulTotalPrivateMemory,
	    CK_ULONG ulFreePrivateMemory,
	    CK_VERSION *hardwareVersion,
	    CK_VERSION *firmwareVersion,
	    CK_CHAR *utcTime);			// Constructor
    ~Clauer (void);	                        // Destructor

    CK_RV C_GetTokenInfo (CK_TOKEN_INFO_PTR pInfo);
    CK_RV C_GetMechanismList (CK_MECHANISM_TYPE_PTR pMechanismList, CK_ULONG_PTR pulCount);
    CK_RV C_GetMechanismInfo(CK_MECHANISM_TYPE type, CK_MECHANISM_INFO_PTR pInfo);
    CK_RV C_SetPIN(CK_SESSION_HANDLE hSession, CK_CHAR_PTR pOldPin, CK_ULONG ulOldLen,
	CK_CHAR_PTR pNewPin, CK_ULONG ulNewLen);
	
    CK_RV C_Login(CK_CHAR_PTR _pin, CK_ULONG _pinLen, listaObjetos * pListaObjetos);
    CK_RV C_Logout(void);
    CK_RV C_CloseSession(void);
	
    CK_RV LoadClauerObjects(listaObjetos * pListaObjetos );
    CK_RV UnloadClauerObjects(listaObjetos * pListaObjetos);
	
    CK_RV C_CreateObject(
			 CK_SESSION_HANDLE hSession,    /* the session's handle */
			 CK_ATTRIBUTE_PTR  pTemplate,   /* the object's template */
			 CK_ULONG          ulCount,     /* attributes in template */
			 CK_OBJECT_HANDLE_PTR phObject,  /* receives new object's handle. */
			 listaObjetos * pListaObjetos
			 );

	CK_RV C_DestroyObject( CK_OBJECT_HANDLE  hObject, listaObjetos * pListaObjetos );

    CK_RV C_GenerateKeyPair(
			    CK_SESSION_HANDLE    hSession,                    /* the session's handle */
			    CK_MECHANISM_PTR     pMechanism,                  /* the key gen. mech. */
			    CK_ATTRIBUTE_PTR     pPublicKeyTemplate,          /* pub. attr. template */
			    CK_ULONG             ulPublicKeyAttributeCount,   /* # of pub. attrs. */
			    CK_ATTRIBUTE_PTR     pPrivateKeyTemplate,         /* priv. attr. template */
			    CK_ULONG             ulPrivateKeyAttributeCount,  /* # of priv. attrs. */
			    CK_OBJECT_HANDLE_PTR phPublicKey,                 /* gets pub. key handle */
			    CK_OBJECT_HANDLE_PTR phPrivateKey,                /* gets priv. key handle */
			    listaObjetos * pListaObjetos                      /* Pointer to current object list*/
			    );

    CK_ULONG get_ulMaxSessionCount (void);
    CK_ULONG get_ulSessionCount (void);
    void set_ulSessionCount (CK_ULONG value);

    int getActiveClauer( char activeClauer[MAX_PATH_LEN] );
    
    CK_RV getRSAKey( unsigned char * keyId, RSA ** rsa, ID_ACCESS_HANDLE * th_id_handle );
   
    CK_RV _insertCertificateObjectAndPublicKey( unsigned char * block, listaObjetos * pListaObjetos,   
						CK_BYTE *  identificador, int tamId, CK_OBJECT_HANDLE_PTR phObject,
						unsigned char * certId, char ** label, int insertPrivKey  );
    
    int _insertKeyObject( listaObjetos * pListaObjetos, CK_BYTE * identificador, 
			  int tamIdentificador, unsigned char * certId, CK_OBJECT_HANDLE_PTR phObject,
			  CK_ATTRIBUTE_PTR pPrivateKeyTemplate, CK_ULONG ulPrivateKeyAttributeCount,
			  char * label);	

    CK_RV _insertPublicKeyObject( RSA * rsa, unsigned char * identificador, int tamId, unsigned char realId[20],
				  listaObjetos * pListaObjetos, CK_OBJECT_HANDLE_PTR phObject,
				  CK_ATTRIBUTE_PTR pPublicKeyTemplate, CK_ULONG ulPublicKeyAttributeCount );
	
    CK_RV _insertOpensslRsaKeyObject(RSA * rsa,  listaObjetos * pListaObjetos, 
				     unsigned char * cka_id, int cka_id_size,  
				     CK_OBJECT_HANDLE_PTR phObject, unsigned char realId[20],
				     CK_ATTRIBUTE_PTR pPrivateKeyTemplate, CK_ULONG ulPrivateKeyAttributeCount);
	    

    CK_CHAR *get_label (void);
    CK_CHAR *get_manufacturerID (void);
    CK_CHAR *get_model (void);
    CK_CHAR *get_serialNumber (void);
    CK_FLAGS get_flags (void);
    CK_ULONG get_ulMaxRwSessionCount (void);
    CK_ULONG get_ulRwSessionCount (void);
    CK_ULONG get_ulMaxPinLen (void);
    CK_ULONG get_ulMinPinLen (void);
    CK_ULONG get_ulTotalPublicMemory (void);
    CK_ULONG get_ulFreePublicMemory (void);
    CK_ULONG get_ulTotalPrivateMemory (void);
    CK_ULONG get_ulFreePrivateMemory (void);
    CK_VERSION get_hardwareVersion (void);
    CK_VERSION get_firmwareVersion (void);
    CK_CHAR *get_utcTime (void);
	bool isLogged (void);
      
 protected:
    CK_RV _deleteCert( unsigned char * id, listaObjetos * pListaObjetos );
    int  _ExistsCertificate( unsigned char * id );
    CK_CHAR label[32];
    CK_CHAR manufacturerID[32];
    CK_CHAR model[16];
    CK_CHAR serialNumber[16];
    CK_FLAGS flags;
    CK_ULONG ulMaxSessionCount;
    CK_ULONG ulSessionCount;
    CK_ULONG ulMaxRwSessionCount;
    CK_ULONG ulRwSessionCount;
    CK_ULONG ulMaxPinLen;
    CK_ULONG ulMinPinLen;
    CK_ULONG ulTotalPublicMemory;
    CK_ULONG ulFreePublicMemory;
    CK_ULONG ulTotalPrivateMemory;
    CK_ULONG ulFreePrivateMemory;
    CK_VERSION hardwareVersion;
    CK_VERSION firmwareVersion;
    CK_CHAR utcTime[16];
    bool _isLogged;
    bool _objectsLoaded;
    bool _initialized;
    char _pin[MAX_PIN_LEN];
    char _actualClauer[MAX_PATH_LEN];
    char _lastClauerId[CLAUER_ID_LEN];
    Mechanism * pMechanism;	
    Mechanism * pMechanism_keyGen;	
	Mechanism * pMechanism_SHA1_PKCS;
};

inline bool Clauer::isLogged(void)
{
 return _isLogged;
}

// Get Methods 
inline CK_CHAR *Clauer::get_label (void)
{
    return label;
}

inline CK_CHAR *Clauer::get_manufacturerID (void)
{
    return manufacturerID;
}

inline CK_CHAR *Clauer::get_model (void)
{
    return model;
}

inline CK_CHAR *Clauer::get_serialNumber (void)
{
    return serialNumber;
}

inline CK_FLAGS Clauer::get_flags (void)
{
    return flags;
}

inline CK_ULONG Clauer::get_ulMaxSessionCount (void)
{
    return ulMaxSessionCount;
}

inline CK_ULONG Clauer::get_ulSessionCount (void)
{
    return ulSessionCount;
}

inline void Clauer::set_ulSessionCount (CK_ULONG value)
{
    ulSessionCount = value;
}

inline CK_ULONG Clauer::get_ulMaxRwSessionCount (void)
{
    return ulMaxRwSessionCount;
}

inline CK_ULONG Clauer::get_ulRwSessionCount (void)
{
    return ulRwSessionCount;
}

inline CK_ULONG Clauer::get_ulMaxPinLen (void)
{
    return ulMaxPinLen;
}

inline CK_ULONG Clauer::get_ulMinPinLen (void)
{
    return ulMinPinLen;
}

inline CK_ULONG Clauer::get_ulTotalPublicMemory (void)
{
    return ulTotalPublicMemory;
}

inline CK_ULONG Clauer::get_ulFreePublicMemory (void)
{
    return ulFreePublicMemory;
}

inline CK_ULONG Clauer::get_ulTotalPrivateMemory (void)
{
    return ulTotalPrivateMemory;
}

inline CK_ULONG Clauer::get_ulFreePrivateMemory (void)
{
    return ulFreePrivateMemory;
}

inline CK_VERSION Clauer::get_hardwareVersion (void)
{
    return hardwareVersion;
}

inline CK_VERSION Clauer::get_firmwareVersion (void)
{
    return firmwareVersion;
}

inline CK_CHAR *Clauer::get_utcTime (void)
{
    return utcTime;
}

#endif