185 lines
6.2 KiB
C
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_ */
|