/*
 * COPYRIGHT (c) International Business Machines Corp. 1997-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
 */

/******************************************************************************/
/*  US Government Users Restricted Rights - Use, duplication or disclosure    */
/* restricted by GSA ADP Schedule Contract with IBM Corp.                     */
/******************************************************************************/
/*                                                                            */
/*  This header file contains the Security API C language                     */
/*  prototypes.  See the user publications for more information.              */
/*                                                                            */
/******************************************************************************/

/* Clear Key Import */
typedef void (**CSNBCKI_t) (long *return_code,
                            long *reason_code,
                            long *exit_data_length,
                            unsigned char *exit_data,
                            unsigned char *clear_key,
                            unsigned char *target_key_identifier);

/* Clear Key Import Multiple */
typedef void (*CSNBCKM_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *clear_key_length,
                           unsigned char *clear_key,
                           unsigned char *target_key_identifier);

/* Data Key Export */
typedef void (*CSNBDKX_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *source_key_identifier,
                           unsigned char *exporter_key_identifier,
                           unsigned char *target_key_token);

/* Data    Key Import */
typedef void (*CSNBDKM_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *source_key_token,
                           unsigned char *importer_key_identifier,
                           unsigned char *target_key_identifier);

/* DES Master Key Process */
typedef void (*CSNBMKP_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array, unsigned char *key_part);

/* Key Export */
typedef void (*CSNBKEX_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *key_type,
                           unsigned char *source_key_identifier,
                           unsigned char *exporter_key_identifier,
                           unsigned char *target_key_token);

/* Key Generate */
typedef void (*CSNBKGN_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *key_form,
                           unsigned char *key_length,
                           unsigned char *key_type_1,
                           unsigned char *key_type_2,
                           unsigned char *KEK_key_identifier_1,
                           unsigned char *KEK_key_identifier_2,
                           unsigned char *generated_key_identifier_1,
                           unsigned char *generated_key_identifier_2);

/* Key Generate2 */
typedef void (*CSNBKGN2_t) (long *return_code,
                            long *reason_code,
                            long *exit_data_length,
                            unsigned char *exit_data,
                            long *rule_array_count,
                            unsigned char *rule_array,
                            long *clear_key_bit_length,
                            unsigned char *key_type_1,
                            unsigned char *key_type_2,
                            long *key_name_1_length,
                            unsigned char *key_name_1,
                            long *key_name_2_length,
                            unsigned char *key_name_2,
                            long *user_associated_data_1_length,
                            unsigned char *user_associated_data_1,
                            long *user_associated_data_2_length,
                            unsigned char *user_associated_data_2,
                            long *key_encrypting_key_identifier_1_length,
                            unsigned char *key_encrypting_key_identifier_1,
                            long *key_encrypting_key_identifier_2_length,
                            unsigned char *key_encrypting_key_identifier_2,
                            long *generated_key_identifier_1_length,
                            unsigned char *generated_key_identifier_1,
                            long *generated_key_identifier_2_length,
                            unsigned char *generated_key_identifier_2);

/* Key Import */
typedef void (*CSNBKIM_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *key_type,
                           unsigned char *source_key_token,
                           unsigned char *importer_key_identifier,
                           unsigned char *target_key_identifier);

/* Key Part Import */
typedef void (*CSNBKPI_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *key_part,
                           unsigned char *key_identifier);

/* Key Part Import2 */
typedef void (*CSNBKPI2_t) (long *return_code,
                            long *reason_code,
                            long *exit_data_length,
                            unsigned char *exit_data,
                            long *rule_array_count,
                            unsigned char *rule_array,
                            long *clear_key_part_length,
                            unsigned char *clear_key_part,
                            long *key_identifier_length,
                            unsigned char *key_identifier);

/* Key Storage Initialization */
typedef void (*CSNBKSI_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *file_name_length,
                           unsigned char *file_name,
                           long *description_length,
                           unsigned char *description,
                           unsigned char *clear_master_key);

/* Key Record Create */
typedef void (*CSNBKRC_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data, unsigned char *key_label);
/* AES Key Record Create */
typedef void (*CSNBAKRC_t) (long *return_code,
                            long *reason_code,
                            long *exit_data_length,
                            unsigned char *exit_data,
                            unsigned char *key_label,
                            long *key_token_length, unsigned char *key_token);

/* Key Record Delete */
typedef void (*CSNBKRD_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *key_identifier);

/* Key Record List */
typedef void (*CSNBKRL_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *key_label,
                           long *data_set_name_length,
                           unsigned char *data_set_name,
                           unsigned char *security_server_name);

/* Key Record Read */
typedef void (*CSNBKRR_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *key_label, unsigned char *key_token);

/* Key Record Write */
typedef void (*CSNBKRW_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *key_token, unsigned char *key_label);

/* PKA Key Record Create */
typedef void (*CSNDKRC_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *key_label,
                           long *key_token_length, unsigned char *key_token);

/* PKA Key Record Delete */
typedef void (*CSNDKRD_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *key_identifier);

/* PKA Key Record List */
typedef void (*CSNDKRL_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *key_label,
                           long *data_set_name_length,
                           unsigned char *data_set_name,
                           unsigned char *security_server_name);

/* PKA Key Record Read */
typedef void (*CSNDKRR_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *key_label,
                           long *key_token_length, unsigned char *key_token);

/* PKA Key Record Write */
typedef void (*CSNDKRW_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *key_label,
                           long *key_token_length, unsigned char *key_token);

/* Key Test */
typedef void (*CSNBKYT_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *key_identifier,
                           unsigned char *random_number,
                           unsigned char *verification_pattern);

/* Key Test Extended @b3a*/
typedef void (*CSNBKYTX_t) (long *return_code,
                            long *reason_code,
                            long *exit_data_length,
                            unsigned char *exit_data,
                            long *rule_array_count,
                            unsigned char *rule_array,
                            unsigned char *key_identifier,
                            unsigned char *random_number,
                            unsigned char *verification_pattern,
                            unsigned char *kek_key_identifier);

/* Des Key Token Change */
typedef void (*CSNBKTC_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *key_identifier);

/* Key Translate */
typedef void (*CSNBKTR_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *input_key_token,
                           unsigned char *input_KEK_key_identifier,
                           unsigned char *output_KEK_key_identifier,
                           unsigned char *output_key_token);

/* Random Number Generate */
typedef void (*CSNBRNG_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *form, unsigned char *random_number);

/* Random Number Generate Long */
typedef void (*CSNBRNGL_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *seed_length,
                           unsigned char *seed,
                           long *random_number_length,
                           unsigned char *random_number);

typedef void (*CSNBSAE_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *key_identifier_length,
                           unsigned char *key_identifier,
                           long *key_params_length,
                           unsigned char *key_params,
                           long *block_size,
                           long *initialization_vector_length,
                           unsigned char *initialization_vector,
                           long *chaining_vector_length,
                           unsigned char *chaining_vector,
                           long *text_length,
                           unsigned char *text,
                           long *ciphertext_length,
                           unsigned char *ciphertext,
                           long *optional_data_length,
                           unsigned char *optional_data);

typedef void (*CSNBSAD_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *key_identifier_length,
                           unsigned char *key_identifier,
                           long *key_params_length,
                           unsigned char *key_params,
                           long *block_size,
                           long *initialization_vector_length,
                           unsigned char *initialization_vector,
                           long *chaining_vector_length,
                           unsigned char *chaining_vector,
                           long *ciphertext_length,
                           unsigned char *ciphertext,
                           long *text_length,
                           unsigned char *text,
                           long *optional_data_length,
                           unsigned char *optional_data);

/* Decipher */
typedef void (*CSNBDEC_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *key_identifier,
                           long *text_length,
                           unsigned char *ciphertext,
                           unsigned char *initialization_vector,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *chaining_vector,
                           unsigned char *plaintext);

/* Encipher */
typedef void (*CSNBENC_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *key_identifier,
                           long *text_length,
                           unsigned char *plaintext,
                           unsigned char *initialization_vector,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *pad_character,
                           unsigned char *chaining_vector,
                           unsigned char *ciphertext);

/* MAC Generate */
typedef void (*CSNBMGN_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *key_identifier,
                           long *text_length,
                           unsigned char *text,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *chaining_vector, unsigned char *MAC);

/* MAC Verify */
typedef void (*CSNBMVR_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *key_identifier,
                           long *text_length,
                           unsigned char *text,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *chaining_vector, unsigned char *MAC);

/* Key Token Build */
typedef void (*CSNBKTB_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *key_token,
                           unsigned char *key_type,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *key_value,
                           void *reserved_field_1,
                           long *reserved_field_2,
                           unsigned char *reserved_field_3,
                           unsigned char *control_vector,
                           unsigned char *reserved_field_4,
                           long *reserved_field_5,
                           unsigned char *reserved_field_6,
                           unsigned char *master_key_verification_number);


/* Key Token Build2 */
typedef void (*CSNBKTB2_t) (long *return_code,
                            long *reason_code,
                            long *exit_data_length,
                            unsigned char *exit_data,
                            long *rule_array_count,
                            unsigned char *rule_array,
                            long *clear_key_bit_length,
                            unsigned char *clear_key_value,
                            long *key_name_length,
                            unsigned char *key_name,
                            long *user_associated_data_length,
                            unsigned char *user_associated_data,
                            long *token_data_length,
                            unsigned char *token_data,
                            long *reserved_length,
                            unsigned char *reserved,
                            long *target_key_token_length,
                            unsigned char *target_key_token);

/* PKA Key Generate */
typedef void (*CSNDPKG_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *regeneration_data_length,
                           unsigned char *regeneration_data,
                           long *skeleton_key_token_length,
                           unsigned char *skeleton_key_token,
                           unsigned char *transport_key_identifier,
                           long *generated_key_identifier_length,
                           unsigned char *generated_key_identifier);

/* PKA Key Token Build */
typedef void (*CSNDPKB_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *key_values_structure_length,
                           unsigned char *key_values_structure,
                           long *key_name_ln,
                           unsigned char *key_name,
                           long *reserved_1_length,
                           unsigned char *reserved_1,
                           long *reserved_2_length,
                           unsigned char *reserved_2,
                           long *reserved_3_length,
                           unsigned char *reserved_3,
                           long *reserved_4_length,
                           unsigned char *reserved_4,
                           long *reserved_5_length,
                           unsigned char *reserved_5,
                           long *token_length, unsigned char *token);

/* One Way Hash */
typedef void (*CSNBOWH_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *text_length,
                           unsigned char *text,
                           long *chaining_vector_length,
                           unsigned char *chaining_vector,
                           long *hash_length, unsigned char *hash);

/* PKA Key Import */
typedef void (*CSNDPKI_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *source_key_token_length,
                           unsigned char *source_key_token,
                           unsigned char *importer_key_identifier,
                           long *target_key_identifier_length,
                           unsigned char *target_key_identifier);

/* Digital Signature Generate */
typedef void (*CSNDDSG_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *PKA_private_key_id_length,
                           unsigned char *PKA_private_key_id,
                           long *hash_length,
                           unsigned char *hash,
                           long *signature_field_length,
                           long *signature_bit_length,
                           unsigned char *signature_field);

/* Digital Signature Verify */
typedef void (*CSNDDSV_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *PKA_public_key_id_length,
                           unsigned char *PKA_public_key_id,
                           long *hash_length,
                           unsigned char *hash,
                           long *signature_field_length,
                           unsigned char *signature_field);

/* PKA Key Token Change */
typedef void (*CSNDKTC_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *key_id_length, unsigned char *key_id);

/* PKA Public Key Extract */
typedef void (*CSNDPKX_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *source_key_identifier_length,
                           unsigned char *source_key_identifier,
                           long *target_key_token_length,
                           unsigned char *target_key_token);

/* PKA Symmetric Key Import */
typedef void (*CSNDSYI_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *RSA_enciphered_key_length,
                           unsigned char *RSA_enciphered_key,
                           long *RSA_private_key_identifier_len,
                           unsigned char *RSA_private_key_identifier,
                           long *target_key_identifier_length,
                           unsigned char *target_key_identifier);

/* PKA Symmetric Key Export */
typedef void (*CSNDSYX_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *source_key_identifier_length,
                           unsigned char *source_key_identifier,
                           long *RSA_public_key_identifier_len,
                           unsigned char *RSA_public_key_identifier,
                           long *RSA_enciphered_key_length,
                           unsigned char *RSA_enciphered_key);

/* Crypto Facility Query */
typedef void (*CSUACFQ_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *verb_data_length, unsigned char *verb_data);

/* Crypto Facility Control */
typedef void (*CSUACFC_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *verb_data_length, unsigned char *verb_data);

/* Compose SET Block */
typedef void (*CSNDSBC_t) (long *ReturnCode,
                           long *ReasonCode,
                           long *ExitDataLength,
                           unsigned char *ExitData,
                           long *RuleArrayCount,
                           unsigned char *RuleArray,
                           unsigned char *BlockContentsIdentifier,
                           long *XDataStringLength,
                           unsigned char *XDataString,
                           long *DataToEncryptLength,
                           unsigned char *DataToEncrypt,
                           long *DataToHashLength,
                           unsigned char *DataToHash,
                           unsigned char *InitializationVector,
                           long *RSAPublicKeyIdentifierLength,
                           unsigned char *RSAPublicKeyIdentifier,
                           long *DESKeyBLockLength,
                           unsigned char *DESKeyBlock,
                           long *RSAOAEPBlockLength,
                           unsigned char *RSAOAEPBlock,
                           unsigned char *ChainingVector,
                           unsigned char *DESEncryptedDataBlock);

/* Decompose SET Block */
typedef void (*CSNDSBD_t) (long *ReturnCode,
                           long *ReasonCode,
                           long *ExitDataLength,
                           unsigned char *ExitData,
                           long *RuleArrayCount,
                           unsigned char *RuleArray,
                           long *RSAOAEPBlockLength,
                           unsigned char *RSAOAEPBlock,
                           long *DESEncryptedDataBlockLength,
                           unsigned char *DESEncryptedDataBlock,
                           unsigned char *InitializationVector,
                           long *RSAPrivateKeyIdentifierLength,
                           unsigned char *RSAPrivateKeyIdentifier,
                           long *DESKeyBLockLength,
                           unsigned char *DESKeyBlock,
                           unsigned char *BlockContentsIdentifier,
                           long *XDataStringLength,
                           unsigned char *XDataString,
                           unsigned char *ChainingVector,
                           unsigned char *DataBlock,
                           long *HashBlockLength, unsigned char *HashBlock);

/* Access Control Logon */
typedef void (*CSUALCT_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *user_id,
                           long *auth_parm_length,
                           unsigned char *auth_parm,
                           long *auth_data_length, unsigned char *auth_data);

/* Access Control Maintenance */
typedef void (*CSUAACM_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *name,
                           long *output_data_length,
                           unsigned char *output_data);

/* Access Control Initialization */
typedef void (*CSUAACI_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *verb_data_1_length,
                           unsigned char *verb_data_1,
                           long *verb_data_2_length,
                           unsigned char *verb_data_2);


/* PKA Public Key Hash Register */
typedef void (*CSNDPKH_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *public_key_name,
                           long *hash_data_length, unsigned char *hash_data);


/* PKA Public Key Register */
typedef void (*CSNDPKR_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *public_key_name,
                           long *public_key_certificate_length,
                           unsigned char *public_key_certificate);


/* Master Key Distribution */
typedef void (*CSUAMKD_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *share_index,
                           unsigned char *private_key_name,
                           unsigned char *certifying_key_name,
                           long *certificate_length,
                           unsigned char *certificate,
                           long *clone_info_encrypting_key_length,
                           unsigned char *clone_info_encrypting_key,
                           long *clone_info_length, unsigned char *clone_info);


/* Retained Key Delete */
typedef void (*CSNDRKD_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array, unsigned char *key_label);


/* Retained Key List */
typedef void (*CSNDRKL_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *key_label_mask,
                           long *retained_keys_count,
                           long *key_labels_count, unsigned char *key_labels);

/* Symmetric Key Generate */
typedef void (*CSNDSYG_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *key_encrypting_key,
                           long *rsapub_key_length,
                           unsigned char *rsapub_key,
                           long *locenc_key_length,
                           unsigned char *locenc_key,
                           long *rsaenc_key_length, unsigned char *rsaenc_key);


/* Encrypted PIN Translate */
typedef void (*CSNBPTR_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *in_PIN_enc_key_id,
                           unsigned char *out_PIN_enc_key_id,
                           unsigned char *in_PIN_profile,
                           unsigned char *in_PAN_data,
                           unsigned char *in_PIN_blk,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *out_PIN_profile,
                           unsigned char *out_PAN_data,
                           long *sequence_number, unsigned char *put_PIN_blk);


/* Clear PIN Encrypt */
typedef void (*CSNBCPE_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *PIN_enc_key_id,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *clear_PIN,
                           unsigned char *PIN_profile,
                           unsigned char *PAN_data,
                           long *sequence_number,
                           unsigned char *encrypted_PIN_blk);


/* Clear PIN Generate Alternate */
typedef void (*CSNBCPA_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *PIN_enc_key_id,
                           unsigned char *PIN_gen_key_id,
                           unsigned char *PIN_profile,
                           unsigned char *PAN_data,
                           unsigned char *encrypted_PIN_blk,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *PIN_check_length,
                           unsigned char *data_array,
                           unsigned char *returned_result);


/* Clear PIN Generate */
typedef void (*CSNBPGN_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *PIN_gen_key_id,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *PIN_length,
                           long *PIN_check_length,
                           unsigned char *data_array,
                           unsigned char *returned_result);


/* Encrypted PIN Verify */
typedef void (*CSNBPVR_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *PIN_enc_key_id,
                           unsigned char *PIN_ver_key_id,
                           unsigned char *PIN_profile,
                           unsigned char *PAN_data,
                           unsigned char *encrypted_PIN_blk,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *PIN_check_length, unsigned char *data_array);

/* Diversified Key Generate */
typedef void (*CSNBDKG_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *generating_key_id,
                           long *data_length,
                           unsigned char *data,
                           unsigned char *decrypting_key_id,
                           unsigned char *generated_key_id);

/* Encrypted PIN Generate */
typedef void (*CSNBEPG_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *PIN_gen_key_id,
                           unsigned char *outPIN_enc_key_id,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *PIN_length,
                           unsigned char *data_array,
                           unsigned char *outPIN_profile,
                           unsigned char *PAN_data,
                           long *sequence_number,
                           unsigned char *encrypted_PIN_blk);

/* Cryptographic Variable Encipher */
typedef void (*CSNBCVE_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *cvarenc_key_id,
                           long *text_length,
                           unsigned char *plain_text,
                           unsigned char *init_vector,
                           unsigned char *cipher_text);

/* CVV Generate */
typedef void (*CSNBCSG_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *PAN_data,
                           unsigned char *expiration_date,
                           unsigned char *service_code,
                           unsigned char *key_a_id,
                           unsigned char *key_b_id,
                           unsigned char *generated_cvv);

/* CVV Verify */
typedef void (*CSNBCSV_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *PAN_data,
                           unsigned char *expiration_date,
                           unsigned char *service_code,
                           unsigned char *key_a_id,
                           unsigned char *key_b_id,
                           unsigned char *generated_cvv);

/* Control Vector Generate */
typedef void (*CSNBCVG_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *key_type,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *reserved_field_1,
                           unsigned char *control_vector);

/* Key Token Parse */
typedef void (*CSNBKTP_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *key_token,
                           unsigned char *key_type,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *key_value,
                           void *master_key_verification_pattern_v03,
                           long *reserved_field_1,
                           unsigned char *reserved_field_2,
                           unsigned char *control_vector,
                           unsigned char *reserved_field_3,
                           long *reserved_field_4,
                           unsigned char *reserved_field_5,
                           unsigned char *master_key_verification_pattern_v00);

/* PKA Encrypt */
typedef void (*CSNDPKE_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *key_value_length,
                           unsigned char *key_value,
                           long *data_struct_length,
                           unsigned char *data_struct,
                           long *RSA_public_key_length,
                           unsigned char *RSA_public_key,
                           long *RSA_encipher_length,
                           unsigned char *RSA_encipher);

/* PKA Decrypt */
typedef void (*CSNDPKD_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *enciphered_key_length,
                           unsigned char *enciphered_key,
                           long *data_struct_length,
                           unsigned char *data_struct,
                           long *RSA_private_key_length,
                           unsigned char *RSA_private_key,
                           long *key_value_length, unsigned char *key_value);

/* Prohibit Export */
typedef void (*CSNBPEX_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *key_identifier);

/* Prohibit Export Extended */
typedef void (*CSNBPEXX_t) (long *return_code,
                            long *reason_code,
                            long *exit_data_length,
                            unsigned char *exit_data,
                            unsigned char *Source_key_token,
                            unsigned char *Kek_key_identifier);

/* Random Number/Known Answer Test */
typedef void (*CSUARNT_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count, unsigned char *rule_array);

/* Control Vector Translate */
typedef void (*CSNBCVT_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           unsigned char *kek_key_identifier,
                           unsigned char *source_key_token,
                           unsigned char *array_key_left,
                           unsigned char *mask_array_left,
                           unsigned char *array_key_right,
                           unsigned char *mask_array_right,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *target_key_token);

/* MDC Generate */
typedef void (*CSNBMDG_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *text_length,
                           unsigned char *text_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *chaining_vector, unsigned char *MDC);

/* Cryptographic Resource Allocate */
typedef void (*CSUACRA_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *resource_name_length,
                           unsigned char *resource_name);

/* Cryptographic Resource Deallocate */
typedef void (*CSUACRD_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *resource_name_length,
                           unsigned char *resource_name);

/* Transaction Validation */
typedef void (*CSNBTRV_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *transaction_key_length,
                           unsigned char *transaction_key,
                           long *transaction_info_length,
                           unsigned char *transaction_info,
                           long *validation_values_length,
                           unsigned char *validation_values);

/* Secure Messaging for Keys */
typedef void (*CSNBSKY_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *input_key_indentifier,
                           unsigned char *key_encrypting_key,
                           unsigned char *session_key,
                           long *text_length,
                           unsigned char *clear_text,
                           unsigned char *initialization_vector,
                           long *key_offset,
                           long *key_offset_field_length,
                           unsigned char *cipher_text,
                           unsigned char *output_chaining_value);

/* Secure Messaging for PINs */
typedef void (*CSNBSPN_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           unsigned char *in_PIN_blk,
                           unsigned char *in_PIN_enc_key_id,
                           unsigned char *in_PIN_profile,
                           unsigned char *in_PAN_data,
                           unsigned char *secmsg_key,
                           unsigned char *out_PIN_profile,
                           unsigned char *out_PAN_data,
                           long *text_length,
                           unsigned char *clear_text,
                           unsigned char *initialization_vector,
                           long *PIN_offset,
                           long *PIN_offset_field_length,
                           unsigned char *cipher_text,
                           unsigned char *output_chaining_value);

/* PIN Change/Unblock */
typedef void (*CSNBPCU_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *authenticationMasterKeyLength,
                           unsigned char *authenticationMasterKey,
                           long *issuerMasterKeyLength,
                           unsigned char *issuerMasterKey,
                           long *keyGenerationDataLength,
                           unsigned char *keyGenerationData,
                           long *newRefPinKeyLength,
                           unsigned char *newRefPinKey,
                           unsigned char *newRefPinBlock,
                           unsigned char *newRefPinProfile,
                           unsigned char *newRefPanData,
                           long *currentRefPinKeyLength,
                           unsigned char *currentRefPinKey,
                           unsigned char *currentRefPinBlock,
                           unsigned char *currentRefPinProfile,
                           unsigned char *currentRefPanData,
                           long *outputPinDataLength,
                           unsigned char *outputPinData,
                           unsigned char *outputPinProfile,
                           long *outputPinMessageLength,
                           unsigned char *outputPinMessage);

/* PCF/CUSP Key Conversion */
typedef void (*CSUAPCV_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *KEK_key_identifier_length,
                           unsigned char *KEK_key_identifier,
                           long *PCF_key_list_length,
                           unsigned char *PCF_key_list,
                           long *output_key_list_length,
                           unsigned char *output_key_list);

/*Process Request Block*/
typedef void (*CSUAPRB_t) (long *pReturnCode,
                           long *pReasonCode,
                           long *pExitDataLength,
                           unsigned char *pExitData,
                           long *pRuleArrayCount,
                           unsigned char *pRuleArray,
                           long *pSourceLength,
                           unsigned char *pSource,
                           long *pOutFileNameLength,
                           unsigned char *pOutFileName,
                           long *pReplyLength, unsigned char *pReply);

/* Diffie-Hellman Key Load */
typedef void (*CSUADHK_t) (long *ReturnCode,
                           long *ReasonCode,
                           long *ExitDataLength,
                           unsigned char *ExitData,
                           long *RuleArrayCount,
                           unsigned char *RuleArray,
                           unsigned char *DHModulus,
                           unsigned char *DHGenerator,
                           unsigned char *DHKeyPart,
                           long *TransportKeyHashLength,
                           unsigned char *TransportKeyHash,
                           unsigned char *Reserved1,
                           unsigned char *Reserved2,
                           unsigned char *Reserved3, unsigned char *Reserved4);

/* Diffie-Hellman Key Query */
typedef void (*CSUADHQ_t) (long *ReturnCode,
                           long *ReasonCode,
                           long *ExitDataLength,
                           unsigned char *ExitData,
                           long *RuleArrayCount,
                           unsigned char *RuleArray,
                           unsigned char *DHModulus,
                           unsigned char *DHGenerator,
                           unsigned char *DHKeyPart,
                           long *TransportKeyHashLength,
                           unsigned char *TransportKeyHash,
                           unsigned char *Reserved1,
                           unsigned char *Reserved2,
                           unsigned char *Reserved3, unsigned char *Reserved4);

/* Trusted Block Create */
typedef void (*CSNDTBC_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *input_block_length,
                           unsigned char *input_block_identifier,
                           unsigned char *transport_key_identifier,
                           long *trusted_blokc_length,
                           unsigned char *trusted_blokc_identifier);

/* Remote Key Export */
typedef void (*CSNDRKX_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *trusted_block_length,
                           unsigned char *trusted_block_identifier,
                           long *certificate_length,
                           unsigned char *certificate,
                           long *certificate_parms_length,
                           unsigned char *certificate_parms,
                           long *transport_key_length,
                           unsigned char *transport_key_identifier,
                           long *rule_id_length,
                           unsigned char *rule_id,
                           long *export_key_kek_length,
                           unsigned char *export_key_kek_identifier,
                           long *export_key_length,
                           unsigned char *export_key_identifier,
                           long *asym_encrypted_key_length,
                           unsigned char *asym_encrypted_key,
                           long *sym_encrypted_key_length,
                           unsigned char *sym_encrypted_key,
                           long *extra_data_length,
                           unsigned char *extra_data,
                           long *key_check_parameters_length,
                           unsigned char *key_check_parameters,
                           long *key_check_length,
                           unsigned char *key_check_value);

/* Key Encryption Translate */
typedef void (*CSNBKET_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *kek_identifier_length,
                           unsigned char *kek_identifier,
                           long *key_in_length,
                           unsigned char *key_in,
                           long *key_out_length, unsigned char *key_out);


/* HMAC Generate */
typedef void (*CSNBHMG_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *key_identifier_length,
                           unsigned char *key_identifier,
                           long *message_text_length,
                           unsigned char *message_text,
                           long *chaining_vector_length,
                           unsigned char *chaining_vector,
                           long *MAC_length, unsigned char *MAC_text);

/* HMAC Verify */
typedef void (*CSNBHMV_t) (long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *key_identifier_length,
                           unsigned char *key_identifier,
                           long *message_text_length,
                           unsigned char *message_text,
                           long *chaining_vector_length,
                           unsigned char *chaining_vector,
                           long *MAC_length, unsigned char *MAC_text);

/* Cipher Text Translate 2 */
typedef void (*CSNBCTT2_t)(long *return_code,
                           long *reason_code,
                           long *exit_data_length,
                           unsigned char *exit_data,
                           long *rule_array_count,
                           unsigned char *rule_array,
                           long *key_identifier_in_length,
                           unsigned char *key_identifier_in,
                           long *init_vector_in_length,
                           unsigned char *init_vector_in,
                           long *cipher_text_in_length,
                           unsigned char *cipher_text_in,
                           long *chaining_vector_length,
                           unsigned char *chaining_vector,
                           long *key_identifier_out_length,
                           unsigned char *key_identifier_out,
                           long *init_vector_out_length,
                           unsigned char *init_vector_out,
                           long *cipher_text_out_length,
                           unsigned char *cipher_text_out,
                           long *reserved1_length,
                           unsigned long *reserved1,
                           long *reserved2_length,
                           unsigned char *reserved2);
