summaryrefslogtreecommitdiff
path: root/usr/src/lib/libkmsagent/common/KMSAgent.h
diff options
context:
space:
mode:
authorJohn Sonnenschein <johns@joyent.com>2012-05-17 18:26:57 +0000
committerJohn Sonnenschein <johns@joyent.com>2012-05-17 18:26:57 +0000
commit04b244dd661c24b510ac22936decfc0972d202d3 (patch)
tree3ebfef98afc303fddf3415d6fba64e8682f495e8 /usr/src/lib/libkmsagent/common/KMSAgent.h
parenteac250589e41f1b705e1b7427b02b3379aac9f9e (diff)
parenta69187741b83640a90dd8586195456dd50c016a8 (diff)
downloadillumos-joyent-20120517.tar.gz
Merge git.joyent.com:illumos-joyent20120517
Diffstat (limited to 'usr/src/lib/libkmsagent/common/KMSAgent.h')
-rw-r--r--usr/src/lib/libkmsagent/common/KMSAgent.h1163
1 files changed, 0 insertions, 1163 deletions
diff --git a/usr/src/lib/libkmsagent/common/KMSAgent.h b/usr/src/lib/libkmsagent/common/KMSAgent.h
deleted file mode 100644
index b06da4b6a8..0000000000
--- a/usr/src/lib/libkmsagent/common/KMSAgent.h
+++ /dev/null
@@ -1,1163 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/** @file KMSAgent.h
- * @defgroup EncryptionAgent Encryption Agent API
- *
- * The Agent API is used to communicate with the KMS Appliance for the
- * purpose of registering storage devices, obtaining device keys, and
- * receiving notifications of storage device events such as destruction.
- *
- */
-#ifndef KMS_AGENT_H
-#define KMS_AGENT_H
-
-#include "KMSClientProfile.h"
-
-/*---------------------------------------------------------------------------
- * The following ifdef block is the standard way of creating macros which
- * make exporting from a DLL simpler. All files within this DLL are compiled
- * with the KMS_AGENT_EXPORT symbol defined on the command line. this symbol
- * should not be defined on any project that uses this DLL. This way any
- * other project whose source files include this file see KMS Agent API functions
- * as being imported from a DLL, wheras this DLL sees symbols defined with
- * this macro as being exported.
- *--------------------------------------------------------------------------*/
-#ifdef KMS_AGENT_EXPORT
-#define KMS_AGENT_API __declspec(dllexport)
-#else
-#define KMS_AGENT_API __declspec(dllimport)
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*---------------------------------------------------------------------------
- * Return Codes
- *--------------------------------------------------------------------------*/
-
-/**
- * The status type returned on API calls
- */
-typedef int KMS_AGENT_STATUS;
-
-/**
- * successful status
- */
-#define KMS_AGENT_STATUS_OK 0
-
-/* error status values */
-/**
- * generic error is a catch all for a wide variety of errors, see the specific
- * entry in the audit log for the details. In general, the client API will return
- * one of the specific status codes.
- */
-#define KMS_AGENT_STATUS_GENERIC_ERROR 100
-
-/**
- * insufficient memory for the agent library to complete the request
- */
-#define KMS_AGENT_STATUS_NO_MEMORY 102
-
-/**
- * parameter error, invalid input
- */
-#define KMS_AGENT_STATUS_INVALID_PARAMETER 103
-
-/**
- * an API call was made before the profile was loaded
- */
-#define KMS_AGENT_STATUS_PROFILE_NOT_LOADED 104
-
-/**
- * upon receipt of a key the callout function returned an error
- */
-#define KMS_AGENT_STATUS_KEY_CALLOUT_FAILURE 105
-
-/**
- * the specified profile failover attempts have been exceeded or no KMAs are available within the cluster
- */
-#define KMS_AGENT_STATUS_KMS_UNAVAILABLE 106
-
-/**
- * the KMS does not have any keys in the READY state, this is a KMS issue that requires attention
- * from a KMS administrator.
- */
-#define KMS_AGENT_STATUS_KMS_NO_READY_KEYS 107
-
-/**
- * the FIPS 140-2 known answer test (KAK) failed for AES Key wrap.
- */
-#define KMS_AGENT_STATUS_FIPS_KAT_AES_KEYWRAP_ERROR 108
-
-/**
- * #FIPS_MODE was specified on #KMSAgent_LoadProfile
- * but no FIPS compatible KMAs are currently
- * available. Also, it may be that no FIPS compatible KMAs have been
- * configured within the KMS.
- */
-#define KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE 109
-
-/**
- * the profile was already successfully loaded and should be unloaded
- * before attempting to load it again
- */
-#define KMS_AGENT_STATUS_PROFILE_ALREADY_LOADED 110
-
-/**
- * the FIPS 140-2 known answer test (KAK) failed for AES ECB.
- */
-#define KMS_AGENT_STATUS_FIPS_KAT_AES_ECB_ERROR 111
-
-/**
- * the FIPS 140-2 known answer test (KAK) failed for HMAC-SHA1.
- */
-#define KMS_AGENT_STATUS_FIPS_KAT_HMAC_SHA1_ERROR 112
-
-/*
- * SOAP Sender Errors - client errors associated with a KMS SOAP service
- */
-
-/**
- * the following conditions can result in access denied being returned by the KMSAgent Soap service:
- * <ul>
- * <li>Agent is not enabled on the KMS
- * <li>Invalid DataUnitID or DataUnit does not exist
- * <li>Invalid ExternalUniqueID or DataUnit does not exist with specified ID
- * <li>Invalid ExternalTag
- * <li>Invalid KeyID
- * <li>Invalid KeyGroup or KeyGroup does not exist
- * <li>The Agent ID is not recognized as an agent by the KMS, i.e. the agent may not exist or the
- * ID represents another kind of entity.
- * <li>No KeyGroup specified and the Agent is not configured to have a default KeyGroup
- * <li>Agent does not have access to the specified KeyGroup
- * </ul>
- * to prevent leakage of information the specific details for access being denied are not
- * disclosed. Audit log entries at the KMS can be used to determine specific reasons for
- * access being denied.
- */
-#define KMS_AGENT_STATUS_ACCESS_DENIED 200
-
-/**
- * This error status is only returned when received from the KMS and the transaction
- * timeout has been exceeded.
- */
-#define KMS_AGENT_STATUS_SERVER_BUSY 201
-
-/**
- * a data unit already exists with the specified external unique identifier
- */
-#define KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS 202
-
-/**
- * The external unique ID specified was found to exist but the corresponding
- * DataUnitID did not exist.
- */
-#define KMS_AGENT_STATUS_DATA_UNIT_ID_NOT_FOUND_EXTERNAL_ID_EXISTS 203
-
-
-/**
- * The specified key has been destroyed or is unknown to the KMS
- */
-#define KMS_AGENT_STATUS_KEY_DOES_NOT_EXIST 204
-
-/**
- * The requested key has been destroyed.
- */
-#define KMS_AGENT_STATUS_KEY_DESTROYED 205
-
-/**
- * The key received from a KMA encountered an error during AES Key Unwrapping
- */
-#define KMS_AGENT_AES_KEY_UNWRAP_ERROR 206
-
-/**
- * An error occurred during establishment of an AES Key-Encryption Key
- */
-#define KMS_AGENT_AES_KEY_WRAP_SETUP_ERROR 207
-
-/*
- * Failed to decrypt the client private key data file due to incorrect PIN
- */
-#define KMS_AGENT_LOCAL_AUTH_FAILURE 208
-
-/**
- * supported key types
- */
-enum KMS_KEY_TYPE
-{
- /**
- * AES 256 key type
- */
- KMS_KEY_TYPE_AES_256
-};
-
-/**
- * This enumerator type defines the various Key States.
- */
-enum KMS_AGENT_KEY_STATE
-{
- KMS_KEY_STATE_GENERATED = 0,
- KMS_KEY_STATE_READY,
-
- /**
- * A key in this state can be used for both encryption and decryption.
- * A key is placed into this state when it is assigned. The assignment is done when an encryption agent requests a new key be created.
- */
- KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS,
-
- /**
- * A key in this state can be used for decryption but not encryption. When an agent determines that none of the keys available to
- * it (e.g., for a specific data unit that is being read or written) are in the protect-and-process state, it should create a new key.
- * Keys transition from protect-and-process to process only when the encryption period for the key expires.
- */
- KMS_KEY_STATE_ACTIVE_PROCESS_ONLY,
-
- /**
- * The key has passed its cryptoperiod but may still be needed to process (decrypt) information. Auditable events are generated
- * when keys in this state are provided to the agent.
- */
- KMS_KEY_STATE_DEACTIVATED,
-
- /**
- * Keys are compromised when they are released to or discovered by an unauthorized entity.
- * Compromised keys should not be used to protect information, but may be used to process information.
- * Auditable events are generated
- * when keys in this state are provided to the agent.
- */
- KMS_KEY_STATE_COMPROMISED,
-
- KMS_KEY_STATE_DESTROYED_INCOMPLETE,
- KMS_KEY_STATE_DESTROYED_COMPLETE,
- KMS_KEY_STATE_DESTROYED_COMPROMISED_INCOMPLETE,
- KMS_KEY_STATE_DESTROYED_COMPROMISED_COMPLETE
-
-};
-
-/*---------------------------------------------------------------------------
- * Data Unit State
- *--------------------------------------------------------------------------*/
-
-/**
- * this enumeration defines the DataUnit states
- */
-enum KMS_AGENT_DATA_UNIT_STATE
-{
- /**
- * When a data unit has been created, but has not yet had any keys created it will be in "no key" state.
- * This should be a short, transient condition that will be exited as soon as a key has been created.
- */
- KMS_DATA_UNIT_STATE_NO_KEY = 0,
-
- /**
- * Normal is a substate of readable. In this state, a data unit has at least one protect-and-process state key that can be used to encrypt data.
- * The data unit is therefore writable.
- */
- KMS_DATA_UNIT_STATE_READABLE_NORMAL,
-
- /**
- * Needs rekey is a substate of readable. In this state, the data unit has no protect-and-process keys.
- * Data should not be encrypted and written to the data unit unless the data unit is rekeyed and a new, active key is assigned.
- * Its the responsibility of the agent to avoid using a key that is not in protect-and-process state for encryption.
- * The data unit may have keys that are in process only, deactivated, or compromised state. Any of these keys can be used for decryption.
- */
- KMS_DATA_UNIT_STATE_READABLE_NEEDS_REKEY,
-
- /**
- * When all of the keys for a data unit are destroyed, the data unit is shredded. The data unit cannot be read or written.
- * However, a new key can be created for the data unit. This will return the data unit to normal state, allowing it to be read and written.
- */
- KMS_DATA_UNIT_STATE_SHREDDED
-};
-
-/**
- * This enumeration type defines Audit Log Retention values
- */
-enum KMS_AUDIT_LOG_RETENTION
-{
- /**
- * specifies that an audit log entry should have long term retention
- */
- KMS_AUDIT_LOG_LONG_TERM_RETENTION = 0,
- /**
- * specifies that an audit log entry should have medium term retention
- */
- KMS_AUDIT_LOG_MEDIUM_TERM_RETENTION,
- /**
- * specifies that an audit log entry should have short term retention
- */
- KMS_AUDIT_LOG_SHORT_TERM_RETENTION
-};
-
-/**
- * This enumeration type defines Audit Log Condition values
- */
-enum KMS_AUDIT_LOG_CONDITION
-{
- /**
- * specifies that an audit log entry should should indicate a success condition
- */
- KMS_AUDIT_LOG_SUCCESS_CONDITION = 0,
-
- /**
- * specifies that an audit log entry should should indicate an error condition
- */
- KMS_AUDIT_LOG_ERROR_CONDITION,
-
- /**
- * specifies that an audit log entry should should indicate a warning condition
- */
- KMS_AUDIT_LOG_WARNING_CONDITION
-};
-
-/**
- * supported security modes
- */
-enum KMS_SECURITY_MODE
-{
- /**
- * agent will work with any level of KMA
- */
- DEFAULT_MODE = 0,
-
- /**
- * agent will only communicate with KMAs supporting FIPS 140-2 so that
- * keys are encrypted at the KMA using AES Key Wrap.
- */
- FIPS_MODE
-};
-
-/*---------------------------------------------------------------------------
- * API Input/Output Data Structures
- *--------------------------------------------------------------------------*/
-/**
- * typedef for descriptions used in various places within the API
- */
-typedef utf8char DESCRIPTION [KMS_MAX_DESCRIPTION+1];
-
-/**
- * typedef for key group ID
- */
-typedef utf8char KEY_GROUP_ID[KMS_MAX_ID+1];
-
-/**
- * typedef for the Key Group struct
- */
-typedef struct KMSAgent_KeyGroup KMSAgent_KeyGroup;
-
-/** \struct KMSAgent_KeyGroup
- * a Key Group with its ID and description
- */
-struct KMSAgent_KeyGroup
-{
- /**
- * the unique ID of the KeyGroup
- */
- KEY_GROUP_ID m_acKeyGroupID;
-
- /**
- * the description of the KeyGroup
- */
- DESCRIPTION m_acDescription;
-};
-
-/**
- * An array of Key Groups
- */
-typedef struct KMSAgent_ArrayOfKeyGroups KMSAgent_ArrayOfKeyGroups;
-
-/** \struct KMSAgent_ArrayOfKeyGroups
- * An array of Key Groups
- */
-struct KMSAgent_ArrayOfKeyGroups
-{
- /**
- * pointer to an array of Key Groups
- */
- KMSAgent_KeyGroup* m_pKeyGroups;
-
- /**
- * the number of Key Groups in the array
- */
- int m_iSize;
-};
-
-
-/**
- * typedef for a Key struct
- */
-typedef struct KMSAgent_Key KMSAgent_Key;
-
-/** \struct KMSAgent_Key
- * key and its associated properites: KeyID, state, type, lenth, KeyGroup and the Key value
- */
-struct KMSAgent_Key
-{
- /**
- * the unique ID of the key
- */
- KEY_ID m_acKeyID;
-
- /**
- * the state of the Key
- */
- enum KMS_AGENT_KEY_STATE m_iKeyState;
-
- /**
- * the type of the key, e.g. AES_256
- */
- enum KMS_KEY_TYPE m_iKeyType;
-
- /**
- * the unique ID of the KeyGroup
- */
- KEY_GROUP_ID m_acKeyGroupID;
-
- /**
- * the key in plaintext.
- */
- KEY m_acKey;
-
- /**
- * length of #m_acKey
- */
- int m_iKeyLength;
-};
-
-/**
- * typedef for the External Unique ID
- */
-typedef unsigned char EXTERNAL_UNIQUE_ID [KMS_MAX_EXTERNAL_UNIQUE_ID_SIZE];
-
-/**
- * typedef for the Data Unit ID
- */
-typedef unsigned char DATA_UNIT_ID [KMS_DATA_UNIT_ID_SIZE];
-
-/**
- * typedef for the External Tag
- */
-typedef utf8char EXTERNAL_TAG [KMS_MAX_EXTERNAL_TAG+1];
-
-/**
- * typedef for aData Unit structure.
- */
-typedef struct KMSAgent_DataUnit KMSAgent_DataUnit;
-
-/** \struct KMSAgent_DataUnit
- * struct for a DataUnit and its associated properties: DataUnitID, external unique ID,
- * external tag, description and state. Data units are associated with zero or more keys.
- */
-struct KMSAgent_DataUnit
-{
- /**
- * the unique DataUnit ID provided by the KMS
- */
- DATA_UNIT_ID m_acDataUnitID;
-
- /**
- * a unique external ID for the data unit that is provided by the agent, may be NULL if one is not provided.
- * The KMS will enforce the uniqueness of this identifier and not allow multiple data units having the same
- * #m_acExternalUniqueID value.
- */
- EXTERNAL_UNIQUE_ID m_acExternalUniqueID;
- /**
- * the length in bytes of the #m_acExternalUniqueID field that represents the
- * ID. The length
- * must be less than or equal to #KMS_MAX_EXTERNAL_UNIQUE_ID_SIZE
- */
- int m_iExternalUniqueIDLength;
-
- /**
- * an external tag representing information pertinent to the data unit, for example a volume serial number
- */
- EXTERNAL_TAG m_acExternalTag;
-
- /**
- * a description of the data unit
- */
- DESCRIPTION m_acDescription;
-
- /**
- * the state of the DataUnit
- */
- enum KMS_AGENT_DATA_UNIT_STATE m_iDataUnitState;
-
-};
-
-/**
- * typedef for a list of keys
- */
-typedef struct KMSAgent_ArrayOfKeys KMSAgent_ArrayOfKeys;
-
-/** \struct KMSAgent_ArrayOfKeys
- * struct for an array of keys
- */
-struct KMSAgent_ArrayOfKeys
-{
- /**
- * keys are in chronological order based upon key creation date. However,
- * when page offset argument to #KMSAgent_RetrieveDataUnitKeys
- * is 0 the first key in the array will be the key in the
- * #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS.
- */
- KMSAgent_Key* m_pKeys;
-
- /**
- * the number of keys in the list
- */
- int m_iSize;
-};
-
-/**
- * @return the version string for the KMS Agent Library
- */
-const char * KMSAgent_GetVersion();
-
-/**
- *
- * This function initializes the KMS Agent API library. It
- * should be called before any other functions are invoked. Internally,
- * sets up the SSL library and Logging module.
- *
- * @param i_pWorkingDirectory Working directory of the program which uses the
- * library. Default is "." if NULL is passed.
- * @param i_bUseFileLog: True(1) if errors should go to a log file in the working directory.
- * If false(0) then errors will not be logged to a file.
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR if library initialization fails
- */
-KMS_AGENT_STATUS KMSAgent_InitializeLibrary(
- const utf8cstr i_pWorkingDirectory,
- int i_bUseFileLog );
-
-/**
- * This function exercises FIPS 140-2 Known Answer Tests for certified algorithms
- * used in the agent toolkit. This function should only be called once and may
- * be called prior to #KMSAgent_InitializeLibrary.
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_FIPS_KAT_AES_KEYWRAP_ERROR
- * @return #KMS_AGENT_STATUS_FIPS_KAT_AES_ECB_ERROR
- * @return #KMS_AGENT_STATUS_FIPS_KAT_HMAC_SHA1_ERROR
- */
-KMS_AGENT_STATUS KMSAgent_KnownAnswerTests();
-
-/**
- * This function finalizes the KMS Agent API library. It should
- * be called when the library is not needed by the program. Internally it
- * cleans up the SSL library and Logging module.
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR if library finalization fails
- *
- */
-KMS_AGENT_STATUS KMSAgent_FinalizeLibrary();
-
-/**
- * This function can be used to get the last error message when
- * an API function encounters an error. These error messages also
- * are written to the log, if file logging was enabled during library
- * initialization.
- *
- * @param i_pProfile an initialized #KMSClientProfile; the failed
- * function must have used this profile.
- * @return the pointer to the last error message or NULL
- *
- */
-utf8cstr KMSAgent_GetLastErrorMessage(
- KMSClientProfile* i_pProfile );
-
-
- /**
- * Get the cluster information by calling the KMS_Discovery service using the KMA specified in the
- * profile, no load balancing will occur. If discovery to this KMA fails then discovery will be
- * attempted using previously retrieved cluster information.
- *
- * If #KMSAgent_LoadProfile was called with an IPv6 address for
- * the <code>i_pInitialApplianceAddress</code> argument then the <code>o_pClusterEntryArray</code> will contain
- * IPv6 addresses instead of IPv4 addresses for each KMA that has an IPv6 address.
- * @see #KMSAgent_LoadProfile and #KMSAgent_SelectAppliance.
- *
- * If the size of the cluster returned by the KMS_Discovery servic exceeds <code>i_iClusterEntryArraySize</code>
- * then the KMA list is filtered to contain the
- * first <code>i_iClusterEntryArraySize</code> KMAs that meet the profile's FIPS setting, agent site and are reported as responding by the
- * KMS discover cluster response.
- *
- * @param i_pProfile a pointer to an initialized #KMSClientProfile structure
- * @param i_iEntitySiteIDSize the buffer size of the entity site ID including null terminator
- * (should be greater than #KMS_MAX_ENTITY_SITE_ID )
- * @param i_iClusterEntryArraySize the array size for cluster entries (must be less than or equal to #KMS_MAX_CLUSTER_NUM )
- * @param o_pEntitySiteID a buffer allocated by the caller to store the agent's (aka entity) Site ID
- * @param o_pApplianceNum the returned number of appliances in the cluster
- * @param o_pClusterEntryArray a buffer allocated by the caller to store the array of cluster entries
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_ACCESS_DENIED
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- * @return #KMS_AGENT_STATUS_SERVER_BUSY
- * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- */
- KMS_AGENT_STATUS KMSAgent_GetClusterInformation(
- KMSClientProfile * const i_pProfile,
- int i_iEntitySiteIDSize,
- int i_iClusterEntryArraySize,
- utf8cstr const o_pEntitySiteID,
- int * const o_pApplianceNum,
- KMSClusterEntry * const o_pClusterEntryArray);
-
-/**
- * Specifies the Key Management Appliance to be used
- * for retrieving cluster information.
- *
- * @param i_pProfile a pointer to an initialized #KMSClientProfile
- * structure
- * @param i_pApplianceAddress the IP address of the appliance. IPv6 addresses
- * must be enclosed in brackets, [], see #KMSAgent_LoadProfile.
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- *
- */
-KMS_AGENT_STATUS KMSAgent_SelectAppliance(
- KMSClientProfile* const i_pProfile,
- utf8cstr const i_pApplianceAddress );
-
-/**
- * Load profile handles both agent enrollment with the KMS and post enrollment setup.
- * <p>
- * <b>Enrollment Behavior</b>
- * <br>
- * When a passphrase is supplied enrollment, or reenrollment, with a KMS cluster is attempted in order
- * to establish a mutual trust relationship. Enrollment occurs with the KMA in the cluster specified
- * by <code>i_pApplianceAddress</code>.
- * <p>
- * The KMS CA web service is used for CA certificate retrieval prior to
- * invoking the KMS Certificate web service. Certficate retrieval via these services
- * uses the <code>i_pApplianceAddress</code> for enrollment. Cluster discovery is then performed to
- * identify the set of KMAs within the cluster.
- * Successful enrollment results in
- * persistent storage of the CA X.509 certificate, agent X.509 certificate and private key.
- * </p>
- * Once enrolled successfully the KMS
- * will then disable usage of the agent's passphrase for enrollment as a security precaution.
- * Subsequent enrollment will require a new passphrase.
- * <p>
- * <b>Post Enrollment Behavior</b>
- * <br>
- * When a passphrase is not provided a profile is assumed to exist and the library profile structure
- * is initialized from persistent storage with the configuration settings(agent ID,
- * KMA service port numbers, KMA Address, transaction timeout, discovery frequency, transaction timeout
- * and failover limit), cluster information(agent's site ID and KMA cluster information and KMA status) and
- * enrollment items: the CA certificate, Agent Certificate and agent private key.
- * <p>
- * Finally, cluster discovery is performed(unless disabled), and a load balancer is initialized
- * for balancing transactions across KMAs within the
- * cluster and for handling transaction failover scenarios.
- * Subsequent API calls using the profile will invoke cluster discovery at the frequency specified
- * by <code>iClusterDiscoveryFrequency</code>. Updated discovery information is persisted with the
- * profile. The load balancer maintains affinity to KMAs within the same site as the agent for
- * agent transactions unless an error requires failover
- * to another KMA in the cluster. An agent's site ID may also be updated by a discovery
- * operation.
- *
- * @param io_pProfile a pointer to a #KMSClientProfile buffer allocated by the caller
- * @param i_pProfileName the profile name
- * @param i_pAgentID Optional. For a new profile the encryption agent's ID is required.
- * @param i_pPassphrase Optional. For a new profile the encryption agent's passphrase is required. This passphrase
- * may only be used once for a successful retrieval of the Certificate and agent private key.
- * @param i_pInitialApplianceAddress the initial IP Address of an Appliance in the KMS Cluster that is reachable by this agent. If
- * enrollment has previously occurred specification of an initial IP address that is not
- * a member of the profile's cluster information will force the cluster information
- * to be deleted and discovery to be performed with the new IP address.
- * An IPv6 address may be supplied but must be enclosed with brackets, [], in accordance
- * with RFC 2396, "Format for Literal IPv6 Addresses in URL's". Supplying an IPv6 address will cause
- * the agent library to utilize KMA IPv6 addresses over IPv4 addresses when they are available,
- * otherwise IPv4 KMA addresses will be used.
- * @param i_iTransactionTimeout the timeout setting for a transaction in seconds, must be a positive value.
- * @param i_iFailOverLimit Failed KMA transactions will be retried up to this limit. Once this limit
- * has been reached API calls will return #KMS_AGENT_STATUS_KMS_UNAVAILABLE.
- * Specify -1 for unlimited failover attempts, 0 for no failover. The worst case completion time for
- * an API call is approximately equal to <code>i_iFailOverLimit</code> * <code>i_iTransactionTimeout</code>.
- *
- * @param i_iClusterDiscoveryFrequency
- * frequency of calling cluster discovery service
- * in seconds (use 0 to disable load balancing and periodic cluster discovery)
- * @param i_eKMSmode specifies the KMS operational mode that the
- * agent should enforce. Setting this to #FIPS_MODE
- * causes the agent to only communicate with KMAs in the
- * cluster that support AES key wrapping for key requests.
- * This is not a persisted setting and is only applicable
- * to the current session.
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- * @return #KMS_AGENT_STATUS_PROFILE_ALREADY_LOADED
- * @return #KMS_AGENT_STATUS_ACCESS_DENIED
- * @return #KMS_AGENT_STATUS_SERVER_BUSY
- * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- */
-KMS_AGENT_STATUS KMSAgent_LoadProfile(
- KMSClientProfile* const io_pProfile,
- utf8cstr const i_pProfileName,
- utf8cstr const i_pAgentID,
- utf8cstr const i_pPassphrase,
- utf8cstr const i_pInitialApplianceAddress,
- int i_iTransactionTimeout,
- int i_iFailOverLimit,
- int i_iClusterDiscoveryFrequency,
- int i_eKMSmode );
-
-
-/**
- * Destroy the profile information in memory, the agent's profile configuration,
- * cluster information, certificate and
- * private key are retained in persistant storage.
- *
- * @param i_pProfile a pointer to an initialized KMSClientProfile
- * structure.
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- *
- */
-KMS_AGENT_STATUS KMSAgent_UnloadProfile(
- KMSClientProfile* const i_pProfile );
-
-/**
- * Delete the profile information from persistent storage. The agent's profile configuration,
- * cluster information, certificate and
- * private key are discared, see #KMSAgent_LoadProfile for how to initialize
- * the profile again. The profile should be unloaded prior to making this call.
- *
- * @param i_pProfileName the profile name
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- */
-KMS_AGENT_STATUS KMSAgent_DeleteProfile(
- utf8cstr i_pProfileName );
-
-/**
- * Fetch the key groups this agent is allowed to access. The caller should invoke #KMSAgent_FreeArrayOfKeyGroups
- * to release the allocated memory resources for the array. Up to #KMS_MAX_LIST_KEY_GROUPS key groups will be
- * returned.
- *
- * @param i_pProfile an initialized #KMSClientProfile
- * @param o_ppKeyGroups a buffer allocated by this routine for the array of Key Groups and individual key groups
- * that this agent is allowed to access
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- * @return #KMS_AGENT_STATUS_NO_MEMORY
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_ACCESS_DENIED
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_SERVER_BUSY
- * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- */
-KMS_AGENT_STATUS KMSAgent_ListKeyGroups(
- KMSClientProfile* const i_pProfile,
- KMSAgent_ArrayOfKeyGroups** const o_ppKeyGroups );
-
-/**
- * Helper function which frees memory allocated for the output
- * to #KMSAgent_ListKeyGroups.
- *
- * @param i_pArrayOfKeyGroups a pointer to #KMSAgent_ArrayOfKeyGroups
- *
- * @return void
- *
- */
-void KMSAgent_FreeArrayOfKeyGroups(
- KMSAgent_ArrayOfKeyGroups* i_pArrayOfKeyGroups );
-
-/**
- * Creates a Key for the specified data unit. If a data unit is provided then the key will be associated with
- * the data unit. The type of key created is dictated by the KMS key policy for the key group. This policy is set up by KMS
- * administrators to be compatible with agents associated with the key group.
- * If KeyGroup is provided then the new key is associated with the specified KeyGroup, otherwise the agent's
- * default KeyGroup is associated with the key.
- * @param i_pProfile an initialized #KMSClientProfile
- * @param i_pDataUnit Optional. a pointer to a data unit to be associated with the key, if known.
- * @param i_pKeyGroupID Optional, the KeyGroup ID to be assigned to the new Key, if known. Pass NULL
- * if unknown and the new key will be associated with the agent's default key group
- * @param o_pKey A pointer to a buffer for returning the new key and key associated data.
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- * @return #KMS_AGENT_STATUS_NO_MEMORY
- * @return #KMS_AGENT_STATUS_KEY_CALLOUT_FAILURE
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_ACCESS_DENIED
- * @return #KMS_AGENT_STATUS_SERVER_BUSY
- * @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- * @return #KMS_AGENT_STATUS_KMS_NO_READY_KEYS
- * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- * @return #KMS_AGENT_AES_KEY_UNWRAP_ERROR
- * @return #KMS_AGENT_AES_KEY_WRAP_SETUP_ERROR
- */
-KMS_AGENT_STATUS KMSAgent_CreateKey(
- KMSClientProfile* const i_pProfile,
- const KMSAgent_DataUnit* const i_pDataUnit,
- KEY_GROUP_ID const i_pKeyGroupID,
- KMSAgent_Key* const o_pKey);
-
-/**
- * Creates a DataUnit with the specified external unique id and external tag.
- *
- * @param i_pProfile an initialized #KMSClientProfile
- * @param i_pExternalUniqueID Optional. A unique data unit identifier to be associated with
- * the data unit. Uniqueness is enforced by the KMS. See also #KMSAgent_RetrieveDataUnit.
- * @param i_iExternalUniqueIDIDLen Length in bytes of the external unique identifier. If
- * <code>i_pExternalUniqueID</code> is NULL then this field is ignored, otherwise a positive length must be provided.
- * @param i_pExternalTag Optional, but recommended. Pointer to an External Tag for the data unit, e.g. a volume serial number.
- * @param i_pDescription Optional, a textual description of the data unit.
- * @param o_pDataUnit a pointer to a DataUnit buffer where
- * data unit information is returned
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- * @return #KMS_AGENT_STATUS_NO_MEMORY
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_ACCESS_DENIED
- * @return #KMS_AGENT_STATUS_SERVER_BUSY
- * @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
-*/
-KMS_AGENT_STATUS KMSAgent_CreateDataUnit(
- KMSClientProfile* const i_pProfile,
- const unsigned char * i_pExternalUniqueID,
- int i_iExternalUniqueIDIDLen,
- utf8cstr const i_pExternalTag,
- utf8cstr const i_pDescription,
- KMSAgent_DataUnit* const o_pDataUnit);
-
-/**
- * The agent may use this function to inform the KMS that the DataUnit has, or will be, overwritten.
- * The KMS will remove the association from the specified DataUnit to all its keys, excluding its key
- * in the #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS state. By utilizing this API, agent's can help keep the
- * number of keys returned by #KMSAgent_RetrieveDataUnitKeys to just the keys being used on the Data Unit.
- *
- * @param i_pProfile an initialized #KMSClientProfile
- * @param i_pDataUnit A pointer to the data unit
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- * @return #KMS_AGENT_STATUS_NO_MEMORY
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_ACCESS_DENIED
- * @return #KMS_AGENT_STATUS_SERVER_BUSY
- * @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- */
-KMS_AGENT_STATUS KMSAgent_DisassociateDataUnitKeys(
- KMSClientProfile* const i_pProfile,
- const KMSAgent_DataUnit* const i_pDataUnit);
-
-
-/**
- * retrieve a key by the Key's ID, optionally specifying the Data Unit and KeyGroup to be
- * associated with the key. Supplying the Data Unit information allows the KMS to add an
- * association between the Key and the Data Unit. The assumption being made is that the key being
- * retrieved has been used on the specified Data Unit and needs to be associated with it. This
- * side affect allows the KMS to build up its knowledge of key usage as it relies upon agents
- * for discovering and reporting how keys are being used on Data Units. For example, when keys
- * are imported into a KMS the information associating keys with DataUnits may not be provided,
- * consequently the KMS is unaware of what DataUnits were encrypted with a particular key.
- *
- * @param i_pProfile an initialized KMSClientProfile
- * @param i_pKeyID The ID of the Key being requested
- * @param i_pDataUnit Optional. If non-NULL, the KMS will verify that an association exists between the key and the Data Unit and create
- * the association if it is missing.
- * @param i_pKeyGroupID Optional. If non-NULL, and the key is not already associated with a KeyGroup, then the KMS will associate the key with the specified KeyGroup.
- * @param o_pKey A pointer to a buffer allcoated by the caller for returning the new key and key associated data.
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- * @return #KMS_AGENT_STATUS_NO_MEMORY
- * @return #KMS_AGENT_STATUS_KEY_CALLOUT_FAILURE
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_ACCESS_DENIED
- * @return #KMS_AGENT_STATUS_SERVER_BUSY
- * @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- * @return #KMS_AGENT_STATUS_KEY_DOES_NOT_EXIST
- * @return #KMS_AGENT_STATUS_KEY_DESTROYED
- * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- * @return #KMS_AGENT_AES_KEY_UNWRAP_ERROR
- * @return #KMS_AGENT_AES_KEY_WRAP_SETUP_ERROR
- */
-KMS_AGENT_STATUS KMSAgent_RetrieveKey(
- KMSClientProfile* const i_pProfile,
- const unsigned char * const i_pKeyID,
- const KMSAgent_DataUnit* const i_pDataUnit,
- utf8cstr const i_pKeyGroupID,
- KMSAgent_Key* const o_pKey);
-
-/**
- * Retrieve a Data Unit by its data unit identifier.
- *
- * @param i_pProfile an initialized #KMSClientProfile
- * @param i_pDataUnitID the data unit ID by which retrieval will be performed
- * @param i_pExternalUniqueID Optional, a unique data unit identifier to be associated with
- * the data unit. Uniqueness is enforced by the KMS.
- * @param i_iExternalUniqueIDLen Length in bytes of the external unique identifier, must be positive. If
- * <code>i_pExternalUniqueID</code> is NULL then this field is ignored.
- * @param i_pExternalTag Optional, but recommended. Pointer to a data unit external tag, e.g. volser
- * @param i_pDescription Optional, a textual description of the data unit.
- * @param o_pDataUnit a pointer to a DataUnit buffer allocated by the caller where
- * data unit information is returned
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- * @return #KMS_AGENT_STATUS_NO_MEMORY
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_ACCESS_DENIED
- * @return #KMS_AGENT_STATUS_SERVER_BUSY
- * @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- */
-KMS_AGENT_STATUS KMSAgent_RetrieveDataUnit(
- KMSClientProfile* const i_pProfile,
- const unsigned char * const i_pDataUnitID,
- const unsigned char * const i_pExternalUniqueID,
- int i_iExternalUniqueIDLen,
- utf8cstr const i_pExternalTag,
- utf8cstr const i_pDescription,
- KMSAgent_DataUnit* const o_pDataUnit);
-
-/**
- * Retrieve a Data Unit by its external unique identifier.
- * If the KMS does not contain a data unit with the specified unique identifier then a data unit will
- * be created. The new data unit will contain the external unique identifier and the external tag, if
- * provided.
- *
- * @param i_pProfile an initialized #KMSClientProfile
- * @param i_pExternalUniqueID A unique data unit identifier to be associated with
- * the data unit. Uniqueness is enforced by the KMS.
- * @param i_iExternalUniqueIDLen Length in bytes of the external unique identifier, must be positive.
- * @param i_pExternalTag Optional, but recommended. Pointer to a data unit external tag, e.g. volser
- * @param i_pDescription Optional, a textual description of the data unit.
- * @param o_pDataUnit a pointer to a DataUnit buffer allocated by the caller where
- * data unit information is returned
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- * @return #KMS_AGENT_STATUS_NO_MEMORY
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_ACCESS_DENIED
- * @return #KMS_AGENT_STATUS_SERVER_BUSY
- * @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- */
-KMS_AGENT_STATUS KMSAgent_RetrieveDataUnitByExternalUniqueID(
- KMSClientProfile* const i_pProfile,
- const unsigned char* const i_pExternalUniqueID,
- int i_iExternalUniqueIDLen,
- utf8cstr const i_pExternalTag,
- utf8cstr const i_pDescription,
- KMSAgent_DataUnit* const o_pDataUnit);
-
-/**
- * retrieve keys assigned to a Data Unit.
- * Agents should consult the state of each key that is returned and only
- * use the key in the #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS state for encryption. The agent service
- * attempts to return the most recently created key in the #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS state
- * as the first key in the list when a <code>i_pKeyID</code> is not specified. This cannot be guaranteed as
- * there may not be a key in the #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS state for the specified
- * data unit. The rest of the keys returned are sorted in ascending order by the time in which
- * they were created on the server.
- * #KMSAgent_DisassociateDataUnitKeys may be used to manage the
- * size of the key list associated with a data unit.
- * The <code>i_iPageSize</code>, <code>i_iPageOffset</code> and <code>o_piKeysRemaining</code> parameters may be used for retrieving
- * subsets of the list. For the <code>i_pKeyID</code> argument see the parameter's description.
- * Callers should invoke#KMSAgent_FreeArrayOfKeys when finished with the buffer of keys.
- *
- * @param i_pProfile an initialized #KMSClientProfile
- * @param i_pDataUnit The Data Unit for which all keys will be retrieved.
- * @param i_iPageSize the number of keys to be retrieved, up to #KMS_MAX_PAGE_SIZE.
- * @param i_iPageOffset the offset from the start of the data unit's key list. Set this to zero for
- * retrieval from the start of the list or if <code>i_pKeyID</code> is non-null.
- * When set to zero the first key returned in the list
- * will be the most recently created key in the #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS state.
- * @param o_piKeysRemaining a pointer to an integer where the number of keys remaining in the list will be returned
- * @param i_pKeyID Optional. If non-null, the caller provides a pointer to a KeyID that is used for
- * the retrieval and the list returned begins with the specified data unit's KeyID and up to
- * <code>i_iPageSize</code> keys associated with the data unit having an activation date greater than the key
- * corresponding to <code>i_pKeyID</code>. The first key in the list is not guaranteed
- * to be in the #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS state. If the specified <code>i_pKeyID</code>
- * is not associated with the Data Unit then the behavior is like #KMSAgent_RetrieveKey and
- * a single key is returned.
- * When non-null the <code>i_iPageOffset</code>
- * argument must be 0, these arguments are mutually exclusive.
- * @param o_ppKeys a pointer to pointer to a #KMSAgent_ArrayOfKeys struct allocated by this routine for returning the specified number of
- * Data Unit's keys and key associated data. Up to <code>i_iPageSize</code>
- * keys will be returned. Callers should invoke #KMSAgent_FreeArrayOfKeys
- * when finished with the buffer of keys.
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- * @return #KMS_AGENT_STATUS_NO_MEMORY
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_ACCESS_DENIED
- * @return #KMS_AGENT_STATUS_KEY_CALLOUT_FAILURE
- * @return #KMS_AGENT_STATUS_SERVER_BUSY
- * @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- * @return #KMS_AGENT_STATUS_KEY_DOES_NOT_EXIST if <code>i_pKeyID</code> does not exist in the KMS.
- * @return #KMS_AGENT_STATUS_KEY_DESTROYED if <code>i_pKeyID</code> has been destroyed.
- * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- * @return #KMS_AGENT_AES_KEY_UNWRAP_ERROR
- * @return #KMS_AGENT_AES_KEY_WRAP_SETUP_ERROR
- */
-KMS_AGENT_STATUS KMSAgent_RetrieveDataUnitKeys(
- KMSClientProfile* const i_pProfile,
- const KMSAgent_DataUnit* const i_pDataUnit,
- int i_iPageSize,
- int i_iPageOffset,
- int* const o_piKeysRemaining,
- const unsigned char * const i_pKeyID,
- KMSAgent_ArrayOfKeys** const o_ppKeys);
-
-/**
- * returns a key in the #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS for the specified data unit. A new
- * key will be created if the data unit does not have a key in the protect and process state or if the
- * agent is not authorized to access the key in the protect and process state.
- * @param i_pProfile an initialized #KMSClientProfile
- * @param i_pDataUnit The Data Unit for which a key in the protect and process state will be returned.
- * @param i_pKeyGroupID Optional. If non-NULL and a new key is to be created, the KMS will associate the key with the specified KeyGroup
- * @param o_pKey A pointer to a buffer for returning the protect and process key. If the data unit
- * is associated with multiple keys in the protect and process state then the
- * most recently created protect and process key is returned.
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- * @return #KMS_AGENT_STATUS_NO_MEMORY
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_ACCESS_DENIED
- * @return #KMS_AGENT_STATUS_KEY_CALLOUT_FAILURE
- * @return #KMS_AGENT_STATUS_SERVER_BUSY
- * @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- * @return #KMS_AGENT_STATUS_KMS_NO_READY_KEYS
- * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- * @return #KMS_AGENT_AES_KEY_UNWRAP_ERROR
- * @return #KMS_AGENT_AES_KEY_WRAP_SETUP_ERROR
- */
-KMS_AGENT_STATUS KMSAgent_RetrieveProtectAndProcessKey(
- KMSClientProfile* const i_pProfile,
- const KMSAgent_DataUnit* const i_pDataUnit,
- utf8cstr const i_pKeyGroupID,
- KMSAgent_Key* const o_pKey);
-
-/**
- * Helper function which frees memory allocated for the output to #KMSAgent_RetrieveDataUnitKeys.
- * @param i_pArrayOfKeys The array of keys to be freed
- */
-void KMSAgent_FreeArrayOfKeys(
- KMSAgent_ArrayOfKeys* i_pArrayOfKeys);
-
-/**
- * create an entry in the KMS audit log
- *
- * @param i_pProfile an initialized #KMSClientProfile
- * @param i_iRetention the retention of audit log, can be one of:
- * #KMS_AUDIT_LOG_LONG_TERM_RETENTION
- * #KMS_AUDIT_LOG_MEDIUM_TERM_RETENTION
- * #KMS_AUDIT_LOG_SHORT_TERM_RETENTION
- * @param i_iCondition the condition of audit log, can be one of:
- * #KMS_AUDIT_LOG_SUCCESS_CONDITION
- * #KMS_AUDIT_LOG_ERROR_CONDITION
- * #KMS_AUDIT_LOG_WARNING_CONDITION
- * @param i_bIssueAlert issue alert (SNMP INFORM) for this audit
- * @param i_pMessage the message text to be logged
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_ACCESS_DENIED
- * @return #KMS_AGENT_STATUS_SERVER_BUSY
- * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- */
-KMS_AGENT_STATUS KMSAgent_CreateAuditLog(
- KMSClientProfile* i_pProfile,
- enum KMS_AUDIT_LOG_RETENTION i_iRetention,
- enum KMS_AUDIT_LOG_CONDITION i_iCondition,
- int i_bIssueAlert,
- utf8cstr i_pMessage );
-
-
-#ifdef KMSUSERPKCS12
-#include <sys/types.h>
-KMS_AGENT_STATUS KMSAgent_ChangeLocalPWD(
- KMSClientProfile* i_pProfile,
- utf8cstr const i_pOldPassphrase,
- utf8cstr const i_pNewPassphrase);
-
-#define KMSAGENT_PROFILE_FLAGS uint32_t
-
-KMS_AGENT_STATUS
-KMSAgent_GetProfileStatus(
- char *i_pProfileName,
- KMSAGENT_PROFILE_FLAGS *flags);
-
-
-#define KMSAGENT_PROFILE_EXISTS_FLAG 0x01
-#define KMSAGENT_CLIENTKEY_EXISTS_FLAG 0x02
-#endif /* KMSUSERPKCS12 */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif