1#include "enDecrypt.h"
2#include "rijndaelApi.h"		/* reference */
3
4/*
5 * encrypt/decrypt using reference AES.
6 */
7CSSM_RETURN encryptDecryptRef(
8	CSSM_BOOL			forEncrypt,
9	uint32				keySizeInBits,
10	uint32				blockSizeInBits,
11	const uint8			*key,				// raw key bytes
12	const uint8			*inText,
13	uint32				inTextLen,
14	uint8 				*outText)
15{
16	keyInstance 	aesKey;
17	cipherInstance 	aesCipher;
18	int 			artn;
19
20	artn = _makeKey(&aesKey,
21		forEncrypt ? DIR_ENCRYPT : DIR_DECRYPT,
22		keySizeInBits,
23		blockSizeInBits,
24		(BYTE *)key);
25	if(artn <= 0) {
26		printf("***AES makeKey returned %d\n", artn);
27		return CSSM_ERRCODE_INTERNAL_ERROR;
28	}
29	artn = _cipherInit(&aesCipher,
30		MODE_ECB,
31		blockSizeInBits,
32		NULL);
33	if(artn <= 0) {
34		printf("***AES cipherInit returned %d\n", artn);
35		return CSSM_ERRCODE_INTERNAL_ERROR;
36	}
37	if(forEncrypt) {
38		artn = _blockEncrypt(&aesCipher,
39			&aesKey,
40			(BYTE *)inText,
41			inTextLen * 8,
42			(BYTE *)outText);
43	}
44	else {
45		artn = _blockDecrypt(&aesCipher,
46			&aesKey,
47			(BYTE *)inText,
48			inTextLen * 8,
49			(BYTE *)outText);
50	}
51	if(artn <= 0) {
52		printf("***AES Reference encrypt/decrypt returned %d\n", artn);
53		return CSSM_ERRCODE_INTERNAL_ERROR;
54	}
55	return CSSM_OK;
56}
57