Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

704 lines
17 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1995 - 1999
//
// File: certut.h
//
//--------------------------------------------------------------------------
#include "resource.h"
const DWORD KMS_LOCKBOX_TAG = 1;
const DWORD KMS_SIGNING_CERT_TAG = 2;
const DWORD KMS_SIGNATURE_TAG = 3;
const DWORD KMS_USER_RECORD_TAG = 4;
typedef struct _TagHeader {
DWORD tag;
DWORD cbSize;
} TagHeader;
typedef DWORD CERTFLAGS;
const CERTFLAGS CERTFLAGS_ALL = 0xFFFFFFFF;
const CERTFLAGS CERTFLAGS_UNKNOWN = 0x00000000;
// nibble reserved for version number V
const CERTFLAGS CERTFLAGS_REVOKED = 0x00000001;
const CERTFLAGS CERTFLAGS_NOT_EXPIRED = 0x00000002;
const CERTFLAGS CERTFLAGS_SIGNING = 0x00000004;
const CERTFLAGS CERTFLAGS_SEALING = 0x00000008;
const CERTFLAGS CERTFLAGS_CURRENT = 0x00000010;
const CERTFLAGS CERTFLAGS_IMPORTED = 0x00000100;
// these are broken V1 certs, not standard version 1
const CERTFLAGS CERTFLAGS_VERSION_1 = 0x00001000;
// KMServer does not use version 2 certs
// const CERTFLAGS CERTFLAGS_VERSION_2 = 0x00002000;
// these are proper version 3 certs
const CERTFLAGS CERTFLAGS_VERSION_3 = 0x00003000;
#define wszKMSCERTSTATUS L"KMS.status"
#define cwcAUTOPASSWORDMAX 16
#define wszCUREGDSTEMPLATEFLAGS L"DSTemplateFlags"
#define wszCUREGDSCAFLAGS L"DSCAFlags"
#define wszCUREGDSOIDFLAGS L"DSOIDFlags"
#define wszREQUESTCLIENTID L"RequestClientId"
extern WCHAR const g_wszAppName[];
extern WCHAR const *g_pwszProg;
extern HINSTANCE g_hInstance;
extern WCHAR const g_wszAttrib[];
extern WCHAR const g_wszExt[];
extern WCHAR const g_wszCRL[];
extern BOOL g_fIDispatch;
extern BOOL g_fEnterpriseRegistry;
extern BOOL g_fUserRegistry;
extern BOOL g_fUserTemplates;
extern BOOL g_fMachineTemplates;
extern BOOL g_fFullUsage;
extern BOOL g_fReverse;
extern BOOL g_fForce;
extern BOOL g_fVerbose;
extern BOOL g_fGMT;
extern BOOL g_fSeconds;
extern BOOL g_fDispatch;
extern DWORD g_DispatchFlags;
extern BOOL g_fQuiet;
extern DWORD g_EncodeFlags;
extern DWORD g_CryptEncodeFlags;
extern BOOL g_fCryptSilent;
extern BOOL g_fV1Interface;
extern BOOL g_fSplitASN;
extern BOOL g_fAdminInterface;
extern BOOL g_fProtect;
extern BOOL g_fWeakPFX;
extern BOOL g_fURLFetch;
extern DWORD g_dwmsTimeout;
extern WCHAR *g_pwszConfig;
extern WCHAR *g_pwszDC;
extern WCHAR *g_pwszOut;
extern WCHAR *g_pwszPassword;
extern WCHAR *g_pwszCSP;
extern WCHAR *g_pwszRestrict;
extern WCHAR *g_pwszDnsName;
extern WCHAR *g_pwszOldName;
extern WCHAR const g_wszEmpty[];
extern WCHAR const g_wszPad2[];
extern WCHAR const g_wszPad4[];
extern WCHAR const g_wszPad6[];
extern WCHAR const g_wszPad8[];
extern WCHAR const wszNewLine[];
extern UINT g_uiExtraErrorInfo;
extern WCHAR const g_wszSchema[];
extern WCHAR const g_wszEncode[];
extern WCHAR const g_wszEncodeHex[];
extern WCHAR const g_wszViewDelStore[];
extern WCHAR const g_wszCACert[];
extern WCHAR const g_wszCAChain[];
extern WCHAR const g_wszGetCRL[];
extern WCHAR const g_wszCAInfo[];
extern WCHAR const g_wszCAInfoCRL[];
extern CRITICAL_SECTION g_DBCriticalSection;
typedef HRESULT (FNVERB)(
IN WCHAR const *pwszOption,
IN WCHAR const *pwszArg1,
IN WCHAR const *pwszArg2,
IN WCHAR const *pwszArg3,
IN WCHAR const *pwszArg4);
FNVERB verbUsage, verbDump, verbGetConfig,
verbGetConfig2, verbGetCACertificate, verbVerifyKeys, verbVerifyCert,
verbCheck7f, verbHexTranslate, verbBase64Translate, verbDenyRequest,
verbResubmitRequest, verbRevokeCertificate, verbSetAttributes,
verbSetExtension, verbPublishCRL, verbGetCRL, verbIsValidCertificate,
verbViewDump, verbDBDump, verbPing, verbPingAdmin, verbShutDownServer,
verbBackupPFX, verbRestorePFX, verbStore, verbBackupDB, verbRestoreDB,
verbCSPList, verbCSPTest, verbBackup, verbRestore, verbAddStore,
verbDelStore, verbVerifyStore, verbOIDName, verbImportCertificate,
verbDynamicFileList, verbDatabaseLocations, verbGetReg, verbSetReg,
verbErrorDump, verbCreateVRoots, verbConvertMDB, verbGetConfig3,
verbSetMapiInfo, verbGetMapiInfo, verbInstallCACert, verbRenewCACert,
verbKey, verbDelKey, verbExtractMDB, verbDS, verbDSDel, verbDSPublish,
verbDSCert, verbDSCRL, verbDSDeltaCRL, verbGetCAInfo, verbGetCAPropInfo,
verbGetCertFromUI, verbMACFile, verbGetKey, verbRecoverKey,
verbRepairStore, verbDelReg, verbExportPVK, verbExportPFX, verbImportPFX,
verbDSTemplate, verbDSAddTemplate, verbTemplate, verbTemplateCAs,
verbCATemplates, verbImportKMS, verbURLCache, verbSign, verbDeleteRow,
verbPulse, verbMachineInfo, verbDCInfo, verbEntInfo, verbTCAInfo,
verbViewOrDeleteStore, verbSCInfo, verbMergePFX, verbURL, verbConvertEPF,
verbSetCATemplates;
HRESULT
cuGetCAInfo(
IN WCHAR const *pwszOption,
OPTIONAL IN WCHAR const *pwszfnOut,
OPTIONAL IN WCHAR const *pwszInfoName,
OPTIONAL IN WCHAR const *pwszNumber);
HRESULT
cuGetLocalCANameFromConfig(
OPTIONAL OUT WCHAR **ppwszMachine,
OPTIONAL OUT WCHAR **ppwszCA);
HRESULT
cuSetConfig();
HRESULT
cuSanitizeNameWithSuffix(
IN WCHAR const *pwszName,
OUT WCHAR **ppwszNameOut);
HRESULT
cuGenerateKeyContainerName(
IN CERT_CONTEXT const *pcc,
OUT WCHAR **ppwszKeyContainerName);
VOID
cuPrintError(
IN DWORD idmsg,
IN HRESULT hr);
VOID
cuPrintAPIError(
IN WCHAR const *pwszAPIName,
IN HRESULT hr);
VOID
cuPrintErrorAndString(
OPTIONAL IN WCHAR const *pwszProc,
IN DWORD idmsg,
IN HRESULT hr,
OPTIONAL IN WCHAR const *pwszString);
VOID
cuPrintErrorMessageText(
IN HRESULT hr);
BOOL
cuParseDecimal(
IN OUT WCHAR const **ppwc,
IN OUT DWORD *pcwc,
OUT DWORD *pdw);
HRESULT
cuParseStrings(
IN WCHAR const *pwszStrings,
IN BOOL fMatchPrefix,
OPTIONAL IN WCHAR const *pwszPrefix,
OPTIONAL IN WCHAR const * const *apwszAllowedPrefixes,
OUT WCHAR ***papwszStrings,
OPTIONAL OUT BOOL *pfAllFields);
VOID
cuFreeStringArray(
IN OUT WCHAR **apwsz);
VOID
cuFreeStringArrayA(
IN OUT char **apsz);
VOID
cuConvertEscapeSequences(
IN OUT WCHAR *pwsz);
HRESULT
cuGeneratePassword(
IN DWORD cwcMax,
OUT WCHAR *pwszPassword,
IN DWORD cwcPassword);
HRESULT
cuGetPassword(
OPTIONAL IN UINT idsPrompt,
OPTIONAL IN WCHAR const *pwszfn,
OPTIONAL IN WCHAR const *pwszPasswordIn,
IN BOOL fVerify,
OUT WCHAR *pwszPassword,
IN DWORD cwcPassword,
OUT WCHAR const **ppwszPasswordOut);
HRESULT
cuDumpFileTimePeriod(
IN DWORD idMessage,
OPTIONAL IN WCHAR const *pwszQuote,
IN FILETIME const *pftGMT);
HRESULT
cuDumpFileTime(
IN DWORD idMessage,
OPTIONAL IN WCHAR const *pwszQuote,
IN FILETIME const *pftGMT);
HRESULT
cuDumpFileTimeOrPeriod(
IN DWORD idMessage,
OPTIONAL IN WCHAR const *pwszQuote,
IN FILETIME const *pftGMT);
HRESULT
cuDumpDate(
IN DATE const *pDate);
VOID
cuDumpSignature(
OPTIONAL IN CERT_SIGNED_CONTENT_INFO const *pcsci);
HRESULT
cuDumpFormattedProperty(
IN DWORD dwPropId,
OPTIONAL IN char const *pszObjId,
IN BYTE const *pb,
IN DWORD cb);
HRESULT
cuDecodeObjId(
IN BYTE const *pbData,
IN DWORD cbData,
char **ppszObjId);
HRESULT
cuEncodeObjId(
IN char const *pszObjId,
OUT BYTE **ppbData,
OUT DWORD *pcbData);
HRESULT
cuDecodeSequence(
IN BYTE const *pbSeq,
IN DWORD cbSeq,
IN DWORD cSeq,
OUT CRYPT_SEQUENCE_OF_ANY **ppSeq);
VOID
cuDumpAlgorithm(
IN DWORD idMessage,
IN CRYPT_ALGORITHM_IDENTIFIER const *pAlg);
BOOL
cuDumpFormattedExtension(
IN WCHAR const *pwszName,
IN BYTE const *pbObject,
IN DWORD cbObject);
HRESULT
cuDumpExtensionArray(
IN DWORD idMessage,
IN DWORD cExtension,
IN CERT_EXTENSION const *rgExtension);
HRESULT
cuDumpSerial(
OPTIONAL IN WCHAR const *pwszPrefix,
IN DWORD idMessage,
IN CRYPT_INTEGER_BLOB const *pSerial);
HRESULT
cuDumpPrivateKey(
IN CERT_CONTEXT const *pCert,
OPTIONAL OUT BOOL *pfSigningKey,
OPTIONAL OUT BOOL *pfMatchingKey);
VOID
cuDumpPublicKey(
IN CERT_PUBLIC_KEY_INFO const *pKey);
VOID
cuDumpAlgid(
IN DWORD Algid);
VOID
cuDumpVersion(
IN DWORD dwVersion);
HRESULT
cuDumpPrivateKeyBlob(
IN BYTE const *pbKey,
IN DWORD cbKey,
IN BOOL fQuiet);
HRESULT
cuDumpCertKeyProviderInfo(
IN WCHAR const *pwszPrefix,
OPTIONAL IN CERT_CONTEXT const *pCert,
OPTIONAL IN CRYPT_KEY_PROV_INFO *pkpi,
OPTIONAL OUT CRYPT_KEY_PROV_INFO **ppkpi);
HRESULT
EPFFileDump(
IN WCHAR const *pwszfn,
OPTIONAL IN WCHAR const *pwszPassword,
OPTIONAL IN OUT HCERTSTORE hStore);
#define EPFALG_DEFAULT 0
#define EPFALG_CASTEXPORT 1
#define EPFALG_CAST 2
HRESULT
EPFSaveCertStoreToFile(
IN HCERTSTORE hStore,
IN WCHAR const *pwszPassword,
IN WCHAR const *pwszfnOut,
OPTIONAL IN WCHAR const *pwszV3CACertId,
IN DWORD dwEPFAlg,
OPTIONAL IN WCHAR const *pwszSalt);
HRESULT
myVerifyKMSKey(
IN BYTE const *pbCert,
IN DWORD cbCert,
IN BYTE const *pbKey,
IN DWORD cbKey,
IN DWORD dwKeySpec,
IN BOOL fQuiet);
#define BLOB_ROUND(cb) \
(((cb) + sizeof(CRYPT_DATA_BLOB) - 1) / sizeof(CRYPT_DATA_BLOB))
HRESULT
myDecodeKMSRSAKey(
IN BYTE const *pbKMSRSAKey,
IN DWORD cbKMSRSAKey,
IN ALG_ID aiKeyAlg,
OUT BYTE **ppbKey,
OUT DWORD *pcbKey);
HRESULT
myEncodeKMSRSAKey(
IN BYTE const *pbKey,
IN DWORD cbKey,
OUT BYTE **ppbKMSRSAKey,
OUT DWORD *pcbKMSRSAKey);
HRESULT
cuDumpAsnBinary(
IN BYTE const *pbIn,
IN DWORD cbIn,
IN DWORD iElement);
HRESULT
cuDumpAsnBinaryQuiet(
IN BYTE const *pb,
IN DWORD cb,
IN DWORD iElement);
HRESULT
cuSaveAsnToFile(
IN BYTE const *pbIn,
IN DWORD cbIn,
IN int imajor,
IN int ilevel,
IN DWORD iElement,
IN WCHAR const *pwszExtension);
#define DVNS_DUMP 0x000000000
#define DVNS_VERIFYCERT 0x000000001
#define DVNS_REPAIRKPI 0x000000002
#define DVNS_CASTORE 0x000000004
#define DVNS_DUMPKEYS 0x000000008
#define DVNS_DUMPPROPERTIES 0x000000010
#define DVNS_SAVECERT 0x000000100
#define DVNS_SAVECRL 0x000000200
#define DVNS_SAVECTL 0x000000400
#define DVNS_SAVEPFX 0x000000800
#define DVNS_SAVEPVK 0x000001000
#define DVNS_WRITESTORE 0x000002000
#define DVNS_DSSTORE 0x000004000
HRESULT
cuOpenCertStore(
IN WCHAR const *pwszStoreName,
IN OUT DWORD *pMode,
OPTIONAL OUT WCHAR **ppwszStoreNameOut,
OUT HCERTSTORE *phStore);
HRESULT
cuDumpAndVerifyStore(
IN HCERTSTORE hStore,
IN DWORD Mode,
OPTIONAL IN WCHAR const *pwszCertName,
IN DWORD iCertSave,
IN DWORD iCRLSave,
IN DWORD iCTLSave,
OPTIONAL IN WCHAR const *pwszfnOut,
OPTIONAL IN WCHAR const *pwszPassword);
VOID
cuDumpOIDAndDescriptionA(
IN char const *pszObjId);
VOID
cuDumpOIDAndDescription(
IN WCHAR const *pwszObjId);
WCHAR const *
cuwszFromExtFlags(
IN DWORD ExtFlags);
WCHAR const *
cuwszPropType(
IN LONG PropType);
BOOL
cuRegPrintDwordValue(
IN BOOL fPrintNameAndValue,
IN WCHAR const *pwszLookupName,
IN WCHAR const *pwszDisplayName,
IN DWORD dwValue);
VOID
cuRegPrintAwszValue(
IN WCHAR const *pwszName,
OPTIONAL IN WCHAR const * const *prgpwszValues);
VOID
cuPrintSchemaEntry(
OPTIONAL IN WCHAR const *pwszName,
IN WCHAR const *pwszDisplayName,
IN LONG Type,
IN LONG cbMax);
VOID
cuUnloadCert(
IN OUT CERT_CONTEXT const **ppCertContext);
HRESULT
cuLoadCert(
IN WCHAR const *pwszfnCert,
OUT CERT_CONTEXT const **ppCertContext);
VOID
cuUnloadCRL(
IN OUT CRL_CONTEXT const **ppCRLContext);
HRESULT
cuLoadCRL(
IN WCHAR const *pwszfnCRL,
OUT CRL_CONTEXT const **ppCRLContext);
HRESULT
cuVerifySignature(
IN BYTE const *pbEncoded,
IN DWORD cbEncoded,
IN CERT_PUBLIC_KEY_INFO const *pcpki,
IN BOOL fSuppressSuccess,
IN BOOL fSuppressError);
HRESULT
cuDumpIssuerSerialAndSubject(
IN CERT_NAME_BLOB const *pIssuer,
IN CRYPT_INTEGER_BLOB const *pSerialNumber,
OPTIONAL IN CERT_NAME_BLOB const *pSubject,
OPTIONAL IN HCERTSTORE hStore);
HRESULT
cuDumpSigners(
IN HCRYPTMSG hMsg,
IN CHAR const *pszInnerContentObjId,
IN HCERTSTORE hStore,
IN DWORD cSigner,
IN BOOL fContentEmpty,
IN BOOL fVerifyOnly,
OPTIONAL OUT BYTE *pbHashUserCert,
OPTIONAL IN OUT DWORD *pcbHashUserCert);
HRESULT
cuDumpRecipients(
IN HCRYPTMSG hMsg,
IN HCERTSTORE hStoreWrapper,
IN DWORD cRecipient,
IN BOOL fQuiet);
HRESULT
cuDumpEncryptedAsnBinary(
IN HCRYPTMSG hMsg,
IN DWORD cRecipient,
IN DWORD RecipientIndex,
OPTIONAL IN HCERTSTORE hStoreWrapper,
IN HCERTSTORE hStorePKCS7,
IN BYTE const *pbIn,
IN DWORD cbIn,
IN BOOL fQuiet,
OPTIONAL OUT BYTE **ppbDecrypted,
OPTIONAL OUT DWORD *pcbDecrypted);
#define VS_OTHERERROR 0x00000001
#define VS_EXPIRED 0x00000002
#define VS_REVOKED 0x00000004
#define VS_UNTRUSTEDROOT 0x00000008
#define VS_INCOMPLETECHAIN 0x00000010
#define VS_NOREVOCATIONCHECK 0x00000020
#define VS_REVOCATIONOFFLINE 0x00000040
#define VS_ROOT 0x40000000
#define VS_ROOTSIGOK 0x80000000
#define VS_ERRORMASK (VS_OTHERERROR | \
VS_EXPIRED | \
VS_REVOKED | \
VS_UNTRUSTEDROOT | \
VS_INCOMPLETECHAIN)
HRESULT
cuVerifyCertContext(
IN CERT_CONTEXT const *pCert,
OPTIONAL IN HCERTSTORE hStoreCA,
IN DWORD cApplicationPolicies,
OPTIONAL IN char const * const *apszApplicationPolicies,
IN DWORD cIssuancePolicies,
OPTIONAL IN char const * const *apszIssuancePolicies,
IN BOOL fNTAuth,
OUT DWORD *pVerifyState);
VOID
cuDisplayCDPUrlsFromCertOrCRL(
OPTIONAL IN CERT_CONTEXT const *pCert,
OPTIONAL IN CRL_CONTEXT const *pCRL);
VOID
cuDisplayAIAUrlsFromCert(
IN CERT_CONTEXT const *pCert);
HRESULT
cuDisplayCertName(
IN BOOL fMultiLine,
OPTIONAL IN WCHAR const *pwszNamePrefix,
IN WCHAR const *pwszName,
IN WCHAR const *pwszPad,
IN CERT_NAME_BLOB const *pNameBlob,
OPTIONAL IN CERT_INFO const *pCertInfo);
HRESULT
cuDisplayCertNames(
IN BOOL fMultiLine,
OPTIONAL IN WCHAR const *pwszNamePrefix,
IN CERT_INFO const *pCertInfo);
HRESULT
cuDisplayKeyId(
IN CERT_PUBLIC_KEY_INFO const *pPublicKeyInfo,
IN DWORD cExtension,
OPTIONAL IN CERT_EXTENSION const *rgExtension);
HRESULT
cuDisplayHash(
OPTIONAL IN WCHAR const *pwszPrefix,
OPTIONAL IN CERT_CONTEXT const *pCertContext,
OPTIONAL IN CRL_CONTEXT const *pCRLContext,
IN DWORD dwPropId,
IN WCHAR const *pwszHashName);
VOID
cuDisplayCAType(
IN LONG CAType);
HRESULT
cuGetCertType(
IN CERT_INFO const *pCertInfo,
OPTIONAL OUT WCHAR **ppwszCertTypeNameV1,
OPTIONAL OUT WCHAR **ppwszDisplayNameV1,
OPTIONAL OUT WCHAR **ppwszCertTypeObjId,
OPTIONAL OUT WCHAR **ppwszCertTypeName,
OPTIONAL OUT WCHAR **ppwszDisplayName);
HRESULT
cuGetGroupMembership(
IN WCHAR const *pwszSamName);
HRESULT
cuDumpCertType(
OPTIONAL IN WCHAR const *pwszPrefix,
IN CERT_INFO const *pCertInfo);
HRESULT
cuGetTemplateNames(
IN WCHAR const *pwszTemplate,
OUT WCHAR **ppwszCN,
OUT WCHAR **ppwszDisplayName);
VOID
cuPrintCRLFString(
IN WCHAR const *pwszPrefix,
IN WCHAR const *pwszIn);
int
cuidCRLReason(
IN LONG Reason);
WCHAR const *
cuGetOIDNameA(
IN char const *pszObjId);
WCHAR const *
cuGetOIDName(
IN WCHAR const *pwszObjId);
VOID
cuPrintPossibleObjectIdName(
IN WCHAR const *pwszObjId);
HRESULT
cuLoadKeys(
OPTIONAL IN WCHAR const *pwszProvName,
IN OUT DWORD *pdwProvType,
IN WCHAR const *pwszKeyContainerName,
IN BOOL fMachineKeyset,
IN BOOL fSoftFail,
OPTIONAL OUT HCRYPTPROV *phProv,
OPTIONAL OUT CERT_PUBLIC_KEY_INFO **ppPubKeyInfo,
OPTIONAL OUT CERT_PUBLIC_KEY_INFO **ppPubKeyInfoXchg);
VOID
cuCAInfoUsage(VOID);
DWORD
cuFileSize(
IN WCHAR const *pwszfn);
HRESULT
cuPingCertSrv(
IN WCHAR const *pwszConfig,
OPTIONAL OUT CAINFO **ppCAInfo);
DWORD
cuGetSystemStoreFlags();
HRESULT
cuVerifyKeyAuthority(
IN CERT_NAME_BLOB const *pIssuer,
IN CERT_INFO const *pCertInfoCA,
IN BYTE const *pbData,
IN DWORD cbData,
IN BOOL fQuiet,
OUT BOOL *pfKeyAuthorityMatch);
BOOL
cuVerifyMinimumBaseCRL(
IN CRL_CONTEXT const *pCRLBase,
IN CRL_CONTEXT const *pCRLDelta);
BOOL
cuVerifyIDP(
IN CERT_CONTEXT const *pCertSubject,
IN CRL_CONTEXT const *pCRL);