windows-nt/Source/XPSP1/NT/ds/security/protocols/schannel/inc/protocol.h
2020-09-26 16:20:57 +08:00

178 lines
6.3 KiB
C

#ifndef _PROTOCOL_H_
#define _PROTOCOL_H_
typedef struct _SPContext SPContext, *PSPContext;
typedef struct _UNICipherMap {
DWORD CipherKind;
DWORD fProt;
ALG_ID aiHash;
ALG_ID aiCipher;
DWORD dwStrength;
ExchSpec KeyExch;
ALG_ID aiExch;
DWORD dwFlags;
} UNICipherMap, *PUNICipherMap;
// cipher map flag values
#define DOMESTIC_CIPHER_SUITE 0x00000001
#define EXPORT40_CIPHER_SUITE 0x00000002
#define EXPORT56_CIPHER_SUITE 0x00000004
extern DWORD g_ProtEnabled;
extern UNICipherMap UniAvailableCiphers[];
extern DWORD UniNumCiphers;
SP_STATUS WINAPI
ServerProtocolHandler(PSPContext pContext,
PSPBuffer pCommInput,
PSPBuffer pCommOutput);
SP_STATUS WINAPI
ClientProtocolHandler(PSPContext pContext,
PSPBuffer pCommInput,
PSPBuffer pCommOutput);
SP_STATUS
GetSupportedCapiAlgs(
HCRYPTPROV hProv,
DWORD dwCapiFlags,
PROV_ENUMALGS_EX ** ppAlgInfo,
DWORD * pcAlgInfo);
SP_STATUS WINAPI
GenerateHello(
PSPContext pContext,
PSPBuffer pOutput,
BOOL fCache);
SP_STATUS WINAPI
GenerateUniHello(
PSPContext pContext,
PSPBuffer pOutput,
DWORD fProtocol
);
typedef SP_STATUS ( WINAPI * SPInitiateHelloFn)(
PSPContext pContext,
PSPBuffer pOutput,
BOOL fCache);
typedef SP_STATUS ( WINAPI * SPProtocolHandlerFn)(PSPContext pContext,
PSPBuffer pCommInput,
PSPBuffer pCommOutput);
typedef SP_STATUS ( WINAPI * SPDecryptHandlerFn)(PSPContext pContext,
PSPBuffer pCommInput,
PSPBuffer pAppOutput);
typedef SP_STATUS ( WINAPI * SPDecryptMessageFn)(PSPContext pContext,
PSPBuffer pCommInput,
PSPBuffer pAppOutput);
typedef SP_STATUS ( WINAPI * SPEncryptMessageFn)(PSPContext pContext,
PSPBuffer pAppInput,
PSPBuffer pCommOutput);
typedef SP_STATUS ( WINAPI * SPGetHeaderSizeFn)(PSPContext pContext,
PSPBuffer pCommInput,
DWORD * pcbHeader);
/* State machine states */
#define SP_STATE_NONE 0x00
#define PCT1_STATE_CLIENT_HELLO 0x01
#define PCT1_STATE_SERVER_HELLO 0x02
#define PCT1_STATE_CLIENT_MASTER_KEY 0x03
#define PCT1_STATE_SERVER_VERIFY 0x04
#define PCT1_STATE_ERROR 0x05
#define PCT1_STATE_RENEGOTIATE 0x06
#define SSL2_STATE_CLIENT_HELLO 0x11
#define SSL2_STATE_SERVER_HELLO 0x12
#define SSL2_STATE_CLIENT_MASTER_KEY 0x13
#define SSL2_STATE_CLIENT_FINISH 0x14
#define SSL2_STATE_SERVER_VERIFY 0x15
#define SSL2_STATE_SERVER_FINISH 0x16
#define SSL2_STATE_REQUEST_CERTIFICATE 0x17
#define SSL2_STATE_CLIENT_CERTIFICATE 0x18
#define SSL2_STATE_SERVER_RESTART 0x19
#define SSL2_STATE_CLIENT_RESTART 0x1a
#define SSL3_STATE_CLIENT_HELLO 0x1b
#define SSL3_STATE_CHANGE_CIPHER_SPEC 0x1c
#define SSL3_STATE_RESTART_CCS 0x1d
#define SSL3_STATE_RESTART_SERVER_FINISH 0x1e
#define SSL3_STATE_SERVER_FINISH 0x1f
#define UNI_STATE_RECVD_UNIHELLO 0xfe
#define UNI_STATE_CLIENT_HELLO 0xff
#define SSL3_STATE_CLIENT_FINISH 0x21
#define SSL3_STATE_RESTART_CLI_FINISH 0x22
#define SSL3_STATE_REDO_RESTART 0x24
#define SSL3_STATE_SERVER_CERTIFICATE 0x25
#define SSL3_STATE_SERVER_KEY_XCHANGE 0x26
#define SSL3_STATE_SERVER_CERTREQ 0x27
#define SSL3_STATE_SERVER_HELLO 0x29
#define SSL3_STATE_CLIENT_KEY_XCHANGE 0x31
#define SSL3_STATE_CERT_VERIFY 0x32
#define SSL3_STATE_FINISHED 0x33
#define SSL3_STATE_RESTART_SER_HELLO 0x36
#define SSL3_STATE_SER_RESTART_CHANGE_CIPHER_SPEC 0x37
#define SSL3_STATE_CHANGE_CIPHER_SPEC_CLIENT 0x38
#define SSL3_STATE_CHANGE_CIPHER_SPEC_SERVER 0x39
#define SSL3_STATE_NO_CERT_ALERT 0x3a
#define SSL3_STATE_RENEGOTIATE 0x3b
#define SSL3_STATE_SGC_CERTIFICATE 0x3c
//these defines must not be touched... Please do not in this section...
// PROTECTED BY SSL3 SPECEFIC states
#define SSL3_STATE_GEN_START 0x80
#define SSL3_STATE_GEN_SERVER_HELLORESP (SSL3_STATE_GEN_START + 1)
#define SSL3_STATE_GEN_SERVER_HELLO (SSL3_STATE_GEN_START + 2)
#define SSL3_STATE_GEN_SERVER_HELLO_RESTART (SSL3_STATE_GEN_START + 3)
#define SSL3_STATE_GEN_SERVER_FINISH (SSL3_STATE_GEN_START + 4)
#define SSL3_STATE_GEN_CLIENT_FINISH (SSL3_STATE_GEN_START + 5)
#define SSL3_STATE_GEN_REDO (SSL3_STATE_GEN_START + 6)
#define SSL3_STATE_GEN_HELLO_REQUEST (SSL3_STATE_GEN_START + 7)
#define SSL3_STATE_CONNECTED_SERVER (SSL3_STATE_GEN_START + 8)
#define TLS1_STATE_ERROR (SSL3_STATE_GEN_START + 9)
#define SSL3_STATE_GEN_END (SSL3_STATE_GEN_START + 10)
//PROTECTED AREA ENDS.................
#define SP_STATE_SHUTDOWN_PENDING 0x0000fffd // We're building a CloseNotify alert.
#define SP_STATE_SHUTDOWN 0x0000fffe // We're shutting down.
#define SP_STATE_CONNECTED 0x0000ffff /* We are connected, and are
* expecting data packets, otherwise
* we are performing a protocol
* negotiation lower word contains
* last message sent, implying what
* the next word will be */
// UNIHELLO codes.
#define PCT_SSL_COMPAT 0x8f
#define PCT_SSL_CERT_TYPE 0x80
#define PCT_SSL_HASH_TYPE 0x81
#define PCT_SSL_EXCH_TYPE 0x82
#define PCT_SSL_CIPHER_TYPE_1ST_HALF 0x83
#define PCT_SSL_CIPHER_TYPE_2ND_HALF 0x84
#define UNI_CK_PCT SSL_MKFAST(PCT_SSL_COMPAT, MSBOF(PCT_VERSION_1), LSBOF(PCT_VERSION_1))
#define PCT_SSL_CERT_X509 SSL_MKFAST(0x80, 0x00, 0x00)
#define PCT_SSL_CERT_PKCS7 SSL_MKFAST(0x80, 0x00, 0x01)
#endif /* _PROTOCOL_H_ */