Sophie

Sophie

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

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 __CRYPTOWRAPPER_H__
#define __CRYPTOWRAPPER_H__

#ifdef WIN32
#include <windows.h>
#elif defined(LINUX)
#include <pthread.h>
#endif

#include <string.h>

#ifdef __cplusplus
extern "C" {
#endif

#define TAM_BLOQUE	10240 /* bytes */

#define CRYPTO_DESCIFRAR		0
#define CRYPTO_CIFRAR			1

#define ALGID_SHA1	0
#define ALGID_MD5	1

#define TAM_SHA1	20 /* bytes */
#define TAM_MD5		16 /* bytes */

/*
 * Algoritmos de cifrado disponibles. Es importante que los números
 * asignados sean consecutivos.
 */

#define CRYPTO_CIPHER_AES_128_CBC   0
#define CRYPTO_CIPHER_AES_192_CBC   1
#define CRYPTO_CIPHER_AES_256_CBC   2

#define CRYPTO_CIPHER_DES_EDE3_CBC  3

/*
 * Tipos de datos
 */




typedef struct CRYPTO_KEY {
    unsigned char *llavePrivada;
    int tamLlavePrivada;   /* en bytes */
} CRYPTO_KEY;


typedef struct DN {
	char *C;
	char *ST;
	char *L;
	char *O;
	char *OU;
	char *CN;
	char *email;
} DN;


#if defined(LINUX)

typedef unsigned int ALG_ID;

typedef struct {
	unsigned int magic;
	unsigned int bitlen;
	unsigned int pubexp;
} RSAPUBKEY;

typedef struct {
	unsigned char bType;
	unsigned char bVersion;
	short reserved;
	ALG_ID aiKeyAlg;
} BLOBHEADER;

#define PRIVATEKEYBLOB 0x7
#define DWORD unsigned int

#endif


/*
 * Prototipos
 */

int CRYPTO_Ini (void);
int CRYPTO_Fin (void);
    
int CRYPTO_KEY_New  ( int algoritmo,  CRYPTO_KEY *cryptoKey);
int CRYPTO_KEY_Free ( CRYPTO_KEY *cryptoKey);
int CRYPTO_Key_Set  ( CRYPTO_KEY *cryptoKey,  unsigned char *llavePrivada,  int tamLlavePrivada);

/* Simetric cipher functions */

int CRYPTO_Descifrar ( CRYPTO_KEY *cryptoKey,  
		       int padding,  
		       int algoritmo,  
		       unsigned char *bufferCifrado,  
		       int tamBufferCifrado,  
		       unsigned char *bufferDescifrado,  
		       int *tamBufferDescifrado);

int CRYPTO_Cifrar ( CRYPTO_KEY *cryptoKey,
		    int padding,  
		    int algoritmo,  
		    unsigned char *buffer,  
		    int tamBuffer,  
		    unsigned char *bufferCifrado,  
		    int *tamBufferCifrado);

/* PBE functions */

int CRYPTO_PBE_Descifrar ( char * password,  
			   unsigned char *salt,
                           unsigned long saltLen,
                           unsigned long iterCount,
			   int padding,  
			   int algoritmo,  
			   unsigned char *bloqueCifrado,  
			   int tamBloqueCifrado,  
			   unsigned char *bloqueDescifrado,  
			   int *tamBloqueDescifrado);

int CRYPTO_PBE_Cifrar ( char * password,  
			unsigned char *salt,
                        unsigned long saltLen,
                        unsigned long iterCount,
			int padding,  
			int algoritmo,  
			unsigned char *bloqueClaro,  
			int tamBloqueClaro, 
			unsigned char *bloqueCifrado, 
			int *tamBloqueCifrado);

/* Message digest functions */

int CRYPTO_Hash    ( int algID,  unsigned char *data,  int dataLen,  unsigned char *hash);

int CRYPTO_Sign	   ( int algID,  
		     unsigned char *data,  
		     unsigned int dataLen, 
		     unsigned char *llavePrivada, 
		     unsigned int tamLlavePrivada, 
		     char * password, 
		     unsigned char *signedData, 
		     unsigned int *signedDataLen );

int CRYPTO_Verify ( int algID,  
		    unsigned char *data, 
		    unsigned int dataLen, 
		    unsigned char *signedData, 
		    unsigned int signedDataLen, 
		    unsigned char *llavePublica, 
		    unsigned int tamLlavePublica );

/* Miscellaneous functions */

int CRYPTO_Random ( int bytes,  
		    unsigned char *bufferRandom );

int CRYPTO_GenerarParLlaves ( char * password, 
			      int bits,  
			      unsigned char **llavePublica, 
			      long *tamLlavePublica,  
			      unsigned char **llavePrivada,  
			      long *tamLlavePrivada);

/* PKCS12 functions */

int CRYPTO_PKCS12_VerificarPassword ( unsigned char *pkcs12,  unsigned long tamPkcs12,  char * pwd);

int CRYPTO_PKCS12_CambiarPassword   ( unsigned char *p12Original,  unsigned long tamP12,  char * pwdOriginal, char * pwdNueva);

int CRYPTO_ParsePKCS12 ( unsigned char *pkcs12,  unsigned long tamPkcs12,  char * pwd,
		         unsigned char *llavePrivada,  unsigned long *tamLlavePrivada,
			 unsigned char *certLlave,  unsigned long *tamCertLlave,
			 unsigned char *certs,  unsigned long *tamCerts, unsigned long *numCerts,
			 char *friendlyNameCert,  unsigned long *tamFriendlyNameCert);

int CRYPTO_PKCS12_Crear	( unsigned char *llavePrivada, unsigned long tamPrivada, char * pwdLlavePrivada,
			  unsigned char *certAsociado, unsigned long tamCert,
			  unsigned char *certsRaiz, unsigned long *tamCertsRaiz, int numRaiz,
			  char * pwd,
			  char *friendlyName,
			  unsigned char *pkcs12,
			  unsigned long *tamPKCS12);

/* Certificate functions 
 */

int CRYPTO_CERT_PEM_Id	       ( unsigned char *certPEM, unsigned long tam, unsigned char id[20] );
int CRYPTO_CERT_Cmp	           ( unsigned char *cert_a,  unsigned long tamCertA,  unsigned char *cert_b,  unsigned long tamCertB );
int CRYPTO_CERT_SubjectIssuer  ( unsigned char *cert, unsigned long tamCert, DN *subject, DN *issuer );
int CRYPTO_X509_EsRoot	       ( unsigned char *cert, unsigned long tamCert );
int CRYPTO_X509_Get_KeyUsage   ( unsigned char *cert, unsigned long tamCert, unsigned long *ex_kusage );
int CRYPTO_X509_DER2PEM        ( unsigned char *derCert, unsigned long tamDER, unsigned char *pemCert, unsigned long *tamPEM);
int CRYPTO_X509_PEM2DER        ( unsigned char *pemCert, unsigned long tamPEM, unsigned char *derCert, unsigned long *tamDER);
int CRYPTO_X509_FingerPrint    ( unsigned char *certPEM, unsigned long tam, int mdAlg, unsigned char *fingerPrint );

/* Distinguished name functions
 */

DN *CRYPTO_DN_New (void);
int CRYPTO_DN_Free(DN *dn);
int CRYPTO_DN_Limpiar(DN *dn);
int CRYPTO_DN_Igual (DN *dn1, DN*dn2);

/* Utility functions
 */

char * PASSWORD_Nueva    (char *password);
void   PASSWORD_Destruir (char * *password);

#ifdef WIN32
#define CRYPTO_SecureZeroMemory(b,s)  SecureZeroMemory(b,s)
#else
void   CRYPTO_SecureZeroMemory ( void *buf, unsigned long size );
#endif

void   CRYPTO_ByteOrder        ( unsigned char *in, int tamIn );
int    CRYPTO_LLAVE_PEM_Id     ( unsigned char *llavePEM, unsigned long tam, int privada, char * pwd, unsigned char id[20] );

void OSSL_LockingCallback (int mode, int type, const char *file, int line);
int  OSSL_PasswordCallback (char *buf, int size, int rwflag, void *userdata);


int CRYPTO_LLAVE2BLOB (unsigned char *llavePrivada, unsigned long tamLlavePrivada,
			char * pwd, unsigned long alg, 
			unsigned char *blob, unsigned long *tamBlob);

int CRYPTO_BLOB2LLAVE ( unsigned char *blob, unsigned long tamBlob,
	                    unsigned char *llave, unsigned long *tamLlave );


#ifndef WIN32
unsigned long OSSL_ThreadId (void);
#endif

/* Los key Usage. Un mapeado de nombres directamente del OpenSSL
 */

#define CRYPTO_KU_DIGITAL_SIGNATURE    0x0080
#define CRYPTO_KU_NON_REPUDIATION      0x0040
#define CRYPTO_KU_KEY_ENCIPHERMENT     0x0020
#define CRYPTO_KU_DATA_ENCIPHERMENT    0x0010
#define CRYPTO_KU_KEY_AGREEMENT        0x0008
#define CRYPTO_KU_KEY_CERT_SIGN        0x0004
#define CRYPTO_KU_CRL_SIGN             0x0002
#define CRYPTO_KU_ENCIPHER_ONLY        0x0001
#define CRYPTO_KU_DECIPHER_ONLY        0x8000

/* Los extended key usage
 */

#define CRYPTO_XKU_SSL_SERVER          0x1
#define CRYPTO_XKU_SSL_CLIENT          0x2
#define CRYPTO_XKU_SMIME               0x4
#define CRYPTO_XKU_CODE_SIGN           0x8
#define CRYPTO_XKU_SGC                 0x10
#define CRYPTO_XKU_OCSP_SIGN           0x20
#define CRYPTO_XKU_TIMESTAMP           0x40
#define CRYPTO_XKU_DVCS                0x80

/************************************************************************************/
/* Códigos de error
 */

#define ERR_CW_NO                               0
#define ERR_CW_SI                               1
#define ERR_CW_IMPOSIBLE_DESCIFRAR_BLOQUE       2
#define ERR_CW_FIRMA_CORRECTA                   3
#define ERR_CW_OUT_OF_MEMORY			4
#define ERR_CW_INVALID_PARAMETER                5

#ifdef __cplusplus
}
#endif

#endif