#include "enDecrypt.h"
#include <Security/cssm.h>
#include "cspwrap.h"
#include "common.h"
#include <strings.h>
static CSSM_CSP_HANDLE cspHand = 0;
CSSM_RETURN encryptDecryptCsp(
CSSM_BOOL forEncrypt,
uint32 keySizeInBits,
uint32 blockSizeInBits,
const uint8 *key, const uint8 *inText,
uint32 inTextLen,
uint8 *outText)
{
CSSM_KEY_PTR symKey; CSSM_RETURN crtn;
CSSM_DATA inData;
CSSM_DATA outData;
if(cspHand == 0) {
cspHand = cspDlDbStartup(CSSM_TRUE, NULL);
if(cspHand == 0) {
return CSSMERR_CSSM_MODULE_NOT_LOADED;
}
}
symKey = cspGenSymKey(cspHand,
CSSM_ALGID_AES,
"noLabel",
8,
CSSM_KEYUSE_ENCRYPT | CSSM_KEYUSE_DECRYPT,
keySizeInBits,
CSSM_FALSE); if(symKey == NULL) {
return CSSM_ERRCODE_INTERNAL_ERROR;
}
memmove(symKey->KeyData.Data, key, keySizeInBits / 8);
inData.Data = (uint8 *)inText;
inData.Length = inTextLen;
outData.Data = outText;
outData.Length = inTextLen;
if(forEncrypt) {
crtn = cspEncrypt(cspHand,
CSSM_ALGID_AES,
CSSM_ALGMODE_ECB,
CSSM_PADDING_NONE,
symKey,
NULL, 0, 0, NULL, &inData,
&outData,
CSSM_FALSE); }
else {
crtn = cspDecrypt(cspHand,
CSSM_ALGID_AES,
CSSM_ALGMODE_ECB,
CSSM_PADDING_NONE,
symKey,
NULL, 0, 0, NULL, &inData,
&outData,
CSSM_FALSE); }
cspFreeKey(cspHand, symKey);
return crtn;
}