162 lines
3.2 KiB
C
162 lines
3.2 KiB
C
#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
|
|
|