1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22/* 23 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. 24 */ 25 26/** 27 * \file KMSClientProfileImpl.h 28 */ 29 30#ifndef CLIENT_PROFILE_IMPL_H 31#define CLIENT_PROFILE_IMPL_H 32 33#ifdef __cplusplus 34extern "C" { 35#endif 36 37#define AGENT_LOG_FILE "KMSAgentLog.log" 38 39/** 40 * Build383 corresponds to 2.0.2 which does not support AES Key Wrap and 41 * enforcment of FIPS mode. 42 */ 43#define FIPS_COMPATIBLE_KMA_VERSION "Build384" 44 45 46extern bool g_bUseFileLog; 47 48/*--------------------------------------------------------------------------- 49 * Function: KMSClient_InitializeLibrary 50 * 51 * Description: This function initializes the KMS Agent or Management API library. 52 * It should be called before any other functions are invoked. 53 * Internally, it setups SSL library and Logging module. 54 * 55 * 56 * Input 57 * ----- 58 * i_wsWorkingDirectory -- Working directory of the program which uses the library 59 * i_bIsManager -- TRUE: Initialize Management Library; FALSE: initialize Agent Library. 60 * i_bUseFileLog: True if logs should go to a log file in the working directory. 61 * False otherwise. 62 * 63 * Output 64 * ------ 65 * return value TRUE or FALSE 66 * 67 *--------------------------------------------------------------------------*/ 68bool KMSClient_InitializeLibrary( 69 const utf8cstr i_wsWorkingDirectory, 70 int i_bUseFileLog ); 71 72/*--------------------------------------------------------------------------- 73 * Function: KMSClient_FinalizeLibrary 74 * 75 * Description: This function finalizes the KMS Agent(Or Management) API library. 76 * It should be called when the library is not needed by the program. 77 * Internally it cleans up SSL library and Logging module. 78 * 79 * 80 * Input 81 * ----- 82 * i_bIsManager -- TRUE: Finalize Management Library; FALSE: Finalize Agent Library. 83 * 84 * Output 85 * ------ 86 * return value TRUE or FALSE 87 * 88 *--------------------------------------------------------------------------*/ 89bool KMSClient_FinalizeLibrary(); 90 91utf8cstr KMSClient_GetLastErrorMessage(KMSClientProfile *i_pProfile); 92 93bool KMSClient_LoadProfile( 94 KMSClientProfile *io_pProfile, 95 utf8cstr i_wsProfileName, 96 utf8cstr i_wsEntityID, 97 utf8cstr i_wsPassphrase, 98 utf8cstr i_wsApplianceAddress, 99 int i_iTransactionTimeout, 100 int i_iFailOverLimit, 101 int i_iClusterDiscoveryFrequency, 102 int i_eKMSmode); 103 104/*--------------------------------------------------------------------------- 105 * Function: KMSClient_GetClusterInformation 106 * 107 * Description: Get the cluster information by calling cluster discovery 108 * service. 109 * 110 * Input 111 * ----- 112 * i_pProfile -- a pointer to an initialized KMSClientProfile structure 113 * i_iEntitySiteIDSize -- the buffer size of the entity site ID 114 * (KMS_MAX_ENTITIY_SITE_ID) 115 * i_iClusterEntryArraySize -- the array size for cluster entries 116 * (KMS_MAX_CLUSTER_NUM) 117 * Output 118 * ------ 119 * o_wsEntitySiteID -- the entity's Site ID 120 * o_pApplianceNum -- the returned number of the appliances in the cluster 121 * o_pClusterEntryArray -- the array of cluster entries 122 * 123 * return value TRUE/FALSE 124 * Use KMSAgent_GetLastErrorMessage() to get the error message 125 * 126 * 127 *--------------------------------------------------------------------------*/ 128bool KMSClient_GetClusterInformation(KMSClientProfile *i_pProfile, 129 utf8cstr o_wsEntitySiteID, 130 int i_iEntitySiteIDSize, 131 int *o_pApplianceNum, 132 KMSClusterEntry *o_pClusterEntryArray, 133 int i_iClusterEntryArraySize); 134 135/** 136 * @return true if any KMAs are not FIPS compatible, i.e. perform AES key 137 * wrap. 138 */ 139bool KMSClient_NoFIPSCompatibleKMAs(const KMSClientProfile * const i_pProfile); 140 141/*--------------------------------------------------------------------------- 142 * Function: KMSClient_SelectAppliance 143 * 144 * Description: Select the current appliance. The current appliance is used for 145 * retrieving cluster information. 146 * 147 * Input 148 * ----- 149 * i_pProfile -- a pointer to an initialized KMSClientProfile structure 150 * i_wsApplianceAddress -- the IP address of the appliance 151 * Output 152 * ------ 153 * (none) 154 * return value TRUE/FALSE 155 * Use KMSAgent_GetLastErrorMessage() to get the error message 156 * 157 * 158 *--------------------------------------------------------------------------*/ 159bool KMSClient_SelectAppliance(KMSClientProfile *i_pProfile, 160 utf8cstr i_wsApplianceAddress); 161 162/** 163 * check if the profile was loaded successfully 164 * 165 * @param i_pProfile a pointer that may, or may not be to a loaded profile 166 * 167 * @return true if the profile was loaded 168 */ 169bool KMSClient_ProfileLoaded( KMSClientProfile *i_pProfile ); 170 171/*--------------------------------------------------------------------------- 172 * Function: KMSClient_DeleteProfile 173 * 174 * Description: Delete the profile information from the local disk 175 * 176 * 177 * Input 178 * ----- 179 * i_wsProfileName -- the profile name 180 181 * Output 182 * ------ 183 * return value TRUE/FALSE 184 * Use KMSAgent_GetLastErrorMessage() to get the error message 185 * 186 *--------------------------------------------------------------------------*/ 187bool KMSClient_DeleteProfile(utf8cstr i_wsProfileName); 188 189/*--------------------------------------------------------------------------- 190 * Function: KMSClient_UnloadProfile 191 * 192 * Description: Destroy the profile information in memory including agent's private 193 * key. 194 * 195 * 196 * Input 197 * ----- 198 * i_pProfile -- a pointer to an initialized KMSClientProfile structure 199 200 * Output 201 * ------ 202 * return value TRUE/FALSE 203 * Use KMSAgent_GetLastErrorMessage() to get the error message 204 * 205 *--------------------------------------------------------------------------*/ 206bool KMSClient_UnloadProfile(KMSClientProfile *i_pProfile); 207 208/** 209 * @return true if the soap fault string indicates that the SSL handshake 210 * did not succeed due to an invalid certificate. 211 */ 212bool SSL_InvalidCertificate(const char * const i_sErrorString ); 213 214/** 215 * compares the error string with various soap fault substrings to determine if the 216 * error was a server-side error or not, also checks the supplied errno codes against 217 * various POSIX errno macros that would imply server connection issues 218 */ 219bool ServerError (const char * i_sErrorString, int i_iErrno ); 220 221#ifdef __cplusplus 222} 223 224// helper macro to turn value into a string 225#define LogError(a,b,c,d,e) LogError_function(a,b,#b,c,d,e) 226 227/** 228 * Log an error after saving the message in the profile. This supports <code>KMSAgent_GetLastErrorMessage</code> 229 * @param i_pProfile an initialized profile 230 * 231 * @param i_iErrno, the error expressed as a number 232 * @param i_sOperation, the operation number as a string 233 * @param i_sEntityID optional, the agent ID 234 * @param i_sNetworkAddress optional, the address of the KMA involved in the error 235 * @param i_sMessage optional, an informative error message 236 */ 237void LogError_function(KMSClientProfile *i_pProfile, 238 int i_iErrno, 239 const char* i_sOperation, 240 const char* i_sEntityID, 241 const char* i_sNetworkAddress, 242 const char* i_sMessage ); 243 244#endif 245 246/** 247 * @return true if the KMA version string corresponds to a FIPS compatible 248 * KMA 249 */ 250bool FIPScompatibleKMA ( 251 const char * const i_sKMAVersion); 252 253#define AUDIT_CLIENT_LOG_ERROR_BASE 0x300 254 255#define AUDIT_CLIENT_AGENT_CREATE_AUDIT_LOG_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x00) 256#define AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_RESPONSE_INVALID_DESCRIPTION_LENGTH (AUDIT_CLIENT_LOG_ERROR_BASE + 0x01) 257#define AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_RESPONSE_INVALID_DU_ID_LENGTH (AUDIT_CLIENT_LOG_ERROR_BASE + 0x02) 258#define AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_RESPONSE_INVALID_EXTERNAL_TAG_LENGTH (AUDIT_CLIENT_LOG_ERROR_BASE + 0x03) 259#define AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x04) 260#define AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEYID_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x05) 261#define AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEY_GROUP_ID_LENGTH_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x06) 262#define AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEY_LENGTH_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x07) 263#define AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEY_STATE_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x08) 264#define AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEY_TYPE_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x09) 265#define AUDIT_CLIENT_AGENT_CREATE_KEY_KEY_CALLOUT_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x0a) 266#define AUDIT_CLIENT_AGENT_CREATE_KEY_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x0b) 267#define AUDIT_CLIENT_AGENT_DISASSOCIATE_DATA_UNIT_KEYS_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x0c) 268#define AUDIT_CLIENT_AGENT_LIST_KEY_GROUPS_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x0d) 269#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_RESPONSE_INVALID_DESCRIPTION_LENGTH (AUDIT_CLIENT_LOG_ERROR_BASE + 0x0e) 270#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_RESPONSE_INVALID_EXTERNAL_TAG_LENGTH (AUDIT_CLIENT_LOG_ERROR_BASE + 0x0f) 271#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x10) 272#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEYS_REMAINING_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x11) 273#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEYS_SIZE_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x12) 274#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_ARRAY_SIZE_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x13) 275#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_LENGTH_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x14) 276#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x15) 277#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_STATE_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x16) 278#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_TYPE_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x17) 279#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_KEY_CALLOUT_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x18) 280#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x19) 281#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_RESPONSE_INVALID_DESCRIPTION_LENGTH (AUDIT_CLIENT_LOG_ERROR_BASE + 0x1a) 282#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_RESPONSE_INVALID_EXTERNAL_TAG_LENGTH (AUDIT_CLIENT_LOG_ERROR_BASE + 0x1b) 283#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x1c) 284#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEYID_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x1d) 285#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEY_GROUP_ID_LENGTH_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x1e) 286#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEY_LENGTH_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x1f) 287#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEY_STATE_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x20) 288#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEY_TYPE_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x21) 289#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_KEY_CALLOUT_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x22) 290#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x23) 291#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEYID_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x24) 292#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEY_GROUP_ID_LENGTH_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x25) 293#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEY_LENGTH_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x26) 294#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEY_STATE_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x27) 295#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEY_TYPE_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x28) 296#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_KEY_CALLOUT_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x29) 297#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x2a) 298#define AUDIT_CLIENT_COMPUTE_CHALLENGE_RESPONSE_FAILED (AUDIT_CLIENT_LOG_ERROR_BASE + 0x2b) 299#define AUDIT_CLIENT_COMPUTE_FIXED_FAILED (AUDIT_CLIENT_LOG_ERROR_BASE + 0x2c) 300#define AUDIT_CLIENT_GET_CERTIFICATE_INVALID_CERTIFICATE_FORMAT (AUDIT_CLIENT_LOG_ERROR_BASE + 0x2d) 301#define AUDIT_CLIENT_GET_CERTIFICATE_INVALID_CHALLENGE_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x2e) 302#define AUDIT_CLIENT_GET_CERTIFICATE_INVALID_KEY_FORMAT (AUDIT_CLIENT_LOG_ERROR_BASE + 0x2f) 303#define AUDIT_CLIENT_GET_CERTIFICATE_INVALID_RESPONSE_FORMAT (AUDIT_CLIENT_LOG_ERROR_BASE + 0x30) 304#define AUDIT_CLIENT_GET_CERTIFICATE_SAVE_CA_CERTIFICATE_FAILED (AUDIT_CLIENT_LOG_ERROR_BASE + 0x31) 305#define AUDIT_CLIENT_GET_CERTIFICATE_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x32) 306#define AUDIT_CLIENT_GET_CLUSTER_INFORMATION (AUDIT_CLIENT_LOG_ERROR_BASE + 0x33) 307#define AUDIT_CLIENT_GET_CLUSTER_INFORMATION_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x34) 308#define AUDIT_CLIENT_GET_ROOT_CA_CERTIFICATE_INVALID_CA_CERTIFICATE_FORMAT (AUDIT_CLIENT_LOG_ERROR_BASE + 0x35) 309#define AUDIT_CLIENT_GET_ROOT_CA_CERTIFICATE_INVALID_RESPONSE_FORMAT (AUDIT_CLIENT_LOG_ERROR_BASE + 0x36) 310#define AUDIT_CLIENT_LOAD_CLUSTER_INFORMATION_INVALID_CLUSTER_FILE_FORMAT (AUDIT_CLIENT_LOG_ERROR_BASE + 0x37) 311#define AUDIT_CLIENT_LOAD_CLUSTER_INFORMATION_OPEN_CLUSTER_FILE_FAILED (AUDIT_CLIENT_LOG_ERROR_BASE + 0x38) 312#define AUDIT_CLIENT_LOAD_PROFILE_EXPORT_CERTIFICATE_AND_KEY_FAILED (AUDIT_CLIENT_LOG_ERROR_BASE + 0x39) 313#define AUDIT_CLIENT_LOAD_PROFILE_FAILED (AUDIT_CLIENT_LOG_ERROR_BASE + 0x3a) 314#define AUDIT_CLIENT_LOAD_PROFILE_SAVE_CA_CERTIFICATE_FAILED (AUDIT_CLIENT_LOG_ERROR_BASE + 0x3b) 315#define AUDIT_CLIENT_LOAD_PROFILE_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x3c) 316#define AUDIT_CLIENT_SAVE_CLUSTER_INFORMATION_OPEN_CLUSTER_FILE_FAILED (AUDIT_CLIENT_LOG_ERROR_BASE + 0x3d) 317#define AUDIT_CLIENT_SAVE_ROOTCA_FAILED (AUDIT_CLIENT_LOG_ERROR_BASE + 0x3e) 318#define AUDIT_CLIENT_SELECT_APPLIANCE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x3f) 319#define AUDIT_PROFILE_READ_CONFIG_FILE_INVALID_CONFIGURATION_FILE_FORMAT (AUDIT_CLIENT_LOG_ERROR_BASE + 0x40) 320#define AUDIT_PROFILE_READ_CONFIG_FILE_OPEN_CONFIGURATION_FILE_FAILED (AUDIT_CLIENT_LOG_ERROR_BASE + 0x41) 321#define AUDIT_PROFILE_WRITE_CONFIG_FILE_OPEN_CONFIGURATION_FILE_FAILED (AUDIT_CLIENT_LOG_ERROR_BASE + 0x42) 322#define LoadProfile_AUDIT_CLIENT_GET_ROOT_CA_CERTIFICATE_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x43) 323#define AUDIT_CLIENT_AGENT_CREATE_KEY_AESKEYUNWRAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x44) 324#define AUDIT_CLIENT_AGENT_REGISTER_KWK_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x45) 325#define AUDIT_CLIENT_AGENT_REGISTER_KWK_INVALID_KEYID_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x46) 326#define AUDIT_CLIENT_AGENT_CREATE_KWK_RNG_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x47) 327#define AUDIT_CLIENT_GET_KWK_WRAPPING_KEY_SOAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x48) 328#define AUDIT_CLIENT_GET_KWK_WRAPPING_KEY_INVALID_KEY_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x49) 329#define AUDIT_CLIENT_GET_KWK_WRAPPING_KEY_INVALID_RSA_PUB_KEY (AUDIT_CLIENT_LOG_ERROR_BASE + 0x50) 330#define AUDIT_CLIENT_AGENT_CREATE_KWK_PUBLIC_ENCRYPT_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x51) 331#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_AESKEYUNWRAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x52) 332#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_AESKEYUNWRAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x53) 333#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_AESKEYUNWRAP_ERROR (AUDIT_CLIENT_LOG_ERROR_BASE + 0x54) 334#define AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_WRAPPED_KEY_LENGTH_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x55) 335#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_WRAPPED_KEY_LENGTH_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x56) 336#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_WRAPPED_KEY_LENGTH_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x57) 337#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_WRAPPED_KEY_LENGTH_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x58) 338#define AUDIT_CLIENT_AGENT_CREATE_KEY_KWKID_MISMATCH (AUDIT_CLIENT_LOG_ERROR_BASE + 0x59) 339#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_KWKID_MISMATCH (AUDIT_CLIENT_LOG_ERROR_BASE + 0x60) 340#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_KWKID_MISMATCH (AUDIT_CLIENT_LOG_ERROR_BASE + 0x61) 341#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_KWKID_MISMATCH (AUDIT_CLIENT_LOG_ERROR_BASE + 0x62) 342#define AUDIT_CLIENT_AGENT_LOAD_PROFILE_NO_FIPS_COMPATIBLE_KMAS_AVAILABLE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x63) 343 344#endif 345