//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1996 - 2000 // // File: encode.h // //-------------------------------------------------------------------------- #ifndef _ENCODE_H_ #define _ENCODE_H_ #include #include "csber.h" // 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 0x40 #define MAXALGIDLEN 0x0a #define MAXOBJIDLEN 20 #define MAXNAMEVALUELEN 0x40 #define UTCTIMELEN 0x0f #define MAXPUBKEYDATALEN 0x30 #define VERSIONLEN 0x03 #define MAXENCODEDSIGLEN 0x30 #define MAXHEADERLEN 0x08 #define MINHEADERLEN 0x03 #define MAXTIMELEN 0x20 #define MAXNAMELEN 0x40 // definitions for scrubbing memory #define ALLBITSOFF 0x00 #define ALLBITSON 0xff typedef struct _PctPrivateKey { DWORD Type; DWORD cbKey; BYTE pKey[1]; } PctPrivateKey, *PPctPrivateKey; typedef struct _OIDTRANSLATE { char const *pszObjId; BYTE abOIDEncoded[MAXOBJIDLEN]; // ASN.1 encoded OID BYTE cbOIDEncoded; // ASN.1 encoded OID length } OIDTRANSLATE; typedef struct _ALGIDTRANSLATE { DWORD AlgId; char const *pszObjId; } ALGIDTRANSLATE; typedef struct _RDNENTRY { char const *pszObjId; char const *pszShortName; BYTE BerTag; // ASN.1 type of string DWORD cbMaxString; DWORD cbMaxConcatenated; DWORD cbRemain; } RDNENTRY; typedef struct _NAMEENTRY { char const *pszObjId; BYTE BerTag; // ASN.1 type of string DWORD cbData; BYTE *pbData; DWORD iRDN; } NAMEENTRY; typedef struct _NAMETABLE { DWORD cnt; NAMEENTRY *pNameEntry; } NAMETABLE; extern const ALGIDTRANSLATE g_aAlgIdTranslate[]; extern const DWORD g_cAlgIdTranslate; extern const OIDTRANSLATE g_aOidTranslate[]; extern const DWORD g_cOidTranslate; extern RDNENTRY g_ardnSubject[]; extern const DWORD g_crdnSubject; // prototypes for the functions in enc.cpp: OIDTRANSLATE const * LookupOidTranslate( IN CHAR const *pszObjId); long EncodeObjId( OPTIONAL OUT BYTE *pbEncoded, IN CHAR const *pszObjId); long EncodeLength( OPTIONAL OUT BYTE *pbEncoded, IN DWORD dwLen); long EncodeAlgid( OPTIONAL OUT BYTE *pbEncoded, IN DWORD Algid); long EncodeInteger( OPTIONAL OUT BYTE *pbEncoded, IN BYTE const *pbInt, IN DWORD dwLen); long EncodeUnicodeString( OPTIONAL OUT BYTE *pbEncoded, IN WCHAR const *pwsz); long EncodeIA5String( OPTIONAL OUT BYTE *pbEncoded, IN BYTE const *pbStr, IN DWORD dwLen); long EncodeOctetString( OPTIONAL OUT BYTE *pbEncoded, IN BYTE const *pbStr, IN DWORD dwLen); long EncodeBitString( OPTIONAL OUT BYTE *pbEncoded, IN BYTE const *pbStr, IN DWORD dwLen); long EncodeHeader( OPTIONAL OUT BYTE *pbEncoded, IN DWORD dwLen); long EncodeSetHeader( OPTIONAL OUT BYTE *pbEncoded, IN DWORD dwLen); long EncodeAttributeHeader( OPTIONAL OUT BYTE *pbEncoded, IN DWORD dwLen); long EncodeName( OPTIONAL OUT BYTE *pbEncoded, IN BYTE const *pbName, IN DWORD dwLen); long EncodeAlgorithm( OPTIONAL OUT BYTE *pbEncoded, IN DWORD AlgId); #define ALGTYPE_SIG_RSA_MD5 0x01 #define ALGTYPE_KEYEXCH_RSA_MD5 0x02 #define ALGTYPE_CIPHER_RC4_MD5 0x03 long EncodeDN( OPTIONAL OUT BYTE *pbEncoded, IN NAMETABLE const *pNameTable); long EncodeFileTime( OPTIONAL OUT BYTE *pbEncoded, IN FILETIME Time, IN BOOL UTC); #endif // _ENCODE_H_