//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1997 - 1999 // // File: pfxcmn.h // //-------------------------------------------------------------------------- #ifndef _PFXCMN_H_ #define _PFXCMN_H_ #ifdef __cplusplus extern "C" { #endif typedef DWORD PFXERR; typedef HANDLE HPFXITEM; typedef HANDLE HPFX; typedef LPSTR OID; #define PFXAPI __stdcall // define allocators #define SSAlloc(__x__) LocalAlloc(LMEM_FIXED, __x__) #define SSFree(__x__) LocalFree(__x__) #define SSReAlloc(__x__, __y__) LocalReAlloc(__x__, __y__, LMEM_MOVEABLE) // PFXExportCertStoreEx -> PFXExportCertStore internal param #define PKCS12_ENHANCED_STRENGTH_ENCODING 0xffff0008 #define PKCS12_ENCR_PWD_ITERATIONS 2000 #define PKCS12_MAC_PWD_ITERATIONS 2000 #define MAKEZERO(arg) ZeroMemory( &arg, sizeof(arg)) // count the number of bytes needed to fully store a WSZ #define WSZ_BYTECOUNT(__z__) \ ( (__z__ == NULL) ? 0 : (wcslen(__z__)+1)*sizeof(WCHAR) ) typedef struct _PFX_INFO { #define NSCP_BLOB 1 #define PFX_BLOB 2 DWORD dwBlobType; // NSCP, PFX? LPWSTR szPassword; DWORD dwPrivacyMode; DWORD dwIntegrityMode; DWORD dwTransportMode; CRYPT_ALGORITHM_IDENTIFIER aiKeyShroudingEncryptionAlgid; CRYPT_ALGORITHM_IDENTIFIER aiSafePDUEncryptionAlgid; void** rgSecrets; // SafeBag* [] -- array of safebag*'s DWORD cSecrets; void** rgCertcrls; // SafeBag* [] -- array of safebag*'s DWORD cCertcrls; void** rgKeys; // SafeBag* [] -- array of safebag*'s DWORD cKeys; void** rgShroudedKeys; // SafeBag* [] -- array of safebag*'s DWORD cShroudedKeys; } PFX_INFO, *PPFX_INFO; // ------------------------------------------------------------------------- // begin nscp.cpp entry points // ------------------------------------------------------------------------- BOOL InitNSCP(); BOOL TerminateNSCP(); //////////////////// // import pb, cb, return HPFX BOOL PFXAPI NSCPImportBlob ( LPCWSTR szPassword, PBYTE pbIn, DWORD cbIn, SAFE_CONTENTS **ppSafeContents ); // ------------------------------------------------------------------------- // end nscp.cpp entry points // ------------------------------------------------------------------------- // ------------------------------------------------------------------------- // begin PFX.cpp entry points // ------------------------------------------------------------------------- BOOL InitPFX(); BOOL TerminatePFX(); //////////////////// // returns HPFX, prepares PFX export HPFX PFXAPI PfxExportCreate ( LPCWSTR szPassword ); //////////////////// // Do header wrap of specified HPFX BOOL PFXAPI PfxExportBlob ( HPFX hpfx, PBYTE pbOut, DWORD* pcbOut, DWORD dwFlags ); //////////////////// // Unwrap pb cb, return handle to new HPFX HPFX PFXAPI PfxImportBlob ( LPCWSTR szPassword, PBYTE pbIn, DWORD cbIn, DWORD dwFlags ); //////////////////// // Free all resources associated with the hpfx BOOL PFXAPI PfxCloseHandle( IN HPFX hpfx ); // // functions for checking if somethings is a pfx blob // BOOL PFXAPI IsRealPFXBlob ( CRYPT_DATA_BLOB* pPFX ); BOOL PFXAPI IsNetscapePFXBlob ( CRYPT_DATA_BLOB* pPFX ); // ------------------------------------------------------------------------- // end PFX.cpp entry points // ------------------------------------------------------------------------- // new entry points for loading up the HPFX BOOL PfxGetKeysAndCerts( HPFX hPfx, SAFE_CONTENTS* pContents ); BOOL PfxAddSafeBags( HPFX hPfx, SAFE_BAG* pSafeBags, DWORD cSafeBags ); BOOL MakeEncodedCertBag( BYTE *pbEncodedCert, DWORD cbEncodedCert, BYTE *pbEncodedCertBag, DWORD *pcbEncodedCertBag ); BOOL GetEncodedCertFromEncodedCertBag( BYTE *pbEncodedCertBag, DWORD cbEncodedCertBag, BYTE *pbEncodedCert, DWORD *pcbEncodedCert ); BOOL SetSaltAndIterationCount( BYTE **ppbParameters, DWORD *pcbParameters, BYTE *pbSalt, DWORD cbSalt, int iIterationCount ); BOOL GetSaltAndIterationCount( BYTE *pbParameters, DWORD cbParameters, BYTE **ppbSalt, DWORD *pcbSalt, int *piIterationCount ); /////////////////////////////////////////////////////////////////////////////////// // The real PKCS #12 Object Identifiers #define szOID_PKCS_12_PbeIds szOID_PKCS_12 ".1" #define szOID_PKCS_12_pbeWithSHA1And128BitRC4 szOID_PKCS_12_PbeIds ".1" #define szOID_PKCS_12_pbeWithSHA1And40BitRC4 szOID_PKCS_12_PbeIds ".2" #define szOID_PKCS_12_pbeWithSHA1And3KeyTripleDES szOID_PKCS_12_PbeIds ".3" #define szOID_PKCS_12_pbeWithSHA1And2KeyTripleDES szOID_PKCS_12_PbeIds ".4" #define szOID_PKCS_12_pbeWithSHA1And128BitRC2 szOID_PKCS_12_PbeIds ".5" #define szOID_PKCS_12_pbeWithSHA1And40BitRC2 szOID_PKCS_12_PbeIds ".6" #define szOID_PKCS_12_EnvelopingIds OLD_szOID_PKCS_12_OIDs ".2" #define szOID_PKCS_12_rsaEncryptionWith128BitRC4 OLD_szOID_PKCS_12_EnvelopingIds ".1" #define szOID_PKCS_12_rsaEncryptionWith40BitRC4 OLD_szOID_PKCS_12_EnvelopingIds ".2" #define szOID_PKCS_12_rsaEncryptionWithTripleDES OLD_szOID_PKCS_12_EnvelopingIds ".3" #define szOID_PKCS_12_SignatureIds OLD_szOID_PKCS_12_OIDs ".3" #define szOID_PKCS_12_rsaSignatureWithSHA1Digest OLD_szOID_PKCS_12_SignatureIds ".1" #define szOID_PKCS_12_PkekIDs szOID_PKCS_12 ".6" // 1.2.840.113549.1.12.6 #define szOID_PKCS_12_UserCertPkekId szOID_PKCS_12_PkekIDs ".1" // 1.2.840.113549.1.12.6.1 #define szOID_PKCS_12_CACertPkekId szOID_PKCS_12_PkekIDs ".2" // 1.2.840.113549.1.12.6.2 #define szOID_PKCS_12_SelfSignedPkekId szOID_PKCS_12_PkekIDs ".3" // 1.2.840.113549.1.12.6.3 #define szOID_PKCS_12_Version1 szOID_PKCS_12 ".10" #define szOID_PKCS_12_BagIDs szOID_PKCS_12_Version1 ".1" #define szOID_PKCS_12_KeyBag szOID_PKCS_12_BagIDs ".1" #define szOID_PKCS_12_ShroudedKeyBag szOID_PKCS_12_BagIDs ".2" #define szOID_PKCS_12_CertBag szOID_PKCS_12_BagIDs ".3" #define szOID_PKCS_12_CRLBag szOID_PKCS_12_BagIDs ".4" #define szOID_PKCS_12_SecretBag szOID_PKCS_12_BagIDs ".5" #define szOID_PKCS_12_SafeContentsBag szOID_PKCS_12_BagIDs ".6" // new oids 6/30/97 #define szOID_PKCS_12_FriendlyName szOID_PKCS_9 ".20" #define szOID_PKCS_12_LocalKeyID szOID_PKCS_9 ".21" #define szOID_PKCS_12_CertTypes szOID_PKCS_9 ".22" #define szOID_PKCS_12_CRLTypes szOID_PKCS_9 ".23" #define szOID_PKCS_12_x509Cert szOID_PKCS_12_CertTypes ".1" #define szOID_PKCS_12_SDSICert szOID_PKCS_12_CertTypes ".2" #define szOID_PKCS_12_x509CRL szOID_PKCS_12_CRLTypes ".1" #ifdef __cplusplus } // extern "C" #endif #endif // _PFXCMN_H_