[WINTRUST] Sync with Wine Staging 4.18. CORE-16441

This commit is contained in:
Amine Khaldi 2019-12-07 13:08:52 +01:00
parent a2da235c67
commit d296bbebbe
7 changed files with 137 additions and 139 deletions

View file

@ -18,9 +18,6 @@
* *
*/ */
#include "config.h"
#include "wine/port.h"
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include <assert.h> #include <assert.h>
@ -673,8 +670,8 @@ static BOOL WINAPI CRYPT_AsnEncodeAlgorithmIdWithNullParams(
items[1].pvStructInfo = &algo->Parameters; items[1].pvStructInfo = &algo->Parameters;
else else
items[1].pvStructInfo = &nullBlob; items[1].pvStructInfo = &nullBlob;
ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, ret = CRYPT_AsnEncodeSequence(dwCertEncodingType, items, ARRAY_SIZE(items),
sizeof(items) / sizeof(items[0]), pbEncoded, pcbEncoded); pbEncoded, pcbEncoded);
return ret; return ret;
} }
@ -688,8 +685,8 @@ static BOOL WINAPI CRYPT_AsnEncodeAttributeTypeValue(DWORD dwCertEncodingType,
{ &typeValue->Value, CRYPT_CopyEncodedBlob, 0 }, { &typeValue->Value, CRYPT_CopyEncodedBlob, 0 },
}; };
return CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, return CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, items, ARRAY_SIZE(items),
items, sizeof(items) / sizeof(items[0]), pbEncoded, pcbEncoded); pbEncoded, pcbEncoded);
} }
struct SPCDigest struct SPCDigest
@ -708,8 +705,8 @@ static BOOL WINAPI CRYPT_AsnEncodeSPCDigest(DWORD dwCertEncodingType,
{ &digest->Digest, CRYPT_CopyEncodedBlob, 0 }, { &digest->Digest, CRYPT_CopyEncodedBlob, 0 },
}; };
return CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, return CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, items, ARRAY_SIZE(items),
items, sizeof(items) / sizeof(items[0]), pbEncoded, pcbEncoded); pbEncoded, pcbEncoded);
} }
BOOL WINAPI WVTAsn1SpcIndirectDataContentEncode(DWORD dwCertEncodingType, BOOL WINAPI WVTAsn1SpcIndirectDataContentEncode(DWORD dwCertEncodingType,
@ -729,8 +726,8 @@ BOOL WINAPI WVTAsn1SpcIndirectDataContentEncode(DWORD dwCertEncodingType,
{ &data->DigestAlgorithm, CRYPT_AsnEncodeSPCDigest, 0 }, { &data->DigestAlgorithm, CRYPT_AsnEncodeSPCDigest, 0 },
}; };
ret = CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, ret = CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, items, ARRAY_SIZE(items),
items, sizeof(items) / sizeof(items[0]), pbEncoded, pcbEncoded); pbEncoded, pcbEncoded);
} }
__EXCEPT_PAGE_FAULT __EXCEPT_PAGE_FAULT
{ {
@ -996,8 +993,8 @@ BOOL WINAPI WVTAsn1CatMemberInfoEncode(DWORD dwCertEncodingType,
{ &info->dwCertVersion, CRYPT_AsnEncodeInt, 0 }, { &info->dwCertVersion, CRYPT_AsnEncodeInt, 0 },
}; };
ret = CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, ret = CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, items, ARRAY_SIZE(items),
items, sizeof(items) / sizeof(items[0]), pbEncoded, pcbEncoded); pbEncoded, pcbEncoded);
} }
__EXCEPT_PAGE_FAULT __EXCEPT_PAGE_FAULT
{ {
@ -1025,8 +1022,8 @@ BOOL WINAPI WVTAsn1CatNameValueEncode(DWORD dwCertEncodingType,
{ &value->Value, CRYPT_AsnEncodeOctets, 0 }, { &value->Value, CRYPT_AsnEncodeOctets, 0 },
}; };
ret = CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, ret = CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, items, ARRAY_SIZE(items),
items, sizeof(items) / sizeof(items[0]), pbEncoded, pcbEncoded); pbEncoded, pcbEncoded);
} }
__EXCEPT_PAGE_FAULT __EXCEPT_PAGE_FAULT
{ {
@ -1084,8 +1081,8 @@ BOOL WINAPI WVTAsn1SpcFinancialCriteriaInfoEncode(DWORD dwCertEncodingType,
{ &criteria->fMeetsCriteria, CRYPT_AsnEncodeBool, 0 }, { &criteria->fMeetsCriteria, CRYPT_AsnEncodeBool, 0 },
}; };
ret = CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, ret = CRYPT_AsnEncodeSequence(X509_ASN_ENCODING, items, ARRAY_SIZE(items),
items, sizeof(items) / sizeof(items[0]), pbEncoded, pcbEncoded); pbEncoded, pcbEncoded);
} }
__EXCEPT_PAGE_FAULT __EXCEPT_PAGE_FAULT
{ {
@ -1808,9 +1805,8 @@ BOOL WINAPI WVTAsn1SpcPeImageDataDecode(DWORD dwCertEncodingType,
offsetof(SPC_PE_IMAGE_DATA, pFile), 0 }, offsetof(SPC_PE_IMAGE_DATA, pFile), 0 },
}; };
ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ARRAY_SIZE(items),
sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags, pbEncoded, cbEncoded, dwFlags, pvStructInfo, pcbStructInfo, NULL);
pvStructInfo, pcbStructInfo, NULL);
} }
__EXCEPT_PAGE_FAULT __EXCEPT_PAGE_FAULT
{ {
@ -1995,9 +1991,8 @@ static BOOL WINAPI CRYPT_AsnDecodeAttributeTypeValue(DWORD dwCertEncodingType,
TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags,
pvStructInfo, *pcbStructInfo); pvStructInfo, *pcbStructInfo);
return CRYPT_AsnDecodeSequence(dwCertEncodingType, items, return CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ARRAY_SIZE(items),
sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags, pbEncoded, cbEncoded, dwFlags, pvStructInfo, pcbStructInfo,
pvStructInfo, pcbStructInfo,
typeValue ? typeValue->pszObjId : NULL); typeValue ? typeValue->pszObjId : NULL);
} }
@ -2019,9 +2014,8 @@ static BOOL WINAPI CRYPT_AsnDecodeAlgorithmId(DWORD dwCertEncodingType,
TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags,
pvStructInfo, *pcbStructInfo); pvStructInfo, *pcbStructInfo);
ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ARRAY_SIZE(items),
sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags, pbEncoded, cbEncoded, dwFlags, pvStructInfo, pcbStructInfo, algo ? algo->pszObjId : NULL);
pvStructInfo, pcbStructInfo, algo ? algo->pszObjId : NULL);
if (ret && pvStructInfo) if (ret && pvStructInfo)
{ {
TRACE("pszObjId is %p (%s)\n", algo->pszObjId, TRACE("pszObjId is %p (%s)\n", algo->pszObjId,
@ -2048,9 +2042,8 @@ static BOOL WINAPI CRYPT_AsnDecodeSPCDigest(DWORD dwCertEncodingType,
TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags,
pvStructInfo, *pcbStructInfo); pvStructInfo, *pcbStructInfo);
return CRYPT_AsnDecodeSequence(dwCertEncodingType, items, return CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ARRAY_SIZE(items),
sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags, pbEncoded, cbEncoded, dwFlags, pvStructInfo, pcbStructInfo,
pvStructInfo, pcbStructInfo,
digest ? digest->DigestAlgorithm.pszObjId : NULL); digest ? digest->DigestAlgorithm.pszObjId : NULL);
} }
@ -2076,9 +2069,8 @@ BOOL WINAPI WVTAsn1SpcIndirectDataContentDecode(DWORD dwCertEncodingType,
offsetof(SPC_INDIRECT_DATA_CONTENT, DigestAlgorithm.pszObjId), 0 }, offsetof(SPC_INDIRECT_DATA_CONTENT, DigestAlgorithm.pszObjId), 0 },
}; };
ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ARRAY_SIZE(items),
sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags, pbEncoded, cbEncoded, dwFlags, pvStructInfo, pcbStructInfo, NULL);
pvStructInfo, pcbStructInfo, NULL);
} }
__EXCEPT_PAGE_FAULT __EXCEPT_PAGE_FAULT
{ {
@ -2174,9 +2166,8 @@ BOOL WINAPI WVTAsn1SpcSpOpusInfoDecode(DWORD dwCertEncodingType,
offsetof(SPC_SP_OPUS_INFO, pPublisherInfo), 0 }, offsetof(SPC_SP_OPUS_INFO, pPublisherInfo), 0 },
}; };
ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ARRAY_SIZE(items),
sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags, pbEncoded, cbEncoded, dwFlags, pvStructInfo, pcbStructInfo, NULL);
pvStructInfo, pcbStructInfo, NULL);
} }
__EXCEPT_PAGE_FAULT __EXCEPT_PAGE_FAULT
{ {
@ -2256,9 +2247,8 @@ BOOL WINAPI WVTAsn1CatMemberInfoDecode(DWORD dwCertEncodingType,
FALSE, FALSE, 0, 0 }, FALSE, FALSE, 0, 0 },
}; };
ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ARRAY_SIZE(items),
sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags, pbEncoded, cbEncoded, dwFlags, pvStructInfo, pcbStructInfo, NULL);
pvStructInfo, pcbStructInfo, NULL);
} }
__EXCEPT_PAGE_FAULT __EXCEPT_PAGE_FAULT
{ {
@ -2292,9 +2282,8 @@ BOOL WINAPI WVTAsn1CatNameValueDecode(DWORD dwCertEncodingType,
offsetof(CAT_NAMEVALUE, Value.pbData), 0 }, offsetof(CAT_NAMEVALUE, Value.pbData), 0 },
}; };
ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ARRAY_SIZE(items),
sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags, pbEncoded, cbEncoded, dwFlags, pvStructInfo, pcbStructInfo, NULL);
pvStructInfo, pcbStructInfo, NULL);
} }
__EXCEPT_PAGE_FAULT __EXCEPT_PAGE_FAULT
{ {
@ -2367,9 +2356,8 @@ BOOL WINAPI WVTAsn1SpcFinancialCriteriaInfoDecode(DWORD dwCertEncodingType,
fMeetsCriteria), FALSE, FALSE, 0, 0 }, fMeetsCriteria), FALSE, FALSE, 0, 0 },
}; };
ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ret = CRYPT_AsnDecodeSequence(dwCertEncodingType, items, ARRAY_SIZE(items),
sizeof(items) / sizeof(items[0]), pbEncoded, cbEncoded, dwFlags, pbEncoded, cbEncoded, dwFlags, pvStructInfo, pcbStructInfo, NULL);
pvStructInfo, pcbStructInfo, NULL);
} }
__EXCEPT_PAGE_FAULT __EXCEPT_PAGE_FAULT
{ {

View file

@ -33,7 +33,6 @@
#include "winternl.h" #include "winternl.h"
#include "wine/debug.h" #include "wine/debug.h"
#include "wine/unicode.h"
WINE_DEFAULT_DEBUG_CHANNEL(wintrust); WINE_DEFAULT_DEBUG_CHANNEL(wintrust);
@ -75,7 +74,7 @@ static HCATINFO create_catinfo(const WCHAR *filename)
SetLastError(ERROR_OUTOFMEMORY); SetLastError(ERROR_OUTOFMEMORY);
return INVALID_HANDLE_VALUE; return INVALID_HANDLE_VALUE;
} }
strcpyW(ci->file, filename); lstrcpyW(ci->file, filename);
ci->magic = CATINFO_MAGIC; ci->magic = CATINFO_MAGIC;
return ci; return ci;
} }
@ -125,13 +124,13 @@ BOOL WINAPI CryptCATAdminAcquireContext(HCATADMIN *catAdmin,
} }
GetSystemDirectoryW(catroot_dir, MAX_PATH); GetSystemDirectoryW(catroot_dir, MAX_PATH);
strcatW(catroot_dir, catroot); lstrcatW(catroot_dir, catroot);
/* create the directory if it doesn't exist */ /* create the directory if it doesn't exist */
CreateDirectoryW(catroot_dir, NULL); CreateDirectoryW(catroot_dir, NULL);
if (!sys) sys = &defsys; if (!sys) sys = &defsys;
sprintfW(ca->path, fmt, catroot_dir, sys->Data1, sys->Data2, swprintf(ca->path, fmt, catroot_dir, sys->Data1, sys->Data2,
sys->Data3, sys->Data4[0], sys->Data4[1], sys->Data4[2], sys->Data3, sys->Data4[0], sys->Data4[1], sys->Data4[2],
sys->Data4[3], sys->Data4[4], sys->Data4[5], sys->Data4[6], sys->Data4[3], sys->Data4[4], sys->Data4[5], sys->Data4[6],
sys->Data4[7]); sys->Data4[7]);
@ -146,6 +145,17 @@ BOOL WINAPI CryptCATAdminAcquireContext(HCATADMIN *catAdmin,
return TRUE; return TRUE;
} }
/***********************************************************************
* CryptCATAdminAcquireContext2 (WINTRUST.@)
*/
BOOL WINAPI CryptCATAdminAcquireContext2(HCATADMIN *catAdmin, const GUID *sys, const WCHAR *algorithm,
const CERT_STRONG_SIGN_PARA *policy, DWORD flags)
{
FIXME("%p %s %s %p %x stub\n", catAdmin, debugstr_guid(sys), debugstr_w(algorithm), policy, flags);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/*********************************************************************** /***********************************************************************
* CryptCATAdminAddCatalog (WINTRUST.@) * CryptCATAdminAddCatalog (WINTRUST.@)
*/ */
@ -173,15 +183,15 @@ HCATINFO WINAPI CryptCATAdminAddCatalog(HCATADMIN catAdmin, PWSTR catalogFile,
return NULL; return NULL;
} }
len = strlenW(ca->path) + strlenW(selectBaseName) + 2; len = lstrlenW(ca->path) + lstrlenW(selectBaseName) + 2;
if (!(target = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)))) if (!(target = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR))))
{ {
SetLastError(ERROR_OUTOFMEMORY); SetLastError(ERROR_OUTOFMEMORY);
return NULL; return NULL;
} }
strcpyW(target, ca->path); lstrcpyW(target, ca->path);
strcatW(target, slashW); lstrcatW(target, slashW);
strcatW(target, selectBaseName); lstrcatW(target, selectBaseName);
if (!CopyFileW(catalogFile, target, FALSE)) if (!CopyFileW(catalogFile, target, FALSE))
{ {
@ -197,7 +207,7 @@ HCATINFO WINAPI CryptCATAdminAddCatalog(HCATADMIN catAdmin, PWSTR catalogFile,
return NULL; return NULL;
} }
ci->magic = CATINFO_MAGIC; ci->magic = CATINFO_MAGIC;
strcpyW(ci->file, target); lstrcpyW(ci->file, target);
HeapFree(GetProcessHeap(), 0, target); HeapFree(GetProcessHeap(), 0, target);
return ci; return ci;
@ -297,15 +307,15 @@ HCATINFO WINAPI CryptCATAdminEnumCatalogFromHash(HCATADMIN hCatAdmin, BYTE* pbHa
{ {
WCHAR *path; WCHAR *path;
size = strlenW(ca->path) * sizeof(WCHAR) + sizeof(globW); size = lstrlenW(ca->path) * sizeof(WCHAR) + sizeof(globW);
if (!(path = HeapAlloc(GetProcessHeap(), 0, size))) if (!(path = HeapAlloc(GetProcessHeap(), 0, size)))
{ {
CryptReleaseContext(prov, 0); CryptReleaseContext(prov, 0);
SetLastError(ERROR_OUTOFMEMORY); SetLastError(ERROR_OUTOFMEMORY);
return NULL; return NULL;
} }
strcpyW(path, ca->path); lstrcpyW(path, ca->path);
strcatW(path, globW); lstrcatW(path, globW);
FindClose(ca->find); FindClose(ca->find);
ca->find = FindFirstFileW(path, &data); ca->find = FindFirstFileW(path, &data);
@ -331,15 +341,15 @@ HCATINFO WINAPI CryptCATAdminEnumCatalogFromHash(HCATADMIN hCatAdmin, BYTE* pbHa
struct catinfo *ci; struct catinfo *ci;
HANDLE hcat; HANDLE hcat;
size = (strlenW(ca->path) + strlenW(data.cFileName) + 2) * sizeof(WCHAR); size = (lstrlenW(ca->path) + lstrlenW(data.cFileName) + 2) * sizeof(WCHAR);
if (!(filename = HeapAlloc(GetProcessHeap(), 0, size))) if (!(filename = HeapAlloc(GetProcessHeap(), 0, size)))
{ {
SetLastError(ERROR_OUTOFMEMORY); SetLastError(ERROR_OUTOFMEMORY);
return NULL; return NULL;
} }
strcpyW(filename, ca->path); lstrcpyW(filename, ca->path);
strcatW(filename, slashW); lstrcatW(filename, slashW);
strcatW(filename, data.cFileName); lstrcatW(filename, data.cFileName);
hcat = CryptCATOpen(filename, CRYPTCAT_OPEN_EXISTING, prov, 0, 0); hcat = CryptCATOpen(filename, CRYPTCAT_OPEN_EXISTING, prov, 0, 0);
if (hcat == INVALID_HANDLE_VALUE) if (hcat == INVALID_HANDLE_VALUE)
@ -476,22 +486,22 @@ BOOL WINAPI CryptCATAdminRemoveCatalog(HCATADMIN hCatAdmin, LPCWSTR pwszCatalogF
/* Only delete when there is a filename and no path */ /* Only delete when there is a filename and no path */
if (pwszCatalogFile && pwszCatalogFile[0] != 0 && if (pwszCatalogFile && pwszCatalogFile[0] != 0 &&
!strchrW(pwszCatalogFile, '\\') && !strchrW(pwszCatalogFile, '/') && !wcschr(pwszCatalogFile, '\\') && !wcschr(pwszCatalogFile, '/') &&
!strchrW(pwszCatalogFile, ':')) !wcschr(pwszCatalogFile, ':'))
{ {
static const WCHAR slashW[] = {'\\',0}; static const WCHAR slashW[] = {'\\',0};
WCHAR *target; WCHAR *target;
DWORD len; DWORD len;
len = strlenW(ca->path) + strlenW(pwszCatalogFile) + 2; len = lstrlenW(ca->path) + lstrlenW(pwszCatalogFile) + 2;
if (!(target = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)))) if (!(target = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR))))
{ {
SetLastError(ERROR_OUTOFMEMORY); SetLastError(ERROR_OUTOFMEMORY);
return FALSE; return FALSE;
} }
strcpyW(target, ca->path); lstrcpyW(target, ca->path);
strcatW(target, slashW); lstrcatW(target, slashW);
strcatW(target, pwszCatalogFile); lstrcatW(target, pwszCatalogFile);
DeleteFileW(target); DeleteFileW(target);
@ -517,9 +527,9 @@ BOOL WINAPI CryptCATAdminResolveCatalogPath(HCATADMIN hcatadmin, WCHAR *catalog_
SetLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);
return FALSE; return FALSE;
} }
strcpyW(info->wszCatalogFile, ca->path); lstrcpyW(info->wszCatalogFile, ca->path);
strcatW(info->wszCatalogFile, slashW); lstrcatW(info->wszCatalogFile, slashW);
strcatW(info->wszCatalogFile, catalog_file); lstrcatW(info->wszCatalogFile, catalog_file);
return TRUE; return TRUE;
} }
@ -834,7 +844,7 @@ BOOL WINAPI CryptCATCatalogInfoFromContext(HCATINFO hcatinfo, CATALOG_INFO *info
SetLastError(ERROR_INVALID_PARAMETER); SetLastError(ERROR_INVALID_PARAMETER);
return FALSE; return FALSE;
} }
strcpyW(info->wszCatalogFile, ci->file); lstrcpyW(info->wszCatalogFile, ci->file);
return TRUE; return TRUE;
} }

View file

@ -2,8 +2,6 @@
#ifndef _WINTRUST_PRECOMP_H #ifndef _WINTRUST_PRECOMP_H
#define _WINTRUST_PRECOMP_H #define _WINTRUST_PRECOMP_H
#include <wine/config.h>
#include <stdio.h> #include <stdio.h>
#define _INC_WINDOWS #define _INC_WINDOWS
@ -15,12 +13,12 @@
#include <winbase.h> #include <winbase.h>
#include <winuser.h> #include <winuser.h>
#include <winreg.h> #include <winreg.h>
#include <winnls.h>
#include <winternl.h> #include <winternl.h>
#include <softpub.h> #include <softpub.h>
#include <mscat.h> #include <mscat.h>
#include <wine/debug.h> #include <wine/debug.h>
#include <wine/unicode.h>
#include "wintrust_priv.h" #include "wintrust_priv.h"

View file

@ -210,12 +210,31 @@ static DWORD SOFTPUB_GetMessageFromFile(CRYPT_PROVIDER_DATA *data, HANDLE file,
return err; return err;
} }
static BOOL hash_file_data( HANDLE file, DWORD start, DWORD end, HCRYPTHASH hash )
{
DWORD bytes_read, size = end - start;
DWORD buffer_size = min( size, 1024*1024 );
BYTE *buffer = HeapAlloc( GetProcessHeap(), 0, buffer_size );
if (!buffer) return FALSE;
SetFilePointer( file, start, NULL, FILE_BEGIN );
while (size)
{
if (!ReadFile( file, buffer, min( buffer_size, size ), &bytes_read, NULL )) break;
if (!bytes_read) break;
if (!CryptHashData( hash, buffer, bytes_read, 0 )) break;
size -= bytes_read;
}
HeapFree( GetProcessHeap(), 0, buffer );
return !size;
}
/* See https://www.cs.auckland.ac.nz/~pgut001/pubs/authenticode.txt /* See https://www.cs.auckland.ac.nz/~pgut001/pubs/authenticode.txt
* for details about the hashing. * for details about the hashing.
*/ */
static BOOL SOFTPUB_HashPEFile(HANDLE file, HCRYPTHASH hash) static BOOL SOFTPUB_HashPEFile(HANDLE file, HCRYPTHASH hash)
{ {
DWORD pos, checksum, security_dir; DWORD checksum, security_dir;
IMAGE_DOS_HEADER dos_header; IMAGE_DOS_HEADER dos_header;
union union
{ {
@ -225,7 +244,6 @@ static BOOL SOFTPUB_HashPEFile(HANDLE file, HCRYPTHASH hash)
IMAGE_DATA_DIRECTORY secdir; IMAGE_DATA_DIRECTORY secdir;
LARGE_INTEGER file_size; LARGE_INTEGER file_size;
DWORD bytes_read; DWORD bytes_read;
BYTE buffer[1024];
BOOL ret; BOOL ret;
if (!GetFileSizeEx(file, &file_size)) if (!GetFileSizeEx(file, &file_size))
@ -237,10 +255,7 @@ static BOOL SOFTPUB_HashPEFile(HANDLE file, HCRYPTHASH hash)
return FALSE; return FALSE;
if (dos_header.e_magic != IMAGE_DOS_SIGNATURE) if (dos_header.e_magic != IMAGE_DOS_SIGNATURE)
{
ERR("Unrecognized IMAGE_DOS_HEADER magic %04x\n", dos_header.e_magic);
return FALSE; return FALSE;
}
if (dos_header.e_lfanew >= 256 * 1024 * 1024) /* see RtlImageNtHeaderEx */ if (dos_header.e_lfanew >= 256 * 1024 * 1024) /* see RtlImageNtHeaderEx */
return FALSE; return FALSE;
if (dos_header.e_lfanew + FIELD_OFFSET(IMAGE_NT_HEADERS, OptionalHeader.MajorLinkerVersion) > file_size.QuadPart) if (dos_header.e_lfanew + FIELD_OFFSET(IMAGE_NT_HEADERS, OptionalHeader.MajorLinkerVersion) > file_size.QuadPart)
@ -253,10 +268,7 @@ static BOOL SOFTPUB_HashPEFile(HANDLE file, HCRYPTHASH hash)
return FALSE; return FALSE;
if (nt_header.nt32.Signature != IMAGE_NT_SIGNATURE) if (nt_header.nt32.Signature != IMAGE_NT_SIGNATURE)
{
ERR("Unrecognized IMAGE_NT_HEADERS signature %08x\n", nt_header.nt32.Signature);
return FALSE; return FALSE;
}
if (nt_header.nt32.OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC) if (nt_header.nt32.OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
{ {
@ -277,10 +289,7 @@ static BOOL SOFTPUB_HashPEFile(HANDLE file, HCRYPTHASH hash)
secdir = nt_header.nt64.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY]; secdir = nt_header.nt64.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY];
} }
else else
{
ERR("Unrecognized OptionalHeader magic %04x\n", nt_header.nt32.OptionalHeader.Magic);
return FALSE; return FALSE;
}
if (secdir.VirtualAddress < security_dir + sizeof(IMAGE_DATA_DIRECTORY)) if (secdir.VirtualAddress < security_dir + sizeof(IMAGE_DATA_DIRECTORY))
return FALSE; return FALSE;
@ -289,40 +298,10 @@ static BOOL SOFTPUB_HashPEFile(HANDLE file, HCRYPTHASH hash)
if (secdir.VirtualAddress + secdir.Size != file_size.QuadPart) if (secdir.VirtualAddress + secdir.Size != file_size.QuadPart)
return FALSE; return FALSE;
/* Hash until checksum. */ if (!hash_file_data( file, 0, checksum, hash )) return FALSE;
SetFilePointer(file, 0, NULL, FILE_BEGIN); if (!hash_file_data( file, checksum + sizeof(DWORD), security_dir, hash )) return FALSE;
for (pos = 0; pos < checksum; pos += bytes_read) if (!hash_file_data( file, security_dir + sizeof(IMAGE_DATA_DIRECTORY), secdir.VirtualAddress, hash ))
{ return FALSE;
ret = ReadFile(file, buffer, min(sizeof(buffer), checksum - pos), &bytes_read, NULL);
if (!ret || !bytes_read)
return FALSE;
if (!CryptHashData(hash, buffer, bytes_read, 0))
return FALSE;
}
/* Hash until the DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY] entry. */
checksum += sizeof(DWORD);
SetFilePointer(file, checksum, NULL, FILE_BEGIN);
for (pos = checksum; pos < security_dir; pos += bytes_read)
{
ret = ReadFile(file, buffer, min(sizeof(buffer), security_dir - pos), &bytes_read, NULL);
if (!ret || !bytes_read)
return FALSE;
if (!CryptHashData(hash, buffer, bytes_read, 0))
return FALSE;
}
/* Hash until the end of the file. */
security_dir += sizeof(IMAGE_DATA_DIRECTORY);
SetFilePointer(file, security_dir, NULL, FILE_BEGIN);
for (pos = security_dir; pos < secdir.VirtualAddress; pos += bytes_read)
{
ret = ReadFile(file, buffer, min(sizeof(buffer), secdir.VirtualAddress - pos), &bytes_read, NULL);
if (!ret || !bytes_read)
return FALSE;
if (!CryptHashData(hash, buffer, bytes_read, 0))
return FALSE;
}
return TRUE; return TRUE;
} }
@ -716,11 +695,9 @@ static LPCSTR filetime_to_str(const FILETIME *time)
if (!time) return NULL; if (!time) return NULL;
GetLocaleInfoA(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, dateFmt, GetLocaleInfoA(LOCALE_SYSTEM_DEFAULT, LOCALE_SSHORTDATE, dateFmt, ARRAY_SIZE(dateFmt));
sizeof(dateFmt) / sizeof(dateFmt[0]));
FileTimeToSystemTime(time, &sysTime); FileTimeToSystemTime(time, &sysTime);
GetDateFormatA(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, date, GetDateFormatA(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, date, ARRAY_SIZE(date));
sizeof(date) / sizeof(date[0]));
return date; return date;
} }

View file

@ -1,14 +1,20 @@
@ stub AddPersonalTrustDBPages @ stub AddPersonalTrustDBPages
@ stub CatalogCompactHashDatabase @ stub CatalogCompactHashDatabase
#@ stub ComputeFirstPageHash
#@ stub ConfigCiFinalPolicy
#@ stub ConfigCiPackageFamilyNameCheck
@ stdcall CryptCATAdminAcquireContext(ptr ptr long) @ stdcall CryptCATAdminAcquireContext(ptr ptr long)
@ stdcall CryptCATAdminAcquireContext2(ptr ptr wstr ptr long)
@ stdcall CryptCATAdminAddCatalog(long wstr wstr long) @ stdcall CryptCATAdminAddCatalog(long wstr wstr long)
@ stdcall CryptCATAdminCalcHashFromFileHandle(long ptr ptr long) @ stdcall CryptCATAdminCalcHashFromFileHandle(long ptr ptr long)
#@ stub CryptCATAdminCalcHashFromFileHandle2
@ stdcall CryptCATAdminEnumCatalogFromHash(long ptr long long ptr) @ stdcall CryptCATAdminEnumCatalogFromHash(long ptr long long ptr)
@ stub CryptCATAdminPauseServiceForBackup @ stub CryptCATAdminPauseServiceForBackup
@ stdcall CryptCATAdminReleaseCatalogContext(long long long) @ stdcall CryptCATAdminReleaseCatalogContext(long long long)
@ stdcall CryptCATAdminReleaseContext(long long) @ stdcall CryptCATAdminReleaseContext(long long)
@ stdcall CryptCATAdminRemoveCatalog(ptr wstr long) @ stdcall CryptCATAdminRemoveCatalog(ptr wstr long)
@ stdcall CryptCATAdminResolveCatalogPath(ptr wstr ptr long) @ stdcall CryptCATAdminResolveCatalogPath(ptr wstr ptr long)
#@ stub CryptCATAllocSortedMemberInfo
@ stdcall CryptCATCDFClose(ptr) @ stdcall CryptCATCDFClose(ptr)
@ stub CryptCATCDFEnumAttributes @ stub CryptCATCDFEnumAttributes
@ stub CryptCATCDFEnumAttributesWithCDFTag @ stub CryptCATCDFEnumAttributesWithCDFTag
@ -22,6 +28,7 @@
@ stdcall CryptCATEnumerateAttr(ptr ptr ptr) @ stdcall CryptCATEnumerateAttr(ptr ptr ptr)
@ stdcall CryptCATEnumerateCatAttr(ptr ptr) @ stdcall CryptCATEnumerateCatAttr(ptr ptr)
@ stdcall CryptCATEnumerateMember(long ptr) @ stdcall CryptCATEnumerateMember(long ptr)
#@ stub CryptCATFreeSortedMemberInfo
@ stdcall CryptCATGetAttrInfo(ptr ptr wstr) @ stdcall CryptCATGetAttrInfo(ptr ptr wstr)
@ stdcall CryptCATGetCatAttrInfo(ptr wstr ) @ stdcall CryptCATGetCatAttrInfo(ptr wstr )
@ stdcall CryptCATGetMemberInfo(ptr wstr) @ stdcall CryptCATGetMemberInfo(ptr wstr)
@ -34,8 +41,10 @@
@ stub CryptCATStoreFromHandle @ stub CryptCATStoreFromHandle
@ stub CryptCATVerifyMember @ stub CryptCATVerifyMember
@ stdcall CryptSIPCreateIndirectData(ptr ptr ptr) @ stdcall CryptSIPCreateIndirectData(ptr ptr ptr)
#@ stub CryptSIPGetCaps
@ stub CryptSIPGetInfo @ stub CryptSIPGetInfo
@ stub CryptSIPGetRegWorkingFlags @ stub CryptSIPGetRegWorkingFlags
#@ stub CryptSIPGetSealedDigest
@ stdcall CryptSIPGetSignedDataMsg(ptr ptr long ptr ptr) @ stdcall CryptSIPGetSignedDataMsg(ptr ptr long ptr ptr)
@ stdcall CryptSIPPutSignedDataMsg(ptr long ptr long ptr) @ stdcall CryptSIPPutSignedDataMsg(ptr long ptr long ptr)
@ stdcall CryptSIPRemoveSignedDataMsg(ptr long) @ stdcall CryptSIPRemoveSignedDataMsg(ptr long)
@ -48,6 +57,7 @@
@ stdcall FindCertsByIssuer(ptr ptr ptr ptr long wstr long) @ stdcall FindCertsByIssuer(ptr ptr ptr ptr long wstr long)
@ stdcall GenericChainCertificateTrust(ptr) @ stdcall GenericChainCertificateTrust(ptr)
@ stdcall GenericChainFinalProv(ptr) @ stdcall GenericChainFinalProv(ptr)
#@ stub GetAuthenticodeSha256Hash
@ stdcall HTTPSCertificateTrust(ptr) @ stdcall HTTPSCertificateTrust(ptr)
@ stdcall HTTPSFinalProv(ptr) @ stdcall HTTPSFinalProv(ptr)
@ stdcall IsCatalogFile(ptr wstr) @ stdcall IsCatalogFile(ptr wstr)
@ -56,6 +66,7 @@
@ stub OfficeCleanupPolicy @ stub OfficeCleanupPolicy
@ stub OfficeInitializePolicy @ stub OfficeInitializePolicy
@ stdcall OpenPersonalTrustDBDialog(ptr) @ stdcall OpenPersonalTrustDBDialog(ptr)
#@ stub OpenPersonalTrustDBDialogEx
@ stdcall SoftpubAuthenticode(ptr) @ stdcall SoftpubAuthenticode(ptr)
@ stdcall SoftpubCheckCert(ptr long long long) @ stdcall SoftpubCheckCert(ptr long long long)
@ stdcall SoftpubCleanup(ptr) @ stdcall SoftpubCleanup(ptr)
@ -68,29 +79,48 @@
@ stub SoftpubLoadDefUsageCallData @ stub SoftpubLoadDefUsageCallData
@ stdcall SoftpubLoadMessage(ptr) @ stdcall SoftpubLoadMessage(ptr)
@ stdcall SoftpubLoadSignature(ptr) @ stdcall SoftpubLoadSignature(ptr)
#@ stub SrpCheckSmartlockerEAandProcessToken
@ stub TrustDecode @ stub TrustDecode
@ stub TrustFindIssuerCertificate @ stub TrustFindIssuerCertificate
@ stub TrustFreeDecode @ stub TrustFreeDecode
@ stdcall TrustIsCertificateSelfSigned(ptr) @ stdcall TrustIsCertificateSelfSigned(ptr)
@ stub TrustOpenStores @ stub TrustOpenStores
#@ stub WTGetBioSignatureInfo
#@ stub WTGetPluginSignatureInfo
#@ stub WTGetSignatureInfo
@ stdcall WTHelperCertCheckValidSignature(ptr) @ stdcall WTHelperCertCheckValidSignature(ptr)
@ stub WTHelperCertFindIssuerCertificate @ stub WTHelperCertFindIssuerCertificate
@ stub WTHelperCertIsSelfSigned @ stub WTHelperCertIsSelfSigned
@ stub WTHelperCheckCertUsage @ stub WTHelperCheckCertUsage
@ stub WTHelperGetAgencyInfo @ stub WTHelperGetAgencyInfo
@ stdcall WTHelperGetFileHandle(ptr) @ stdcall WTHelperGetFileHandle(ptr)
#@ stub WTHelperGetFileHash
@ stdcall WTHelperGetFileName(ptr) @ stdcall WTHelperGetFileName(ptr)
@ stdcall WTHelperGetKnownUsages(long ptr) @ stdcall WTHelperGetKnownUsages(long ptr)
@ stdcall WTHelperGetProvCertFromChain(ptr long) @ stdcall WTHelperGetProvCertFromChain(ptr long)
@ stdcall WTHelperGetProvPrivateDataFromChain(ptr ptr) @ stdcall WTHelperGetProvPrivateDataFromChain(ptr ptr)
@ stdcall WTHelperGetProvSignerFromChain(ptr long long long) @ stdcall WTHelperGetProvSignerFromChain(ptr long long long)
#@ stub WTHelperIsChainedToMicrosoft
#@ stub WTHelperIsChainedToMicrosoftFromStateData
@ stub WTHelperIsInRootStore @ stub WTHelperIsInRootStore
@ stub WTHelperOpenKnownStores @ stub WTHelperOpenKnownStores
@ stdcall WTHelperProvDataFromStateData(ptr) @ stdcall WTHelperProvDataFromStateData(ptr)
#@ stub WTIsFirstConfigCiResultPreferred
#@ stub WTLogConfigCiScriptEvent
#@ stub WTLogConfigCiSignerEvent
#@ stub WTValidateBioSignaturePolicy
#@ stub WVTAsn1CatMemberInfo2Decode
#@ stub WVTAsn1CatMemberInfo2Encode
@ stdcall WVTAsn1CatMemberInfoDecode(long str ptr long long ptr ptr) @ stdcall WVTAsn1CatMemberInfoDecode(long str ptr long long ptr ptr)
@ stdcall WVTAsn1CatMemberInfoEncode(long str ptr ptr ptr) @ stdcall WVTAsn1CatMemberInfoEncode(long str ptr ptr ptr)
@ stdcall WVTAsn1CatNameValueDecode(long str ptr long long ptr ptr) @ stdcall WVTAsn1CatNameValueDecode(long str ptr long long ptr ptr)
@ stdcall WVTAsn1CatNameValueEncode(long str ptr ptr ptr) @ stdcall WVTAsn1CatNameValueEncode(long str ptr ptr ptr)
#@ stub WVTAsn1IntentToSealAttributeDecode
#@ stub WVTAsn1IntentToSealAttributeEncode
#@ stub WVTAsn1SealingSignatureAttributeDecode
#@ stub WVTAsn1SealingSignatureAttributeEncode
#@ stub WVTAsn1SealingTimestampAttributeDecode
#@ stub WVTAsn1SealingTimestampAttributeEncode
@ stdcall WVTAsn1SpcFinancialCriteriaInfoDecode(long str ptr long long ptr ptr) @ stdcall WVTAsn1SpcFinancialCriteriaInfoDecode(long str ptr long long ptr ptr)
@ stdcall WVTAsn1SpcFinancialCriteriaInfoEncode(long str ptr ptr ptr) @ stdcall WVTAsn1SpcFinancialCriteriaInfoEncode(long str ptr ptr ptr)
@ stdcall WVTAsn1SpcIndirectDataContentDecode(long str ptr long long ptr ptr) @ stdcall WVTAsn1SpcIndirectDataContentDecode(long str ptr long long ptr ptr)
@ -118,6 +148,7 @@
@ stdcall WintrustGetRegPolicyFlags(ptr) @ stdcall WintrustGetRegPolicyFlags(ptr)
@ stdcall WintrustLoadFunctionPointers(ptr ptr) @ stdcall WintrustLoadFunctionPointers(ptr ptr)
@ stdcall WintrustRemoveActionID(ptr) @ stdcall WintrustRemoveActionID(ptr)
#@ stub WintrustSetDefaultIncludePEPageHashes
@ stdcall WintrustSetRegPolicyFlags(long) @ stdcall WintrustSetRegPolicyFlags(long)
@ stdcall mscat32DllRegisterServer() @ stdcall mscat32DllRegisterServer()
@ stdcall mscat32DllUnregisterServer() @ stdcall mscat32DllUnregisterServer()

View file

@ -17,8 +17,6 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#include "config.h"
#include <stdarg.h> #include <stdarg.h>
#define NONAMELESSUNION #define NONAMELESSUNION
@ -309,13 +307,11 @@ static LONG WINTRUST_DefaultVerify(HWND hwnd, GUID *actionID,
goto done; goto done;
error: error:
if (provData) WINTRUST_Free(provData->padwTrustStepErrors);
{ WINTRUST_Free(provData->u.pPDSip);
WINTRUST_Free(provData->padwTrustStepErrors); WINTRUST_Free(provData->psPfns);
WINTRUST_Free(provData->u.pPDSip); WINTRUST_Free(provData);
WINTRUST_Free(provData->psPfns);
WINTRUST_Free(provData);
}
done: done:
TRACE("returning %08x\n", err); TRACE("returning %08x\n", err);
return err; return err;
@ -502,13 +498,11 @@ static LONG WINTRUST_CertVerify(HWND hwnd, GUID *actionID,
goto done; goto done;
error: error:
if (provData) WINTRUST_Free(provData->padwTrustStepErrors);
{ WINTRUST_Free(provData->u.pPDSip);
WINTRUST_Free(provData->padwTrustStepErrors); WINTRUST_Free(provData->psPfns);
WINTRUST_Free(provData->u.pPDSip); WINTRUST_Free(provData);
WINTRUST_Free(provData->psPfns);
WINTRUST_Free(provData);
}
done: done:
TRACE("returning %08x\n", err); TRACE("returning %08x\n", err);
return err; return err;

View file

@ -207,7 +207,7 @@ dll/win32/winmm # Forked at Wine-20050628
dll/win32/winmm/midimap # Forked at Wine-20050628 dll/win32/winmm/midimap # Forked at Wine-20050628
dll/win32/winmm/wavemap # Forked at Wine-20050628 dll/win32/winmm/wavemap # Forked at Wine-20050628
dll/win32/winscard # Synced to WineStaging-4.18 dll/win32/winscard # Synced to WineStaging-4.18
dll/win32/wintrust # Synced to WineStaging-3.9 dll/win32/wintrust # Synced to WineStaging-4.18
dll/win32/wldap32 # Synced to WineStaging-3.3 dll/win32/wldap32 # Synced to WineStaging-3.3
dll/win32/wmi # Synced to WineStaging-2.9 dll/win32/wmi # Synced to WineStaging-2.9
dll/win32/wmiutils # Synced to WineStaging-3.3 dll/win32/wmiutils # Synced to WineStaging-3.3