| File: Signing\Timestamp\Rfc3161TimestampWin32.cs | Web Access |
| Project: src\nuget-client\src\NuGet.Core\NuGet.Packaging\NuGet.Packaging.csproj (NuGet.Packaging) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Runtime.InteropServices; namespace NuGet.Packaging.Signing { /// <summary> /// Internally used by Rfc3161TimestampProvider. /// This class should be removed once we can reference it throught the .NET Core framework. /// </summary> internal static class Rfc3161TimestampWin32 { [StructLayout(LayoutKind.Sequential)] internal struct CRYPTOAPI_BLOB { internal uint cbData; internal IntPtr pbData; } [StructLayout(LayoutKind.Sequential)] internal struct CRYPT_TIMESTAMP_PARA { public IntPtr pszTSAPolicyId; public bool fRequestCerts; public CRYPTOAPI_BLOB Nonce; public int cExtension; public IntPtr rgExtension; } [StructLayout(LayoutKind.Sequential)] internal struct CRYPT_TIMESTAMP_CONTEXT { public int cbEncoded; public IntPtr pbEncoded; public IntPtr pTimeStamp; } [StructLayout(LayoutKind.Sequential)] internal struct CRYPT_ALGORITHM_IDENTIFIER { public IntPtr pszOid; public CRYPTOAPI_BLOB Parameters; } [StructLayout(LayoutKind.Sequential)] internal struct CRYPT_TIMESTAMP_INFO { public int dwVersion; public IntPtr pszTSAPolicyId; public CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; public CRYPTOAPI_BLOB HashedMessage; public CRYPTOAPI_BLOB SerialNumber; public System.Runtime.InteropServices.ComTypes.FILETIME ftTime; public IntPtr pvAccuracy; [MarshalAs(UnmanagedType.Bool)] public bool fOrdering; public CRYPTOAPI_BLOB Nonce; public CRYPTOAPI_BLOB Tsa; public int cExtension; public IntPtr rgExtension; } [StructLayout(LayoutKind.Sequential)] internal struct CRYPT_TIMESTAMP_REQUEST { public int dwVersion; public CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; public CRYPTOAPI_BLOB HashedMessage; public IntPtr pszTSAPolicyId; public CRYPTOAPI_BLOB Nonce; public bool fCertReq; public int cExtension; public IntPtr rgExtension; } [Flags] internal enum CryptRetrieveTimeStampFlags { TIMESTAMP_DONT_HASH_DATA = 1, TIMESTAMP_VERIFY_CONTEXT_SIGNATURE = 0x20, TIMESTAMP_NO_AUTH_RETRIEVAL = 0x00020000, } [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] [DllImport("crypt32.dll", CallingConvention = CallingConvention.Winapi, SetLastError = true)] internal static extern bool CryptRetrieveTimeStamp( [MarshalAs(UnmanagedType.LPWStr)] string wszUrl, CryptRetrieveTimeStampFlags dwRetrievalFlags, int dwTimeout, [MarshalAs(UnmanagedType.LPStr)] string pszHashId, ref CRYPT_TIMESTAMP_PARA pPara, [In] byte[] pbData, int cbData, ref IntPtr ppTsContext, ref IntPtr ppTsSigner, ref IntPtr phStore); [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] [DllImport("crypt32.dll", CallingConvention = CallingConvention.Winapi, SetLastError = true)] internal static extern bool CryptVerifyTimeStampSignature( [In] byte[] pbTSContentInfo, int cbTSContentInfo, [In] byte[] pbData, int cbData, IntPtr hAdditionalStore, ref IntPtr ppTsContext, ref IntPtr ppTsSigner, ref IntPtr phStore); [Flags] internal enum CryptEncodingTypes { X509_ASN_ENCODING = 0x1, PKCS_7_ASN_ENCODING = 0x10000, } [Flags] internal enum CryptEncodeObjectFlags { None = 0, CRYPT_ENCODE_ALLOC_FLAG = 0x8000, } [Flags] internal enum CryptDecodeObjectFlags { None = 0, CRYPT_DECODE_NOCOPY_FLAG = 0x1, CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG = 0x8, CRYPT_DECODE_ALLOC_FLAG = 0x8000, } internal static readonly IntPtr TIMESTAMP_REQUEST = new IntPtr(78); internal static readonly IntPtr TIMESTAMP_INFO = new IntPtr(80); [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] [DllImport("crypt32.dll", SetLastError = true, BestFitMapping = false)] public static extern bool CryptEncodeObjectEx( CryptEncodingTypes dwCertEncodingType, IntPtr lpszStructType, IntPtr pvStructInfo, CryptEncodeObjectFlags dwFlags, IntPtr pEncodePara, IntPtr pvEncoded, ref uint pcbEncoded); [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] [DllImport("crypt32.dll", SetLastError = true, BestFitMapping = false)] public static extern bool CryptDecodeObjectEx( CryptEncodingTypes dwCertEncodingType, IntPtr lpszStructType, IntPtr pbEncoded, int cbEncoded, CryptDecodeObjectFlags dwFlags, IntPtr pDecodePara, IntPtr pvStructInfo, ref int pcbStructInfo); [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] [DllImport("crypt32.dll", CallingConvention = CallingConvention.Winapi, SetLastError = true)] internal static extern bool CertFreeCertificateContext(IntPtr pCertContext); [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] [DllImport("crypt32.dll", CallingConvention = CallingConvention.Winapi, SetLastError = true)] internal static extern bool CertCloseStore(IntPtr pCertContext, int dwFlags); [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] [DllImport("crypt32.dll", CallingConvention = CallingConvention.Winapi)] internal static extern void CryptMemFree(IntPtr pv); [DllImport("kernel32.dll", SetLastError = true)] [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] internal static extern IntPtr LocalFree(IntPtr handle); } }