Added miCASARemoveKey API to dll.
This commit is contained in:
@@ -16,6 +16,7 @@ EXPORTS
|
||||
miCASAWriteBinaryKey
|
||||
miCASAReadKey
|
||||
miCASAReadBinaryKey
|
||||
miCASARemoveKey
|
||||
miCASAGetStoreInformation
|
||||
miCASAEnumerateSecretIDs
|
||||
miCASARemoveSecretStore
|
||||
|
||||
@@ -2066,6 +2066,125 @@ errorLevel2:
|
||||
/* ############################### CODE ENDS HERE ############################# */
|
||||
} //* end of miCASAReadBinaryKey
|
||||
|
||||
/*
|
||||
* NAME - miCASARemoveKey
|
||||
*
|
||||
* DESCRIPTION
|
||||
* NOTE: This assume a SS_CREDSET SecretType
|
||||
*
|
||||
*
|
||||
*/
|
||||
SSCS_GLOBAL_LIBCALL(int32_t)
|
||||
miCASARemoveKey
|
||||
(
|
||||
void * context,
|
||||
uint32_t ssFlags,
|
||||
SSCS_KEYCHAIN_ID_T * keyChainID,
|
||||
SSCS_SECRET_ID_T * sharedSecretID,
|
||||
SS_UTF8_T * key,
|
||||
uint32_t keyLen,
|
||||
SSCS_PASSWORD_T * epPassword,
|
||||
SSCS_EXT_T * ext
|
||||
)
|
||||
{ /* beginning of the call */
|
||||
/* ########################## DECLARATIONS START HERE ######################### */
|
||||
|
||||
int32_t rc = 0, sidLen = 0, index = 0;
|
||||
uint32_t escNameLen = 0;
|
||||
SSCS_SECRET_ID_T secretID = {0};
|
||||
SS_UTF8_T *escapedSHSName = NULL;
|
||||
SS_UTF8_T *escapedSHSKey = NULL;
|
||||
SSCS_CONTEXT_T *storeContext = (SSCS_CONTEXT_T *)context;
|
||||
|
||||
/* ############################## CODE STARTS HERE ############################ */
|
||||
|
||||
// readData and epPassword are optional parameters
|
||||
if((context == NULL) || (keyChainID == NULL) || (sharedSecretID == NULL) || (key == NULL))
|
||||
{
|
||||
return(NSSCS_E_INVALID_PARAM);
|
||||
}
|
||||
|
||||
if(sharedSecretID->len > NSSCS_MAX_SECRET_ID_LEN/4)
|
||||
{
|
||||
return(NSSCS_E_BUFFER_LEN);
|
||||
}
|
||||
|
||||
if (keyLen > NSSCS_MAX_SECRET_ID_LEN/4)
|
||||
{
|
||||
return(NSSCS_E_BUFFER_LEN);
|
||||
}
|
||||
|
||||
if((escapedSHSName = (SS_UTF8_T *) malloc(NSSCS_MAX_SECRET_ID_LEN)) == NULL)
|
||||
{
|
||||
rc = NSSCS_E_SYSTEM_FAILURE;
|
||||
goto errorLevel2;
|
||||
}
|
||||
|
||||
if((escapedSHSKey = (SS_UTF8_T *) malloc(NSSCS_MAX_SECRET_ID_LEN)) == NULL)
|
||||
{
|
||||
rc = NSSCS_E_SYSTEM_FAILURE;
|
||||
goto errorLevel1;
|
||||
}
|
||||
|
||||
memset(secretID.id, 0, NSSCS_MAX_SECRET_ID_LEN);
|
||||
memset(escapedSHSName, 0, NSSCS_MAX_SECRET_ID_LEN);
|
||||
memset(escapedSHSKey, 0, NSSCS_MAX_SECRET_ID_LEN);
|
||||
|
||||
// escape delimited characters
|
||||
if(sharedSecretID->len > NSSCS_MAX_SECRET_ID_LEN)
|
||||
{
|
||||
rc = NSSCS_E_BUFFER_LEN;
|
||||
goto errorLevel1;
|
||||
}
|
||||
|
||||
memcpy(escapedSHSName, sharedSecretID->id, sharedSecretID->len);
|
||||
escNameLen = sharedSecretID->len;
|
||||
sscsshs_ChkEscapeString(&escapedSHSName, &escNameLen);
|
||||
|
||||
memcpy(escapedSHSKey, key, keyLen);
|
||||
sscsshs_ChkEscapeString(&escapedSHSKey, &keyLen);
|
||||
|
||||
if(escNameLen < 1)
|
||||
{
|
||||
rc = NSSCS_E_SECRET_ID_TOO_SHORT;
|
||||
goto errorLevel1;
|
||||
}
|
||||
|
||||
// convert to a SSCS_CRED_SET
|
||||
sscs_Utf8Strncpy((SS_UTF8_T *)secretID.id, SSCS_CRED_SET_DELIMITED, SSCS_CRED_SET_CHARS_DELIMITED);
|
||||
sscs_Utf8Strncat((SS_UTF8_T *)secretID.id, (SS_UTF8_T *)escapedSHSName, escNameLen);
|
||||
secretID.len = SSCS_CRED_SET_CHARS_DELIMITED + escNameLen - 1;
|
||||
|
||||
rc = sscs_CacheRemoveKey(storeContext->ssHandle,
|
||||
ssFlags,
|
||||
keyChainID,
|
||||
&secretID,
|
||||
escapedSHSKey,
|
||||
keyLen-1, // NOTE: micasad not saving NULL on key
|
||||
epPassword,
|
||||
ext);
|
||||
|
||||
/* ############################### CODE EXITS HERE ############################# */
|
||||
|
||||
errorLevel1:
|
||||
if(escapedSHSName)
|
||||
{
|
||||
memset(escapedSHSName, 0, NSSCS_MAX_SECRET_ID_LEN);
|
||||
free(escapedSHSName);
|
||||
}
|
||||
|
||||
if(escapedSHSKey)
|
||||
{
|
||||
memset(escapedSHSKey, 0, NSSCS_MAX_SECRET_ID_LEN);
|
||||
free(escapedSHSKey);
|
||||
}
|
||||
|
||||
errorLevel2:
|
||||
memset(secretID.id, 0, NSSCS_MAX_SECRET_ID_LEN);
|
||||
return(rc);
|
||||
|
||||
/* ############################### CODE ENDS HERE ############################# */
|
||||
} //* end of miCASAReadKey
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user