/* * COPYRIGHT (c) International Business Machines Corp. 2015-2017 * * This program is provided under the terms of the Common Public License, * version 1.0 (CPL-1.0). Any use, reproduction or distribution for this * software constitutes recipient's acceptance of CPL-1.0 terms which can be * found in the file LICENSE file or at * https://opensource.org/licenses/cpl1.0.php */ /* * OpenCryptoki ICSF token - ICSF token functions * */ #ifndef ICSF_SPECIFIC_H #define ICSF_SPECIFIC_H #include "pkcs11types.h" #include "list.h" typedef struct { /* * This list contains one element to each session and it's used to keep * session specific data. Any insertion or deletion in this list should * be protected by sess_list_mutex. * * This lock is intended to protect the linked list, not the content of each * element. Since PKCS#11 applications should not use the same session for * different threads, the only concurrency that we have to deal is when adding * or removing a session to or from the list. */ list_t sessions; pthread_mutex_t sess_list_mutex; /* * This binary tree keeps the mapping between ICSF object handles and PKCS#11 * object handles. The tree index is used as the PKCS#11 handle. */ struct btree objects; } icsf_private_data_t; CK_RV icsftok_init(STDLL_TokData_t * tokdata, CK_SLOT_ID slot_id, char *conf_name); CK_RV icsftok_final(STDLL_TokData_t * tokdata, CK_BBOOL finalize, CK_BBOOL in_fork_initializer); CK_RV icsftok_init_token(STDLL_TokData_t * tokdata, CK_SLOT_ID slot_id, CK_CHAR_PTR pin, CK_ULONG pin_len, CK_CHAR_PTR label); CK_RV icsftok_init_pin(STDLL_TokData_t * tokdata, SESSION * sess, CK_CHAR_PTR pPin, CK_ULONG ulPinLen); CK_RV icsftok_set_pin(STDLL_TokData_t * tokdata, SESSION * sess, CK_CHAR_PTR pOldPin, CK_ULONG ulOldLen, CK_CHAR_PTR pNewPin, CK_ULONG ulNewLen); CK_RV icsftok_open_session(STDLL_TokData_t * tokdata, SESSION * sess); CK_RV icsftok_close_session(STDLL_TokData_t * tokdata, SESSION * session, CK_BBOOL in_fork_initializer); CK_RV icsftok_login(STDLL_TokData_t * tokdata, SESSION * sess, CK_USER_TYPE userType, CK_CHAR_PTR pPin, CK_ULONG ulPinLen); CK_RV icsftok_create_object(STDLL_TokData_t * tokdata, SESSION * session, CK_ATTRIBUTE_PTR attrs, CK_ULONG attrs_len, CK_OBJECT_HANDLE_PTR handle); CK_RV icsftok_copy_object(STDLL_TokData_t * tokdata, SESSION * session, CK_ATTRIBUTE_PTR attrs, CK_ULONG attrs_len, CK_OBJECT_HANDLE src, CK_OBJECT_HANDLE_PTR dst); CK_RV icsftok_destroy_object(STDLL_TokData_t * tokdata, SESSION * sess, CK_OBJECT_HANDLE handle); CK_RV icsftok_get_attribute_value(STDLL_TokData_t * tokdata, SESSION * sess, CK_OBJECT_HANDLE handle, CK_ATTRIBUTE * pTemplate, CK_ULONG ulCount, CK_ULONG * obj_size); CK_RV icsftok_set_attribute_value(STDLL_TokData_t * tokdata, SESSION * sess, CK_OBJECT_HANDLE handle, CK_ATTRIBUTE * pTemplate, CK_ULONG ulCount); CK_RV icsftok_find_objects_init(STDLL_TokData_t * tokdata, SESSION * sess, CK_ATTRIBUTE * pTemplate, CK_ULONG ulCount); CK_RV icsftok_encrypt_init(STDLL_TokData_t * tokdata, SESSION * session, CK_MECHANISM_PTR mech, CK_OBJECT_HANDLE key); CK_RV icsftok_encrypt(STDLL_TokData_t * tokdata, SESSION * session, CK_BYTE_PTR input_data, CK_ULONG input_data_len, CK_BYTE_PTR output_data, CK_ULONG_PTR p_output_data_len); CK_RV icsftok_encrypt_update(STDLL_TokData_t * tokdata, SESSION * session, CK_BYTE_PTR input_part, CK_ULONG input_part_len, CK_BYTE_PTR output_part, CK_ULONG_PTR p_output_part_len); CK_RV icsftok_encrypt_final(STDLL_TokData_t * tokdata, SESSION * session, CK_BYTE_PTR output_part, CK_ULONG_PTR p_output_part_len); CK_RV icsftok_decrypt_init(STDLL_TokData_t * tokdata, SESSION * session, CK_MECHANISM_PTR mech, CK_OBJECT_HANDLE key); CK_RV icsftok_decrypt(STDLL_TokData_t * tokdata, SESSION * session, CK_BYTE_PTR input_data, CK_ULONG input_data_len, CK_BYTE_PTR output_data, CK_ULONG_PTR p_output_data_len); CK_RV icsftok_decrypt_update(STDLL_TokData_t * tokdata, SESSION * session, CK_BYTE_PTR input_part, CK_ULONG input_part_len, CK_BYTE_PTR output_part, CK_ULONG_PTR p_output_part_len); CK_RV icsftok_decrypt_final(STDLL_TokData_t * tokdata, SESSION * session, CK_BYTE_PTR output_part, CK_ULONG_PTR p_output_part_len); CK_RV icsftok_sign_init(STDLL_TokData_t * tokdata, SESSION * session, CK_MECHANISM * mech, CK_OBJECT_HANDLE key); CK_RV icsftok_sign(STDLL_TokData_t * tokdata, SESSION * session, CK_BYTE * in_data, CK_ULONG in_data_len, CK_BYTE * signature, CK_ULONG * sig_len); CK_RV icsftok_sign_update(STDLL_TokData_t * tokdata, SESSION * session, CK_BYTE * in_data, CK_ULONG in_data_len); CK_RV icsftok_sign_final(STDLL_TokData_t * tokdata, SESSION * session, CK_BYTE * signature, CK_ULONG * sig_len); CK_RV icsftok_verify_init(STDLL_TokData_t * tokdata, SESSION * session, CK_MECHANISM * mech, CK_OBJECT_HANDLE key); CK_RV icsftok_verify(STDLL_TokData_t * tokdata, SESSION * session, CK_BYTE * in_data, CK_ULONG in_data_len, CK_BYTE * signature, CK_ULONG sig_len); CK_RV icsftok_verify_update(STDLL_TokData_t * tokdata, SESSION * session, CK_BYTE * in_data, CK_ULONG in_data_len); CK_RV icsftok_verify_final(STDLL_TokData_t * tokdata, SESSION * session, CK_BYTE * signature, CK_ULONG sig_len); CK_RV icsftok_wrap_key(STDLL_TokData_t * tokdata, SESSION * session, CK_MECHANISM_PTR mech, CK_OBJECT_HANDLE wrapping_key, CK_OBJECT_HANDLE key, CK_BYTE_PTR wrapped_key, CK_ULONG_PTR p_wrapped_key_len); CK_RV icsftok_unwrap_key(STDLL_TokData_t * tokdata, SESSION * session, CK_MECHANISM_PTR mech, CK_ATTRIBUTE_PTR attrs, CK_ULONG attrs_len, CK_BYTE_PTR wrapped_key, CK_ULONG wrapped_key_len, CK_OBJECT_HANDLE wrapping_key, CK_OBJECT_HANDLE_PTR p_key); CK_RV icsftok_derive_key(STDLL_TokData_t * tokdata, SESSION * session, CK_MECHANISM_PTR mech, CK_OBJECT_HANDLE hBaseKey, CK_OBJECT_HANDLE_PTR handle, CK_ATTRIBUTE_PTR attrs, CK_ULONG attrs_len); CK_RV icsftok_generate_key_pair(STDLL_TokData_t * tokdata, SESSION * session, CK_MECHANISM_PTR mech, CK_ATTRIBUTE_PTR pub_attrs, CK_ULONG pub_attrs_len, CK_ATTRIBUTE_PTR priv_attrs, CK_ULONG priv_attrs_len, CK_OBJECT_HANDLE_PTR p_pub_key, CK_OBJECT_HANDLE_PTR p_priv_key); CK_RV icsftok_generate_key(STDLL_TokData_t * tokdata, SESSION * session, CK_MECHANISM_PTR mech, CK_ATTRIBUTE_PTR attrs, CK_ULONG attrs_len, CK_OBJECT_HANDLE_PTR handle); CK_RV icsf_get_handles(STDLL_TokData_t * tokdata, CK_SLOT_ID slot_id); #endif