743 lines
18 KiB
C
743 lines
18 KiB
C
/***********************************************************************
|
|
*
|
|
* Copyright (C) 2005-2006 Novell, Inc.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; version 2.1
|
|
* of the License.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free
|
|
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*
|
|
* To contact Novell about this file by physical or electronic mail,
|
|
* you may find current contact information at www.novell.com.
|
|
*
|
|
***********************************************************************/
|
|
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
extern "C"
|
|
{
|
|
#endif
|
|
#include <stdio.h>
|
|
|
|
#ifdef SSCS_WIN32_PLAT_F
|
|
#include <windows.h>
|
|
#include <sscs_ipc.h>
|
|
#endif
|
|
|
|
#include "sscs_cache.h"
|
|
|
|
/* Starts a session with the cache and returns a handle to the cache.
|
|
* Parametrs:
|
|
* secretStoreID
|
|
* (IN) Points to SecretStoreID structure.
|
|
*
|
|
* Return Values:
|
|
* returns a pointer to SecretStoreHandle structure.
|
|
*/
|
|
void* sscs_CacheOpenSecretStore
|
|
(
|
|
void *secretStoreID,
|
|
uint32_t ssFlags,
|
|
void *reserved
|
|
|
|
)
|
|
{
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandle = NULL;
|
|
SSCS_LINUX_SS_HANDLE_T *platHandle = NULL;
|
|
int32_t retVal = 0;
|
|
|
|
ssHandle = (SSCS_SECRETSTORE_HANDLE_T *)malloc(sizeof(SSCS_SECRETSTORE_HANDLE_T));
|
|
if(NULL == ssHandle)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
platHandle = (SSCS_LINUX_SS_HANDLE_T *)malloc(sizeof(SSCS_LINUX_SS_HANDLE_T));
|
|
if(NULL == platHandle)
|
|
{
|
|
free(ssHandle);
|
|
return NULL;
|
|
}
|
|
memset(ssHandle,0,sizeof(SSCS_SECRETSTORE_HANDLE_T));
|
|
memset(platHandle,0,sizeof(SSCS_LINUX_SS_HANDLE_T));
|
|
|
|
ssHandle->platHandle = platHandle;
|
|
|
|
retVal = ipc_OpenSecretStore(secretStoreID,ssHandle);
|
|
if(retVal)
|
|
{
|
|
free(platHandle);
|
|
free(ssHandle);
|
|
return NULL;
|
|
}
|
|
|
|
return ssHandle;
|
|
}
|
|
|
|
/* Closes the secretstore and destroys the SecretStore context for that
|
|
* application.
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context information regarding the SecretStore.
|
|
*
|
|
*
|
|
* Return Values
|
|
*
|
|
*/
|
|
int32_t sscs_CacheCloseSecretStore
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
if(ssHandleCopy->platHandle)
|
|
{
|
|
retVal = ipc_CloseSecretStore(ssHandleCopy, ssFlags);
|
|
free(ssHandleCopy->platHandle);
|
|
}
|
|
|
|
if(ssHandleCopy)
|
|
free(ssHandleCopy);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
/* Removes all application defined keychains from the store. It also removes
|
|
* secrets stored in system defined keychains.
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context information regarding the SecretStore.
|
|
*
|
|
*
|
|
* Return Values:
|
|
*/
|
|
int32_t sscs_CacheRemoveSecretStore
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_RemoveSecretStore(ssHandleCopy);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
/* Enumerates key chain ids available in the store.
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context information regarding the SecretStore.
|
|
*
|
|
*
|
|
* kcIDList
|
|
* (OUT) Points to the key chain id enumeration structure. Points to
|
|
* KeyChainIDList structure.
|
|
*
|
|
* bytesRequired
|
|
* (OUT) Specifies the buffer requirement if it is not possible
|
|
* to copy KeyChain IDs in the buffer passed by the application.
|
|
*
|
|
* Return Values:
|
|
*
|
|
*/
|
|
int32_t sscs_CacheEnumerateKeychainIDs
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_SRCH_KEY_T *searchKey,
|
|
SSCS_KEYCHAIN_ID_LIST_T *kcIDList,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_EnumerateKeychainIDs(ssHandleCopy,kcIDList);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
/* Creates a new keychain in the store.
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context information regarding the SecretStore.
|
|
*
|
|
* ssFlags
|
|
* (IN) Can be a combination of follwing flags:
|
|
* SSCS_HIDDEN_LOCAL_KEY_CHAIN_F
|
|
* SSCS_SESSION_KEY_CHAIN_F
|
|
* SSCS_LOCAL_KEY_CHAIN_F
|
|
* SSCS_REMOTE_KEY_CHAIN_F
|
|
* SSCS_LOCAL_REMOTE_CHAIN_F
|
|
* SSCS_RESERVED1_KEY_CHAIN_F
|
|
* SSCS_RESERVED2_KEY_CHAIN_F
|
|
* keychainID
|
|
* (IN) Specifies the unique keychain ID within the secretstore.
|
|
*
|
|
*/
|
|
int32_t sscs_CacheAddKeychain
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_KEYCHAIN_ID_T *keychainID,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_AddKeychain(ssHandleCopy,ssFlags,keychainID);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
|
|
/* Removes the specified keychain from the store.
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context information regarding the SecretStore.
|
|
*
|
|
* keychainID
|
|
* (IN) Specifies the unique keychain ID within the secretstore.
|
|
*
|
|
* Return Values:
|
|
*/
|
|
int32_t sscs_CacheRemoveKeychain
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_KEYCHAIN_ID_T *keyChainID,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_RemoveKeychain(ssHandleCopy,keyChainID);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
/* Enumerates secret ids in a given keychain.
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context information regarding the SecretStore.
|
|
*
|
|
* keyChainID
|
|
* (IN) handle obtained during sscs_CacheOpenKeychain.
|
|
*
|
|
*
|
|
* secretIDList
|
|
* (OUT) Points to the secret id enumeration structure. Points to
|
|
* SecretIDList structure.
|
|
*
|
|
* bytesRequired
|
|
* (OUT) Specifies the buffer requirement if it is not possible
|
|
* to copy Secret IDs in the buffer passed by the application.
|
|
* Return Values:
|
|
*/
|
|
int32_t sscs_CacheEnumerateSecretIDs
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_KEYCHAIN_ID_T *keyChainID,
|
|
SSCS_SRCH_KEY_T *searchKey,
|
|
SSCS_SECRET_ID_LIST_T *secretIDList,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_EnumerateSecretIDs(ssHandleCopy,keyChainID,secretIDList);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
|
|
/* Reads Secret value for a given Secret ID in a given keychain.
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context information regarding the SecretStore.
|
|
*
|
|
* keyChainID
|
|
* (IN) KeyChainID where the specified SecretID stored.
|
|
*
|
|
* secretID
|
|
* (IN) Specifies the unique secret ID within the keychain. This data is
|
|
* encoded in SSCS_SECRET_ID_T.
|
|
*
|
|
* secretData
|
|
* (IN/OUT) Specifies the information of the secret stored w.r.t the secretID.
|
|
* Points to a SSCS_SECRET_T structure.
|
|
*
|
|
* epPassword
|
|
* (IN) Points to an optional field to pass in the Enhanced Protection Password
|
|
* for reading a secret.When the password is not present, you can pass in a NULL.
|
|
*
|
|
* bytesRequired
|
|
* (OUT) Specifies the buffer requirement if it is not possible
|
|
* to copy Secret data in the buffer passed by the application.
|
|
|
|
*
|
|
* Return Values :
|
|
*/
|
|
int32_t sscs_CacheReadSecret
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_KEYCHAIN_ID_T *keychainID,
|
|
SSCS_SECRET_ID_T *secretID,
|
|
SSCS_SECRET_T *secretData,
|
|
SSCS_PASSWORD_T *epPassword,
|
|
uint32_t *bytesRequired,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_ReadSecret(ssHandleCopy,keychainID,secretID,secretData,epPassword,bytesRequired);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
|
|
/* Writes Secret value for a given Secret ID in a given keychain.
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context information regarding the SecretStore.
|
|
*
|
|
* ssFlags
|
|
* (IN) ...
|
|
*
|
|
* keyChainID
|
|
* (IN) KeyChainID where the specified SecretID stored.
|
|
*
|
|
* secretID
|
|
* (IN) Specifies the unique secret ID within the keychain. This data is
|
|
* encoded in SSCS_SECRET_ID_T.
|
|
*
|
|
* secretData
|
|
* (IN) Specifies the information of the secret stored w.r.t the secretID.
|
|
* Points to a SSCS_SECRET_T structure.
|
|
*
|
|
*
|
|
* epPassword
|
|
* (IN) Points to an optional field to pass in the Enhanced Protection Password
|
|
* for reading a secret.When the password is not present, you can pass in a NULL.
|
|
*
|
|
*
|
|
*
|
|
* Return Values:
|
|
*/
|
|
int sscs_CacheWriteSecret
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_KEYCHAIN_ID_T *keyChainID,
|
|
SSCS_SECRET_ID_T *secretID,
|
|
SSCS_SECRET_T *secretData,
|
|
SSCS_PASSWORD_T *epPassword,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_WriteSecret(ssHandleCopy,ssFlags,keyChainID,secretID,secretData,epPassword, reserved);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
|
|
/* Removes Secret for a given Secret ID in a given keychain.
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context information regarding the SecretStore.
|
|
*
|
|
*
|
|
* keyChainID
|
|
* (IN) KeyChainID where the specified SecretID stored.
|
|
*
|
|
* secretID
|
|
* (IN) Specifies the unique secret ID within the keychain. This data is
|
|
* encoded in SSCS_SECRET_ID_T.
|
|
*
|
|
*
|
|
* epPassword
|
|
* (IN) Points to an optional field to pass in the Enhanced Protection Password
|
|
* for reading a secret.When the password is not present, you can pass in a NULL.
|
|
*
|
|
* Return Values:
|
|
*/
|
|
int32_t sscs_CacheRemoveSecret
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_KEYCHAIN_ID_T *keyChainID,
|
|
SSCS_SECRET_ID_T *secredID,
|
|
SSCS_PASSWORD_T *epPassword,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_RemoveSecret(ssHandleCopy,keyChainID,secredID,epPassword);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
/* Returns statistical information regarding the SecretStore and its Keychains.
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context with respect to the instance of open cache in it.
|
|
*
|
|
*
|
|
* ssInfo
|
|
* (OUT) This structure contains the statistical information regarding the
|
|
* SecretStore and its Keychains.
|
|
*
|
|
* Return Values:
|
|
*/
|
|
int32_t sscs_CacheGetSecretStoreInfo
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_SECRETSTORE_INFO_T *ssInfo,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_GetSecretStoreInfo(ssHandleCopy,ssInfo);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
/* Retrieves the statistical information regarding the target Keychain.
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context with respect to the instance of open cache in it.
|
|
*
|
|
* keyChainID
|
|
* (IN) KeyChainID where the specified SecretID stored.
|
|
*
|
|
*
|
|
* kcInfo
|
|
* (OUT) This structure contains the statistical information regarding the
|
|
* Keychain.
|
|
*
|
|
*
|
|
* Return Values:
|
|
*/
|
|
int32_t sscs_CacheGetKeychainInfo
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_KEYCHAIN_ID_T *keyChainID,
|
|
SSCS_KEYCHAIN_INFO_T *kcInfo,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_GetKeychainInfo(ssHandleCopy,keyChainID,kcInfo);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
/* This call locks that cache to prevent access until the MasterPassword is
|
|
* supplied.
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context with respect to the instance of open cache in it.
|
|
*
|
|
* Return Values :
|
|
*/
|
|
int32_t sscs_LockCache
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_LockCache(ssHandleCopy);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
/* This unlocks previously locked cache using the MasterPassword
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context with respect to the instance of open cache in it.
|
|
* masterPassword
|
|
*
|
|
* Return Values :
|
|
*/
|
|
int32_t sscs_UnlockCache
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_PASSCODE_T *passcode,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_UnlockCache(ssHandle,passcode);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
int32_t sscs_SetMasterPasscode
|
|
(
|
|
void *ssHandle,
|
|
SSCS_PASSCODE_T *passcode,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
retVal = ipc_SetMasterPasscode(ssHandle,passcode);
|
|
return retVal;
|
|
}
|
|
|
|
int32_t sscs_SetMasterPassword
|
|
(
|
|
void *ssHandle,
|
|
SSCS_PASSWORD_T *password,
|
|
SSCS_HINT_T *hint,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
retVal = ipc_SetMasterPassword(ssHandle,password,hint);
|
|
return retVal;
|
|
}
|
|
|
|
//#if 0
|
|
/* Writes A key-value for a given Secret ID in a given keychain.
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context information regarding the SecretStore.
|
|
*
|
|
* ssFlags
|
|
* (IN) ...
|
|
*
|
|
* keyChainID
|
|
* (IN) KeyChainID where the specified SecretID stored.
|
|
*
|
|
* secretID
|
|
* (IN) Specifies the unique secret ID within the keychain. This data is
|
|
* encoded in SSCS_SECRET_ID_T.
|
|
*
|
|
* secretData
|
|
* (IN) Specifies the information of the secret stored w.r.t the secretID.
|
|
* Points to a SSCS_SECRET_T structure.
|
|
*
|
|
*
|
|
* epPassword
|
|
* (IN) Points to an optional field to pass in the Enhanced Protection Password
|
|
* for reading a secret.When the password is not present, you can pass in a NULL.
|
|
*
|
|
*
|
|
*
|
|
* Return Values:
|
|
*/
|
|
int sscs_CacheWriteKey
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_KEYCHAIN_ID_T *keyChainID,
|
|
SSCS_SECRET_ID_T *secretID,
|
|
SS_UTF8_T *key,
|
|
uint32_t keyLen,
|
|
uint8_t *val,
|
|
int32_t valLen,
|
|
SSCS_PASSWORD_T *epPassword,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_WriteKey(ssHandleCopy,ssFlags,keyChainID,secretID,key,keyLen,val,valLen,epPassword, reserved);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
|
|
|
|
int sscs_CacheWriteBinaryKey
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_KEYCHAIN_ID_T *keyChainID,
|
|
SSCS_SECRET_ID_T *secretID,
|
|
SS_UTF8_T *key,
|
|
uint32_t keyLen,
|
|
uint8_t *val,
|
|
uint32_t valLen,
|
|
SSCS_PASSWORD_T *epPassword,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_WriteBinaryKey(ssHandleCopy,ssFlags,keyChainID,secretID,key,keyLen,val,valLen,epPassword, reserved);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
|
|
/* Reads Secret value for a given Secret ID in a given keychain.
|
|
*
|
|
* Parameters:
|
|
* ssHandle
|
|
* (IN) Handle returned by sscs_CacheOpenSecretStore function. This will have
|
|
* context information regarding the SecretStore.
|
|
*
|
|
* keyChainID
|
|
* (IN) KeyChainID where the specified SecretID stored.
|
|
*
|
|
* secretID
|
|
* (IN) Specifies the unique secret ID within the keychain. This data is
|
|
* encoded in SSCS_SECRET_ID_T.
|
|
*
|
|
* secretData
|
|
* (IN/OUT) Specifies the information of the secret stored w.r.t the secretID.
|
|
* Points to a SSCS_SECRET_T structure.
|
|
*
|
|
* epPassword
|
|
* (IN) Points to an optional field to pass in the Enhanced Protection Password
|
|
* for reading a secret.When the password is not present, you can pass in a NULL.
|
|
*
|
|
* bytesRequired
|
|
* (OUT) Specifies the buffer requirement if it is not possible
|
|
* to copy Secret data in the buffer passed by the application.
|
|
|
|
*
|
|
* Return Values :
|
|
*/
|
|
int32_t sscs_CacheReadKey
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_KEYCHAIN_ID_T *keychainID,
|
|
SSCS_SECRET_ID_T *secretID,
|
|
SS_UTF8_T *key,
|
|
uint32_t keyLen,
|
|
uint8_t *val,
|
|
uint32_t *valLen,
|
|
SSCS_PASSWORD_T *epPassword,
|
|
uint32_t *bytesRequired,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_ReadKey(ssHandleCopy,keychainID,secretID,key,keyLen,val,valLen,epPassword,bytesRequired);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
int32_t sscs_CacheReadBinaryKey
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_KEYCHAIN_ID_T *keychainID,
|
|
SSCS_SECRET_ID_T *secretID,
|
|
SS_UTF8_T *key,
|
|
uint32_t keyLen,
|
|
uint8_t *val,
|
|
uint32_t *valLen,
|
|
SSCS_PASSWORD_T *epPassword,
|
|
uint32_t *bytesRequired,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_ReadBinaryKey(ssHandleCopy,keychainID,secretID,key,keyLen,val,valLen,epPassword,bytesRequired);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
int sscs_IsSecretPersistent
|
|
(
|
|
void *ssHandle,
|
|
uint32_t ssFlags,
|
|
SSCS_KEYCHAIN_ID_T *keyChainID,
|
|
SSCS_SECRET_ID_T *secretID,
|
|
void *reserved
|
|
)
|
|
{
|
|
int32_t retVal = 0;
|
|
SSCS_SECRETSTORE_HANDLE_T *ssHandleCopy = (SSCS_SECRETSTORE_HANDLE_T *)ssHandle;
|
|
|
|
retVal = ipc_IsSecretPersistent(ssHandleCopy,ssFlags,keyChainID,secretID,reserved);
|
|
|
|
return retVal;
|
|
}
|
|
|
|
//#endif
|
|
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
}
|
|
#endif
|
|
|
|
|