windows-nt/Source/XPSP1/NT/inetsrv/iis/svcs/iismap/encode.h
2020-09-26 16:20:57 +08:00

185 lines
6.2 KiB
C

/*-----------------------------------------------------------------------------
* Copyright (C) Microsoft Corporation, 1995 - 1996.
* All rights reserved.
*
* This file is part of the Microsoft Private Communication Technology
* reference implementation, version 1.0
*
* The Private Communication Technology reference implementation, version 1.0
* ("PCTRef"), is being provided by Microsoft to encourage the development and
* enhancement of an open standard for secure general-purpose business and
* personal communications on open networks. Microsoft is distributing PCTRef
* at no charge irrespective of whether you use PCTRef for non-commercial or
* commercial use.
*
* Microsoft expressly disclaims any warranty for PCTRef and all derivatives of
* it. PCTRef and any related documentation is provided "as is" without
* warranty of any kind, either express or implied, including, without
* limitation, the implied warranties or merchantability, fitness for a
* particular purpose, or noninfringement. Microsoft shall have no obligation
* to provide maintenance, support, upgrades or new releases to you or to anyone
* receiving from you PCTRef or your modifications. The entire risk arising out
* of use or performance of PCTRef remains with you.
*
* Please see the file LICENSE.txt,
* or http://pct.microsoft.com/pct/pctlicen.txt
* for more information on licensing.
*
* Please see http://pct.microsoft.com/pct/pct.htm for The Private
* Communication Technology Specification version 1.0 ("PCT Specification")
*
* 1/23/96
*----------------------------------------------------------------------------*/
#ifndef _ENCODE_H_
#define _ENCODE_H_
/* tag definitions for ASN.1 encoding decoding */
#define INTEGER_TAG 0x02
#define CHAR_STRING_TAG 0x16
#define OCTET_STRING_TAG 0x04
#define BIT_STRING_TAG 0x03
#define UTCTIME_TAG 0x17
#define SEQUENCE_TAG 0x30
#define SET_OF_TAG 0x11
#define OBJECT_ID_TAG 0x06
#define NULL_TAG 0x05
#define PRINTABLE_STRING_TAG 0x13
#define TELETEX_STRING_TAG 0x14
/* definitions of maximum lengths needed for the ASN.1 encoded
form of some of the common fields in a certificate */
#define MAXVALIDITYLEN 0x24
#define MAXKEYINFOLEN 0x50
#define MAXALGIDLEN 0x0A
#define MAXOBJIDLEN 0x0A
#define MAXNAMEVALUELEN 0x40
#define UTCTIMELEN 0x0F
#define MAXPUBKEYDATALEN 0x30
#define VERSIONLEN 0x03
#define MAXENCODEDSIGLEN 0x30
#define MAXHEADERLEN 0x08
#define MINHEADERLEN 0x03
#define MAXTIMELEN 0x20
/* definitions for scrubbing memory */
#define ALLBITSOFF 0x00
#define ALLBITSON 0xFF
/* prototypes for the functions in encode.c */
long EncodeLength (BYTE *pbEncoded, DWORD dwLen, BOOL Writeflag);
long EncodeAlgid (BYTE *pbEncoded, DWORD Algid, BOOL Writeflag);
long EncodeInteger (BYTE *pbEncoded, BYTE *pbInt, DWORD dwLen, BOOL Writeflag);
long EncodeString (BYTE *pbEncoded, BYTE *pbStr, DWORD dwLen, BOOL Writeflag);
long EncodeOctetString (BYTE *pbEncoded, BYTE *pbStr, DWORD dwLen, BOOL Writeflag);
long EncodeBitString (BYTE *pbEncoded, BYTE *pbStr, DWORD dwLen, BOOL Writeflag);
//long EncodeUTCTime (BYTE *pbEncoded, time_t Time, BOOL Writeflag);
long EncodeHeader (BYTE *pbEncoded, DWORD dwLen, BOOL Writeflag);
long EncodeSetOfHeader (BYTE *pbEncoded, DWORD dwLen, BOOL Writeflag);
long EncodeName (BYTE *pbEncoded, BYTE *pbName, DWORD dwLen, BOOL Writeflag);
long DecodeLength (DWORD *pdwLen, BYTE *pbEncoded, DWORD cEncoded);
long DecodeAlgid (DWORD *pAlgid, BYTE *pbEncoded, DWORD cEncoded, BOOL Writeflag);
long DecodeHeader (DWORD *pdwLen, BYTE *pbEncoded, DWORD cEncoded);
long DecodeSetOfHeader (DWORD *pdwLen, BYTE *pbEncoded, DWORD cEncoded);
long DecodeInteger (BYTE *pbInt, DWORD cbBuff, DWORD *pdwLen, BYTE *pbEncoded, DWORD cEncoded, BOOL Writeflag);
long DecodeString (BYTE *pbStr, DWORD *pdwLen, BYTE *pbEncoded, DWORD cEncoded,BOOL Writeflag);
long DecodeOctetString (BYTE *pbStr, DWORD *pdwLen, BYTE *pbEncoded, DWORD cEncoded, BOOL Writeflag);
long DecodeBitString (BYTE *pbStr, DWORD *pdwLen, BYTE *pbEncoded, DWORD cEncoded, BOOL Writeflag);
long DecodeName (BYTE *pbName, DWORD *pdwLen, BYTE *pbEncoded, DWORD cEncoded, BOOL Writeflag);
long
EncodeAlgorithm(
BYTE * pbEncoded,
DWORD AlgId,
BOOL WriteFlag);
#define ALGTYPE_SIG_RSA_MD5 0x01
#define ALGTYPE_KEYEXCH_RSA_MD5 0x02
#define ALGTYPE_CIPHER_RC4_MD5 0x03
long
EncodeDN(
BYTE * pbEncoded,
PSTR pszDN,
BOOL WriteFlag);
long
IisDecodeDN(
PSTR *pValue,
PSTR pBuf,
BYTE * pbEncoded,
DWORD cEncoded
);
#ifndef SECURITY_LINUX
long
EncodeFileTime(
BYTE * pbEncoded,
FILETIME Time,
BOOL UTC,
BOOL WriteFlag);
#else /* SECURITY_LINUX */
long EncodeUTCTime (BYTE *pbEncoded, time_t Time, BOOL Writeflag);
#endif /* SECURITY_LINUX */
#ifndef SECURITY_LINUX
long
DecodeFileTime(
FILETIME * pTime,
BYTE * pbEncoded,
DWORD cEncoded,
BOOL WriteFlag);
#else /* SECURITY_LINUX */
long DecodeUTCTime (time_t *pTime, BYTE *pbEncoded, DWORD cEncoded, BOOL Writeflag);
#define DecodeFileTime DecodeUTCTime
#endif /* SECURITY_LINUX */
long
DecodeNull(
BYTE * pbEncoded, DWORD cEncoded);
long
DecodeDN(
PSTR pName,
DWORD * pdwLen,
BYTE * pbEncoded,
DWORD cEncoded,
BOOL WriteFlag);
long
DecodeSigAlg(
DWORD * pAlgId,
PBYTE pbEncoded,
DWORD cEncoded,
BOOL WriteFlag);
long
DecodeCryptAlg(
DWORD * pAlgId,
DWORD * pHashid,
PBYTE pbEncoded,
DWORD cEncoded,
BOOL WriteFlag);
long
DecodeKeyType(
DWORD * pKeyType,
PBYTE pbEncoded,
DWORD cEncoded,
BOOL WriteFlag);
//long
//DecodePrivateKeyFile(
// PctPrivateKey ** ppKey,
// PBYTE pbEncoded,
// DWORD cbEncoded,
// PSTR Password );
#endif /* _ENCODE_H_ */