+++ /dev/null
-/*** BlobList class for managing groups of raw certs and CRLs ***/
-
-#include "BlobList.h"
-#include <utilLib/fileIo.h>
-#include <utilLib/common.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <security_cdsa_utils/cuPem.h>
-
-BlobList::~BlobList()
-{
- for(uint32 dex=0; dex<mNumBlobs; dex++) {
- free(mBlobList[dex].Data); // mallocd by readFile()
- }
- free(mBlobList);
- mBlobList = NULL;
- mNumBlobs = 0;
-}
-
-/* blob is mallocd & copied; its referent is not copied */
-void BlobList::addBlob(const CSSM_DATA &blob, CSSM_BOOL copyBlob /* = CSSM_FALSE */)
-{
- ++mNumBlobs;
- mBlobList = (CSSM_DATA_PTR)realloc(mBlobList, mNumBlobs * sizeof(CSSM_DATA));
- CSSM_DATA_PTR dst = &mBlobList[mNumBlobs - 1];
- if(copyBlob) {
- /* can't use appCopyCssmData since we free with free(), not appFree() */
- dst->Length = blob.Length;
- dst->Data = (uint8 *)malloc(dst->Length);
- memmove(dst->Data, blob.Data, dst->Length);
- }
- else {
- *dst = blob;
- }
-}
-
-
-int BlobList::addFile(const char *fileName,
- const char *dirName /* = NULL */)
-{
- CSSM_DATA blob;
- int rtn;
- char *fullName;
- unsigned blobDataLen;
- unsigned char *blobData;
-
- if(dirName) {
- int len = strlen(dirName) + strlen(fileName) + 2;
- fullName = (char *)malloc(len);
- sprintf(fullName, "%s/%s", dirName, fileName);
- }
- else {
- fullName = (char *)fileName;
- }
- rtn = cspReadFile(fullName, &blobData, &blobDataLen);
- if(rtn) {
- printf("***Error reading file %s\n", fullName);
- if(dirName) {
- free(fullName);
- }
- return rtn;
- }
-
- /* convert from PEM to DER if appropriate */
- if(isPem(blobData, blobDataLen)) {
- unsigned derDataLen;
- unsigned char *derData;
-
- if(pemDecode(blobData, blobDataLen, &derData, &derDataLen)) {
- printf("***Error PEM-decoding file %s; using as raw data\n", fileName);
- blob.Data = blobData;
- blob.Length = blobDataLen;
- }
- else {
- blob.Data = derData;
- blob.Length = derDataLen;
- free(blobData);
- }
- }
- else {
- /* raw file data is the stuff we'll use */
- blob.Data = blobData;
- blob.Length = blobDataLen;
- }
- addBlob(blob);
- if(dirName) {
- free(fullName);
- }
- return 0;
-}
-