⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enginep11.h

📁 手机智能卡开发
💻 H
字号:
#ifndef ENGINEP11_H
#define	ENGINEP11_H
#include "cryptoki.h"
#include "swpkcs11t.h"
#include "pkcs11.h"
#include "pkcs11t.h"
#include "bca_def.h"
#include "bca_container.h"
#include "engine_pub.h"
#include <openssl/engine.h>


#ifdef WIN32
#define P11_SOFT_CERTFILE GetFilePath(p11_certpath,"\\cert_p11.dat") 
#else
#define P11_SOFT_CERTFILE "/usr/BJCAROOT/Trust/cert_p11.dat"
#endif
typedef struct p11_cert
{
	unsigned char IsExist;
	unsigned char ContName[256];
	unsigned char KeyUse;
	int CertLen;
	unsigned char Cert[MAX_CERT_LEN];	
}P11_CERT,*P11_CERT_PTR;


int PKCS11_Initialize();
int PKCS11_Finalize();

int PKCS11_RsaEnc(CK_OBJECT_CLASS class_pri,
				  char *continname,unsigned long continnameLen,char cKeyUse,
				  unsigned char *from,unsigned long flen,
				  unsigned char *to,unsigned long *pOutLen,
				  unsigned long padding);
int PKCS11_RsaDec(CK_OBJECT_CLASS class_pri,char *continname,unsigned long continnameLen,char cKeyUse,
				  unsigned char *from,unsigned long flen,
				  unsigned char *to,unsigned long *pOutLen,
				  unsigned long padding);
int PKCS11_RsaVerify(CK_BYTE_PTR modulus,CK_ULONG modulusLen,
					 CK_BYTE_PTR pe,CK_ULONG peLen,
					 CK_BYTE_PTR pData,
					 CK_ULONG ulDataLen,
					 CK_BYTE_PTR pSignature,
					 CK_ULONG ulSignatureLen
					 );
int PKCS11_RsaSign(char *continname
				   ,unsigned long continnameLen,
				   char cKeyUse,
				   CK_BYTE_PTR pData,
				   CK_ULONG ulDataLen,
				   CK_BYTE_PTR pSignature,
				   CK_ULONG_PTR pulSignatureLen
				   );
/****************************************************************************
 *			 Constants used when creating the ENGINE						*
 ***************************************************************************/
static const char *engine_p11_id = "pkcs11";
static const char *engine_p11_name = "pkcs11 engine support(by eboy)";


/****************************************************************************
 *			Functions to handle the engine									*
 ***************************************************************************/
static int p11_destroy(ENGINE *e);
static int p11_init(ENGINE *e);
static int p11_finish(ENGINE *e);


/****************************************************************************
 *			Engine commands													*
*****************************************************************************/
/*
static const ENGINE_CMD_DEFN p11_cmd_defns[] = 
{
	{0, NULL, NULL, 0}
};
*/

/****************************************************************************
 *			RSA functions													*
*****************************************************************************/



/****************************************************************************
 *			Symetric cipher and digest function registrars					*
*****************************************************************************/
static int  p11_digest_sign(int type,
						 const unsigned char *m, unsigned int m_length,
						 unsigned char *sigret, unsigned int *siglen, const RSA *rsa);

static const EVP_MD p11_digest_sha1 =
{
		NID_sha1,
		NID_sha1WithRSAEncryption,
		20,
		0,
		NULL,
		NULL,
		NULL,
		NULL,
		NULL,
		EVP_PKEY_RSA_method,
		64,
		sizeof(MD5_CTX)
};


static int p11_ciphers(ENGINE *e, const EVP_CIPHER **cipher,
						  const int **nids, int nid);

static int p11_digests(ENGINE *e, const EVP_MD **digest,
						  const int **nids, int nid);


static int p11_cipher_nids[] ={ NID_des_cbc, NID_des_ede3_cbc, NID_desx_cbc, 0 };
static int p11_digest_nids[] ={ 0, 0, NID_sha1 };



void ERR_load_P11_strings();



//__declspec(dllexport)

int ENGINE_load_pkcs11(void);

int P11_Engine_SetRSA(RSA *rsa,char *continname,char cKeyUse);

void P11_Engine_SetDllName(char *name);

int P11_Engine_SetLoginPass(unsigned char *pass,unsigned long len);

int P11_Engine_ChangePass(unsigned char *oldPin,unsigned long oldPinLen,unsigned char *newPin,unsigned long newPinLen);

int PKCS11_ImportUserCert(
						  unsigned char *containerName,
						  unsigned long containerNameLen,
						  unsigned long keyUsage,
						  unsigned char *certificate,
						  unsigned long certificateLen);
int PKCS11_ImportRSA(unsigned char *containerName,
					 unsigned long containerNameLen,
					 unsigned long keyUsage,
					 RSA *rsa);

int PKCS11_ExportUserCert(
						  unsigned char *containerName,
						  unsigned long containerNameLen,
						  unsigned long keyUsage,
						  unsigned char *certificate,
						  unsigned long *certificateLen);
int PKCS11_EnumUsrCertificates(BCA_USR_CERT_ENUMLIST *usrCerts);
int PKCS11_EnumUsrKeyPairs(BCA_USR_KEYPAIR_ENUMLIST *usrKeyPairs);
int PKCS11_GenRsaKeyPair(
						 unsigned char *containerName,       
						 unsigned long containerNameLen,
						 unsigned long keyUsage,             
						 unsigned long modulusLen,	
						 unsigned long exportFlag,
						 unsigned char *rsaKeyPairPin,
						 unsigned long rsaKeyPairPinLen);
int PKCS11_RsaPubKeyEnc(CK_BYTE_PTR modulus,CK_ULONG modulusLen,
						CK_BYTE_PTR pe,CK_ULONG peLen,
						CK_BYTE_PTR pInData,
						CK_ULONG ulInDataLen,
						CK_BYTE_PTR pOutData,
						CK_ULONG *pulOutDataLen
						);
int PKCS11_RsaPubKeyDec(CK_BYTE_PTR modulus,CK_ULONG modulusLen,
						CK_BYTE_PTR pe,CK_ULONG peLen,
						CK_BYTE_PTR pInData,
						CK_ULONG ulInDataLen,
						CK_BYTE_PTR pOutData,
						CK_ULONG *pulOutDataLen
						);

int PKCS11_RsaSign_0(RSA *rsa,
					 CK_BYTE_PTR pData,
					 CK_ULONG ulDataLen,
					 CK_BYTE_PTR pSignature,
					 CK_ULONG_PTR pulSignatureLen
					 );
int PKCS11_FindRSA(unsigned char *containerName,       
				   unsigned long containerNameLen,
				   unsigned long keyUsage);
int PKCS11_FindCert(unsigned char *containerName,       
					unsigned long containerNameLen,
					unsigned long keyUsage);
int P11SoftCert_Init();
int P11SoftCert_Read(char *name,unsigned char cKeyuse,unsigned char *derCert,unsigned long *derCertLen);
int P11SoftCert_Insert(char *name,unsigned char cKeyuse,unsigned char *derCert,unsigned long derCertLen);

int P11SoftCert_Enum(BCA_USR_CERT_ENUMLIST *usrCerts);
char *P11_WstRSALableConv(char *pubLable,unsigned long pubLableLen);
char * P11_DatechRSALableConv(char *pubLable,unsigned long pubLableLen);
 
int PKCS11_GenRandom(unsigned long randLen,unsigned char *rand);

int PKCS11_ReadData(char *lable,unsigned char *data,unsigned long *dataLen);
int PKCS11_WriteData(char *lable,unsigned char *data,unsigned long dataLen);
int PKCS11_DelData(char *lable);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -