--- /dev/null
+#include "enDecrypt.h"
+#include "rijndaelApi.h" /* reference */
+
+/*
+ * encrypt/decrypt using reference AES.
+ */
+CSSM_RETURN encryptDecryptRef(
+ CSSM_BOOL forEncrypt,
+ uint32 keySizeInBits,
+ uint32 blockSizeInBits,
+ const uint8 *key, // raw key bytes
+ const uint8 *inText,
+ uint32 inTextLen,
+ uint8 *outText)
+{
+ keyInstance aesKey;
+ cipherInstance aesCipher;
+ int artn;
+
+ artn = _makeKey(&aesKey,
+ forEncrypt ? DIR_ENCRYPT : DIR_DECRYPT,
+ keySizeInBits,
+ blockSizeInBits,
+ (BYTE *)key);
+ if(artn <= 0) {
+ printf("***AES makeKey returned %d\n", artn);
+ return CSSM_ERRCODE_INTERNAL_ERROR;
+ }
+ artn = _cipherInit(&aesCipher,
+ MODE_ECB,
+ blockSizeInBits,
+ NULL);
+ if(artn <= 0) {
+ printf("***AES cipherInit returned %d\n", artn);
+ return CSSM_ERRCODE_INTERNAL_ERROR;
+ }
+ if(forEncrypt) {
+ artn = _blockEncrypt(&aesCipher,
+ &aesKey,
+ (BYTE *)inText,
+ inTextLen * 8,
+ (BYTE *)outText);
+ }
+ else {
+ artn = _blockDecrypt(&aesCipher,
+ &aesKey,
+ (BYTE *)inText,
+ inTextLen * 8,
+ (BYTE *)outText);
+ }
+ if(artn <= 0) {
+ printf("***AES Reference encrypt/decrypt returned %d\n", artn);
+ return CSSM_ERRCODE_INTERNAL_ERROR;
+ }
+ return CSSM_OK;
+}