mirror of https://github.com/dahall/Vanara.git
144 lines
7.9 KiB
C#
144 lines
7.9 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using Vanara.InteropServices;
|
|
using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME;
|
|
// ReSharper disable FieldCanBeMadeReadOnly.Global
|
|
// ReSharper disable UnusedMember.Global
|
|
// ReSharper disable InconsistentNaming
|
|
// ReSharper disable MemberCanBePrivate.Global
|
|
// ReSharper disable UnusedMember.Local
|
|
|
|
namespace Vanara.PInvoke
|
|
{
|
|
/// <summary>Methods and data types found in Crypt32.dll.</summary>
|
|
public static partial class Crypt32
|
|
{
|
|
/// <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>
|
|
[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>
|
|
[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>
|
|
[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>
|
|
[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>
|
|
[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>
|
|
[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;
|
|
}
|
|
}
|
|
} |