278 lines
8.2 KiB
C
278 lines
8.2 KiB
C
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1992 - 1995.
|
||
|
//
|
||
|
// File: pct1prot.h
|
||
|
//
|
||
|
// Contents:
|
||
|
//
|
||
|
// Classes:
|
||
|
//
|
||
|
// Functions:
|
||
|
//
|
||
|
// History: 09-23-97 jbanes LSA integration stuff.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
#ifndef _PCT1PROT_H_
|
||
|
#define _PCT1PROT_H_
|
||
|
|
||
|
/* keyexchange algs */
|
||
|
#define PCT1_EXCH_RSA_PKCS1 0x0001
|
||
|
#define PCT1_EXCH_RSA_PKCS1_TOKEN_DES 0x0002
|
||
|
#define PCT1_EXCH_RSA_PKCS1_TOKEN_DES3 0x0003
|
||
|
#define PCT1_EXCH_RSA_PKCS1_TOKEN_RC2 0x0004
|
||
|
#define PCT1_EXCH_RSA_PKCS1_TOKEN_RC4 0x0005
|
||
|
|
||
|
#define PCT1_EXCH_DH_PKCS3 0x0006
|
||
|
#define PCT1_EXCH_DH_PKCS3_TOKEN_DES 0x0007
|
||
|
#define PCT1_EXCH_DH_PKCS3_TOKEN_DES3 0x0008
|
||
|
#define PCT1_EXCH_FORTEZZA_TOKEN 0x0009
|
||
|
|
||
|
#define PCT1_EXCH_UNKNOWN 0xffff
|
||
|
|
||
|
|
||
|
/* data encryption algs */
|
||
|
/* encryption alg masks */
|
||
|
#define PCT1_CIPHER_ALG 0xffff0000
|
||
|
#define PCT1_CIPHER_STRENGTH 0x0000ff00
|
||
|
#define PCT1_CSTR_POS 8
|
||
|
#define PCT1_CIPHER_MAC 0x000000ff
|
||
|
|
||
|
/* specific algs */
|
||
|
#define PCT1_CIPHER_DES 0x00010000
|
||
|
#define PCT1_CIPHER_IDEA 0x00020000
|
||
|
#define PCT1_CIPHER_RC2 0x00030000
|
||
|
#define PCT1_CIPHER_RC4 0x00040000
|
||
|
#define PCT1_CIPHER_2DES 0x00050000
|
||
|
#define PCT1_CIPHER_3DES 0x00060000
|
||
|
#define PCT1_CIPHER_SKIPJACK 0x01000000
|
||
|
#define PCT1_CIPHER_NONE 0x00000000
|
||
|
|
||
|
#define PCT1_CIPHER_UNKNOWN 0xffffffff
|
||
|
|
||
|
/* data encryption strength specs */
|
||
|
#define PCT1_ENC_BITS_40 0x00002800
|
||
|
#define PCT1_ENC_BITS_56 0x00003800
|
||
|
#define PCT1_ENC_BITS_64 0x00004000
|
||
|
#define PCT1_ENC_BITS_80 0x00005000
|
||
|
#define PCT1_ENC_BITS_128 0x00008000
|
||
|
#define PCT1_ENC_BITS_168 0x0000a800
|
||
|
#define PCT1_ENC_BITS_192 0x0000c000
|
||
|
/* mac strength specs */
|
||
|
#define PCT1_MAC_BITS_128 0x00000040
|
||
|
|
||
|
/* hashing algs */
|
||
|
#define PCT1_HASH_MD5 0x0001
|
||
|
#define PCT1_HASH_MD5_TRUNC_64 0x0002
|
||
|
#define PCT1_HASH_SHA 0x0003
|
||
|
#define PCT1_HASH_SHA_TRUNC_80 0x0004
|
||
|
#define PCT1_HASH_DES_DM 0x0005
|
||
|
#define PCT1_HASH_MD2 0x0006
|
||
|
#define PCT1_HASH_UNKNOWN 0xffff
|
||
|
|
||
|
/* certificate types */
|
||
|
#define PCT1_CERT_NONE 0x0000
|
||
|
#define PCT1_CERT_X509 0x0001
|
||
|
#define PCT1_CERT_PKCS7 0x0002
|
||
|
#define PCT1_CERT_X509_CHAIN 0x0003
|
||
|
|
||
|
/* signature algorithms */
|
||
|
#define PCT1_SIG_NONE 0x0000
|
||
|
#define PCT1_SIG_RSA_MD5 0x0001
|
||
|
#define PCT1_SIG_RSA_SHA 0x0002
|
||
|
#define PCT1_SIG_DSA_SHA 0x0003
|
||
|
|
||
|
/* these are for internal use only */
|
||
|
#define PCT1_SIG_RSA_MD2 0x0004
|
||
|
#define PCT1_SIG_RSA 0x0005
|
||
|
#define PCT1_SIG_RSA_SHAMD5 0x0006
|
||
|
#define PCT1_SIG_FORTEZZA_TOKEN 0x0007
|
||
|
|
||
|
|
||
|
|
||
|
/* key derivation separators */
|
||
|
|
||
|
#define PCT_CONST_CWK "cwcwcwcwcw"
|
||
|
#define PCT_CONST_CWK_LEN 2
|
||
|
|
||
|
#define PCT_CONST_SWK "svwsvwsvwsvwsvw"
|
||
|
#define PCT_CONST_SWK_LEN 3
|
||
|
|
||
|
#define PCT_CONST_CMK "cmaccmaccmaccmaccmac"
|
||
|
#define PCT_CONST_CMK_LEN 4
|
||
|
|
||
|
#define PCT_CONST_SMK "svmacsvmacsvmacsvmacsvmac"
|
||
|
#define PCT_CONST_SMK_LEN 5
|
||
|
|
||
|
#define PCT_CONST_SR "svsvsvsvsv"
|
||
|
#define PCT_CONST_SR_LEN 2
|
||
|
|
||
|
#define PCT_CONST_SLK "slslslslsl"
|
||
|
#define PCT_CONST_SLK_LEN 2
|
||
|
|
||
|
#define PCT_CONST_RESP "srsrsrsrsr"
|
||
|
#define PCT_CONST_RESP_LEN 2
|
||
|
|
||
|
#define PCT_CONST_VP "cvp"
|
||
|
#define PCT_CONST_VP_LEN 3
|
||
|
#define PCT_USE_CERT 1
|
||
|
#define PCT_MAKE_MAC 2
|
||
|
|
||
|
#define DERIVATION_BUFFER_SIZE 1024
|
||
|
|
||
|
/* data structs */
|
||
|
|
||
|
/* message constants and types */
|
||
|
#define PCT_MASTER_KEY_SIZE 16
|
||
|
#define PCT_SESSION_ID_SIZE 32
|
||
|
#define PCT_CHALLENGE_SIZE 32
|
||
|
|
||
|
#define PCT1_MAX_KEY_ARGS 8
|
||
|
|
||
|
#define RESPONSE_SIZE 32 /* allows for hash output growth */
|
||
|
|
||
|
#define PCT_MAX_SHAKE_LEN 32768 /* longest handshake message len */
|
||
|
/* implementation constants */
|
||
|
|
||
|
#define PCT_MAX_NUM_SEP 5
|
||
|
#define PCT_MAX_SEP_LEN 5
|
||
|
|
||
|
#define PCT1_MAX_CERT_SPECS 5
|
||
|
#define PCT1_MAX_SIG_SPECS 5
|
||
|
#define PCT1_MAX_EXCH_SPECS 5
|
||
|
#define PCT1_MAX_CIPH_SPECS 16
|
||
|
#define PCT1_MAX_HASH_SPECS 16
|
||
|
|
||
|
/* mismatch vector */
|
||
|
|
||
|
#define PCT_NUM_MISMATCHES 6
|
||
|
|
||
|
#define PCT_IMIS_CIPHER 1
|
||
|
#define PCT_IMIS_HASH 2
|
||
|
#define PCT_IMIS_CERT 4
|
||
|
#define PCT_IMIS_EXCH 8
|
||
|
#define PCT_IMIS_CL_CERT 16
|
||
|
#define PCT_IMIS_CL_SIG 32
|
||
|
|
||
|
|
||
|
SP_STATUS WINAPI
|
||
|
Pct1ServerProtocolHandler(
|
||
|
PSPContext pContext,
|
||
|
PSPBuffer pCommInput,
|
||
|
PSPBuffer pCommOutput);
|
||
|
|
||
|
SP_STATUS WINAPI
|
||
|
Pct1ClientProtocolHandler(
|
||
|
PSPContext pContext,
|
||
|
PSPBuffer pCommInput,
|
||
|
PSPBuffer pCommOutput);
|
||
|
|
||
|
SP_STATUS WINAPI
|
||
|
Pct1DecryptHandler(
|
||
|
PSPContext pContext,
|
||
|
PSPBuffer pCommInput,
|
||
|
PSPBuffer pAppOutput);
|
||
|
|
||
|
SP_STATUS WINAPI
|
||
|
Pct1GetHeaderSize(
|
||
|
PSPContext pContext,
|
||
|
PSPBuffer pCommInput,
|
||
|
DWORD * pcbHeaderSize);
|
||
|
|
||
|
|
||
|
SP_STATUS WINAPI Pct1DecryptMessage(PSPContext pContext,
|
||
|
PSPBuffer pCommInput,
|
||
|
PSPBuffer pAppOutput);
|
||
|
|
||
|
SP_STATUS WINAPI Pct1EncryptRaw(PSPContext pContext,
|
||
|
PSPBuffer pAppInput,
|
||
|
PSPBuffer pCommOutput,
|
||
|
DWORD dwFlags);
|
||
|
|
||
|
#define PCT1_ENCRYPT_ESCAPE 0x00000001
|
||
|
|
||
|
|
||
|
SP_STATUS WINAPI Pct1EncryptMessage(PSPContext pContext,
|
||
|
PSPBuffer pAppInput,
|
||
|
PSPBuffer pCommOutput);
|
||
|
|
||
|
|
||
|
|
||
|
SP_STATUS Pct1SrvHandleClientHello(PSPContext pContext,
|
||
|
PSPBuffer pCommInput,
|
||
|
PPct1_Client_Hello pHello,
|
||
|
PSPBuffer pCommOutput);
|
||
|
|
||
|
SP_STATUS Pct1SrvHandleCMKey(PSPContext pContext,
|
||
|
PSPBuffer pCommInput,
|
||
|
PSPBuffer pCommOutput);
|
||
|
|
||
|
SP_STATUS Pct1CliHandleServerHello(PSPContext pContext,
|
||
|
PSPBuffer pCommInput,
|
||
|
PPct1_Server_Hello pHello,
|
||
|
PSPBuffer pCommOutput);
|
||
|
|
||
|
SP_STATUS Pct1CliHandleServerVerify(PSPContext pContext,
|
||
|
PSPBuffer pCommInput,
|
||
|
PSPBuffer pCommOutput);
|
||
|
|
||
|
SP_STATUS Pct1HandleError(PSPContext pContext,
|
||
|
PSPBuffer pCommInput,
|
||
|
PSPBuffer pCommOutput);
|
||
|
|
||
|
SP_STATUS Pct1GenerateError(PSPContext pContext,
|
||
|
PSPBuffer pCommOutput,
|
||
|
SP_STATUS pError,
|
||
|
PSPBuffer pErrData);
|
||
|
|
||
|
|
||
|
SP_STATUS
|
||
|
WINAPI
|
||
|
GeneratePct1StyleHello(
|
||
|
PSPContext pContext,
|
||
|
PSPBuffer pOutput);
|
||
|
|
||
|
SP_STATUS
|
||
|
Pct1CliRestart(PSPContext pContext,
|
||
|
PPct1_Server_Hello pHello,
|
||
|
PSPBuffer pCommOutput);
|
||
|
|
||
|
SP_STATUS
|
||
|
Pct1SrvRestart(PSPContext pContext,
|
||
|
PPct1_Client_Hello pHello,
|
||
|
PSPBuffer pCommOutput);
|
||
|
|
||
|
VOID
|
||
|
Pct1ActivateSessionKeys(PSPContext pContext);
|
||
|
|
||
|
SP_STATUS
|
||
|
Pct1MakeSessionKeys(PSPContext pContext);
|
||
|
|
||
|
SP_STATUS Pct1EndVerifyPrelude(PSPContext pContext,
|
||
|
PUCHAR VerifyPrelude,
|
||
|
DWORD * pcbVerifyPrelude
|
||
|
);
|
||
|
|
||
|
SP_STATUS Pct1BeginVerifyPrelude(PSPContext pContext,
|
||
|
PUCHAR pClientHello,
|
||
|
DWORD cbClientHello,
|
||
|
PUCHAR pServerHello,
|
||
|
DWORD cbServerHello);
|
||
|
|
||
|
SP_STATUS
|
||
|
Pct1ComputeResponse(
|
||
|
PSPContext pContext,
|
||
|
PBYTE pbChallenge,
|
||
|
DWORD cbChallenge,
|
||
|
PBYTE pbConnectionID,
|
||
|
DWORD cbConnectionID,
|
||
|
PBYTE pbSessionID,
|
||
|
DWORD cbSessionID,
|
||
|
PBYTE pbResponse,
|
||
|
PDWORD pcbResponse);
|
||
|
|
||
|
|
||
|
#endif /* _PCT1PROT_H_ */
|