mirror of https://github.com/dahall/Vanara.git
392 lines
14 KiB
C#
392 lines
14 KiB
C#
|
using System;
|
|||
|
using System.Runtime.InteropServices;
|
|||
|
using Vanara.InteropServices;
|
|||
|
using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME;
|
|||
|
|
|||
|
namespace Vanara.PInvoke
|
|||
|
{
|
|||
|
/// <summary>Methods and data types found in Crypt32.dll.</summary>
|
|||
|
public static partial class Crypt32
|
|||
|
{
|
|||
|
/// <summary>Private key pair type.</summary>
|
|||
|
[PInvokeData("wincrypt.h")]
|
|||
|
public enum PrivateKeyType
|
|||
|
{
|
|||
|
/// <summary>Key exchange</summary>
|
|||
|
AT_KEYEXCHANGE = 1,
|
|||
|
/// <summary>Digital signature</summary>
|
|||
|
AT_SIGNATURE = 2
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// The CERT_CONTEXT structure contains both the encoded and decoded representations of a certificate. A certificate context returned
|
|||
|
/// by one of the functions defined in Wincrypt.h must be freed by calling the CertFreeCertificateContext function. The
|
|||
|
/// CertDuplicateCertificateContext function can be called to make a duplicate copy (which also must be freed by calling CertFreeCertificateContext).
|
|||
|
/// </summary>
|
|||
|
[PInvokeData("wincrypt.h")]
|
|||
|
[StructLayout(LayoutKind.Sequential)]
|
|||
|
public struct CERT_CONTEXT
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Type of encoding used. It is always acceptable to specify both the certificate and message encoding types by combining them
|
|||
|
/// with a bitwise-OR operation.
|
|||
|
/// </summary>
|
|||
|
public uint dwCertEncodingType;
|
|||
|
|
|||
|
/// <summary>A pointer to a buffer that contains the encoded certificate.</summary>
|
|||
|
public IntPtr pbCertEncoded;
|
|||
|
|
|||
|
/// <summary>The size, in bytes, of the encoded certificate.</summary>
|
|||
|
public uint cbCertEncoded;
|
|||
|
|
|||
|
/// <summary>The address of a CERT_INFO structure that contains the certificate information.</summary>
|
|||
|
public IntPtr pCertInfo;
|
|||
|
|
|||
|
/// <summary>A handle to the certificate store that contains the certificate context.</summary>
|
|||
|
public IntPtr hCertStore;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// The CERT_EXTENSION structure contains the extension information for a certificate, Certificate Revocation List (CRL) or
|
|||
|
/// Certificate Trust List (CTL).
|
|||
|
/// </summary>
|
|||
|
[PInvokeData("wincrypt.h")]
|
|||
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
|||
|
public struct CERT_EXTENSION
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Object identifier (OID) that specifies the structure of the extension data contained in the Value member. For specifics on
|
|||
|
/// extension OIDs and their related structures, see X.509 Certificate Extension Structures.
|
|||
|
/// </summary>
|
|||
|
public StrPtrAnsi pszObjId;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// If TRUE, any limitations specified by the extension in the Value member of this structure are imperative. If FALSE,
|
|||
|
/// limitations set by this extension can be ignored.
|
|||
|
/// </summary>
|
|||
|
[MarshalAs(UnmanagedType.Bool)]
|
|||
|
public bool fCritical;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// A CRYPT_OBJID_BLOB structure that contains the encoded extension data. The cbData member of Value indicates the length in
|
|||
|
/// bytes of the pbData member. The pbData member byte string is the encoded extension.e
|
|||
|
/// </summary>
|
|||
|
public CRYPTOAPI_BLOB Value;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>The CERT_INFO structure contains the information of a certificate.</summary>
|
|||
|
[PInvokeData("wincrypt.h")]
|
|||
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
|||
|
public struct CERT_INFO
|
|||
|
{
|
|||
|
/// <summary>The version number of a certificate.</summary>
|
|||
|
public uint dwVersion;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// A BLOB that contains the serial number of a certificate. The least significant byte is the zero byte of the pbData member of
|
|||
|
/// SerialNumber. The index for the last byte of pbData, is one less than the value of the cbData member of SerialNumber. The
|
|||
|
/// most significant byte is the last byte of pbData. Leading 0x00 or 0xFF bytes are removed. For more information, see CertCompareIntegerBlob.
|
|||
|
/// </summary>
|
|||
|
public CRYPTOAPI_BLOB SerialNumber;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// A CRYPT_ALGORITHM_IDENTIFIER structure that contains the signature algorithm type and encoded additional encryption parameters.
|
|||
|
/// </summary>
|
|||
|
public CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm;
|
|||
|
|
|||
|
/// <summary>The name, in encoded form, of the issuer of the certificate.</summary>
|
|||
|
public CRYPTOAPI_BLOB Issuer;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Date and time before which the certificate is not valid. For dates between 1950 and 2049 inclusive, the date and time is
|
|||
|
/// encoded Coordinated Universal Time (Greenwich Mean Time) format in the form YYMMDDHHMMSS. This member uses a two-digit year
|
|||
|
/// and is precise to seconds. For dates before 1950 or after 2049, encoded generalized time is used. Encoded generalized time is
|
|||
|
/// in the form YYYYMMDDHHMMSSMMM, using a four-digit year, and is precise to milliseconds. Even though generalized time supports
|
|||
|
/// millisecond resolution, the NotBefore time is only precise to seconds.
|
|||
|
/// </summary>
|
|||
|
public FILETIME NotBefore;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Date and time after which the certificate is not valid. For dates between 1950 and 2049 inclusive, the date and time is
|
|||
|
/// encoded Coordinated Universal Time format in the form YYMMDDHHMMSS. This member uses a two-digit year and is precise to
|
|||
|
/// seconds. For dates before 1950 or after 2049, encoded generalized time is used. Encoded generalized time is in the form
|
|||
|
/// YYYYMMDDHHMMSSMMM, using a four-digit year, and is precise to milliseconds. Even though generalized time supports millisecond
|
|||
|
/// resolution, the NotAfter time is only precise to seconds.
|
|||
|
/// </summary>
|
|||
|
public FILETIME NotAfter;
|
|||
|
|
|||
|
/// <summary>The encoded name of the subject of the certificate.</summary>
|
|||
|
public CRYPTOAPI_BLOB Subject;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// A CERT_PUBLIC_KEY_INFO structure that contains the encoded public key and its algorithm. The PublicKey member of the
|
|||
|
/// CERT_PUBLIC_KEY_INFO structure contains the encoded public key as a CRYPT_BIT_BLOB, and the Algorithm member contains the
|
|||
|
/// encoded algorithm as a CRYPT_ALGORITHM_IDENTIFIER.
|
|||
|
/// </summary>
|
|||
|
public CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo;
|
|||
|
|
|||
|
/// <summary>A BLOB that contains a unique identifier of the issuer.</summary>
|
|||
|
public CRYPTOAPI_BLOB IssuerUniqueId;
|
|||
|
|
|||
|
/// <summary>A BLOB that contains a unique identifier of the subject.</summary>
|
|||
|
public CRYPTOAPI_BLOB SubjectUniqueId;
|
|||
|
|
|||
|
/// <summary>The number of elements in the rgExtension array.</summary>
|
|||
|
public uint cExtension;
|
|||
|
|
|||
|
/// <summary>An array of pointers to CERT_EXTENSION structures, each of which contains extension information about the certificate.</summary>
|
|||
|
public IntPtr rgExtension;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>The CERT_PUBLIC_KEY_INFO structure contains a public key and its algorithm.</summary>
|
|||
|
[PInvokeData("wincrypt.h")]
|
|||
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
|||
|
public struct CERT_PUBLIC_KEY_INFO
|
|||
|
{
|
|||
|
/// <summary>CRYPT_ALGORITHM_IDENTIFIER structure that contains the public key algorithm type and associated additional parameters.</summary>
|
|||
|
public CRYPT_ALGORITHM_IDENTIFIER Algorithm;
|
|||
|
|
|||
|
/// <summary>BLOB containing an encoded public key.</summary>
|
|||
|
public CRYPTOAPI_BLOB PublicKey;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// The CRYPT_ALGORITHM_IDENTIFIER structure specifies an algorithm used to encrypt a private key. The structure includes the object
|
|||
|
/// identifier (OID) of the algorithm and any needed parameters for that algorithm. The parameters contained in its CRYPT_OBJID_BLOB
|
|||
|
/// are encoded.
|
|||
|
/// </summary>
|
|||
|
[PInvokeData("wincrypt.h")]
|
|||
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
|||
|
public struct CRYPT_ALGORITHM_IDENTIFIER
|
|||
|
{
|
|||
|
/// <summary>An OID of an algorithm.</summary>
|
|||
|
public StrPtrAnsi pszObjId;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// A BLOB that provides encoded algorithm-specific parameters. In many cases, there are no parameters. This is indicated by
|
|||
|
/// setting the cbData member of the Parameters BLOB to zero.
|
|||
|
/// </summary>
|
|||
|
public CRYPTOAPI_BLOB Parameters;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// The BLOB structure contains an arbitrary array of bytes. The structure definition includes aliases appropriate to the various
|
|||
|
/// functions that use it.
|
|||
|
/// </summary>
|
|||
|
[PInvokeData("wincrypt.h")]
|
|||
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
|||
|
public struct CRYPTOAPI_BLOB
|
|||
|
{
|
|||
|
/// <summary>A DWORD variable that contains the count, in bytes, of data.</summary>
|
|||
|
public uint cbData;
|
|||
|
|
|||
|
/// <summary>A pointer to the data buffer.</summary>
|
|||
|
public IntPtr pbData;
|
|||
|
}
|
|||
|
|
|||
|
/*CertAddCertificateContextToStore
|
|||
|
CertAddCertificateLinkToStore
|
|||
|
CertAddCRLContextToStore
|
|||
|
CertAddCRLLinkToStore
|
|||
|
CertAddCTLContextToStore
|
|||
|
CertAddCTLLinkToStore
|
|||
|
CertAddEncodedCertificateToStore
|
|||
|
CertAddEncodedCertificateToSystemStore
|
|||
|
CertAddEncodedCRLToStore
|
|||
|
CertAddEncodedCTLToStore
|
|||
|
CertAddEnhancedKeyUsageIdentifier
|
|||
|
CertAddRefServerOcspResponse
|
|||
|
CertAddRefServerOcspResponseContext
|
|||
|
CertAddSerializedElementToStore
|
|||
|
CertAddStoreToCollection
|
|||
|
CertAlgIdToOID
|
|||
|
CertCloseServerOcspResponse
|
|||
|
CertCloseStore
|
|||
|
CertCompareCertificate
|
|||
|
CertCompareCertificateName
|
|||
|
CertCompareIntegerBlob
|
|||
|
CertComparePublicKeyInfo
|
|||
|
CertControlStore
|
|||
|
CertCreateCertificateChainEngine
|
|||
|
CertCreateCertificateContext
|
|||
|
CertCreateContext
|
|||
|
CertCreateCRLContext
|
|||
|
CertCreateCTLContext
|
|||
|
CertCreateCTLEntryFromCertificateContextProperties
|
|||
|
CertCreateSelfSignCertificate
|
|||
|
CertDeleteCertificateFromStore
|
|||
|
CertDeleteCRLFromStore
|
|||
|
CertDeleteCTLFromStore
|
|||
|
CertDuplicateCertificateChain
|
|||
|
CertDuplicateCertificateContext
|
|||
|
CertDuplicateCRLContext
|
|||
|
CertDuplicateCTLContext
|
|||
|
CertDuplicateStore
|
|||
|
CertEnumCertificateContextProperties
|
|||
|
CertEnumCertificatesInStore
|
|||
|
CertEnumCRLContextProperties
|
|||
|
CertEnumCRLsInStore
|
|||
|
CertEnumCTLContextProperties
|
|||
|
CertEnumCTLsInStore
|
|||
|
CertEnumPhysicalStore
|
|||
|
CertEnumSubjectInSortedCTL
|
|||
|
CertEnumSystemStore
|
|||
|
CertEnumSystemStoreLocation
|
|||
|
CertFindAttribute
|
|||
|
CertFindCertificateInCRL
|
|||
|
CertFindCertificateInStore
|
|||
|
CertFindChainInStore
|
|||
|
CertFindCRLInStore
|
|||
|
CertFindCTLInStore
|
|||
|
CertFindExtension
|
|||
|
CertFindRDNAttr
|
|||
|
CertFindSubjectInCTL
|
|||
|
CertFindSubjectInSortedCTL
|
|||
|
CertFreeCertificateChain
|
|||
|
CertFreeCertificateChainEngine
|
|||
|
CertFreeCertificateChainList
|
|||
|
CertFreeCertificateContext
|
|||
|
CertFreeCRLContext
|
|||
|
CertFreeCTLContext
|
|||
|
CertFreeServerOcspResponseContext
|
|||
|
CertGetCertificateChain
|
|||
|
CertGetCertificateContextProperty
|
|||
|
CertGetCRLContextProperty
|
|||
|
CertGetCRLFromStore
|
|||
|
CertGetCTLContextProperty
|
|||
|
CertGetEnhancedKeyUsage
|
|||
|
CertGetIntendedKeyUsage
|
|||
|
CertGetIssuerCertificateFromStore
|
|||
|
CertGetNameString
|
|||
|
CertGetPublicKeyLength
|
|||
|
CertGetServerOcspResponseContext
|
|||
|
CertGetStoreProperty
|
|||
|
CertGetSubjectCertificateFromStore
|
|||
|
CertGetValidUsages
|
|||
|
CertIsRDNAttrsInCertificateName
|
|||
|
CertIsStrongHashToSign
|
|||
|
CertIsValidCRLForCertificate
|
|||
|
CertNameToStr
|
|||
|
CertOIDToAlgId
|
|||
|
CertOpenServerOcspResponse
|
|||
|
CertOpenStore
|
|||
|
CertOpenSystemStore
|
|||
|
CertRDNValueToStr
|
|||
|
CertRegisterPhysicalStore
|
|||
|
CertRegisterSystemStore
|
|||
|
CertRemoveEnhancedKeyUsageIdentifier
|
|||
|
CertRemoveStoreFromCollection
|
|||
|
CertResyncCertificateChainEngine
|
|||
|
CertRetrieveLogoOrBiometricInfo
|
|||
|
CertSaveStore
|
|||
|
CertSelectCertificateChains
|
|||
|
CertSerializeCertificateStoreElement
|
|||
|
CertSerializeCRLStoreElement
|
|||
|
CertSerializeCTLStoreElement
|
|||
|
CertSetCertificateContextPropertiesFromCTLEntry
|
|||
|
CertSetCertificateContextProperty
|
|||
|
CertSetCRLContextProperty
|
|||
|
CertSetCTLContextProperty
|
|||
|
CertSetEnhancedKeyUsage
|
|||
|
CertSetStoreProperty
|
|||
|
CertStrToName
|
|||
|
CertUnregisterPhysicalStore
|
|||
|
CertUnregisterSystemStore
|
|||
|
CertVerifyCertificateChainPolicy
|
|||
|
CertVerifyCRLRevocation
|
|||
|
CertVerifyCRLTimeValidity
|
|||
|
CertVerifyCTLUsage
|
|||
|
CertVerifyRevocation
|
|||
|
CertVerifySubjectCertificateContext
|
|||
|
CertVerifyTimeValidity
|
|||
|
CertVerifyValidityNesting
|
|||
|
CryptAcquireCertificatePrivateKey
|
|||
|
CryptBinaryToString
|
|||
|
CryptCreateKeyIdentifierFromCSP
|
|||
|
CryptDecodeMessage
|
|||
|
CryptDecodeObject
|
|||
|
CryptDecodeObjectEx
|
|||
|
CryptDecryptAndVerifyMessageSignature
|
|||
|
CryptDecryptMessage
|
|||
|
CryptEncodeObject
|
|||
|
CryptEncodeObjectEx
|
|||
|
CryptEncryptMessage
|
|||
|
CryptEnumKeyIdentifierProperties
|
|||
|
CryptEnumOIDFunction
|
|||
|
CryptEnumOIDInfo
|
|||
|
CryptExportPublicKeyInfo
|
|||
|
CryptExportPublicKeyInfoEx
|
|||
|
CryptExportPublicKeyInfoFromBCryptKeyHandle
|
|||
|
CryptFindCertificateKeyProvInfo
|
|||
|
CryptFindLocalizedName
|
|||
|
CryptFindOIDInfo
|
|||
|
CryptFormatObject
|
|||
|
CryptFreeOIDFunctionAddress
|
|||
|
CryptGetDefaultOIDDllList
|
|||
|
CryptGetDefaultOIDFunctionAddress
|
|||
|
CryptGetKeyIdentifierProperty
|
|||
|
CryptGetMessageCertificates
|
|||
|
CryptGetMessageSignerCount
|
|||
|
CryptGetOIDFunctionAddress
|
|||
|
CryptGetOIDFunctionValue
|
|||
|
CryptHashCertificate
|
|||
|
CryptHashCertificate2
|
|||
|
CryptHashMessage
|
|||
|
CryptHashPublicKeyInfo
|
|||
|
CryptHashToBeSigned
|
|||
|
CryptImportPublicKeyInfo
|
|||
|
CryptImportPublicKeyInfoEx
|
|||
|
CryptImportPublicKeyInfoEx2
|
|||
|
CryptInitOIDFunctionSet
|
|||
|
CryptInstallDefaultContext
|
|||
|
CryptInstallOIDFunctionAddress
|
|||
|
CryptMemAlloc
|
|||
|
CryptMemFree
|
|||
|
CryptMemRealloc
|
|||
|
CryptMsgCalculateEncodedLength
|
|||
|
CryptMsgClose
|
|||
|
CryptMsgControl
|
|||
|
CryptMsgCountersign
|
|||
|
CryptMsgCountersignEncoded
|
|||
|
CryptMsgDuplicate
|
|||
|
CryptMsgEncodeAndSignCTL
|
|||
|
CryptMsgGetAndVerifySigner
|
|||
|
CryptMsgGetParam
|
|||
|
CryptMsgOpenToDecode
|
|||
|
CryptMsgOpenToEncode
|
|||
|
CryptMsgSignCTL
|
|||
|
CryptMsgUpdate
|
|||
|
CryptMsgVerifyCountersignatureEncoded
|
|||
|
CryptMsgVerifyCountersignatureEncodedEx
|
|||
|
CryptQueryObject
|
|||
|
CryptRegisterDefaultOIDFunction
|
|||
|
CryptRegisterOIDFunction
|
|||
|
CryptRegisterOIDInfo
|
|||
|
CryptRetrieveTimeStamp
|
|||
|
CryptSetKeyIdentifierProperty
|
|||
|
CryptSetOIDFunctionValue
|
|||
|
CryptSignAndEncodeCertificate
|
|||
|
CryptSignAndEncryptMessage
|
|||
|
CryptSignCertificate
|
|||
|
CryptSignMessage
|
|||
|
CryptSignMessageWithKey
|
|||
|
CryptStringToBinary
|
|||
|
CryptUninstallDefaultContext
|
|||
|
CryptUnregisterDefaultOIDFunction
|
|||
|
CryptUnregisterOIDFunction
|
|||
|
CryptUnregisterOIDInfo
|
|||
|
CryptVerifyCertificateSignature
|
|||
|
CryptVerifyCertificateSignatureEx
|
|||
|
CryptVerifyDetachedMessageHash
|
|||
|
CryptVerifyDetachedMessageSignature
|
|||
|
CryptVerifyMessageHash
|
|||
|
CryptVerifyMessageSignature
|
|||
|
CryptVerifyMessageSignatureWithKey
|
|||
|
CryptVerifyTimeStampSignature
|
|||
|
PFXExportCertStore
|
|||
|
PFXExportCertStoreEx
|
|||
|
PFXImportCertStore
|
|||
|
PFXIsPFXBlob
|
|||
|
PFXVerifyPassword*/
|
|||
|
}
|
|||
|
}
|