Skip to content

Commit f6e151a

Browse files
committed
Adding some crypto api
1 parent c12a0c4 commit f6e151a

9 files changed

Lines changed: 289 additions & 84 deletions

File tree

ctypes_generation/definitions/winfunc.txt

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1263,44 +1263,6 @@ UINT WINAPI GetWindowModuleFileNameW(
12631263
__out LPWSTR pszFileName,
12641264
__in UINT cchFileNameMax);
12651265

1266-
1267-
BOOL WINAPI CryptCATAdminCalcHashFromFileHandle(
1268-
__in HANDLE hFile,
1269-
__inout DWORD *pcbHash,
1270-
_Out_opt_ BYTE *pbHash,
1271-
__in DWORD dwFlags);
1272-
1273-
HCATINFO WINAPI CryptCATAdminEnumCatalogFromHash(
1274-
__in HCATADMIN hCatAdmin,
1275-
__in BYTE *pbHash,
1276-
__in DWORD cbHash,
1277-
__in DWORD dwFlags,
1278-
__inout HCATINFO *phPrevCatInfo);
1279-
1280-
BOOL WINAPI CryptCATAdminAcquireContext(
1281-
_Out_ HCATADMIN *phCatAdmin,
1282-
_In_ GUID *pgSubsystem,
1283-
_In_ DWORD dwFlags
1284-
);
1285-
1286-
BOOL WINAPI CryptCATCatalogInfoFromContext(
1287-
_In_ HCATINFO hCatInfo,
1288-
_Inout_ CATALOG_INFO *psCatInfo,
1289-
_In_ DWORD dwFlags
1290-
);
1291-
1292-
1293-
BOOL WINAPI CryptCATAdminReleaseCatalogContext(
1294-
_In_ HCATADMIN hCatAdmin,
1295-
_In_ HCATINFO hCatInfo,
1296-
_In_ DWORD dwFlags
1297-
);
1298-
1299-
BOOL WINAPI CryptCATAdminReleaseContext(
1300-
_In_ HCATADMIN hCatAdmin,
1301-
_In_ DWORD dwFlags
1302-
);
1303-
13041266
DWORD WINAPI GetLogicalDriveStringsA(
13051267
_In_ DWORD nBufferLength,
13061268
_Out_ LPCSTR lpBuffer
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
BOOL WINAPI CryptCATAdminCalcHashFromFileHandle(
2+
__in HANDLE hFile,
3+
__inout DWORD *pcbHash,
4+
_Out_opt_ BYTE *pbHash,
5+
__in DWORD dwFlags);
6+
7+
HCATINFO WINAPI CryptCATAdminEnumCatalogFromHash(
8+
__in HCATADMIN hCatAdmin,
9+
__in BYTE *pbHash,
10+
__in DWORD cbHash,
11+
__in DWORD dwFlags,
12+
__inout HCATINFO *phPrevCatInfo);
13+
14+
BOOL WINAPI CryptCATAdminAcquireContext(
15+
_Out_ HCATADMIN *phCatAdmin,
16+
_In_ GUID *pgSubsystem,
17+
_In_ DWORD dwFlags
18+
);
19+
20+
BOOL WINAPI CryptCATCatalogInfoFromContext(
21+
_In_ HCATINFO hCatInfo,
22+
_Inout_ CATALOG_INFO *psCatInfo,
23+
_In_ DWORD dwFlags
24+
);
25+
26+
27+
BOOL WINAPI CryptCATAdminReleaseCatalogContext(
28+
_In_ HCATADMIN hCatAdmin,
29+
_In_ HCATINFO hCatInfo,
30+
_In_ DWORD dwFlags
31+
);
32+
33+
BOOL WINAPI CryptCATAdminReleaseContext(
34+
_In_ HCATADMIN hCatAdmin,
35+
_In_ DWORD dwFlags
36+
);

ctypes_generation/definitions/wintrust_crypt_func.txt renamed to ctypes_generation/definitions/winfunc_crypto_wintrust.txt

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,73 @@
1+
BOOL WINAPI CryptCATAdminCalcHashFromFileHandle(
2+
__in HANDLE hFile,
3+
__inout DWORD *pcbHash,
4+
_Out_opt_ BYTE *pbHash,
5+
__in DWORD dwFlags);
6+
7+
HCATINFO WINAPI CryptCATAdminEnumCatalogFromHash(
8+
__in HCATADMIN hCatAdmin,
9+
__in BYTE *pbHash,
10+
__in DWORD cbHash,
11+
__in DWORD dwFlags,
12+
__inout HCATINFO *phPrevCatInfo);
13+
14+
BOOL WINAPI CryptCATAdminAcquireContext(
15+
_Out_ HCATADMIN *phCatAdmin,
16+
_In_ GUID *pgSubsystem,
17+
_In_ DWORD dwFlags
18+
);
19+
20+
BOOL WINAPI CryptCATCatalogInfoFromContext(
21+
_In_ HCATINFO hCatInfo,
22+
_Inout_ CATALOG_INFO *psCatInfo,
23+
_In_ DWORD dwFlags
24+
);
25+
26+
27+
BOOL WINAPI CryptCATAdminReleaseCatalogContext(
28+
_In_ HCATADMIN hCatAdmin,
29+
_In_ HCATINFO hCatInfo,
30+
_In_ DWORD dwFlags
31+
);
32+
33+
BOOL WINAPI CryptCATAdminReleaseContext(
34+
_In_ HCATADMIN hCatAdmin,
35+
_In_ DWORD dwFlags
36+
);
37+
38+
CRYPTCATATTRIBUTE* WINAPI CryptCATGetAttrInfo(
39+
_In_ HANDLE hCatalog,
40+
_In_ CRYPTCATMEMBER *pCatMember,
41+
_In_ LPWSTR pwszReferenceTag
42+
);
43+
44+
CRYPTCATMEMBER* WINAPI CryptCATGetMemberInfo(
45+
_In_ HANDLE hCatalog,
46+
_In_ LPWSTR pwszReferenceTag
47+
);
48+
49+
CRYPTCATATTRIBUTE* WINAPI CryptCATGetAttrInfo(
50+
_In_ HANDLE hCatalog,
51+
_In_ CRYPTCATMEMBER *pCatMember,
52+
_In_ LPWSTR pwszReferenceTag
53+
);
54+
55+
CRYPTCATATTRIBUTE* WINAPI CryptCATEnumerateCatAttr(
56+
_In_ HANDLE hCatalog,
57+
_In_ CRYPTCATATTRIBUTE *pPrevAttr
58+
);
59+
60+
CRYPTCATATTRIBUTE* WINAPI CryptCATEnumerateAttr(
61+
_In_ HANDLE hCatalog,
62+
_In_ CRYPTCATMEMBER *pCatMember,
63+
_In_ CRYPTCATATTRIBUTE *pPrevAttr
64+
);
65+
66+
CRYPTCATMEMBER* WINAPI CryptCATEnumerateMember(
67+
_In_ HANDLE hCatalog,
68+
_In_ CRYPTCATMEMBER *pPrevMember
69+
);
70+
171
BOOL WINAPI CryptQueryObject(
272
_In_ DWORD dwObjectType,
373
_In_ VOID *pvObject,

ctypes_generation/definitions/winstruct.txt

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2030,6 +2030,46 @@ CRYPT_DIGEST_BLOB, *PCRYPT_DIGEST_BLOB,
20302030
CRYPT_DER_BLOB, *PCRYPT_DER_BLOB,
20312031
CRYPT_ATTR_BLOB, *PCRYPT_ATTR_BLOB;
20322032

2033+
typedef struct CRYPTCATATTRIBUTE_ {
2034+
DWORD cbStruct;
2035+
LPWSTR pwszReferenceTag;
2036+
DWORD dwAttrTypeAndAction;
2037+
DWORD cbValue;
2038+
BYTE *pbValue;
2039+
DWORD dwReserved;
2040+
} CRYPTCATATTRIBUTE, *PCRYPTCATATTRIBUTE;
2041+
2042+
typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
2043+
LPSTR pszObjId;
2044+
CRYPT_OBJID_BLOB Value;
2045+
} CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE;
2046+
2047+
typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
2048+
LPSTR pszObjId;
2049+
CRYPT_OBJID_BLOB Parameters;
2050+
} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
2051+
2052+
typedef struct SIP_INDIRECT_DATA_
2053+
{
2054+
CRYPT_ATTRIBUTE_TYPE_VALUE Data;
2055+
CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
2056+
CRYPT_HASH_BLOB Digest;
2057+
} SIP_INDIRECT_DATA, *PSIP_INDIRECT_DATA;
2058+
2059+
typedef struct CRYPTCATMEMBER_ {
2060+
DWORD cbStruct;
2061+
LPWSTR pwszReferenceTag;
2062+
LPWSTR pwszFileName;
2063+
GUID gSubjectType;
2064+
DWORD fdwMemberFlags;
2065+
struct SIP_INDIRECT_DATA *pIndirectData;
2066+
DWORD dwCertVersion;
2067+
DWORD dwReserved;
2068+
HANDLE hReserved;
2069+
CRYPT_ATTR_BLOB sEncodedIndirectData;
2070+
CRYPT_ATTR_BLOB sEncodedMemberInfo;
2071+
} CRYPTCATMEMBER, *PCRYPTCATMEMBER;
2072+
20332073
typedef struct WINTRUST_FILE_INFO_
20342074
{
20352075
DWORD cbStruct;
@@ -2065,10 +2105,7 @@ typedef struct _CRYPT_ATTRIBUTES {
20652105
} CRYPT_ATTRIBUTES, *PCRYPT_ATTRIBUTES;
20662106

20672107

2068-
typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
2069-
LPSTR pszObjId;
2070-
CRYPT_OBJID_BLOB Parameters;
2071-
} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
2108+
20722109

20732110
typedef struct _CMSG_SIGNER_INFO {
20742111
DWORD dwVersion;

ctypes_generation/func_parser.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ def generate_comment_ctypes(self):
2525

2626
def generate_prototype_ctypes(self):
2727
model = "{0} = WINFUNCTYPE({1})"
28-
ctypes_param = [self.return_type]
28+
if isinstance(self.return_type, tuple) and self.return_type[0] == "PTR":
29+
ctypes_param = ["POINTER({0})".format(self.return_type[1])]
30+
else:
31+
ctypes_param = [self.return_type]
2932
for type, name in self.params:
3033
if type.upper() == "POINTER(VOID)":
3134
type = "PVOID"
@@ -81,6 +84,10 @@ def parse_winfunc(self):
8184
except StopIteration:
8285
raise NormalParsingTerminaison()
8386

87+
if type(self.peek()) == StarToken:
88+
self.assert_token_type(StarToken)
89+
return_type = ("PTR", return_type)
90+
8491
func_name = self.assert_token_type(NameToken).value
8592
if func_name.upper() == "WINAPI":
8693
has_winapi = True

ctypes_generation/generate.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,10 @@ class FuncGenerator(CtypesGenerator):
404404

405405
def analyse(self, data):
406406
for func in data:
407-
self.add_imports(func.return_type)
407+
if isinstance(func.return_type, tuple) and func.return_type[0] == "PTR":
408+
self.add_imports(func.return_type[1])
409+
else:
410+
self.add_imports(func.return_type)
408411
for param_type, _ in func.params:
409412
if param_type.startswith("POINTER(") and param_type.endswith(")"):
410413
param_type = param_type[len("POINTER("): -1]
@@ -741,7 +744,7 @@ class DefGenerator(InitialDefGenerator):
741744
structs.append_input_file(from_here("definitions\\winstruct_alpc.txt"))
742745

743746
functions = FuncGenerator(from_here("definitions\\winfunc.txt"), from_here(r"..\windows\generated_def\\winfuncs.py"), dependances=[structs])
744-
functions.append_input_file(from_here("definitions\\wintrust_crypt_func.txt"))
747+
functions.append_input_file(from_here("definitions\\winfunc_crypto_wintrust.txt"))
745748
functions.append_input_file(from_here("definitions\\winfunc_notdoc.txt"))
746749

747750
com = InitialCOMGenerator(from_here("definitions\\com\\*.txt"), DEFAULT_INTERFACE_TO_IID, from_here(r"..\windows\generated_def\\interfaces.py"), dependances=[structs, defs_with_ntstatus])

0 commit comments

Comments
 (0)