/*----------------------------------------------------------------------- * File: CSM_KEYPARSE.H * * Copyright (c) 1995-2000 Intel Corporation. All rights reserved. *----------------------------------------------------------------------- */ #ifndef __CSM_KEYPARSE_H__ #define __CSM_KEYPARSE_H__ /* Key part counts for RSA keys */ #define CSM_NUMBER_RSA_PUBLIC_KEY_PARTS ( 2 ) #define CSM_NUMBER_RSA_PRIVATE_KEY_PARTS ( 8 ) /* Indexes into the key parts array for RSA keys */ #define CSM_RSA_MODULUS ( 0 ) #define CSM_RSA_PUBLIC_EXPONENT ( 1 ) #define CSM_RSA_PRIVATE_EXPONENT ( 2 ) #define CSM_RSA_PRIME1 ( 3 ) #define CSM_RSA_PRIME2 ( 4 ) #define CSM_RSA_EXPONENT1 ( 5 ) #define CSM_RSA_EXPONENT2 ( 6 ) #define CSM_RSA_COEFFICIENT ( 7 ) /* Key part counts for DSA keys */ #define CSM_NUMBER_DSA_PUBLIC_KEY_PARTS ( 4 ) #define CSM_NUMBER_DSA_PRIVATE_KEY_PARTS ( 4 ) /* Indexes into the key parts array for DSA keys */ #define CSM_DSA_PRIME ( 0 ) #define CSM_DSA_SUB_PRIME ( 1 ) #define CSM_DSA_BASE ( 2 ) #define CSM_DSA_PUBLIC_VALUE ( 3 ) #define CSM_DSA_PRIVATE_VALUE ( 3 ) /* Key part counts for KEA keys */ #define CSM_NUMBER_KEA_PUBLIC_KEY_PARTS ( 4 ) #define CSM_NUMBER_KEA_PRIVATE_KEY_PARTS ( 4 ) /* Indexes into the key parts array for KEA keys */ #define CSM_KEA_PRIME ( 0 ) #define CSM_KEA_SUB_PRIME ( 1 ) #define CSM_KEA_BASE ( 2 ) #define CSM_KEA_PUBLIC_VALUE ( 3 ) #define CSM_KEA_PRIVATE_VALUE ( 3 ) /* Key part counts for DH keys */ #define CSM_NUMBER_DH_PUBLIC_KEY_PARTS ( 1 ) #define CSM_NUMBER_DH_PRIVATE_KEY_PARTS ( 3 ) /* Indexes into the key parts array for DH keys */ #define CSM_DH_PUBLIC_VALUE ( 0 ) #define CSM_DH_PRIME ( 0 ) #define CSM_DH_BASE ( 1 ) #define CSM_DH_PRIVATE_VALUE ( 2 ) /* Key part counts for ECDSA keys */ #define CSM_NUMBER_ECDSA_PUBLIC_KEY_PARTS ( 2 ) #define CSM_NUMBER_ECDSA_PRIVATE_KEY_PARTS ( 2 ) /* Indexes into the key parts array for ECDSA keys */ #define CSM_ECDSA_PARAMS ( 0 ) #define CSM_ECDSA_POINT ( 1 ) #define CSM_ECDSA_PRIVATE_VALUE ( 1 ) /* Maximum key parts for all algorithms */ #define CSM_MAX_PUBLIC_KEY_PARTS \ ( max( CSM_NUMBER_RSA_PUBLIC_KEY_PARTS, \ max( CSM_NUMBER_DSA_PUBLIC_KEY_PARTS, \ max( CSM_NUMBER_ECDSA_PUBLIC_KEY_PARTS, \ max( CSM_NUMBER_DH_PUBLIC_KEY_PARTS, \ CSM_NUMBER_KEA_PUBLIC_KEY_PARTS ) ) ) ) ) #define CSM_MAX_PRIVATE_KEY_PARTS \ ( max( CSM_NUMBER_RSA_PRIVATE_KEY_PARTS, \ max( CSM_NUMBER_DSA_PRIVATE_KEY_PARTS, \ max( CSM_NUMBER_ECDSA_PRIVATE_KEY_PARTS, \ max( CSM_NUMBER_DH_PRIVATE_KEY_PARTS, \ CSM_NUMBER_KEA_PRIVATE_KEY_PARTS ) ) ) ) ) #define CSM_MAX_KEY_PARTS \ ( max( CSM_MAX_PUBLIC_KEY_PARTS, CSM_MAX_PRIVATE_KEY_PARTS ) ) CSSM_RETURN CSM_CreateKeyblob( CSSM_MODULE_HANDLE ModuleHandle, CSSM_ALGORITHMS KeyAlgorithm, uint32 KeyClass, uint32 KeyFormat, const CSSM_DATA *pKeyData, uint32 uNumKeyData, CSSM_DATA *pKeyBlob, CSSM_BOOL *pbAllocated ); CSSM_RETURN CSM_ParseKeyblob( CSSM_ALGORITHMS KeyAlgorithm, uint32 KeyClass, uint32 KeyFormat, CSSM_DATA *pKeyData, uint32 *puNumKeyData, const CSSM_DATA *pKeyBlob ); /* Utility functions used by DER encode/decode functions */ CSSM_RETURN _CSM_AdjustForMSB( const CSSM_DATA *pSrc, CSSM_DATA *pDest ); uint32 _CSM_GetDERSequenceLength( const BER_PARSED_ITEM *pBerItems, sint32 nNumBerItems ); #endif /* ifndef __CSM_KEYPARSE_H__ */