亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pkcs11-object.c

?? 讀寫Smart卡加解密接口的程序
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
/* * pkcs11-object.c: PKCS#11 object management and handling functions * * Copyright (C) 2002  Timo Ter鋝 <timo.teras@iki.fi> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <stdlib.h>#include <string.h>#include "sc-pkcs11.h"/* Pseudo mechanism for the Find operation */static sc_pkcs11_mechanism_type_t	find_mechanism = {	0, { 0 }, 0, 	sizeof(struct sc_pkcs11_find_operation),};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. */{	struct sc_pkcs11_session *session;	struct sc_pkcs11_card *card;        int rv;	rv = sc_pkcs11_lock();	if (rv != CKR_OK)		return rv;        dump_template("C_CreateObject()", pTemplate, ulCount);	rv = pool_find(&session_pool, hSession, (void**) &session);	if (rv != CKR_OK)		goto out;	card = session->slot->card;	if (card->framework->create_object == NULL)		rv = CKR_FUNCTION_NOT_SUPPORTED;	else		rv = card->framework->create_object(card, session->slot,			pTemplate, ulCount, phObject);out:	sc_pkcs11_unlock();	return rv;}CK_RV C_CopyObject(CK_SESSION_HANDLE    hSession,    /* the session's handle */		   CK_OBJECT_HANDLE     hObject,     /* the object's handle */		   CK_ATTRIBUTE_PTR     pTemplate,   /* template for new object */		   CK_ULONG             ulCount,     /* attributes in template */		   CK_OBJECT_HANDLE_PTR phNewObject) /* receives handle of copy */{        return CKR_FUNCTION_NOT_SUPPORTED;}CK_RV C_DestroyObject(CK_SESSION_HANDLE hSession,  /* the session's handle */		      CK_OBJECT_HANDLE  hObject)   /* the object's handle */{        return CKR_FUNCTION_NOT_SUPPORTED;}CK_RV C_GetObjectSize(CK_SESSION_HANDLE hSession,  /* the session's handle */		      CK_OBJECT_HANDLE  hObject,   /* the object's handle */		      CK_ULONG_PTR      pulSize)   /* receives size of object */{        return CKR_FUNCTION_NOT_SUPPORTED;}CK_RV C_GetAttributeValue(CK_SESSION_HANDLE hSession,   /* the session's handle */			  CK_OBJECT_HANDLE  hObject,    /* the object's handle */			  CK_ATTRIBUTE_PTR  pTemplate,  /* specifies attributes, gets values */			  CK_ULONG          ulCount)    /* attributes in template */{	static int precedence[] = {		CKR_OK,		CKR_BUFFER_TOO_SMALL,		CKR_ATTRIBUTE_TYPE_INVALID,		CKR_ATTRIBUTE_SENSITIVE,		-1	};	char	object_name[64];        int i, j, rv;	struct sc_pkcs11_session *session;	struct sc_pkcs11_object *object;	int	res, res_type;	rv = sc_pkcs11_lock();	if (rv != CKR_OK)		return rv;	rv = pool_find(&session_pool, hSession, (void**) &session);	if (rv != CKR_OK)		goto out;	rv = pool_find(&session->slot->object_pool, hObject, (void**) &object);	if (rv != CKR_OK)		goto out;	/* Debug printf */	snprintf(object_name, sizeof(object_name), "Object %lu",			(unsigned long) hObject);	res_type = 0;	for (i = 0; i < ulCount; i++) {		res = object->ops->get_attribute(session,					object, &pTemplate[i]);		if (res != CKR_OK)                        pTemplate[i].ulValueLen = (CK_ULONG) -1;		dump_template(object_name, &pTemplate[i], 1);		/* the pkcs11 spec has complicated rules on		 * what errors take precedence:		 * 	CKR_ATTRIBUTE_SENSITIVE		 * 	CKR_ATTRIBUTE_INVALID		 * 	CKR_BUFFER_TOO_SMALL		 * It does not exactly specify how other errors		 * should be handled - we give them highest		 * precedence		 */		for (j = 0; precedence[j] != -1; j++) {			if (precedence[j] == res)				break;		}		if (j > res_type) {			res_type = j;			rv = res;		}	}out:	sc_pkcs11_unlock();        return rv;}CK_RV C_SetAttributeValue(CK_SESSION_HANDLE hSession,   /* the session's handle */			  CK_OBJECT_HANDLE  hObject,    /* the object's handle */			  CK_ATTRIBUTE_PTR  pTemplate,  /* specifies attributes and values */			  CK_ULONG          ulCount)    /* attributes in template */{        int i, rv;	struct sc_pkcs11_session *session;	struct sc_pkcs11_object *object;	rv = sc_pkcs11_lock();	if (rv != CKR_OK)		return rv;        dump_template("C_SetAttributeValue", pTemplate, ulCount);	rv = pool_find(&session_pool, hSession, (void**) &session);	if (rv != CKR_OK)		goto out;	rv = pool_find(&session->slot->object_pool, hObject, (void**) &object);	if (rv != CKR_OK)		goto out;	if (object->ops->set_attribute == NULL)                rv = CKR_FUNCTION_NOT_SUPPORTED;	else {		for (i = 0; i < ulCount; i++) {			rv = object->ops->set_attribute(session, object, &pTemplate[i]);			if (rv != CKR_OK)				break;		}	}out:	sc_pkcs11_unlock();        return rv;}CK_RV C_FindObjectsInit(CK_SESSION_HANDLE hSession,   /* the session's handle */			CK_ATTRIBUTE_PTR  pTemplate,  /* attribute values to match */			CK_ULONG          ulCount)    /* attributes in search template */{        CK_BBOOL is_private = TRUE;	CK_ATTRIBUTE private_attribute = { CKA_PRIVATE, &is_private, sizeof(is_private) };	int j, rv, match, hide_private;	struct sc_pkcs11_session *session;	struct sc_pkcs11_object *object;	struct sc_pkcs11_find_operation *operation;        struct sc_pkcs11_pool_item *item;	struct sc_pkcs11_slot *slot;	rv = sc_pkcs11_lock();	if (rv != CKR_OK)		return rv;	rv = pool_find(&session_pool, hSession, (void**) &session);	if (rv != CKR_OK)		goto out;	sc_debug(context, "C_FindObjectsInit(slot = %d)\n", session->slot->id);        dump_template("C_FindObjectsInit()", pTemplate, ulCount);	rv = session_start_operation(session, SC_PKCS11_OPERATION_FIND,                                     &find_mechanism,				     (struct sc_pkcs11_operation**) &operation);	if (rv != CKR_OK)                goto out;        operation->current_handle = 0;	operation->num_handles = 0;	slot = session->slot;	/* Check whether we should hide private objects */	hide_private = 0;	if (slot->login_user != CKU_USER	 && (slot->token_info.flags & CKF_LOGIN_REQUIRED))		hide_private = 1;	/* For each object in token do */	for (item = slot->object_pool.head; item != NULL; item = item->next) {		object = (struct sc_pkcs11_object*) item->item;		/* User not logged in and private object? */		if (hide_private) {			if (object->ops->get_attribute(session, object, &private_attribute) != CKR_OK)				continue;			if (is_private) {				sc_debug(context, "Object %d/%d: Private object and not logged in.\n",                                      slot->id,				      item->handle);				continue;			}		}		/* Try to match every attribute */                match = 1;		for (j = 0; j < ulCount; j++) {			rv = object->ops->cmp_attribute(session, object,					&pTemplate[j]);			if (rv == 0) {				if (context->debug >= 4) {					sc_debug(context, "Object %d/%d: Attribute 0x%x does NOT match.\n",					      slot->id,					      item->handle, pTemplate[j].type);				}				match = 0;                                break;			}			if (context->debug >= 4) {				sc_debug(context, "Object %d/%d: Attribute 0x%x matches.\n",				      slot->id,				      item->handle, pTemplate[j].type);			}		}		if (match) {			sc_debug(context, "Object %d/%d matches\n",			      slot->id, item->handle);			/* Avoid buffer overflow --okir */			if (operation->num_handles >= SC_PKCS11_FIND_MAX_HANDLES) {				sc_debug(context, "Too many matching objects\n");				break;			}			operation->handles[operation->num_handles++] = item->handle;		}	}	rv = CKR_OK;	sc_debug(context, "%d matching objects\n", operation->num_handles);out:	sc_pkcs11_unlock();        return rv;}CK_RV C_FindObjects(CK_SESSION_HANDLE    hSession,          /* the session's handle */		    CK_OBJECT_HANDLE_PTR phObject,          /* receives object handle array */		    CK_ULONG             ulMaxObjectCount,  /* max handles to be returned */		    CK_ULONG_PTR         pulObjectCount)    /* actual number returned */{        int rv, to_return;	struct sc_pkcs11_session *session;	struct sc_pkcs11_find_operation *operation;	rv = sc_pkcs11_lock();	if (rv != CKR_OK)		return rv;	rv = pool_find(&session_pool, hSession, (void**) &session);	if (rv != CKR_OK)		goto out;	rv = session_get_operation(session, SC_PKCS11_OPERATION_FIND,				(sc_pkcs11_operation_t **) &operation);	if (rv != CKR_OK)		goto out;	to_return = operation->num_handles - operation->current_handle;	if (to_return > ulMaxObjectCount)		to_return = ulMaxObjectCount;	*pulObjectCount = to_return;	memcpy(phObject,	       &operation->handles[operation->current_handle],	       to_return * sizeof(CK_OBJECT_HANDLE));        operation->current_handle += to_return;out:	sc_pkcs11_unlock();	return rv;}CK_RV C_FindObjectsFinal(CK_SESSION_HANDLE hSession) /* the session's handle */{        int rv;	struct sc_pkcs11_session *session;	rv = sc_pkcs11_lock();	if (rv != CKR_OK)		return rv;	rv = pool_find(&session_pool, hSession, (void**) &session);	if (rv != CKR_OK)		goto out;	rv = session_get_operation(session, SC_PKCS11_OPERATION_FIND, NULL);	if (rv == CKR_OK)		session_stop_operation(session, SC_PKCS11_OPERATION_FIND);out:	sc_pkcs11_unlock();	return rv;}/* * Below here all functions are wrappers to pass all object attribute and method * handling to appropriate object layer. */CK_RV C_DigestInit(CK_SESSION_HANDLE hSession,   /* the session's handle */		   CK_MECHANISM_PTR  pMechanism) /* the digesting mechanism */{        int rv;	struct sc_pkcs11_session *session;	rv = sc_pkcs11_lock();	if (rv != CKR_OK)		return rv;	rv = pool_find(&session_pool, hSession, (void**) &session);	if (rv == CKR_OK)		rv = sc_pkcs11_md_init(session, pMechanism);        sc_debug(context, "C_DigestInit returns %d\n", rv);	sc_pkcs11_unlock();        return rv;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91成人在线观看喷潮| 欧美午夜精品久久久久久孕妇| 亚洲永久免费av| 26uuu亚洲婷婷狠狠天堂| 色一情一乱一乱一91av| 精品一区二区三区久久| 亚洲一区二区三区美女| 国产精品久久三区| 久久久久久久综合| 欧美一级精品大片| 欧美色图免费看| av电影在线观看一区| 国产一区在线精品| 日本欧美在线观看| 亚洲自拍都市欧美小说| 中文字幕中文字幕在线一区 | 国产日韩综合av| 色系网站成人免费| 国产福利一区二区三区视频在线 | 久久久久久久久久久久久夜| 色综合 综合色| 国产在线麻豆精品观看| 亚洲精品久久久久久国产精华液| 久久亚洲免费视频| 欧美日韩久久一区二区| 成人免费视频一区| 另类欧美日韩国产在线| 亚洲综合一区在线| 久久精品夜夜夜夜久久| 欧美日韩国产小视频在线观看| 国产91丝袜在线观看| 婷婷开心激情综合| 国产午夜精品福利| 555夜色666亚洲国产免| 色综合久久九月婷婷色综合| 国产伦精品一区二区三区免费| 亚洲精品一二三| 亚洲乱码中文字幕综合| 国产精品久线观看视频| 久久精子c满五个校花| 精品不卡在线视频| 欧美精品v国产精品v日韩精品| 在线观看中文字幕不卡| 91网站在线播放| av毛片久久久久**hd| 成人av在线影院| 国产激情精品久久久第一区二区 | 久久久久久久久久久久久夜| 欧美一级日韩一级| 欧美一二三区在线观看| 欧美一区国产二区| 91精品在线免费| 7777精品伊人久久久大香线蕉经典版下载| 91免费看视频| 91毛片在线观看| 色综合久久中文综合久久牛| 91丨九色丨国产丨porny| hitomi一区二区三区精品| 波多野结衣亚洲| av影院午夜一区| 一本久久a久久精品亚洲| 91女神在线视频| 在线观看国产日韩| 欧美日本一区二区| 欧美一三区三区四区免费在线看| 日韩欧美中文一区| 26uuu亚洲婷婷狠狠天堂| 国产丝袜欧美中文另类| 国产精品久久久久国产精品日日| 日韩一区在线看| 亚洲福利视频导航| 午夜精品一区二区三区电影天堂| 亚洲综合精品久久| 亚洲精品自拍动漫在线| 亚洲视频图片小说| 一个色妞综合视频在线观看| 夜夜嗨av一区二区三区中文字幕| 一区二区三区四区乱视频| 亚洲欧洲精品一区二区三区| 亚洲免费av高清| 亚洲成人动漫一区| 亚洲国产综合视频在线观看| 奇米精品一区二区三区在线观看 | 国产一区二区在线看| 成人高清在线视频| 欧洲另类一二三四区| 欧美剧情片在线观看| 久久久久久一二三区| 亚洲欧美激情插 | 日本一区二区三区在线不卡| 久久九九全国免费| 亚洲精选视频在线| 裸体健美xxxx欧美裸体表演| 国产aⅴ综合色| 欧洲视频一区二区| 精品噜噜噜噜久久久久久久久试看| 国产亚洲综合在线| 亚洲一区中文在线| 国产精品91一区二区| 精品久久久久久久一区二区蜜臀| 国产亚洲精品资源在线26u| 成人av在线播放网站| 欧美日韩免费一区二区三区| 精品国产一区二区精华| 亚洲手机成人高清视频| 视频一区视频二区中文| a在线播放不卡| 欧美v亚洲v综合ⅴ国产v| 亚洲欧洲综合另类| 久久99深爱久久99精品| 91视频你懂的| 久久综合狠狠综合| 亚洲第一电影网| 成人免费视频视频| 精品欧美乱码久久久久久| 亚洲精品免费电影| 国产精品18久久久久久久久| 欧美日韩高清一区| 日韩理论片网站| 国产激情一区二区三区| 日韩欧美国产不卡| 夜夜嗨av一区二区三区中文字幕| 成人综合婷婷国产精品久久| 日韩一级大片在线观看| 国产精品私人自拍| 国产伦理精品不卡| 日韩亚洲国产中文字幕欧美| 亚洲综合丝袜美腿| 菠萝蜜视频在线观看一区| 26uuu色噜噜精品一区二区| 日韩成人午夜精品| 欧美亚洲动漫制服丝袜| 国产精品日韩精品欧美在线| 国产精品自拍毛片| 日韩欧美国产一区二区在线播放| 亚洲国产wwwccc36天堂| 91国产成人在线| 亚洲另类春色国产| 一本高清dvd不卡在线观看 | 久久午夜色播影院免费高清 | 午夜精品久久久久久久| 色婷婷久久综合| 亚洲四区在线观看| 高清国产午夜精品久久久久久| 欧美精品一区二区高清在线观看 | 99精品国产视频| 日韩欧美国产一二三区| 亚洲mv在线观看| 一本在线高清不卡dvd| 一区二区三区四区五区视频在线观看| 不卡视频一二三四| 精品处破学生在线二十三| 久久超级碰视频| 26uuu国产电影一区二区| 精品一区二区三区影院在线午夜| 欧美福利一区二区| 日本午夜精品一区二区三区电影| 欧美精品丝袜中出| 日本美女视频一区二区| 欧美一区二区女人| 久久99久久99精品免视看婷婷| 精品久久久久久久久久久久包黑料| 精品一区二区三区在线观看| 久久久噜噜噜久噜久久综合| 国产91精品露脸国语对白| 中文字幕亚洲电影| 欧美在线一区二区三区| 天堂一区二区在线| 日韩精品专区在线| 国产盗摄一区二区| 亚洲婷婷国产精品电影人久久| 色诱视频网站一区| 午夜影院久久久| 日韩精品一区二区三区三区免费| 国产精品资源在线观看| 亚洲天堂2014| 91精品国产入口| 国产精品一级二级三级| 国产精品久久久久婷婷二区次| 在线精品视频一区二区三四| 亚洲国产欧美日韩另类综合| 日韩欧美亚洲国产另类| 成人免费视频视频| 亚洲国产日韩av| ww亚洲ww在线观看国产| 成人动漫一区二区在线| 亚洲高清免费一级二级三级| 精品国精品自拍自在线| 成人国产电影网| 五月天欧美精品| 欧美成人一区二区三区片免费| 国产在线麻豆精品观看| 亚洲欧美乱综合| 欧美老年两性高潮| 国产成人午夜精品5599| 性做久久久久久| 国产日产欧产精品推荐色| 欧美在线看片a免费观看| 国产美女娇喘av呻吟久久| 一区二区三区在线播|