mirror of
https://github.com/hakril/PythonForWindows
synced 2026-06-08 14:31:45 +00:00
Adding some crypto api
This commit is contained in:
@@ -1263,44 +1263,6 @@ UINT WINAPI GetWindowModuleFileNameW(
|
||||
__out LPWSTR pszFileName,
|
||||
__in UINT cchFileNameMax);
|
||||
|
||||
|
||||
BOOL WINAPI CryptCATAdminCalcHashFromFileHandle(
|
||||
__in HANDLE hFile,
|
||||
__inout DWORD *pcbHash,
|
||||
_Out_opt_ BYTE *pbHash,
|
||||
__in DWORD dwFlags);
|
||||
|
||||
HCATINFO WINAPI CryptCATAdminEnumCatalogFromHash(
|
||||
__in HCATADMIN hCatAdmin,
|
||||
__in BYTE *pbHash,
|
||||
__in DWORD cbHash,
|
||||
__in DWORD dwFlags,
|
||||
__inout HCATINFO *phPrevCatInfo);
|
||||
|
||||
BOOL WINAPI CryptCATAdminAcquireContext(
|
||||
_Out_ HCATADMIN *phCatAdmin,
|
||||
_In_ GUID *pgSubsystem,
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
BOOL WINAPI CryptCATCatalogInfoFromContext(
|
||||
_In_ HCATINFO hCatInfo,
|
||||
_Inout_ CATALOG_INFO *psCatInfo,
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
|
||||
BOOL WINAPI CryptCATAdminReleaseCatalogContext(
|
||||
_In_ HCATADMIN hCatAdmin,
|
||||
_In_ HCATINFO hCatInfo,
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
BOOL WINAPI CryptCATAdminReleaseContext(
|
||||
_In_ HCATADMIN hCatAdmin,
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
DWORD WINAPI GetLogicalDriveStringsA(
|
||||
_In_ DWORD nBufferLength,
|
||||
_Out_ LPCSTR lpBuffer
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
BOOL WINAPI CryptCATAdminCalcHashFromFileHandle(
|
||||
__in HANDLE hFile,
|
||||
__inout DWORD *pcbHash,
|
||||
_Out_opt_ BYTE *pbHash,
|
||||
__in DWORD dwFlags);
|
||||
|
||||
HCATINFO WINAPI CryptCATAdminEnumCatalogFromHash(
|
||||
__in HCATADMIN hCatAdmin,
|
||||
__in BYTE *pbHash,
|
||||
__in DWORD cbHash,
|
||||
__in DWORD dwFlags,
|
||||
__inout HCATINFO *phPrevCatInfo);
|
||||
|
||||
BOOL WINAPI CryptCATAdminAcquireContext(
|
||||
_Out_ HCATADMIN *phCatAdmin,
|
||||
_In_ GUID *pgSubsystem,
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
BOOL WINAPI CryptCATCatalogInfoFromContext(
|
||||
_In_ HCATINFO hCatInfo,
|
||||
_Inout_ CATALOG_INFO *psCatInfo,
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
|
||||
BOOL WINAPI CryptCATAdminReleaseCatalogContext(
|
||||
_In_ HCATADMIN hCatAdmin,
|
||||
_In_ HCATINFO hCatInfo,
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
BOOL WINAPI CryptCATAdminReleaseContext(
|
||||
_In_ HCATADMIN hCatAdmin,
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
+70
@@ -1,3 +1,73 @@
|
||||
BOOL WINAPI CryptCATAdminCalcHashFromFileHandle(
|
||||
__in HANDLE hFile,
|
||||
__inout DWORD *pcbHash,
|
||||
_Out_opt_ BYTE *pbHash,
|
||||
__in DWORD dwFlags);
|
||||
|
||||
HCATINFO WINAPI CryptCATAdminEnumCatalogFromHash(
|
||||
__in HCATADMIN hCatAdmin,
|
||||
__in BYTE *pbHash,
|
||||
__in DWORD cbHash,
|
||||
__in DWORD dwFlags,
|
||||
__inout HCATINFO *phPrevCatInfo);
|
||||
|
||||
BOOL WINAPI CryptCATAdminAcquireContext(
|
||||
_Out_ HCATADMIN *phCatAdmin,
|
||||
_In_ GUID *pgSubsystem,
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
BOOL WINAPI CryptCATCatalogInfoFromContext(
|
||||
_In_ HCATINFO hCatInfo,
|
||||
_Inout_ CATALOG_INFO *psCatInfo,
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
|
||||
BOOL WINAPI CryptCATAdminReleaseCatalogContext(
|
||||
_In_ HCATADMIN hCatAdmin,
|
||||
_In_ HCATINFO hCatInfo,
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
BOOL WINAPI CryptCATAdminReleaseContext(
|
||||
_In_ HCATADMIN hCatAdmin,
|
||||
_In_ DWORD dwFlags
|
||||
);
|
||||
|
||||
CRYPTCATATTRIBUTE* WINAPI CryptCATGetAttrInfo(
|
||||
_In_ HANDLE hCatalog,
|
||||
_In_ CRYPTCATMEMBER *pCatMember,
|
||||
_In_ LPWSTR pwszReferenceTag
|
||||
);
|
||||
|
||||
CRYPTCATMEMBER* WINAPI CryptCATGetMemberInfo(
|
||||
_In_ HANDLE hCatalog,
|
||||
_In_ LPWSTR pwszReferenceTag
|
||||
);
|
||||
|
||||
CRYPTCATATTRIBUTE* WINAPI CryptCATGetAttrInfo(
|
||||
_In_ HANDLE hCatalog,
|
||||
_In_ CRYPTCATMEMBER *pCatMember,
|
||||
_In_ LPWSTR pwszReferenceTag
|
||||
);
|
||||
|
||||
CRYPTCATATTRIBUTE* WINAPI CryptCATEnumerateCatAttr(
|
||||
_In_ HANDLE hCatalog,
|
||||
_In_ CRYPTCATATTRIBUTE *pPrevAttr
|
||||
);
|
||||
|
||||
CRYPTCATATTRIBUTE* WINAPI CryptCATEnumerateAttr(
|
||||
_In_ HANDLE hCatalog,
|
||||
_In_ CRYPTCATMEMBER *pCatMember,
|
||||
_In_ CRYPTCATATTRIBUTE *pPrevAttr
|
||||
);
|
||||
|
||||
CRYPTCATMEMBER* WINAPI CryptCATEnumerateMember(
|
||||
_In_ HANDLE hCatalog,
|
||||
_In_ CRYPTCATMEMBER *pPrevMember
|
||||
);
|
||||
|
||||
BOOL WINAPI CryptQueryObject(
|
||||
_In_ DWORD dwObjectType,
|
||||
_In_ VOID *pvObject,
|
||||
@@ -2030,6 +2030,46 @@ CRYPT_DIGEST_BLOB, *PCRYPT_DIGEST_BLOB,
|
||||
CRYPT_DER_BLOB, *PCRYPT_DER_BLOB,
|
||||
CRYPT_ATTR_BLOB, *PCRYPT_ATTR_BLOB;
|
||||
|
||||
typedef struct CRYPTCATATTRIBUTE_ {
|
||||
DWORD cbStruct;
|
||||
LPWSTR pwszReferenceTag;
|
||||
DWORD dwAttrTypeAndAction;
|
||||
DWORD cbValue;
|
||||
BYTE *pbValue;
|
||||
DWORD dwReserved;
|
||||
} CRYPTCATATTRIBUTE, *PCRYPTCATATTRIBUTE;
|
||||
|
||||
typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE {
|
||||
LPSTR pszObjId;
|
||||
CRYPT_OBJID_BLOB Value;
|
||||
} CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE;
|
||||
|
||||
typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
|
||||
LPSTR pszObjId;
|
||||
CRYPT_OBJID_BLOB Parameters;
|
||||
} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
|
||||
|
||||
typedef struct SIP_INDIRECT_DATA_
|
||||
{
|
||||
CRYPT_ATTRIBUTE_TYPE_VALUE Data;
|
||||
CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
|
||||
CRYPT_HASH_BLOB Digest;
|
||||
} SIP_INDIRECT_DATA, *PSIP_INDIRECT_DATA;
|
||||
|
||||
typedef struct CRYPTCATMEMBER_ {
|
||||
DWORD cbStruct;
|
||||
LPWSTR pwszReferenceTag;
|
||||
LPWSTR pwszFileName;
|
||||
GUID gSubjectType;
|
||||
DWORD fdwMemberFlags;
|
||||
struct SIP_INDIRECT_DATA *pIndirectData;
|
||||
DWORD dwCertVersion;
|
||||
DWORD dwReserved;
|
||||
HANDLE hReserved;
|
||||
CRYPT_ATTR_BLOB sEncodedIndirectData;
|
||||
CRYPT_ATTR_BLOB sEncodedMemberInfo;
|
||||
} CRYPTCATMEMBER, *PCRYPTCATMEMBER;
|
||||
|
||||
typedef struct WINTRUST_FILE_INFO_
|
||||
{
|
||||
DWORD cbStruct;
|
||||
@@ -2065,10 +2105,7 @@ typedef struct _CRYPT_ATTRIBUTES {
|
||||
} CRYPT_ATTRIBUTES, *PCRYPT_ATTRIBUTES;
|
||||
|
||||
|
||||
typedef struct _CRYPT_ALGORITHM_IDENTIFIER {
|
||||
LPSTR pszObjId;
|
||||
CRYPT_OBJID_BLOB Parameters;
|
||||
} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER;
|
||||
|
||||
|
||||
typedef struct _CMSG_SIGNER_INFO {
|
||||
DWORD dwVersion;
|
||||
|
||||
@@ -25,7 +25,10 @@ class WinFunc(object):
|
||||
|
||||
def generate_prototype_ctypes(self):
|
||||
model = "{0} = WINFUNCTYPE({1})"
|
||||
ctypes_param = [self.return_type]
|
||||
if isinstance(self.return_type, tuple) and self.return_type[0] == "PTR":
|
||||
ctypes_param = ["POINTER({0})".format(self.return_type[1])]
|
||||
else:
|
||||
ctypes_param = [self.return_type]
|
||||
for type, name in self.params:
|
||||
if type.upper() == "POINTER(VOID)":
|
||||
type = "PVOID"
|
||||
@@ -81,6 +84,10 @@ class WinFuncParser(Parser):
|
||||
except StopIteration:
|
||||
raise NormalParsingTerminaison()
|
||||
|
||||
if type(self.peek()) == StarToken:
|
||||
self.assert_token_type(StarToken)
|
||||
return_type = ("PTR", return_type)
|
||||
|
||||
func_name = self.assert_token_type(NameToken).value
|
||||
if func_name.upper() == "WINAPI":
|
||||
has_winapi = True
|
||||
|
||||
@@ -404,7 +404,10 @@ class FuncGenerator(CtypesGenerator):
|
||||
|
||||
def analyse(self, data):
|
||||
for func in data:
|
||||
self.add_imports(func.return_type)
|
||||
if isinstance(func.return_type, tuple) and func.return_type[0] == "PTR":
|
||||
self.add_imports(func.return_type[1])
|
||||
else:
|
||||
self.add_imports(func.return_type)
|
||||
for param_type, _ in func.params:
|
||||
if param_type.startswith("POINTER(") and param_type.endswith(")"):
|
||||
param_type = param_type[len("POINTER("): -1]
|
||||
@@ -741,7 +744,7 @@ structs.append_input_file(from_here("definitions\\winstruct_bits.txt"))
|
||||
structs.append_input_file(from_here("definitions\\winstruct_alpc.txt"))
|
||||
|
||||
functions = FuncGenerator(from_here("definitions\\winfunc.txt"), from_here(r"..\windows\generated_def\\winfuncs.py"), dependances=[structs])
|
||||
functions.append_input_file(from_here("definitions\\wintrust_crypt_func.txt"))
|
||||
functions.append_input_file(from_here("definitions\\winfunc_crypto_wintrust.txt"))
|
||||
functions.append_input_file(from_here("definitions\\winfunc_notdoc.txt"))
|
||||
|
||||
com = InitialCOMGenerator(from_here("definitions\\com\\*.txt"), DEFAULT_INTERFACE_TO_IID, from_here(r"..\windows\generated_def\\interfaces.py"), dependances=[structs, defs_with_ntstatus])
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -2680,6 +2680,60 @@ PDATA_BLOB = POINTER(_CRYPTOAPI_BLOB)
|
||||
PCRYPT_ATTR_BLOB = POINTER(_CRYPTOAPI_BLOB)
|
||||
CRYPT_ATTR_BLOB = _CRYPTOAPI_BLOB
|
||||
|
||||
class CRYPTCATATTRIBUTE_(Structure):
|
||||
_fields_ = [
|
||||
("cbStruct", DWORD),
|
||||
("pwszReferenceTag", LPWSTR),
|
||||
("dwAttrTypeAndAction", DWORD),
|
||||
("cbValue", DWORD),
|
||||
("pbValue", POINTER(BYTE)),
|
||||
("dwReserved", DWORD),
|
||||
]
|
||||
CRYPTCATATTRIBUTE = CRYPTCATATTRIBUTE_
|
||||
PCRYPTCATATTRIBUTE = POINTER(CRYPTCATATTRIBUTE_)
|
||||
|
||||
class _CRYPT_ATTRIBUTE_TYPE_VALUE(Structure):
|
||||
_fields_ = [
|
||||
("pszObjId", LPSTR),
|
||||
("Value", CRYPT_OBJID_BLOB),
|
||||
]
|
||||
CRYPT_ATTRIBUTE_TYPE_VALUE = _CRYPT_ATTRIBUTE_TYPE_VALUE
|
||||
PCRYPT_ATTRIBUTE_TYPE_VALUE = POINTER(_CRYPT_ATTRIBUTE_TYPE_VALUE)
|
||||
|
||||
class _CRYPT_ALGORITHM_IDENTIFIER(Structure):
|
||||
_fields_ = [
|
||||
("pszObjId", LPSTR),
|
||||
("Parameters", CRYPT_OBJID_BLOB),
|
||||
]
|
||||
CRYPT_ALGORITHM_IDENTIFIER = _CRYPT_ALGORITHM_IDENTIFIER
|
||||
PCRYPT_ALGORITHM_IDENTIFIER = POINTER(_CRYPT_ALGORITHM_IDENTIFIER)
|
||||
|
||||
class SIP_INDIRECT_DATA_(Structure):
|
||||
_fields_ = [
|
||||
("Data", CRYPT_ATTRIBUTE_TYPE_VALUE),
|
||||
("DigestAlgorithm", CRYPT_ALGORITHM_IDENTIFIER),
|
||||
("Digest", CRYPT_HASH_BLOB),
|
||||
]
|
||||
SIP_INDIRECT_DATA = SIP_INDIRECT_DATA_
|
||||
PSIP_INDIRECT_DATA = POINTER(SIP_INDIRECT_DATA_)
|
||||
|
||||
class CRYPTCATMEMBER_(Structure):
|
||||
_fields_ = [
|
||||
("cbStruct", DWORD),
|
||||
("pwszReferenceTag", LPWSTR),
|
||||
("pwszFileName", LPWSTR),
|
||||
("gSubjectType", GUID),
|
||||
("fdwMemberFlags", DWORD),
|
||||
("pIndirectData", POINTER(SIP_INDIRECT_DATA)),
|
||||
("dwCertVersion", DWORD),
|
||||
("dwReserved", DWORD),
|
||||
("hReserved", HANDLE),
|
||||
("sEncodedIndirectData", CRYPT_ATTR_BLOB),
|
||||
("sEncodedMemberInfo", CRYPT_ATTR_BLOB),
|
||||
]
|
||||
CRYPTCATMEMBER = CRYPTCATMEMBER_
|
||||
PCRYPTCATMEMBER = POINTER(CRYPTCATMEMBER_)
|
||||
|
||||
class WINTRUST_FILE_INFO_(Structure):
|
||||
_fields_ = [
|
||||
("cbStruct", DWORD),
|
||||
@@ -2725,14 +2779,6 @@ class _CRYPT_ATTRIBUTES(Structure):
|
||||
CRYPT_ATTRIBUTES = _CRYPT_ATTRIBUTES
|
||||
PCRYPT_ATTRIBUTES = POINTER(_CRYPT_ATTRIBUTES)
|
||||
|
||||
class _CRYPT_ALGORITHM_IDENTIFIER(Structure):
|
||||
_fields_ = [
|
||||
("pszObjId", LPSTR),
|
||||
("Parameters", CRYPT_OBJID_BLOB),
|
||||
]
|
||||
CRYPT_ALGORITHM_IDENTIFIER = _CRYPT_ALGORITHM_IDENTIFIER
|
||||
PCRYPT_ALGORITHM_IDENTIFIER = POINTER(_CRYPT_ALGORITHM_IDENTIFIER)
|
||||
|
||||
class _CMSG_SIGNER_INFO(Structure):
|
||||
_fields_ = [
|
||||
("dwVersion", DWORD),
|
||||
|
||||
@@ -1234,6 +1234,20 @@ def CryptCATAdminReleaseContext(hCatAdmin, dwFlags):
|
||||
return CryptCATAdminReleaseContext.ctypes_function(hCatAdmin, dwFlags)
|
||||
|
||||
|
||||
@WinTrustProxy('CryptCATEnumerateAttr')
|
||||
def CryptCATEnumerateAttr(hCatalog, pCatMember, pPrevAttr):
|
||||
return CryptCATEnumerateAttr.ctypes_function(hCatalog, pCatMember, pPrevAttr)
|
||||
|
||||
|
||||
@WinTrustProxy('CryptCATEnumerateCatAttr')
|
||||
def CryptCATEnumerateCatAttr(hCatalog, pPrevAttr):
|
||||
return CryptCATEnumerateCatAttr.ctypes_function(hCatalog, pPrevAttr)
|
||||
|
||||
|
||||
@WinTrustProxy('CryptCATEnumerateMember')
|
||||
def CryptCATEnumerateMember(hCatalog, pPrevMember):
|
||||
return CryptCATEnumerateMember.ctypes_function(hCatalog, pPrevMember)
|
||||
|
||||
## Crypto API ##
|
||||
@Crypt32Proxy('CertStrToNameA')
|
||||
def CertStrToNameA(dwCertEncodingType, pszX500, dwStrType, pvReserved, pbEncoded, pcbEncoded, ppszError):
|
||||
|
||||
Reference in New Issue
Block a user