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

📄 pkcs11-internal.h

📁 读写Smart卡加解密接口的程序
💻 H
字号:
/* pkcs11.h *//* Written by Olaf Kirch <okir@lst.de> *//* ==================================================================== * Copyright (c) 1999 The OpenSSL Project.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. All advertising materials mentioning features or use of this *    software must display the following acknowledgment: *    "This product includes software developed by the OpenSSL Project *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to *    endorse or promote products derived from this software without *    prior written permission. For written permission, please contact *    licensing@OpenSSL.org. * * 5. Products derived from this software may not be called "OpenSSL" *    nor may "OpenSSL" appear in their names without prior written *    permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following *    acknowledgment: *    "This product includes software developed by the OpenSSL Project *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com).  This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */#ifndef _PKCS11_INTERNAL_H#define _PKCS11_INTERNAL_H#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <openssl/bio.h>#include <openssl/err.h>#include <openssl/x509.h>#include <opensc/pkcs11.h>#ifdef __cplusplusextern "C" {#endif/* get some structures for local code to handle pkcs11 data readily *//* Use the first free lib ID available */#define ERR_LIB_PKCS11	42#define PKCS11err(f,r) \ERR_PUT_error(ERR_LIB_PKCS11,(f),(r),__FILE__,__LINE__)/* * The purpose of this library is to provide a simple PKCS11 * interface to OpenSSL application that wish to use a previously * initialized card (as opposed to initializing it, etc). * * I am therefore making some simplifying assumptions: * *  -	no support for any operations that alter the card, *  	i.e. readonly-login *//* PKCS11 key object (public or private) */typedef struct PKCS11_key_st {	char *label;	unsigned char *id;	int id_len;	unsigned char isPrivate;	/* private key present? */	unsigned char needLogin;	/* login to read private key? */	EVP_PKEY *evp_key;		/* initially NULL, need to call PKCS11_load_key */	void *_private;} PKCS11_KEY;/* PKCS11 certificate object */typedef struct PKCS11_cert_st {	char *label;	unsigned char *id;	int id_len;	X509 *x509;	void *_private;} PKCS11_CERT;/* PKCS11 token, e.g. smart card or USB key */typedef struct PKCS11_token_st {	char *label;	char *manufacturer;	char *model;	unsigned char initialized;	unsigned char loginRequired;	unsigned char userPinSet;	unsigned char readOnly;	void *_private;} PKCS11_TOKEN;/* PKCS11 slot, e.g. card reader */typedef struct PKCS11_slot_st {	char *manufacturer;	char *description;	unsigned char removable;	PKCS11_TOKEN *token;	/* NULL if no token present */	void *_private;} PKCS11_SLOT;typedef struct PKCS11_ctx_st {	char *manufacturer;	char *description;	void *_private;} PKCS11_CTX;extern PKCS11_CTX *PKCS11_CTX_new(void);extern int PKCS11_CTX_load(PKCS11_CTX *, const char *ident);extern void PKCS11_CTX_unload(PKCS11_CTX *);extern void PKCS11_CTX_free(PKCS11_CTX *);/* Get a list of all slots */extern int PKCS11_enumerate_slots(PKCS11_CTX *, PKCS11_SLOT **, unsigned int *);/* Find the first slot with a token */extern PKCS11_SLOT *PKCS11_find_token(PKCS11_CTX *);/* Authenticate to the card */extern int PKCS11_login(PKCS11_SLOT *, int so, char *pin);extern int PKCS11_logout(PKCS11_SLOT *);/* Get a list of all keys associated with this token */extern int PKCS11_enumerate_keys(PKCS11_TOKEN *, PKCS11_KEY **, unsigned int *);/* Get the key type (as EVP_PKEY_XXX) */extern int PKCS11_get_key_type(PKCS11_KEY *);/* Get the enveloped private key */extern EVP_PKEY *PKCS11_get_private_key(PKCS11_KEY *);/* Find the corresponding certificate (if any) */extern PKCS11_CERT *PKCS11_find_certificate(PKCS11_KEY *);/* Get a list of all certificates associated with this token */extern int PKCS11_enumerate_certs(PKCS11_TOKEN *, PKCS11_CERT **, unsigned int *);/* Initialize a token */extern int PKCS11_init_token(PKCS11_TOKEN *, char *pin, char *label);/* Initialize the user PIN on a token */extern int PKCS11_init_pin(PKCS11_TOKEN *, char *pin);/* Store various objects on the token */extern int PKCS11_generate_key(PKCS11_TOKEN *, int, unsigned int, char *);extern int PKCS11_store_private_key(PKCS11_TOKEN *, EVP_PKEY *, char *);/* Load PKCS11 error strings */extern void ERR_load_PKCS11_strings(void);/* * Function and reason codes */#define PKCS11_F_PKCS11_CTX_LOAD		1#define PKCS11_F_PKCS11_ENUM_SLOTS		2#define PKCS11_F_PKCS11_CHECK_TOKEN		3#define PKCS11_F_PKCS11_OPEN_SESSION		4#define PKCS11_F_PKCS11_LOGIN			5#define PKCS11_F_PKCS11_ENUM_KEYS		6#define PKCS11_F_PKCS11_GET_KEY			7#define PKCS11_F_PKCS11_RSA_DECRYPT		8#define PKCS11_F_PKCS11_RSA_ENCRYPT		9#define PKCS11_F_PKCS11_RSA_SIGN		10#define PKCS11_F_PKCS11_RSA_VERIFY		11#define PKCS11_F_PKCS11_ENUM_CERTS		12#define PKCS11_F_PKCS11_INIT_TOKEN		13#define PKCS11_F_PKCS11_INIT_PIN		14#define PKCS11_F_PKCS11_LOGOUT			15#define PKCS11_F_PKCS11_STORE_PRIVATE_KEY	16#define PKCS11_F_PKCS11_GENERATE_KEY		17#define PKCS11_F_PKCS11_STORE_PUBLIC_KEY	18#define PKCS11_F_PKCS11_STORE_CERTIFICATE	19#define PKCS11_F_PKCS11_GETATTR			40#define PKCS11_ERR_BASE				1024#define PKCS11_LOAD_MODULE_ERROR		(PKCS11_ERR_BASE+1)#define PKCS11_MODULE_LOADED_ERROR		(PKCS11_ERR_BASE+2)#define PKCS11_SYMBOL_NOT_FOUND_ERROR		(PKCS11_ERR_BASE+3)#define PKCS11_NOT_SUPPORTED			(PKCS11_ERR_BASE+4)#define PKCS11_NO_SESSION			(PKCS11_ERR_BASE+5)#define PKCS11_KEYGEN_FAILED			(PKCS11_ERR_BASE+6)/* get private implementations of PKCS11 structures *//* * PKCS11_CTX: context for a PKCS11 implementation */typedef struct pkcs11_ctx_private {	char *name;	void *libinfo;	CK_FUNCTION_LIST_PTR method;	CK_SESSION_HANDLE session;	int nslots;	PKCS11_SLOT *slots;} PKCS11_CTX_private;#define PRIVCTX(ctx)		((PKCS11_CTX_private *) (ctx->_private))typedef struct pkcs11_slot_private {	PKCS11_CTX *parent;	unsigned char haveSession, loggedIn;	CK_SLOT_ID id;	CK_SESSION_HANDLE session;} PKCS11_SLOT_private;#define PRIVSLOT(slot)		((PKCS11_SLOT_private *) (slot->_private))#define SLOT2CTX(slot)		(PRIVSLOT(slot)->parent)typedef struct pkcs11_token_private {	PKCS11_SLOT *parent;	int nkeys, nprkeys;	PKCS11_KEY *keys;	int ncerts;	PKCS11_CERT *certs;} PKCS11_TOKEN_private;#define PRIVTOKEN(token)	((PKCS11_TOKEN_private *) (token->_private))#define TOKEN2SLOT(token)	(PRIVTOKEN(token)->parent)#define TOKEN2CTX(token)	SLOT2CTX(TOKEN2SLOT(token))typedef struct pkcs11_key_ops {	int type;		/* EVP_PKEY_xxx */	int (*get_public) (PKCS11_KEY *, EVP_PKEY *);	int (*get_private) (PKCS11_KEY *, EVP_PKEY *);} PKCS11_KEY_ops;typedef struct pkcs11_key_private {	PKCS11_TOKEN *parent;	CK_OBJECT_HANDLE object;	unsigned char id[32];	size_t id_len;	PKCS11_KEY_ops *ops;} PKCS11_KEY_private;#define PRIVKEY(key)		((PKCS11_KEY_private *) key->_private)#define KEY2SLOT(key)		TOKEN2SLOT(KEY2TOKEN(key))#define KEY2TOKEN(key)		(PRIVKEY(key)->parent)#define KEY2CTX(key)		TOKEN2CTX(KEY2TOKEN(key))typedef struct pkcs11_cert_private {	PKCS11_TOKEN *parent;	CK_OBJECT_HANDLE object;	unsigned char id[32];	size_t id_len;} PKCS11_CERT_private;#define PRIVCERT(cert)		((PKCS11_CERT_private *) cert->_private)/* * Mapping Cryptoki error codes to those used internally * by this code. * Right now, we just map them directly, and make sure * that the few genuine messages we use don't clash with * PKCS#11 */#define pkcs11_map_err(rv)	(rv)/* * Internal functions */#define CRYPTOKI_checkerr(f, rv) \	do { if (rv) { \		PKCS11err(f, pkcs11_map_err(rv)); \		return -1; \	} } while (0)#define CRYPTOKI_call(ctx, func_and_args) \	PRIVCTX(ctx)->method->func_and_args/* Memory allocation */#define PKCS11_NEW(type) \	((type *) pkcs11_malloc(sizeof(type)))#define PKCS11_DUP(s) \	pkcs11_strdup((char *) s, sizeof(s))extern int PKCS11_open_session(PKCS11_SLOT *, int);extern void pkcs11_destroy_all_slots(PKCS11_CTX *);extern void pkcs11_destroy_slot(PKCS11_CTX *, PKCS11_SLOT *);extern void pkcs11_destroy_keys(PKCS11_TOKEN *);extern void pkcs11_destroy_certs(PKCS11_TOKEN *);extern void *pkcs11_malloc(size_t);extern char *pkcs11_strdup(char *, size_t);extern int pkcs11_getattr(PKCS11_TOKEN *, CK_OBJECT_HANDLE,			  unsigned int, void *, size_t);extern int pkcs11_getattr_s(PKCS11_TOKEN *, CK_OBJECT_HANDLE,			    unsigned int, void *, size_t);extern int pkcs11_getattr_var(PKCS11_TOKEN *, CK_OBJECT_HANDLE,			      unsigned int, void *, size_t *);extern int pkcs11_getattr_bn(PKCS11_TOKEN *, CK_OBJECT_HANDLE,			     unsigned int, BIGNUM **);typedef int (*pkcs11_i2d_fn) (void *, unsigned char **);extern void pkcs11_addattr(CK_ATTRIBUTE_PTR, int, const void *, size_t);extern void pkcs11_addattr_int(CK_ATTRIBUTE_PTR, int, unsigned long);extern void pkcs11_addattr_s(CK_ATTRIBUTE_PTR, int, const char *);extern void pkcs11_addattr_bn(CK_ATTRIBUTE_PTR, int, const BIGNUM *);extern void pkcs11_addattr_obj(CK_ATTRIBUTE_PTR, int, pkcs11_i2d_fn, void *);extern void pkcs11_zap_attrs(CK_ATTRIBUTE_PTR, unsigned int);extern void *memdup(const void *, size_t);extern PKCS11_KEY_ops pkcs11_rsa_ops;#ifdef  __cplusplus}#endif#endif

⌨️ 快捷键说明

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