/*----------------------------------------------------------------------- * File: CSM_SESN.H * * Copyright (c) 1995-2000 Intel Corporation. All rights reserved. *----------------------------------------------------------------------- */ #ifndef __CSM_SESN_H__ #define __CSM_SESN_H__ /* This implementation uses a raw CSSM_LIST_COLLECTION structure to * implement the session lists. */ typedef MAF_LIST_COLLECTION CSM_SESSION_LIST; /* Type and values used to indicate to the service provider functions how * the session information should be interpreted. */ typedef uint32 CSM_SESSION_TYPE; #define CSM_ST_NONE CSSM_ALGCLASS_NONE #define CSM_ST_CUSTOM CSSM_ALGCLASS_CUSTOM #define CSM_ST_DIGEST CSSM_ALGCLASS_DIGEST #define CSM_ST_RANDOMGEN CSSM_ALGCLASS_RANDOMGEN #define CSM_ST_UNIQUEGEN CSSM_ALGCLASS_UNIQUEGEN #define CSM_ST_KEYGEN CSSM_ALGCLASS_KEYGEN #define CSM_ST_DERIVE CSSM_ALGCLASS_DERIVEKEY #define CSM_ST_ENCRYPT 50 #define CSM_ST_DECRYPT 51 /* CSSM_ALGCLASS_SYMMETRIC or CSSM_ALGCLASS_ASYMMETRIC */ #define CSM_ST_WRAP 52 /* CSSM_ALGCLASS_SYMMETRIC or CSSM_ALGCLASS_ASYMMETRIC */ #define CSM_ST_UNWRAP 53 /* CSSM_ALGCLASS_SYMMETRIC or CSSM_ALGCLASS_ASYMMETRIC */ #define CSM_ST_SIGN 54 /* CSSM_CRYPTO_SIGNATURE */ #define CSM_ST_VERIFY 55 /* CSSM_CRYPTO_SIGNATURE */ #define CSM_ST_GEN_MAC 56 /* CSSM_ALGCLASS_MAC */ #define CSM_ST_VERIFY_MAC 57 /* CSSM_ALGCLASS_MAC */ /* Debug build checks for the structures. If _DEBUG is defined, the checks * are performed whenever the functions can't be absolutely sure they are * using a valid CSM_SESSION structure. Defining NDEBUG will turn off the * asserts. */ #ifdef _DEBUG #define __CSM_SESSION_MAGIC_NUMBER ( 0x22061998 ) #define ASSERT_VALID_CSM_SESSION( _session_ ) \ assert( *((uint32*)_session_) == __CSM_SESSION_MAGIC_NUMBER ) #else #define ASSERT_VALID_CSM_SESSION( _session_ ) #endif /* ifdef _DEBUG */ /* The basic CSM_SESSION data structure. It will contain a magic number if * the _DEBUG preprocessor symbol is defined. */ typedef struct _csm_session { #ifdef _DEBUG uint32 __MagicNumber; #endif /* CSSM attach handle */ CSSM_CSP_HANDLE hCsp; /* Complete context structure */ CSSM_CC_HANDLE hContext; CSSM_CONTEXT *pContext; /* Session type used by the MAF-CSM to validate the context type */ CSM_SESSION_TYPE SessionType; /* Opaque crypto state information specific to the CSP */ uint32 uCryptoStateSize; void *pCryptoState; } CSM_SESSION; /* Function type used by the CSM_DuplicateStagedSession function to * duplicate the algorithm state information in the structure. */ typedef CSSM_RETURN (* CSM_ALG_STATE_DUPLICATOR)( const CSSM_CONTEXT *pContext, const void *pSrcState, uint32 uSrcStateSize, void *pDestState ); CSSM_RETURN CSM_SessionListInit( CSM_SESSION_LIST *pList ); CSSM_RETURN CSM_SessionListTerminate( CSM_SESSION_LIST *pList ); CSSM_RETURN CSM_CreateSession( CSSM_CSP_HANDLE CSPHandle, CSSM_CC_HANDLE CCHandle, const CSSM_CONTEXT *pContext, CSM_SESSION_TYPE SessionType, CSM_SESSION **ppNewSession ); CSSM_RETURN CSM_DeleteSession( CSM_SESSION *pSession ); CSSM_RETURN CSM_AllocateSessionState( CSM_SESSION *pSession, uint32 uSize ); CSSM_RETURN CSM_CreateStagedSession( CSM_SESSION_LIST *pList, CSSM_CSP_HANDLE CSPHandle, CSSM_CC_HANDLE CCHandle, const CSSM_CONTEXT *pContext, CSM_SESSION_TYPE SessionType, CSM_SESSION **ppNewSession, MLC_LOCK_REF *pLockRef ); CSSM_RETURN CSM_DeleteStagedSession( CSM_SESSION_LIST *pList, CSM_SESSION *pSession ); CSSM_RETURN CSM_FindStagedSession( const CSM_SESSION_LIST *pList, CSSM_CC_HANDLE CCHandle, MLC_LOCK_TYPE ltLockType, CSM_SESSION **ppFoundSession, MLC_LOCK_REF *pLockRef ); CSSM_RETURN CSM_DuplicateStagedSession( CSM_SESSION_LIST *pList, CSSM_CC_HANDLE SrcCCHandle, CSSM_CC_HANDLE DestCCHandle, CSM_ALG_STATE_DUPLICATOR DupState ); CSSM_RETURN CSM_UnlockStagedSession( MLC_LOCK_TYPE ltLockType, MLC_LOCK_REF LockRef ); CSSM_RETURN CSM_GetSessionType( CSSM_CONTEXT_TYPE ContextType, CSSM_BOOL bForward, CSM_SESSION_TYPE *pSessionType ); #endif /* ifndef __CSM_SESN_H__ */