+++ /dev/null
-/*
- * clutils.c - common CL app-level routines, X version
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <Security/cssm.h>
-#include "clutils.h"
-#include <Security/cssmapple.h> /* apple, not intel */
-#include <utilLib/common.h>
-
-static CSSM_API_MEMORY_FUNCS memFuncs = {
- appMalloc,
- appFree,
- appRealloc,
- appCalloc,
- NULL
- };
-
-static CSSM_VERSION vers = {2, 0};
-
-/*
- * Init CSSM and establish a session with the Apple CL.
- */
-CSSM_CL_HANDLE clStartup()
-{
- CSSM_CL_HANDLE clHand;
- CSSM_RETURN crtn;
-
- if(cssmStartup() == CSSM_FALSE) {
- return 0;
- }
- crtn = CSSM_ModuleLoad(&gGuidAppleX509CL,
- CSSM_KEY_HIERARCHY_NONE,
- NULL, // eventHandler
- NULL); // AppNotifyCallbackCtx
- if(crtn) {
- printError("CSSM_ModuleLoad(AppleCL)", crtn);
- return 0;
- }
- crtn = CSSM_ModuleAttach (&gGuidAppleX509CL,
- &vers,
- &memFuncs, // memFuncs
- 0, // SubserviceID
- CSSM_SERVICE_CL, // SubserviceFlags - Where is this used?
- 0, // AttachFlags
- CSSM_KEY_HIERARCHY_NONE,
- NULL, // FunctionTable
- 0, // NumFuncTable
- NULL, // reserved
- &clHand);
- if(crtn) {
- printError("CSSM_ModuleAttach(AppleCL)", crtn);
- return 0;
- }
- else {
- return clHand;
- }
-}
-
-void clShutdown(
- CSSM_CL_HANDLE clHand)
-{
- CSSM_RETURN crtn;
-
- crtn = CSSM_ModuleDetach(clHand);
- if(crtn) {
- printf("Error detaching from AppleCL\n");
- printError("CSSM_ModuleDetach", crtn);
- return;
- }
- crtn = CSSM_ModuleUnload(&gGuidAppleX509CL, NULL, NULL);
- if(crtn) {
- printf("Error unloading AppleCL\n");
- printError("CSSM_ModuleUnload", crtn);
- }
-}
-
-/*
- * Init CSSM and establish a session with the Apple TP.
- */
-CSSM_TP_HANDLE tpStartup()
-{
- CSSM_TP_HANDLE tpHand;
- CSSM_RETURN crtn;
-
- if(cssmStartup() == CSSM_FALSE) {
- return 0;
- }
- crtn = CSSM_ModuleLoad(&gGuidAppleX509TP,
- CSSM_KEY_HIERARCHY_NONE,
- NULL, // eventHandler
- NULL); // AppNotifyCallbackCtx
- if(crtn) {
- printError("CSSM_ModuleLoad(AppleTP)", crtn);
- return 0;
- }
- crtn = CSSM_ModuleAttach (&gGuidAppleX509TP,
- &vers,
- &memFuncs, // memFuncs
- 0, // SubserviceID
- CSSM_SERVICE_TP, // SubserviceFlags
- 0, // AttachFlags
- CSSM_KEY_HIERARCHY_NONE,
- NULL, // FunctionTable
- 0, // NumFuncTable
- NULL, // reserved
- &tpHand);
- if(crtn) {
- printError("CSSM_ModuleAttach(AppleTP)", crtn);
- return 0;
- }
- else {
- return tpHand;
- }
-}
-
-void tpShutdown(
- CSSM_TP_HANDLE tpHand)
-{
- CSSM_RETURN crtn;
-
- crtn = CSSM_ModuleDetach(tpHand);
- if(crtn) {
- printf("Error detaching from AppleTP\n");
- printError("CSSM_ModuleDetach", crtn);
- return;
- }
- crtn = CSSM_ModuleUnload(&gGuidAppleX509TP, NULL, NULL);
- if(crtn) {
- printf("Error unloading AppleTP\n");
- printError("CSSM_ModuleUnload", crtn);
- }
-}
-
-
-/*
- * Cook up a CSSM_DATA with specified integer, DER style (minimum number of
- * bytes, big-endian).
- */
-CSSM_DATA_PTR intToDER(unsigned theInt)
-{
- CSSM_DATA_PTR DER_Data = (CSSM_DATA_PTR)CSSM_MALLOC(sizeof(CSSM_DATA));
-
- if(theInt < 0x100) {
- DER_Data->Length = 1;
- DER_Data->Data = (uint8 *)CSSM_MALLOC(1);
- DER_Data->Data[0] = (unsigned char)(theInt);
- }
- else if(theInt < 0x10000) {
- DER_Data->Length = 2;
- DER_Data->Data = (uint8 *)CSSM_MALLOC(2);
- DER_Data->Data[0] = (unsigned char)(theInt >> 8);
- DER_Data->Data[1] = (unsigned char)(theInt);
- }
- else if(theInt < 0x1000000) {
- DER_Data->Length = 3;
- DER_Data->Data = (uint8 *)CSSM_MALLOC(3);
- DER_Data->Data[0] = (unsigned char)(theInt >> 16);
- DER_Data->Data[1] = (unsigned char)(theInt >> 8);
- DER_Data->Data[2] = (unsigned char)(theInt);
- }
- else {
- DER_Data->Length = 4;
- DER_Data->Data = (uint8 *)CSSM_MALLOC(4);
- DER_Data->Data[0] = (unsigned char)(theInt >> 24);
- DER_Data->Data[1] = (unsigned char)(theInt >> 16);
- DER_Data->Data[2] = (unsigned char)(theInt >> 8);
- DER_Data->Data[3] = (unsigned char)(theInt);
- }
- return DER_Data;
-}
-
-/*
- * Convert a CSSM_DATA_PTR, referring to a DER-encoded int, to a
- * uint32.
- */
-uint32 DER_ToInt(const CSSM_DATA *DER_Data)
-{
- uint32 rtn = 0;
- unsigned i = 0;
-
- while(i < DER_Data->Length) {
- rtn |= DER_Data->Data[i];
- if(++i == DER_Data->Length) {
- break;
- }
- rtn <<= 8;
- }
- return rtn;
-}
-