1 /* 2 * Copyright 2019 Gijs Vermeulen 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 19 #include "windef.h" 20 #include "winbase.h" 21 #include "wincrypt.h" 22 23 #define SPC_EXC_PE_PAGE_HASHES_FLAG 0x10 24 #define SPC_INC_PE_IMPORT_ADDR_TABLE_FLAG 0x20 25 #define SPC_INC_PE_DEBUG_INFO_FLAG 0x40 26 #define SPC_INC_PE_RESOURCES_FLAG 0x80 27 #define SPC_INC_PE_PAGE_HASHES_FLAG 0x100 28 29 #define SIGNER_CERT_SPC_FILE 1 30 #define SIGNER_CERT_STORE 2 31 #define SIGNER_CERT_SPC_CHAIN 3 32 33 #define SIGNER_CERT_POLICY_STORE 0x1 34 #define SIGNER_CERT_POLICY_CHAIN 0x2 35 #define SIGNER_CERT_POLICY_CHAIN_NO_ROOT 0x8 36 37 #define SIGNER_NO_ATTR 0 38 #define SIGNER_AUTHCODE_ATTR 1 39 40 typedef struct _SIGNER_CONTEXT { 41 DWORD cbSize; 42 DWORD cbBlob; 43 BYTE *pbBlob; 44 } SIGNER_CONTEXT, *PSIGNER_CONTEXT; 45 46 typedef struct _SIGNER_FILE_INFO { 47 DWORD cbSize; 48 const WCHAR *pwszFileName; 49 HANDLE hFile; 50 } SIGNER_FILE_INFO, *PSIGNER_FILE_INFO; 51 52 typedef struct _SIGNER_BLOB_INFO { 53 DWORD cbSize; 54 GUID *pGuidSubject; 55 DWORD cbBlob; 56 BYTE *pbBlob; 57 const WCHAR *pwszDisplayName; 58 } SIGNER_BLOB_INFO, *PSIGNER_BLOB_INFO; 59 60 typedef struct _SIGNER_SUBJECT_INFO { 61 DWORD cbSize; 62 DWORD *pdwIndex; 63 DWORD dwSubjectChoice; 64 union { 65 SIGNER_FILE_INFO *pSignerFileInfo; 66 SIGNER_BLOB_INFO *pSignerBlobInfo; 67 }; 68 } SIGNER_SUBJECT_INFO, *PSIGNER_SUBJECT_INFO; 69 70 typedef struct _SIGNER_CERT_STORE_INFO { 71 DWORD cbSize; 72 const CERT_CONTEXT *pSigningCert; 73 DWORD dwCertPolicy; 74 HCERTSTORE hCertStore; 75 } SIGNER_CERT_STORE_INFO, *PSIGNER_CERT_STORE_INFO; 76 77 typedef struct _SIGNER_SPC_CHAIN_INFO { 78 DWORD cbSize; 79 const WCHAR *pwszSpcFile; 80 DWORD dwCertPolicy; 81 HCERTSTORE hCertStore; 82 } SIGNER_SPC_CHAIN_INFO, *PSIGNER_SPC_CHAIN_INFO; 83 84 typedef struct _SIGNER_CERT { 85 DWORD cbSize; 86 DWORD dwCertChoice; 87 union { 88 const WCHAR *pwszSpcFile; 89 SIGNER_CERT_STORE_INFO *pCertStoreInfo; 90 SIGNER_SPC_CHAIN_INFO *pSpcChainInfo; 91 }; 92 HWND hwnd; 93 } SIGNER_CERT, *PSIGNER_CERT; 94 95 typedef struct _SIGNER_ATTR_AUTHCODE { 96 DWORD cbSize; 97 BOOL fCommercial; 98 BOOL fIndividual; 99 const WCHAR *pwszName; 100 const WCHAR *pwszInfo; 101 } SIGNER_ATTR_AUTHCODE, *PSIGNER_ATTR_AUTHCODE; 102 103 typedef struct _SIGNER_SIGNATURE_INFO { 104 DWORD cbSize; 105 ALG_ID algidHash; 106 DWORD dwAttrChoice; 107 union { 108 SIGNER_ATTR_AUTHCODE *pAttrAuthcode; 109 }; 110 CRYPT_ATTRIBUTES *psAuthenticated; 111 CRYPT_ATTRIBUTES *psUnauthenticated; 112 } SIGNER_SIGNATURE_INFO, *PSIGNER_SIGNATURE_INFO; 113 114 typedef struct _SIGNER_PROVIDER_INFO { 115 DWORD cbSize; 116 const WCHAR *pwszProviderName; 117 DWORD dwProviderType; 118 DWORD dwKeySpec; 119 DWORD dwPvkChoice; 120 union { 121 WCHAR *pwszPvkFileName; 122 WCHAR *pwszKeyContainer; 123 }; 124 } SIGNER_PROVIDER_INFO, *PSIGNER_PROVIDER_INFO; 125