#ifdef __cplusplus extern "C" { #endif /* dss_key.h */ #define DSS_KEYSIZE_INC 64 /*********************************/ /* Definitions */ /*********************************/ #define DSS_MAGIC 0x31535344 #define DSS_PRIVATE_MAGIC 0x32535344 #define DSS_PUB_MAGIC_VER3 0x33535344 #define DSS_PRIV_MAGIC_VER3 0x34535344 /*********************************/ /* Structure Definitions */ /*********************************/ typedef dsa_private_t DSSKey_t; /*********************************/ /* Function Definitions */ /*********************************/ extern DSSKey_t * allocDSSKey( void); extern void freeKeyDSS( DSSKey_t *dss); extern DWORD initKeyDSS( IN Context_t *pContext, IN ALG_ID Algid, IN OUT DSSKey_t *pDss, IN DWORD dwBitLen); // Generate the DSS keys extern DWORD genDSSKeys( IN Context_t *pContext, IN OUT DSSKey_t *pDss); extern void copyDSSPubKey( IN DSSKey_t *dss1, IN DSSKey_t *dss2); extern void copyDSSKey( IN DSSKey_t *dss1, IN DSSKey_t *dss2); extern DWORD getDSSParams( DSSKey_t *dss, DWORD param, BYTE *data, DWORD *len); extern DWORD setDSSParams( IN Context_t *pContext, IN OUT DSSKey_t *pDss, IN DWORD dwParam, IN CONST BYTE *pbData); extern BOOL DSSValueExists( IN DWORD *pdw, IN DWORD cdw, OUT DWORD *pcb); extern DWORD ExportDSSPrivBlob3( IN Context_t *pContext, IN DSSKey_t *pDSS, IN DWORD dwMagic, IN ALG_ID Algid, IN BOOL fInternalExport, IN BOOL fSigKey, OUT BYTE *pbKeyBlob, IN OUT DWORD *pcbKeyBlob); extern DWORD ImportDSSPrivBlob3( IN BOOL fInternalExport, IN CONST BYTE *pbKeyBlob, IN DWORD cbKeyBlob, OUT DSSKey_t *pDSS); extern DWORD ExportDSSPubBlob3( IN DSSKey_t *pDSS, IN DWORD dwMagic, IN ALG_ID Algid, OUT BYTE *pbKeyBlob, IN OUT DWORD *pcbKeyBlob); extern DWORD ImportDSSPubBlob3( IN CONST BYTE *pbKeyBlob, IN DWORD cbKeyBlob, IN BOOL fYIncluded, OUT DSSKey_t *pDSS); // Export DSS key into blob format extern DWORD exportDSSKey( IN Context_t *pContext, IN DSSKey_t *pDSS, IN DWORD dwFlags, IN DWORD dwBlobType, IN BYTE *pbKeyBlob, IN DWORD *pcbKeyBlob, IN BOOL fInternalExport); // Import the blob into DSS key extern DWORD importDSSKey( IN Context_t *pContext, IN Key_t *pKey, IN CONST BYTE *pbKeyBlob, IN DWORD cbKeyBlob, IN DWORD dwKeysetType, IN BOOL fInternal); extern DWORD dssGenerateSignature( Context_t *pContext, DSSKey_t *pDss, BYTE *pbHash, BYTE *pbSig, DWORD *pcbSig); // // Function : SignAndVerifyWithKey // // Description : This function creates a hash and then signs that hash with // the passed in key and verifies the signature. The function // is used for FIPS 140-1 compliance to make sure that newly // generated/imported keys work and in the self test during // DLL initialization. // extern DWORD SignAndVerifyWithKey( IN DSSKey_t *pDss, IN EXPO_OFFLOAD_STRUCT *pOffloadInfo, IN HANDLE hRNGDriver, IN BYTE *pbData, IN DWORD cbData); #ifdef __cplusplus } #endif