windows-nt/Source/XPSP1/NT/ds/win32/ntcrypto/dssinc/dss_key.h
2020-09-26 16:20:57 +08:00

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