Blame usr/lib/common/tok_spec_struct.h

Packit 8681c6
/*
Packit 8681c6
 * COPYRIGHT (c) International Business Machines Corp. 2001-2017
Packit 8681c6
 *
Packit 8681c6
 * This program is provided under the terms of the Common Public License,
Packit 8681c6
 * version 1.0 (CPL-1.0). Any use, reproduction or distribution for this
Packit 8681c6
 * software constitutes recipient's acceptance of CPL-1.0 terms which can be
Packit 8681c6
 * found in the file LICENSE file or at
Packit 8681c6
 * https://opensource.org/licenses/cpl1.0.php
Packit 8681c6
 */
Packit 8681c6
Packit 8681c6
/***************************************************************************
Packit 8681c6
                          Change Log
Packit 8681c6
                          ==========
Packit 8681c6
       4/25/03    Kapil Sood (kapil@corrent.com)
Packit 8681c6
                  Added DH key pair generation and DH shared key derivation
Packit 8681c6
                  functions.
Packit 8681c6
Packit 8681c6
Packit 8681c6
Packit 8681c6
****************************************************************************/
Packit 8681c6
Packit 8681c6
#ifndef _TOK_SPECIFIC_STRUCT
Packit 8681c6
#define _TOK_SPECIFIC_STRUCT
Packit 8681c6
Packit 8681c6
Packit 8681c6
struct token_specific_struct {
Packit 8681c6
    // Used to be in the token_local.h as a #def
Packit 8681c6
    char token_directory[PATH_MAX];
Packit 8681c6
Packit 8681c6
    // Subdirectory
Packit 8681c6
    char token_subdir[PATH_MAX];
Packit 8681c6
Packit Service 8aa27d
    // Specifies if the token is using secure keys
Packit Service 8aa27d
    CK_BBOOL secure_key_token;
Packit 8681c6
Packit 8681c6
    // Information about how token's data should be stored.
Packit 8681c6
    struct {
Packit 8681c6
        // Use a separate directory for each user
Packit 8681c6
        CK_BBOOL per_user;
Packit 8681c6
Packit 8681c6
        // Use data store?
Packit 8681c6
        CK_BBOOL use_master_key;
Packit 8681c6
Packit 8681c6
        // Algorithm used to store private data (should be one of the
Packit 8681c6
        // CKM_* macros).
Packit 8681c6
        CK_MECHANISM_TYPE encryption_algorithm;
Packit 8681c6
Packit 8681c6
        // Default Initialization vectors used for each token. Its size
Packit 8681c6
        // depends on the used algorithm.
Packit 8681c6
        CK_BYTE *pin_initial_vector;
Packit 8681c6
        CK_BYTE *obj_initial_vector;
Packit 8681c6
    } data_store;
Packit 8681c6
Packit 8681c6
    // Create lockfile if different from standard way.
Packit 8681c6
    int (*t_creatlock) (void);
Packit 8681c6
Packit 8681c6
    // Create or attach to token's shared memory
Packit 8681c6
    CK_RV(*t_attach_shm) (STDLL_TokData_t *, CK_SLOT_ID slot_id);
Packit 8681c6
Packit 8681c6
    // Initialization function
Packit 8681c6
    CK_RV(*t_init) (STDLL_TokData_t *, CK_SLOT_ID, char *);
Packit 8681c6
Packit 8681c6
    // Token data functions
Packit 8681c6
    CK_RV(*t_init_token_data) (STDLL_TokData_t *tokdata, CK_SLOT_ID slot_id);
Packit 8681c6
    CK_RV(*t_load_token_data) (STDLL_TokData_t *tokdata,
Packit 8681c6
                               CK_SLOT_ID slot_id, FILE *fh);
Packit 8681c6
    CK_RV(*t_save_token_data) (STDLL_TokData_t *tokdata,
Packit 8681c6
                               CK_SLOT_ID slot_id, FILE *fh);
Packit 8681c6
Packit 8681c6
    // Random Number Gen
Packit 8681c6
    CK_RV(*t_rng) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG);
Packit 8681c6
Packit 8681c6
    // any specific final code
Packit 8681c6
    CK_RV(*t_final) (STDLL_TokData_t *, CK_BBOOL);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_init_token) (STDLL_TokData_t *, CK_SLOT_ID, CK_CHAR_PTR,
Packit 8681c6
                          CK_ULONG, CK_CHAR_PTR);
Packit 8681c6
    CK_RV(*t_login) (STDLL_TokData_t *, SESSION *, CK_USER_TYPE,
Packit 8681c6
                     CK_CHAR_PTR, CK_ULONG);
Packit 8681c6
    CK_RV(*t_logout) (STDLL_TokData_t *);
Packit 8681c6
    CK_RV(*t_init_pin) (STDLL_TokData_t *, SESSION *, CK_CHAR_PTR, CK_ULONG);
Packit 8681c6
    CK_RV(*t_set_pin) (STDLL_TokData_t *, SESSION *, CK_CHAR_PTR, CK_ULONG,
Packit 8681c6
                       CK_CHAR_PTR, CK_ULONG);
Packit 8681c6
Packit Service 8aa27d
    CK_RV(*t_des_key_gen) (STDLL_TokData_t *, CK_BYTE **, CK_ULONG *, CK_ULONG,
Packit Service 8aa27d
                           CK_BBOOL *);
Packit 8681c6
    CK_RV(*t_des_ecb) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                       CK_BYTE *, CK_ULONG *, OBJECT *, CK_BYTE);
Packit 8681c6
    CK_RV(*t_des_cbc) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                       CK_BYTE *, CK_ULONG *, OBJECT *, CK_BYTE *, CK_BYTE);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_tdes_ecb) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                        CK_BYTE *, CK_ULONG *, OBJECT *, CK_BYTE);
Packit 8681c6
    CK_RV(*t_tdes_cbc) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                        CK_BYTE *, CK_ULONG *, OBJECT *, CK_BYTE *, CK_BYTE);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_tdes_ofb) (STDLL_TokData_t *, CK_BYTE *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                        OBJECT *, CK_BYTE *, uint_32);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_tdes_cfb) (STDLL_TokData_t *, CK_BYTE *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                        OBJECT *, CK_BYTE *, uint_32, uint_32);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_tdes_mac) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG, OBJECT *,
Packit 8681c6
                        CK_BYTE *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_tdes_cmac) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG, OBJECT *,
Packit 8681c6
                         CK_BYTE *,CK_BBOOL, CK_BBOOL, CK_VOID_PTR *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_rsa_decrypt) (STDLL_TokData_t *, CK_BYTE *,
Packit 8681c6
                           CK_ULONG, CK_BYTE *, CK_ULONG *, OBJECT *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_rsa_encrypt) (STDLL_TokData_t *, CK_BYTE *,
Packit 8681c6
                           CK_ULONG, CK_BYTE *, CK_ULONG *, OBJECT *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_rsa_sign) (STDLL_TokData_t *, SESSION *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                        CK_BYTE *, CK_ULONG *, OBJECT *);
Packit 8681c6
    CK_RV(*t_rsa_verify) (STDLL_TokData_t *, SESSION *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                          CK_BYTE *, CK_ULONG, OBJECT *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_rsa_verify_recover) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                                  CK_BYTE *, CK_ULONG *, OBJECT *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_rsa_x509_decrypt) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                                CK_BYTE *, CK_ULONG *, OBJECT *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_rsa_x509_encrypt) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                                CK_BYTE *, CK_ULONG *, OBJECT *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_rsa_x509_sign) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                             CK_BYTE *, CK_ULONG *, OBJECT *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_rsa_x509_verify) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                               CK_BYTE *, CK_ULONG, OBJECT *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_rsa_x509_verify_recover) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                                       CK_BYTE *, CK_ULONG *, OBJECT *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_rsa_oaep_decrypt) (STDLL_TokData_t *, ENCR_DECR_CONTEXT *,
Packit 8681c6
                                CK_BYTE *, CK_ULONG, CK_BYTE *, CK_ULONG *,
Packit 8681c6
                                CK_BYTE *, CK_ULONG);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_rsa_oaep_encrypt) (STDLL_TokData_t *, ENCR_DECR_CONTEXT *,
Packit 8681c6
                                CK_BYTE *, CK_ULONG, CK_BYTE *, CK_ULONG *,
Packit 8681c6
                                CK_BYTE *, CK_ULONG);
Packit 8681c6
Packit 8681c6
        CK_RV(*t_rsa_pss_sign) (STDLL_TokData_t *, SESSION *,
Packit 8681c6
                                SIGN_VERIFY_CONTEXT *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                                CK_BYTE *, CK_ULONG *);
Packit 8681c6
Packit 8681c6
        CK_RV(*t_rsa_pss_verify) (STDLL_TokData_t *, SESSION *,
Packit 8681c6
                                  SIGN_VERIFY_CONTEXT *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                                  CK_BYTE *, CK_ULONG);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_rsa_generate_keypair) (STDLL_TokData_t *tokdata, TEMPLATE *,
Packit 8681c6
                                    TEMPLATE *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_ec_sign) (STDLL_TokData_t *tokdata, SESSION *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                       CK_BYTE *, CK_ULONG *, OBJECT *);
Packit 8681c6
    CK_RV(*t_ec_verify) (STDLL_TokData_t *tokdata, SESSION *, CK_BYTE *,
Packit 8681c6
	                     CK_ULONG, CK_BYTE *, CK_ULONG, OBJECT *);
Packit 8681c6
    CK_RV(*t_ec_generate_keypair) (STDLL_TokData_t *tokdata, TEMPLATE *,
Packit 8681c6
                                   TEMPLATE *);
Packit 8681c6
Packit 8681c6
Packit 8681c6
    CK_RV(*t_ecdh_pkcs_derive) (STDLL_TokData_t *tokdata, CK_BYTE *, CK_ULONG,
Packit 8681c6
                                CK_BYTE *, CK_ULONG, CK_BYTE *, CK_ULONG *,
Packit 8681c6
                                CK_BYTE *, CK_ULONG);
Packit 8681c6
Packit 8681c6
    /* Begin code contributed by Corrent corp. */
Packit 8681c6
Packit 8681c6
    // Token Specific DH functions
Packit 8681c6
    CK_RV(*t_dh_pkcs_derive) (STDLL_TokData_t *tokdata, CK_BYTE *,
Packit 8681c6
                              CK_ULONG *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                              CK_BYTE *, CK_ULONG, CK_BYTE *, CK_ULONG);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_dh_pkcs_key_pair_gen) (STDLL_TokData_t *tokdata, TEMPLATE *,
Packit 8681c6
                                    TEMPLATE *);
Packit 8681c6
Packit 8681c6
    /* End code contributed by Corrent corp. */
Packit 8681c6
Packit 8681c6
    // Token Specific SHA1 functions
Packit 8681c6
    CK_RV(*t_sha_init) (STDLL_TokData_t *, DIGEST_CONTEXT *, CK_MECHANISM *);
Packit 8681c6
    CK_RV(*t_sha) (STDLL_TokData_t *, DIGEST_CONTEXT *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                   CK_BYTE *, CK_ULONG *);
Packit 8681c6
    CK_RV(*t_sha_update) (STDLL_TokData_t *, DIGEST_CONTEXT *, CK_BYTE *,
Packit 8681c6
                          CK_ULONG);
Packit 8681c6
    CK_RV(*t_sha_final) (STDLL_TokData_t *, DIGEST_CONTEXT *, CK_BYTE *,
Packit 8681c6
                         CK_ULONG *);
Packit 8681c6
Packit 8681c6
    // Token Specific HMAC
Packit 8681c6
    CK_RV(*t_hmac_sign_init) (STDLL_TokData_t *, SESSION *, CK_MECHANISM *,
Packit 8681c6
                              CK_OBJECT_HANDLE);
Packit 8681c6
    CK_RV(*t_hmac_sign) (STDLL_TokData_t *, SESSION *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                         CK_BYTE *, CK_ULONG *);
Packit 8681c6
    CK_RV(*t_hmac_sign_update) (STDLL_TokData_t *, SESSION *, CK_BYTE *,
Packit 8681c6
                                CK_ULONG);
Packit 8681c6
    CK_RV(*t_hmac_sign_final) (STDLL_TokData_t *, SESSION *, CK_BYTE *,
Packit 8681c6
                               CK_ULONG *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_hmac_verify_init) (STDLL_TokData_t *, SESSION *,
Packit 8681c6
                                CK_MECHANISM *, CK_OBJECT_HANDLE);
Packit 8681c6
    CK_RV(*t_hmac_verify) (STDLL_TokData_t *, SESSION *, CK_BYTE *,
Packit 8681c6
                           CK_ULONG, CK_BYTE *, CK_ULONG);
Packit 8681c6
    CK_RV(*t_hmac_verify_update) (STDLL_TokData_t *, SESSION *, CK_BYTE *,
Packit 8681c6
                                  CK_ULONG);
Packit 8681c6
    CK_RV(*t_hmac_verify_final) (STDLL_TokData_t *, SESSION *, CK_BYTE *,
Packit 8681c6
                                 CK_ULONG);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_generic_secret_key_gen) (STDLL_TokData_t *, TEMPLATE *);
Packit 8681c6
Packit 8681c6
    // Token Specific AES functions
Packit Service 8aa27d
    CK_RV(*t_aes_key_gen) (STDLL_TokData_t *, CK_BYTE **, CK_ULONG *, CK_ULONG,
Packit Service 8aa27d
                           CK_BBOOL *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_aes_ecb) (STDLL_TokData_t *tokdata, CK_BYTE *, CK_ULONG,
Packit 8681c6
                       CK_BYTE *, CK_ULONG *, OBJECT *, CK_BYTE);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_aes_cbc) (STDLL_TokData_t *tokdata, CK_BYTE *, CK_ULONG,
Packit 8681c6
                       CK_BYTE *, CK_ULONG *, OBJECT *, CK_BYTE *, CK_BYTE);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_aes_ctr) (STDLL_TokData_t *tokdata, CK_BYTE *, CK_ULONG,
Packit 8681c6
                       CK_BYTE *, CK_ULONG *, OBJECT *, CK_BYTE *, CK_ULONG,
Packit 8681c6
                       CK_BYTE);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_aes_gcm_init) (STDLL_TokData_t *, SESSION *,
Packit 8681c6
                            ENCR_DECR_CONTEXT *, CK_MECHANISM *,
Packit 8681c6
                            CK_OBJECT_HANDLE, CK_BYTE);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_aes_gcm) (STDLL_TokData_t *, SESSION *, ENCR_DECR_CONTEXT *,
Packit 8681c6
                       CK_BYTE *, CK_ULONG, CK_BYTE *, CK_ULONG *, CK_BYTE);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_aes_gcm_update) (STDLL_TokData_t *, SESSION *,
Packit 8681c6
                              ENCR_DECR_CONTEXT *, CK_BYTE *,
Packit 8681c6
                              CK_ULONG, CK_BYTE *, CK_ULONG *, CK_BYTE);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_aes_gcm_final) (STDLL_TokData_t *, SESSION *,
Packit 8681c6
                             ENCR_DECR_CONTEXT *, CK_BYTE *,
Packit 8681c6
                             CK_ULONG *, CK_BYTE);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_aes_ofb) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG, CK_BYTE *,
Packit 8681c6
                       OBJECT *, CK_BYTE *, uint_32);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_aes_cfb) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG, CK_BYTE *,
Packit 8681c6
                       OBJECT *, CK_BYTE *, uint_32, uint_32);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_aes_mac) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG, OBJECT *,
Packit 8681c6
                       CK_BYTE *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_aes_cmac) (STDLL_TokData_t *, CK_BYTE *, CK_ULONG, OBJECT *,
Packit 8681c6
                        CK_BYTE *, CK_BBOOL, CK_BBOOL, CK_VOID_PTR *);
Packit 8681c6
Packit 8681c6
    // Token Specific DSA functions
Packit 8681c6
    CK_RV(*t_dsa_generate_keypair) (STDLL_TokData_t *, TEMPLATE *, TEMPLATE *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_dsa_sign) (STDLL_TokData_t *, CK_BYTE *, CK_BYTE *, OBJECT *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_dsa_verify) (STDLL_TokData_t *, CK_BYTE *, CK_BYTE *, OBJECT *);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_get_mechanism_list) (STDLL_TokData_t *, CK_MECHANISM_TYPE_PTR,
Packit 8681c6
                                  CK_ULONG_PTR);
Packit 8681c6
    CK_RV(*t_get_mechanism_info) (STDLL_TokData_t *, CK_MECHANISM_TYPE,
Packit 8681c6
                                  CK_MECHANISM_INFO_PTR);
Packit 8681c6
Packit 8681c6
    CK_RV(*t_object_add) (STDLL_TokData_t *, SESSION *, OBJECT *);
Packit 8681c6
Packit Service 8aa27d
    CK_RV(*t_key_wrap) (STDLL_TokData_t *, SESSION *, CK_MECHANISM *, CK_BBOOL,
Packit Service 8aa27d
                        OBJECT *, OBJECT *, CK_BYTE *, CK_ULONG *, CK_BBOOL *);
Packit Service 8aa27d
Packit Service 8aa27d
    CK_RV(*t_key_unwrap) (STDLL_TokData_t *, SESSION *, CK_MECHANISM *,
Packit Service 8aa27d
                          CK_BYTE *, CK_ULONG, OBJECT *, OBJECT *, CK_BBOOL *);
Packit Service 8aa27d
Packit Service 8aa27d
    CK_RV(*t_reencrypt_single) (STDLL_TokData_t *, SESSION *,
Packit Service 8aa27d
                                ENCR_DECR_CONTEXT *, CK_MECHANISM *, OBJECT *,
Packit Service 8aa27d
                                ENCR_DECR_CONTEXT *, CK_MECHANISM *, OBJECT *,
Packit Service 8aa27d
                                CK_BYTE *, CK_ULONG , CK_BYTE *, CK_ULONG *);
Packit 8681c6
};
Packit 8681c6
Packit 8681c6
typedef struct token_specific_struct token_spec_t;
Packit 8681c6
Packit 8681c6
#endif