+++ /dev/null
-/*
- * Simple symmetric encrypt/decrypt test
- */
-#include "testParams.h"
-#include <Security/cssm.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <time.h>
-#include <security_cdsa_utils/cuFileIo.h>
-#include <utilLib/common.h>
-#include <utilLib/cspwrap.h>
-#include <strings.h>
-
-/* for memory leak debug only, with only one thread running */
-#define DO_PAUSE 0
-
-#define PTEXT_SIZE 1024
-#define USAGE_DEF "noUsage"
-
-int symTestInit(TestParams *testParams)
-{
- /* nothing for now */
- return 0;
-}
-
-int symTest(TestParams *testParams)
-{
- unsigned loop;
- CSSM_RETURN crtn;
- CSSM_DATA ptext = {0, NULL};
- CSSM_DATA ctext = {0, NULL};
- CSSM_DATA rptext = {0, NULL};
- CSSM_KEY_PTR symKey;
- CSSM_PADDING padding;
- CSSM_ALGORITHMS keyAlg;
- CSSM_ALGORITHMS encrAlg;
- CSSM_ENCRYPT_MODE encrMode;
- CSSM_BOOL keyIsRef;
- CSSM_DATA initVector;
-
- initVector.Data = (uint8 *)"someStrangeInitVect";
- ptext.Data = (uint8 *)CSSM_MALLOC(PTEXT_SIZE);
- ptext.Length = PTEXT_SIZE;
-
- for(loop=0; loop<testParams->numLoops; loop++) {
- if(testParams->verbose) {
- printf("symTest thread %d: loop %d\n",
- testParams->threadNum, loop);
- }
- else if(!testParams->quiet) {
- printChar(testParams->progressChar);
- }
-
- /* random plaintext */
- crtn = threadGetRandData(testParams, &ptext, PTEXT_SIZE);
- if(crtn) {
- return 1;
- }
-
- /* pick algorithm and params */
- if(loop & 1) {
- keyAlg = CSSM_ALGID_DES;
- encrAlg = CSSM_ALGID_DES;
- encrMode = CSSM_ALGMODE_CBCPadIV8;
- padding = CSSM_PADDING_PKCS1;
- initVector.Length = 8;
- }
- else {
- keyAlg = CSSM_ALGID_AES;
- encrAlg = CSSM_ALGID_AES;
- encrMode = CSSM_ALGMODE_CBCPadIV8;
- padding = CSSM_PADDING_PKCS5;
- initVector.Length = 16;
- }
- if(loop & 2) {
- keyIsRef = CSSM_TRUE;
- }
- else {
- keyIsRef = CSSM_FALSE;
- }
-
- /* cook up a key */
- symKey = cspGenSymKey(testParams->cspHand,
- keyAlg,
- USAGE_DEF,
- strlen(USAGE_DEF),
- CSSM_KEYUSE_ENCRYPT | CSSM_KEYUSE_DECRYPT,
- CSP_KEY_SIZE_DEFAULT,
- keyIsRef);
- if(symKey == NULL) {
- return 1;
- }
-
- /* encrypt, decrypt */
- crtn = cspEncrypt(testParams->cspHand,
- encrAlg,
- encrMode,
- padding,
- symKey,
- NULL, // second key unused
- 0, // efectiveKeySizeInBits,
- 0, // rounds
- &initVector,
- &ptext,
- &ctext,
- CSSM_TRUE); // mallocCtext
- if(crtn) {
- return 1;
- }
- crtn = cspDecrypt(testParams->cspHand,
- encrAlg,
- encrMode,
- padding,
- symKey,
- NULL, // second key unused
- 0, // efectiveKeySizeInBits
- 0, // rounds
- &initVector,
- &ctext,
- &rptext,
- CSSM_TRUE); // mallocCtext
- if(crtn) {
- return 1;
- }
-
- /* compare */
- if(ptext.Length != rptext.Length) {
- printf("Ptext length mismatch: expect %lu, got %lu\n",
- ptext.Length, rptext.Length);
- return 1;
- }
- if(memcmp(ptext.Data, rptext.Data, ptext.Length)) {
- printf("***data miscompare\n");
- return 1;
- }
-
- /* free everything */
- appFreeCssmData(&ctext, CSSM_FALSE);
- appFreeCssmData(&rptext, CSSM_FALSE);
- cspFreeKey(testParams->cspHand, symKey);
- CSSM_FREE(symKey);
- #if DO_PAUSE
- fpurge(stdin);
- printf("Hit CR to proceed: ");
- getchar();
- #endif
- }
- return 0;
-}
-