windows-nt/Source/XPSP1/NT/ds/win32/ntcrypto/dssinc/dh_key.h

134 lines
3.4 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/* dh_key.h */
#ifdef __cplusplus
extern "C" {
#endif
#define DH_MAX_LENGTH 0x00000200 // in bytes, 512 bytes, 4096 bits
#define DH_KEYSIZE_INC 0x40
/*********************************/
/* Definitions */
/*********************************/
#define DH_PUBLIC_MAGIC 0x31484400
#define DH_PRIVATE_MAGIC 0x32484400
#define DH_PUBLIC_MAGIC_VER3 0x33484400
#define DH_PRIV_MAGIC_VER3 0x34484400
/*********************************/
/* Structure Definitions */
/*********************************/
typedef dsa_private_t DHKey_t; // use a DSA key since X 9.42 requires key
// gen like DSA
/*
typedef struct {
ALG_ID Algid; // algorithm type of the key (SF or EPHEM)
DH_PRIV_KEY Priv;
} DHKey_t;
*/
/*********************************/
/* Function Definitions */
/*********************************/
// Initialize DH key
DWORD
initKeyDH(
IN Context_t *pContext,
IN OUT DHKey_t *pDH,
IN ALG_ID Algid,
IN DWORD dwFlags,
IN BOOL fAnyLength);
DHKey_t *allocDHKey ();
void freeKeyDH (DHKey_t *dh);
// Get the DH parameters
DWORD getDHParams (
IN DHKey_t *dh,
IN DWORD param,
OUT BYTE *data,
OUT DWORD *len
);
// Set the DH parameters
DWORD setDHParams (
IN OUT DHKey_t *pDH,
IN DWORD dwParam,
IN CONST BYTE *pbData,
IN OUT Context_t *pContext
);
// Generate a dh key
DWORD dhGenerateKey (
IN Context_t *pContext,
IN OUT DHKey_t *pDH);
DWORD dhDeriveKey (DHKey_t *dh, BYTE *data, DWORD len);
// Export the DH key in blob format
DWORD exportDHKey (
IN Context_t *pContext,
IN DHKey_t *pDH,
IN ALG_ID Algid,
IN DWORD dwFlags,
IN DWORD dwReserved,
IN DWORD dwBlobType,
OUT BYTE *pbData,
OUT DWORD *pcbData,
IN BOOL fInternal
);
DWORD DHPrivBlobToKey(
IN Context_t *pContext,
IN BLOBHEADER *pBlob,
IN DWORD cbBlob,
IN DWORD dwKeysetType,
OUT Key_t *pPrivKey
);
// Import the blob into DH key
DWORD importDHKey(
IN OUT Key_t *pPrivKey,
IN Context_t *pContext,
IN BYTE *pbBlob,
IN DWORD cbBlob,
OUT Key_t *pKey,
IN DWORD dwKeysetType,
IN BOOL fInternal
);
void copyDHPubKey(
IN DHKey_t *pDH1,
IN DHKey_t *pDH2
);
DWORD copyDHKey(
IN DHKey_t *pDH1,
IN DHKey_t *pDH2,
IN ALG_ID Algid,
IN Context_t *pContext
);
//
// Function : UseDHKey
//
// Description : This function creates an ephemeral DH key and then generates
// two agreed keys, thus simulating a DH exchange. If the
// agreed keys are not the same then the function fails.
//
DWORD UseDHKey(
IN Context_t *pContext,
IN PEXPO_OFFLOAD_STRUCT pOffloadInfo,
IN DHKey_t *pDH
);
#ifdef __cplusplus
}
#endif