From 98bc95204db482398e6d66f6bf5d86a606a2b9e8 Mon Sep 17 00:00:00 2001 From: Clement Rouault Date: Fri, 30 Dec 2016 18:03:51 +0100 Subject: [PATCH] still Working on windows.crypto object + API + test --- .../definitions/wintrust_crypt_def.txt | 208 +++++++++++++++++- .../definitions/wintrust_crypt_func.txt | 6 + ctypes_generation/generate.py | 2 + windows/crypto/__init__.py | 6 +- windows/crypto/certificate.py | 41 +++- windows/generated_def/windef.py | 151 ++++++++++++- windows/generated_def/winfuncs.py | 7 +- windows/test/mytest.py | 5 + windows/winproxy.py | 7 + 9 files changed, 417 insertions(+), 16 deletions(-) diff --git a/ctypes_generation/definitions/wintrust_crypt_def.txt b/ctypes_generation/definitions/wintrust_crypt_def.txt index c9e81b8..a5d5d02 100644 --- a/ctypes_generation/definitions/wintrust_crypt_def.txt +++ b/ctypes_generation/definitions/wintrust_crypt_def.txt @@ -263,9 +263,9 @@ #define CERT_ENHKEY_USAGE_PROP_ID 9 #define CERT_CTL_USAGE_PROP_ID CERT_ENHKEY_USAGE_PROP_ID #define CERT_NEXT_UPDATE_LOCATION_PROP_ID 10 -#define CERT_FRIENDLY_NAME_PROP_ID 11 +#define CERT_FRIENDLY_NAME_PROP_ID 11 #define CERT_PVK_FILE_PROP_ID 12 -#define CERT_DESCRIPTION_PROP_ID 13 +#define CERT_DESCRIPTION_PROP_ID 13 #define CERT_ACCESS_STATE_PROP_ID 14 #define CERT_SIGNATURE_HASH_PROP_ID 15 #define CERT_SMART_CARD_DATA_PROP_ID 16 @@ -273,25 +273,25 @@ #define CERT_FORTEZZA_DATA_PROP_ID 18 #define CERT_ARCHIVED_PROP_ID 19 #define CERT_KEY_IDENTIFIER_PROP_ID 20 -#define CERT_AUTO_ENROLL_PROP_ID 21 +#define CERT_AUTO_ENROLL_PROP_ID 21 #define CERT_PUBKEY_ALG_PARA_PROP_ID 22 #define CERT_CROSS_CERT_DIST_POINTS_PROP_ID 23 #define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID 24 #define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID 25 -#define CERT_ENROLLMENT_PROP_ID 26 +#define CERT_ENROLLMENT_PROP_ID 26 #define CERT_DATE_STAMP_PROP_ID 27 #define CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID 28 #define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID 29 -#define CERT_EXTENDED_ERROR_INFO_PROP_ID 30 +#define CERT_EXTENDED_ERROR_INFO_PROP_ID 30 #define CERT_RENEWAL_PROP_ID 64 -#define CERT_ARCHIVED_KEY_HASH_PROP_ID 65 -#define CERT_AUTO_ENROLL_RETRY_PROP_ID 66 +#define CERT_ARCHIVED_KEY_HASH_PROP_ID 65 +#define CERT_AUTO_ENROLL_RETRY_PROP_ID 66 #define CERT_AIA_URL_RETRIEVED_PROP_ID 67 #define CERT_AUTHORITY_INFO_ACCESS_PROP_ID 68 -#define CERT_BACKED_UP_PROP_ID 69 +#define CERT_BACKED_UP_PROP_ID 69 #define CERT_OCSP_RESPONSE_PROP_ID 70 -#define CERT_REQUEST_ORIGINATOR_PROP_ID 71 -#define CERT_SOURCE_LOCATION_PROP_ID 72 +#define CERT_REQUEST_ORIGINATOR_PROP_ID 71 +#define CERT_SOURCE_LOCATION_PROP_ID 72 @@ -307,6 +307,35 @@ +#define CERT_STORE_PROV_MSG (1) +#define CERT_STORE_PROV_MEMORY (2) +#define CERT_STORE_PROV_FILE (3) +#define CERT_STORE_PROV_REG (4) + +#define CERT_STORE_PROV_PKCS7 (5) +#define CERT_STORE_PROV_SERIALIZED (6) +#define CERT_STORE_PROV_FILENAME_A (7) +#define CERT_STORE_PROV_FILENAME_W (8) +#define CERT_STORE_PROV_FILENAME CERT_STORE_PROV_FILENAME_W +#define CERT_STORE_PROV_SYSTEM_A (9) +#define CERT_STORE_PROV_SYSTEM_W (10) +#define CERT_STORE_PROV_SYSTEM CERT_STORE_PROV_SYSTEM_W + +#define CERT_STORE_PROV_COLLECTION (11) +#define CERT_STORE_PROV_SYSTEM_REGISTRY_A (12) +#define CERT_STORE_PROV_SYSTEM_REGISTRY_W (13) +#define CERT_STORE_PROV_SYSTEM_REGISTRY CERT_STORE_PROV_SYSTEM_REGISTRY_W +#define CERT_STORE_PROV_PHYSICAL_W (14) +#define CERT_STORE_PROV_PHYSICAL CERT_STORE_PROV_PHYSICAL_W + +#define CERT_STORE_PROV_SMART_CARD_W (15) +#define CERT_STORE_PROV_SMART_CARD CERT_STORE_PROV_SMART_CARD_W + +#define CERT_STORE_PROV_LDAP_W (16) +#define CERT_STORE_PROV_LDAP CERT_STORE_PROV_LDAP_W +#define CERT_STORE_PROV_PKCS12 (17) + + #define szOID_RSA "1.2.840.113549" #define szOID_PKCS "1.2.840.113549.1" #define szOID_RSA_HASH "1.2.840.113549.2" @@ -461,3 +490,162 @@ #define CRYPT_E_NOT_FOUND (0x80092004L) + + +#define CERT_STORE_NO_CRYPT_RELEASE_FLAG 0x00000001 +#define CERT_STORE_SET_LOCALIZED_NAME_FLAG 0x00000002 +#define CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG 0x00000004 +#define CERT_STORE_DELETE_FLAG 0x00000010 +#define CERT_STORE_UNSAFE_PHYSICAL_FLAG 0x00000020 +#define CERT_STORE_SHARE_STORE_FLAG 0x00000040 +#define CERT_STORE_SHARE_CONTEXT_FLAG 0x00000080 +#define CERT_STORE_MANIFOLD_FLAG 0x00000100 +#define CERT_STORE_ENUM_ARCHIVED_FLAG 0x00000200 +#define CERT_STORE_UPDATE_KEYID_FLAG 0x00000400 +#define CERT_STORE_BACKUP_RESTORE_FLAG 0x00000800 +#define CERT_STORE_READONLY_FLAG 0x00008000 +#define CERT_STORE_OPEN_EXISTING_FLAG 0x00004000 +#define CERT_STORE_CREATE_NEW_FLAG 0x00002000 +#define CERT_STORE_MAXIMUM_ALLOWED_FLAG 0x00001000 + + + +#define CRYPT_USER_KEYSET 0x00001000 +#define PKCS12_PREFER_CNG_KSP 0x00000100 +#define PKCS12_ALWAYS_CNG_KSP 0x00000200 +#define PKCS12_ALLOW_OVERWRITE_KEY 0x00004000 +#define PKCS12_NO_PERSIST_KEY 0x00008000 + + +#define CRYPT_VERIFYCONTEXT 0xF0000000 +#define CRYPT_NEWKEYSET 0x00000008 +#define CRYPT_DELETEKEYSET 0x00000010 +#define CRYPT_MACHINE_KEYSET 0x00000020 +#define CRYPT_SILENT 0x00000040 +#define CRYPT_DEFAULT_CONTAINER_OPTIONAL 0x00000080 + + +#define CRYPT_EXPORTABLE 0x00000001 +#define CRYPT_USER_PROTECTED 0x00000002 +#define CRYPT_CREATE_SALT 0x00000004 +#define CRYPT_UPDATE_KEY 0x00000008 +#define CRYPT_NO_SALT 0x00000010 +#define CRYPT_PREGEN 0x00000040 +#define CRYPT_RECIPIENT 0x00000010 +#define CRYPT_INITIATOR 0x00000040 +#define CRYPT_ONLINE 0x00000080 +#define CRYPT_SF 0x00000100 +#define CRYPT_CREATE_IV 0x00000200 +#define CRYPT_KEK 0x00000400 +#define CRYPT_DATA_KEY 0x00000800 +#define CRYPT_VOLATILE 0x00001000 +#define CRYPT_SGCKEY 0x00002000 +#define CRYPT_ARCHIVABLE 0x00004000 +#define CRYPT_FORCE_KEY_PROTECTION_HIGH 0x00008000 + + +#define CRYPT_ENCODE_DECODE_NONE 0 +#define X509_CERT (1) +#define X509_CERT_TO_BE_SIGNED (2) +#define X509_CERT_CRL_TO_BE_SIGNED (3) +#define X509_CERT_REQUEST_TO_BE_SIGNED (4) +#define X509_EXTENSIONS (5) +#define X509_NAME_VALUE (6) +#define X509_NAME (7) +#define X509_PUBLIC_KEY_INFO (8) + + +#define X509_AUTHORITY_KEY_ID (9) +#define X509_KEY_ATTRIBUTES (10) +#define X509_KEY_USAGE_RESTRICTION (11) +#define X509_ALTERNATE_NAME (12) +#define X509_BASIC_CONSTRAINTS (13) +#define X509_KEY_USAGE (14) +#define X509_BASIC_CONSTRAINTS2 (15) +#define X509_CERT_POLICIES (16) + + +#define PKCS_UTC_TIME (17) +#define PKCS_TIME_REQUEST (18) +#define RSA_CSP_PUBLICKEYBLOB (19) +#define X509_UNICODE_NAME (20) + +#define X509_KEYGEN_REQUEST_TO_BE_SIGNED (21) +#define PKCS_ATTRIBUTE (22) +#define PKCS_CONTENT_INFO_SEQUENCE_OF_ANY (23) + + + +#define X509_UNICODE_NAME_VALUE (24) +#define X509_ANY_STRING X509_NAME_VALUE +#define X509_UNICODE_ANY_STRING X509_UNICODE_NAME_VALUE +#define X509_OCTET_STRING (25) +#define X509_BITS (26) +#define X509_INTEGER (27) +#define X509_MULTI_BYTE_INTEGER (28) +#define X509_ENUMERATED (29) +#define X509_CHOICE_OF_TIME (30) + +#define CERT_SIMPLE_NAME_STR 1 +#define CERT_OID_NAME_STR 2 +#define CERT_X500_NAME_STR 3 +#define CERT_XML_NAME_STR 4 + +#define AT_KEYEXCHANGE 1 +#define AT_SIGNATURE 2 + + + +#define MS_DEF_PROV_A "Microsoft Base Cryptographic Provider v1.0" +#define MS_DEF_PROV_W u"Microsoft Base Cryptographic Provider v1.0" +#define MS_DEF_PROV MS_DEF_PROV_A + +#define MS_ENHANCED_PROV_A "Microsoft Enhanced Cryptographic Provider v1.0" +#define MS_ENHANCED_PROV_W u"Microsoft Enhanced Cryptographic Provider v1.0" +#define MS_ENHANCED_PROV MS_ENHANCED_PROV_A + + +#define MS_STRONG_PROV_A "Microsoft Strong Cryptographic Provider" +#define MS_STRONG_PROV_W u"Microsoft Strong Cryptographic Provider" +#define MS_STRONG_PROV MS_STRONG_PROV_A + +#define MS_DEF_RSA_SIG_PROV_A "Microsoft RSA Signature Cryptographic Provider" +#define MS_DEF_RSA_SIG_PROV_W u"Microsoft RSA Signature Cryptographic Provider" +#define MS_DEF_RSA_SIG_PROV MS_DEF_RSA_SIG_PROV_W + + +#define CERT_STORE_ADD_NEW 1 +#define CERT_STORE_ADD_USE_EXISTING 2 +#define CERT_STORE_ADD_REPLACE_EXISTING 3 +#define CERT_STORE_ADD_ALWAYS 4 +#define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES 5 +#define CERT_STORE_ADD_NEWER 6 +#define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES 7 + + +#define PROV_RSA_FULL 1 +#define PROV_RSA_SIG 2 +#define PROV_DSS 3 +#define PROV_FORTEZZA 4 +#define PROV_MS_EXCHANGE 5 +#define PROV_SSL 6 +#define PROV_RSA_SCHANNEL 12 +#define PROV_DSS_DH 13 +#define PROV_EC_ECDSA_SIG 14 +#define PROV_EC_ECNRA_SIG 15 +#define PROV_EC_ECDSA_FULL 16 +#define PROV_EC_ECNRA_FULL 17 +#define PROV_DH_SCHANNEL 18 +#define PROV_SPYRUS_LYNKS 20 +#define PROV_RNG 21 +#define PROV_INTEL_SEC 22 +#define PROV_REPLACE_OWF 23 +#define PROV_RSA_AES 24 + + + +#define REPORT_NO_PRIVATE_KEY 0x0001 +#define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY 0x0002 +#define EXPORT_PRIVATE_KEYS 0x0004 +#define PKCS12_INCLUDE_EXTENDED_PROPERTIES 0x0010 +#define PKCS12_EXPORT_RESERVED_MASK 0xffff0000 diff --git a/ctypes_generation/definitions/wintrust_crypt_func.txt b/ctypes_generation/definitions/wintrust_crypt_func.txt index fd1024b..148d1c3 100644 --- a/ctypes_generation/definitions/wintrust_crypt_func.txt +++ b/ctypes_generation/definitions/wintrust_crypt_func.txt @@ -227,4 +227,10 @@ BOOL WINAPI CryptEncodeObjectEx( _In_ PCRYPT_ENCODE_PARA pEncodePara, _Out_ VOID *pvEncoded, _Inout_ DWORD *pcbEncoded +); + +PCCERT_CONTEXT WINAPI CertCreateCertificateContext( + _In_ DWORD dwCertEncodingType, + _In_ BYTE *pbCertEncoded, + _In_ DWORD cbCertEncoded ); \ No newline at end of file diff --git a/ctypes_generation/generate.py b/ctypes_generation/generate.py index e18e47a..3b87fb6 100644 --- a/ctypes_generation/generate.py +++ b/ctypes_generation/generate.py @@ -196,6 +196,8 @@ class InitialDefGenerator(CtypesGenerator): class StrFlags(str): def __new__(cls, name, value): + if isinstance(value, cls): + return value return super(StrFlags, cls).__new__(cls, value) def __init__(self, name, value): diff --git a/windows/crypto/__init__.py b/windows/crypto/__init__.py index 880a02d..0053651 100644 --- a/windows/crypto/__init__.py +++ b/windows/crypto/__init__.py @@ -1,4 +1,6 @@ from windows.generated_def import X509_ASN_ENCODING, PKCS_7_ASN_ENCODING -from windows.crypto.certificate import * -DEFAULT_ENCODING = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING \ No newline at end of file +DEFAULT_ENCODING = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING +# Keep other import here so sub-crypto file can import windows.crypto.DEFAULT_ENCODING +from windows.crypto.certificate import * +from windows.crypto.encrypt_decrypt import * diff --git a/windows/crypto/certificate.py b/windows/crypto/certificate.py index 1fffc90..148190b 100644 --- a/windows/crypto/certificate.py +++ b/windows/crypto/certificate.py @@ -1,9 +1,15 @@ import itertools +import ctypes import windows from windows import winproxy from windows.generated_def import * +from windows.crypto import DEFAULT_ENCODING +from windows.crypto.helper import ECRYPT_DATA_BLOB + + + class EHCERTSTORE(HCERTSTORE): # def __str__(self): @@ -26,6 +32,27 @@ class EHCERTSTORE(HCERTSTORE): last = ecert raise RuntimeError("Out of infinit loop") + def add_certificate(self, certificate): + winproxy.CertAddCertificateContextToStore(self, certificate, CERT_STORE_ADD_NEW, None) + + @classmethod + def from_file(cls, filename): + res = winproxy.CertOpenStore(CERT_STORE_PROV_FILENAME_A, DEFAULT_ENCODING, None, CERT_STORE_OPEN_EXISTING_FLAG, filename) + return ctypes.cast(res, cls) + + @classmethod + def new_in_memory(cls): + res = winproxy.CertOpenStore(CERT_STORE_PROV_MEMORY, DEFAULT_ENCODING, None, 0, None) + return ctypes.cast(res, cls) + + +def import_pfx(pfx, password=None, flags=CRYPT_USER_KEYSET): + if isinstance(pfx, basestring): + pfx = ECRYPT_DATA_BLOB.from_string(pfx) + cert_store = winproxy.PFXImportCertStore(pfx, password, flags) + return EHCERTSTORE(cert_store) + + # Why PCCERT_CONTEXT (pointer type) and not _CERT_CONTEXT ? class CertificatContext(PCCERT_CONTEXT): _type_ = PCCERT_CONTEXT._type_ # Not herited from PCCERT_CONTEXT @@ -55,14 +82,14 @@ class CertificatContext(PCCERT_CONTEXT): name = property(get_name) @property - def issuer_name(self): + def issuer(self): return self.get_name(flags=CERT_NAME_ISSUER_FLAG) @property def store(self): return EHCERTSTORE(self[0].hCertStore) - def get_raw_chain(self): + def get_certificate_chain(self): chain_context = PCCERT_CHAIN_CONTEXT() enhkey_usage = CERT_ENHKEY_USAGE() @@ -100,6 +127,16 @@ class CertificatContext(PCCERT_CONTEXT): res.append(prop) raise RuntimeError("Unreachable code") + properties = property(enum_properties) + + @classmethod + def from_file(cls, filename): + with open(filename, "rb") as f: + data = f.read() + buf = (ctypes.c_ubyte * len(data))(*bytearray(data)) + res = windows.winproxy.CertCreateCertificateContext(windows.crypto.DEFAULT_ENCODING, buf, len(data)) + return ctypes.cast(res, cls) + class CertficateChain(object): diff --git a/windows/generated_def/windef.py b/windows/generated_def/windef.py index e766daa..4100c3d 100644 --- a/windows/generated_def/windef.py +++ b/windows/generated_def/windef.py @@ -25,6 +25,8 @@ class Flag(long): class StrFlags(str): def __new__(cls, name, value): + if isinstance(value, cls): + return value return super(StrFlags, cls).__new__(cls, value) def __init__(self, name, value): @@ -1168,6 +1170,29 @@ CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK = make_flag("CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_ CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG = make_flag("CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG", 0x00010000) CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG = make_flag("CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG", 0x00020000) CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG = make_flag("CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG", 0x00040000) +CERT_STORE_PROV_MSG = make_flag("CERT_STORE_PROV_MSG", ( 1 )) +CERT_STORE_PROV_MEMORY = make_flag("CERT_STORE_PROV_MEMORY", ( 2 )) +CERT_STORE_PROV_FILE = make_flag("CERT_STORE_PROV_FILE", ( 3 )) +CERT_STORE_PROV_REG = make_flag("CERT_STORE_PROV_REG", ( 4 )) +CERT_STORE_PROV_PKCS7 = make_flag("CERT_STORE_PROV_PKCS7", ( 5 )) +CERT_STORE_PROV_SERIALIZED = make_flag("CERT_STORE_PROV_SERIALIZED", ( 6 )) +CERT_STORE_PROV_FILENAME_A = make_flag("CERT_STORE_PROV_FILENAME_A", ( 7 )) +CERT_STORE_PROV_FILENAME_W = make_flag("CERT_STORE_PROV_FILENAME_W", ( 8 )) +CERT_STORE_PROV_FILENAME = make_flag("CERT_STORE_PROV_FILENAME", CERT_STORE_PROV_FILENAME_W) +CERT_STORE_PROV_SYSTEM_A = make_flag("CERT_STORE_PROV_SYSTEM_A", ( 9 )) +CERT_STORE_PROV_SYSTEM_W = make_flag("CERT_STORE_PROV_SYSTEM_W", ( 10 )) +CERT_STORE_PROV_SYSTEM = make_flag("CERT_STORE_PROV_SYSTEM", CERT_STORE_PROV_SYSTEM_W) +CERT_STORE_PROV_COLLECTION = make_flag("CERT_STORE_PROV_COLLECTION", ( 11 )) +CERT_STORE_PROV_SYSTEM_REGISTRY_A = make_flag("CERT_STORE_PROV_SYSTEM_REGISTRY_A", ( 12 )) +CERT_STORE_PROV_SYSTEM_REGISTRY_W = make_flag("CERT_STORE_PROV_SYSTEM_REGISTRY_W", ( 13 )) +CERT_STORE_PROV_SYSTEM_REGISTRY = make_flag("CERT_STORE_PROV_SYSTEM_REGISTRY", CERT_STORE_PROV_SYSTEM_REGISTRY_W) +CERT_STORE_PROV_PHYSICAL_W = make_flag("CERT_STORE_PROV_PHYSICAL_W", ( 14 )) +CERT_STORE_PROV_PHYSICAL = make_flag("CERT_STORE_PROV_PHYSICAL", CERT_STORE_PROV_PHYSICAL_W) +CERT_STORE_PROV_SMART_CARD_W = make_flag("CERT_STORE_PROV_SMART_CARD_W", ( 15 )) +CERT_STORE_PROV_SMART_CARD = make_flag("CERT_STORE_PROV_SMART_CARD", CERT_STORE_PROV_SMART_CARD_W) +CERT_STORE_PROV_LDAP_W = make_flag("CERT_STORE_PROV_LDAP_W", ( 16 )) +CERT_STORE_PROV_LDAP = make_flag("CERT_STORE_PROV_LDAP", CERT_STORE_PROV_LDAP_W) +CERT_STORE_PROV_PKCS12 = make_flag("CERT_STORE_PROV_PKCS12", ( 17 )) szOID_RSA = make_flag("szOID_RSA", "1.2.840.113549") szOID_PKCS = make_flag("szOID_PKCS", "1.2.840.113549.1") szOID_RSA_HASH = make_flag("szOID_RSA_HASH", "1.2.840.113549.2") @@ -1318,4 +1343,128 @@ szOID_INFOSEC_mosaicUpdatedInteg = make_flag("szOID_INFOSEC_mosaicUpdatedInteg", szOID_NIST_sha256 = make_flag("szOID_NIST_sha256", "2.16.840.1.101.3.4.2.1") szOID_NIST_sha384 = make_flag("szOID_NIST_sha384", "2.16.840.1.101.3.4.2.2") szOID_NIST_sha512 = make_flag("szOID_NIST_sha512", "2.16.840.1.101.3.4.2.3") -CRYPT_E_NOT_FOUND = make_flag("CRYPT_E_NOT_FOUND", ( 0x80092004 )) \ No newline at end of file +CRYPT_E_NOT_FOUND = make_flag("CRYPT_E_NOT_FOUND", ( 0x80092004 )) +CERT_STORE_NO_CRYPT_RELEASE_FLAG = make_flag("CERT_STORE_NO_CRYPT_RELEASE_FLAG", 0x00000001) +CERT_STORE_SET_LOCALIZED_NAME_FLAG = make_flag("CERT_STORE_SET_LOCALIZED_NAME_FLAG", 0x00000002) +CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = make_flag("CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG", 0x00000004) +CERT_STORE_DELETE_FLAG = make_flag("CERT_STORE_DELETE_FLAG", 0x00000010) +CERT_STORE_UNSAFE_PHYSICAL_FLAG = make_flag("CERT_STORE_UNSAFE_PHYSICAL_FLAG", 0x00000020) +CERT_STORE_SHARE_STORE_FLAG = make_flag("CERT_STORE_SHARE_STORE_FLAG", 0x00000040) +CERT_STORE_SHARE_CONTEXT_FLAG = make_flag("CERT_STORE_SHARE_CONTEXT_FLAG", 0x00000080) +CERT_STORE_MANIFOLD_FLAG = make_flag("CERT_STORE_MANIFOLD_FLAG", 0x00000100) +CERT_STORE_ENUM_ARCHIVED_FLAG = make_flag("CERT_STORE_ENUM_ARCHIVED_FLAG", 0x00000200) +CERT_STORE_UPDATE_KEYID_FLAG = make_flag("CERT_STORE_UPDATE_KEYID_FLAG", 0x00000400) +CERT_STORE_BACKUP_RESTORE_FLAG = make_flag("CERT_STORE_BACKUP_RESTORE_FLAG", 0x00000800) +CERT_STORE_READONLY_FLAG = make_flag("CERT_STORE_READONLY_FLAG", 0x00008000) +CERT_STORE_OPEN_EXISTING_FLAG = make_flag("CERT_STORE_OPEN_EXISTING_FLAG", 0x00004000) +CERT_STORE_CREATE_NEW_FLAG = make_flag("CERT_STORE_CREATE_NEW_FLAG", 0x00002000) +CERT_STORE_MAXIMUM_ALLOWED_FLAG = make_flag("CERT_STORE_MAXIMUM_ALLOWED_FLAG", 0x00001000) +CRYPT_USER_KEYSET = make_flag("CRYPT_USER_KEYSET", 0x00001000) +PKCS12_PREFER_CNG_KSP = make_flag("PKCS12_PREFER_CNG_KSP", 0x00000100) +PKCS12_ALWAYS_CNG_KSP = make_flag("PKCS12_ALWAYS_CNG_KSP", 0x00000200) +PKCS12_ALLOW_OVERWRITE_KEY = make_flag("PKCS12_ALLOW_OVERWRITE_KEY", 0x00004000) +PKCS12_NO_PERSIST_KEY = make_flag("PKCS12_NO_PERSIST_KEY", 0x00008000) +CRYPT_VERIFYCONTEXT = make_flag("CRYPT_VERIFYCONTEXT", 0xF0000000) +CRYPT_NEWKEYSET = make_flag("CRYPT_NEWKEYSET", 0x00000008) +CRYPT_DELETEKEYSET = make_flag("CRYPT_DELETEKEYSET", 0x00000010) +CRYPT_MACHINE_KEYSET = make_flag("CRYPT_MACHINE_KEYSET", 0x00000020) +CRYPT_SILENT = make_flag("CRYPT_SILENT", 0x00000040) +CRYPT_DEFAULT_CONTAINER_OPTIONAL = make_flag("CRYPT_DEFAULT_CONTAINER_OPTIONAL", 0x00000080) +CRYPT_EXPORTABLE = make_flag("CRYPT_EXPORTABLE", 0x00000001) +CRYPT_USER_PROTECTED = make_flag("CRYPT_USER_PROTECTED", 0x00000002) +CRYPT_CREATE_SALT = make_flag("CRYPT_CREATE_SALT", 0x00000004) +CRYPT_UPDATE_KEY = make_flag("CRYPT_UPDATE_KEY", 0x00000008) +CRYPT_NO_SALT = make_flag("CRYPT_NO_SALT", 0x00000010) +CRYPT_PREGEN = make_flag("CRYPT_PREGEN", 0x00000040) +CRYPT_RECIPIENT = make_flag("CRYPT_RECIPIENT", 0x00000010) +CRYPT_INITIATOR = make_flag("CRYPT_INITIATOR", 0x00000040) +CRYPT_ONLINE = make_flag("CRYPT_ONLINE", 0x00000080) +CRYPT_SF = make_flag("CRYPT_SF", 0x00000100) +CRYPT_CREATE_IV = make_flag("CRYPT_CREATE_IV", 0x00000200) +CRYPT_KEK = make_flag("CRYPT_KEK", 0x00000400) +CRYPT_DATA_KEY = make_flag("CRYPT_DATA_KEY", 0x00000800) +CRYPT_VOLATILE = make_flag("CRYPT_VOLATILE", 0x00001000) +CRYPT_SGCKEY = make_flag("CRYPT_SGCKEY", 0x00002000) +CRYPT_ARCHIVABLE = make_flag("CRYPT_ARCHIVABLE", 0x00004000) +CRYPT_FORCE_KEY_PROTECTION_HIGH = make_flag("CRYPT_FORCE_KEY_PROTECTION_HIGH", 0x00008000) +CRYPT_ENCODE_DECODE_NONE = make_flag("CRYPT_ENCODE_DECODE_NONE", 0) +X509_CERT = make_flag("X509_CERT", ( 1 )) +X509_CERT_TO_BE_SIGNED = make_flag("X509_CERT_TO_BE_SIGNED", ( 2 )) +X509_CERT_CRL_TO_BE_SIGNED = make_flag("X509_CERT_CRL_TO_BE_SIGNED", ( 3 )) +X509_CERT_REQUEST_TO_BE_SIGNED = make_flag("X509_CERT_REQUEST_TO_BE_SIGNED", ( 4 )) +X509_EXTENSIONS = make_flag("X509_EXTENSIONS", ( 5 )) +X509_NAME_VALUE = make_flag("X509_NAME_VALUE", ( 6 )) +X509_NAME = make_flag("X509_NAME", ( 7 )) +X509_PUBLIC_KEY_INFO = make_flag("X509_PUBLIC_KEY_INFO", ( 8 )) +X509_AUTHORITY_KEY_ID = make_flag("X509_AUTHORITY_KEY_ID", ( 9 )) +X509_KEY_ATTRIBUTES = make_flag("X509_KEY_ATTRIBUTES", ( 10 )) +X509_KEY_USAGE_RESTRICTION = make_flag("X509_KEY_USAGE_RESTRICTION", ( 11 )) +X509_ALTERNATE_NAME = make_flag("X509_ALTERNATE_NAME", ( 12 )) +X509_BASIC_CONSTRAINTS = make_flag("X509_BASIC_CONSTRAINTS", ( 13 )) +X509_KEY_USAGE = make_flag("X509_KEY_USAGE", ( 14 )) +X509_BASIC_CONSTRAINTS2 = make_flag("X509_BASIC_CONSTRAINTS2", ( 15 )) +X509_CERT_POLICIES = make_flag("X509_CERT_POLICIES", ( 16 )) +PKCS_UTC_TIME = make_flag("PKCS_UTC_TIME", ( 17 )) +PKCS_TIME_REQUEST = make_flag("PKCS_TIME_REQUEST", ( 18 )) +RSA_CSP_PUBLICKEYBLOB = make_flag("RSA_CSP_PUBLICKEYBLOB", ( 19 )) +X509_UNICODE_NAME = make_flag("X509_UNICODE_NAME", ( 20 )) +X509_KEYGEN_REQUEST_TO_BE_SIGNED = make_flag("X509_KEYGEN_REQUEST_TO_BE_SIGNED", ( 21 )) +PKCS_ATTRIBUTE = make_flag("PKCS_ATTRIBUTE", ( 22 )) +PKCS_CONTENT_INFO_SEQUENCE_OF_ANY = make_flag("PKCS_CONTENT_INFO_SEQUENCE_OF_ANY", ( 23 )) +X509_UNICODE_NAME_VALUE = make_flag("X509_UNICODE_NAME_VALUE", ( 24 )) +X509_ANY_STRING = make_flag("X509_ANY_STRING", X509_NAME_VALUE) +X509_UNICODE_ANY_STRING = make_flag("X509_UNICODE_ANY_STRING", X509_UNICODE_NAME_VALUE) +X509_OCTET_STRING = make_flag("X509_OCTET_STRING", ( 25 )) +X509_BITS = make_flag("X509_BITS", ( 26 )) +X509_INTEGER = make_flag("X509_INTEGER", ( 27 )) +X509_MULTI_BYTE_INTEGER = make_flag("X509_MULTI_BYTE_INTEGER", ( 28 )) +X509_ENUMERATED = make_flag("X509_ENUMERATED", ( 29 )) +X509_CHOICE_OF_TIME = make_flag("X509_CHOICE_OF_TIME", ( 30 )) +CERT_SIMPLE_NAME_STR = make_flag("CERT_SIMPLE_NAME_STR", 1) +CERT_OID_NAME_STR = make_flag("CERT_OID_NAME_STR", 2) +CERT_X500_NAME_STR = make_flag("CERT_X500_NAME_STR", 3) +CERT_XML_NAME_STR = make_flag("CERT_XML_NAME_STR", 4) +AT_KEYEXCHANGE = make_flag("AT_KEYEXCHANGE", 1) +AT_SIGNATURE = make_flag("AT_SIGNATURE", 2) +MS_DEF_PROV_A = make_flag("MS_DEF_PROV_A", "Microsoft Base Cryptographic Provider v1.0") +MS_DEF_PROV_W = make_flag("MS_DEF_PROV_W", u"Microsoft Base Cryptographic Provider v1.0") +MS_DEF_PROV = make_flag("MS_DEF_PROV", MS_DEF_PROV_A) +MS_ENHANCED_PROV_A = make_flag("MS_ENHANCED_PROV_A", "Microsoft Enhanced Cryptographic Provider v1.0") +MS_ENHANCED_PROV_W = make_flag("MS_ENHANCED_PROV_W", u"Microsoft Enhanced Cryptographic Provider v1.0") +MS_ENHANCED_PROV = make_flag("MS_ENHANCED_PROV", MS_ENHANCED_PROV_A) +MS_STRONG_PROV_A = make_flag("MS_STRONG_PROV_A", "Microsoft Strong Cryptographic Provider") +MS_STRONG_PROV_W = make_flag("MS_STRONG_PROV_W", u"Microsoft Strong Cryptographic Provider") +MS_STRONG_PROV = make_flag("MS_STRONG_PROV", MS_STRONG_PROV_A) +MS_DEF_RSA_SIG_PROV_A = make_flag("MS_DEF_RSA_SIG_PROV_A", "Microsoft RSA Signature Cryptographic Provider") +MS_DEF_RSA_SIG_PROV_W = make_flag("MS_DEF_RSA_SIG_PROV_W", u"Microsoft RSA Signature Cryptographic Provider") +MS_DEF_RSA_SIG_PROV = make_flag("MS_DEF_RSA_SIG_PROV", MS_DEF_RSA_SIG_PROV_W) +CERT_STORE_ADD_NEW = make_flag("CERT_STORE_ADD_NEW", 1) +CERT_STORE_ADD_USE_EXISTING = make_flag("CERT_STORE_ADD_USE_EXISTING", 2) +CERT_STORE_ADD_REPLACE_EXISTING = make_flag("CERT_STORE_ADD_REPLACE_EXISTING", 3) +CERT_STORE_ADD_ALWAYS = make_flag("CERT_STORE_ADD_ALWAYS", 4) +CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = make_flag("CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES", 5) +CERT_STORE_ADD_NEWER = make_flag("CERT_STORE_ADD_NEWER", 6) +CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES = make_flag("CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES", 7) +PROV_RSA_FULL = make_flag("PROV_RSA_FULL", 1) +PROV_RSA_SIG = make_flag("PROV_RSA_SIG", 2) +PROV_DSS = make_flag("PROV_DSS", 3) +PROV_FORTEZZA = make_flag("PROV_FORTEZZA", 4) +PROV_MS_EXCHANGE = make_flag("PROV_MS_EXCHANGE", 5) +PROV_SSL = make_flag("PROV_SSL", 6) +PROV_RSA_SCHANNEL = make_flag("PROV_RSA_SCHANNEL", 12) +PROV_DSS_DH = make_flag("PROV_DSS_DH", 13) +PROV_EC_ECDSA_SIG = make_flag("PROV_EC_ECDSA_SIG", 14) +PROV_EC_ECNRA_SIG = make_flag("PROV_EC_ECNRA_SIG", 15) +PROV_EC_ECDSA_FULL = make_flag("PROV_EC_ECDSA_FULL", 16) +PROV_EC_ECNRA_FULL = make_flag("PROV_EC_ECNRA_FULL", 17) +PROV_DH_SCHANNEL = make_flag("PROV_DH_SCHANNEL", 18) +PROV_SPYRUS_LYNKS = make_flag("PROV_SPYRUS_LYNKS", 20) +PROV_RNG = make_flag("PROV_RNG", 21) +PROV_INTEL_SEC = make_flag("PROV_INTEL_SEC", 22) +PROV_REPLACE_OWF = make_flag("PROV_REPLACE_OWF", 23) +PROV_RSA_AES = make_flag("PROV_RSA_AES", 24) +REPORT_NO_PRIVATE_KEY = make_flag("REPORT_NO_PRIVATE_KEY", 0x0001) +REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY = make_flag("REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY", 0x0002) +EXPORT_PRIVATE_KEYS = make_flag("EXPORT_PRIVATE_KEYS", 0x0004) +PKCS12_INCLUDE_EXTENDED_PROPERTIES = make_flag("PKCS12_INCLUDE_EXTENDED_PROPERTIES", 0x0010) +PKCS12_EXPORT_RESERVED_MASK = make_flag("PKCS12_EXPORT_RESERVED_MASK", 0xffff0000) \ No newline at end of file diff --git a/windows/generated_def/winfuncs.py b/windows/generated_def/winfuncs.py index 945ebab..753a0a6 100644 --- a/windows/generated_def/winfuncs.py +++ b/windows/generated_def/winfuncs.py @@ -6,7 +6,7 @@ from ctypes.wintypes import * from winstructs import * -functions = ['ExitProcess', 'TerminateProcess', 'GetLastError', 'GetCurrentProcess', 'CreateFileA', 'CreateFileW', 'NtCreateFile', 'LdrLoadDll', 'NtQuerySystemInformation', 'NtQueryInformationProcess', 'NtQueryVirtualMemory', 'NtCreateThreadEx', 'NtQueryInformationThread', 'GetExitCodeThread', 'GetExitCodeProcess', 'VirtualAlloc', 'VirtualAllocEx', 'NtProtectVirtualMemory', 'VirtualFree', 'VirtualFreeEx', 'VirtualProtect', 'VirtualProtectEx', 'VirtualQuery', 'VirtualQueryEx', 'QueryWorkingSet', 'QueryWorkingSetEx', 'GetModuleFileNameA', 'GetModuleFileNameW', 'CreateThread', 'CreateRemoteThread', 'VirtualProtect', 'CreateProcessA', 'CreateProcessW', 'GetThreadContext', 'NtGetContextThread', 'SetThreadContext', 'NtSetContextThread', 'OpenThread', 'OpenProcess', 'CloseHandle', 'ReadProcessMemory', 'NtWow64ReadVirtualMemory64', 'WriteProcessMemory', 'NtWow64WriteVirtualMemory64', 'CreateToolhelp32Snapshot', 'Thread32First', 'Thread32Next', 'Process32First', 'Process32Next', 'Process32FirstW', 'Process32NextW', 'GetProcAddress', 'LoadLibraryA', 'LoadLibraryW', 'OpenProcessToken', 'LookupPrivilegeValueA', 'LookupPrivilegeValueW', 'AdjustTokenPrivileges', 'FindResourceA', 'FindResourceW', 'SizeofResource', 'LoadResource', 'LockResource', 'GetVersionExA', 'GetVersionExW', 'GetVersion', 'GetCurrentThread', 'GetCurrentThreadId', 'GetCurrentProcessorNumber', 'AllocConsole', 'FreeConsole', 'GetStdHandle', 'SetStdHandle', 'SetThreadAffinityMask', 'ReadFile', 'WriteFile', 'GetExtendedTcpTable', 'GetExtendedUdpTable', 'SetTcpEntry', 'AddVectoredContinueHandler', 'AddVectoredExceptionHandler', 'TerminateThread', 'ExitThread', 'RemoveVectoredExceptionHandler', 'ResumeThread', 'SuspendThread', 'WaitForSingleObject', 'GetThreadId', 'LoadLibraryExA', 'LoadLibraryExW', 'SymInitialize', 'SymFromName', 'SymLoadModuleEx', 'SymSetOptions', 'SymGetTypeInfo', 'DeviceIoControl', 'GetTokenInformation', 'RegOpenKeyExA', 'RegOpenKeyExW', 'RegGetValueA', 'RegGetValueW', 'RegCloseKey', 'Wow64DisableWow64FsRedirection', 'Wow64RevertWow64FsRedirection', 'Wow64EnableWow64FsRedirection', 'Wow64GetThreadContext', 'SetConsoleCtrlHandler', 'WinVerifyTrust', 'GlobalAlloc', 'GlobalFree', 'GlobalUnlock', 'GlobalLock', 'OpenClipboard', 'EmptyClipboard', 'CloseClipboard', 'SetClipboardData', 'GetClipboardData', 'EnumClipboardFormats', 'GetClipboardFormatNameA', 'GetClipboardFormatNameW', 'WinVerifyTrust', 'OpenProcessToken', 'OpenThreadToken', 'GetTokenInformation', 'SetTokenInformation', 'GetSidIdentifierAuthority', 'GetSidSubAuthority', 'GetSidSubAuthorityCount', 'DebugBreak', 'WaitForDebugEvent', 'ContinueDebugEvent', 'DebugActiveProcess', 'DebugActiveProcessStop', 'DebugSetProcessKillOnExit', 'DebugBreakProcess', 'GetProcessId', 'Wow64SetThreadContext', 'GetMappedFileNameW', 'GetMappedFileNameA', 'RtlInitString', 'RtlInitUnicodeString', 'RtlAnsiStringToUnicodeString', 'OpenEventA', 'OpenEventW', 'NtOpenEvent', 'NtAlpcCreatePort', 'NtAlpcConnectPort', 'NtAlpcConnectPortEx', 'NtAlpcAcceptConnectPort', 'AlpcInitializeMessageAttribute', 'AlpcGetMessageAttribute', 'NtAlpcSendWaitReceivePort', 'lstrcmpA', 'lstrcmpW', 'CreateFileMappingA', 'CreateFileMappingW', 'MapViewOfFile', 'OpenSCManagerA', 'OpenSCManagerW', 'EnumServicesStatusExA', 'EnumServicesStatusExW', 'EnumWindows', 'GetWindowTextA', 'GetWindowTextW', 'GetWindowModuleFileNameA', 'GetWindowModuleFileNameW', 'CryptCATAdminCalcHashFromFileHandle', 'CryptCATAdminEnumCatalogFromHash', 'CryptCATAdminAcquireContext', 'CryptCATCatalogInfoFromContext', 'CryptCATAdminReleaseCatalogContext', 'CryptCATAdminReleaseContext', 'GetLogicalDriveStringsA', 'GetLogicalDriveStringsW', 'GetVolumeInformationA', 'GetVolumeInformationW', 'GetVolumeNameForVolumeMountPointA', 'GetVolumeNameForVolumeMountPointW', 'GetDriveTypeA', 'GetDriveTypeW', 'QueryDosDeviceA', 'QueryDosDeviceW', 'NtQueryObject', 'DuplicateHandle', 'GetModuleBaseNameA', 'GetModuleBaseNameW', 'GetProcessImageFileNameA', 'GetProcessImageFileNameW', 'GetFileVersionInfoA', 'GetFileVersionInfoW', 'GetFileVersionInfoSizeA', 'GetFileVersionInfoSizeW', 'VerQueryValueA', 'VerQueryValueW', 'GetSystemMetrics', 'GetComputerNameA', 'GetComputerNameW', 'LookupAccountSidA', 'LookupAccountSidW', 'CoInitializeEx', 'CoInitializeSecurity', 'CoCreateInstance', 'GetInterfaceInfo', 'GetIfTable', 'GetIpAddrTable', 'NtOpenDirectoryObject', 'NtQueryDirectoryObject', 'NtQuerySymbolicLinkObject', 'NtOpenSymbolicLinkObject', 'GetProcessTimes', 'GetShortPathNameA', 'GetShortPathNameW', 'GetLongPathNameA', 'GetLongPathNameW', 'GetProcessDEPPolicy', 'CryptQueryObject', 'CryptMsgGetParam', 'CryptDecodeObject', 'CertFindCertificateInStore', 'CertGetNameStringA', 'CertGetNameStringW', 'CertGetCertificateChain', 'CertCreateSelfSignCertificate', 'CertStrToNameA', 'CertStrToNameW', 'CertOpenStore', 'CertAddCertificateContextToStore', 'PFXExportCertStoreEx', 'PFXImportCertStore', 'CryptGenKey', 'CryptAcquireContextA', 'CryptAcquireContextW', 'CryptExportKey', 'CertGetCertificateContextProperty', 'CertEnumCertificateContextProperties', 'CryptEncryptMessage', 'CryptDecryptMessage', 'CryptAcquireCertificatePrivateKey', 'CertDuplicateCertificateContext', 'CertEnumCertificatesInStore', 'CryptEncodeObjectEx'] +functions = ['ExitProcess', 'TerminateProcess', 'GetLastError', 'GetCurrentProcess', 'CreateFileA', 'CreateFileW', 'NtCreateFile', 'LdrLoadDll', 'NtQuerySystemInformation', 'NtQueryInformationProcess', 'NtQueryVirtualMemory', 'NtCreateThreadEx', 'NtQueryInformationThread', 'GetExitCodeThread', 'GetExitCodeProcess', 'VirtualAlloc', 'VirtualAllocEx', 'NtProtectVirtualMemory', 'VirtualFree', 'VirtualFreeEx', 'VirtualProtect', 'VirtualProtectEx', 'VirtualQuery', 'VirtualQueryEx', 'QueryWorkingSet', 'QueryWorkingSetEx', 'GetModuleFileNameA', 'GetModuleFileNameW', 'CreateThread', 'CreateRemoteThread', 'VirtualProtect', 'CreateProcessA', 'CreateProcessW', 'GetThreadContext', 'NtGetContextThread', 'SetThreadContext', 'NtSetContextThread', 'OpenThread', 'OpenProcess', 'CloseHandle', 'ReadProcessMemory', 'NtWow64ReadVirtualMemory64', 'WriteProcessMemory', 'NtWow64WriteVirtualMemory64', 'CreateToolhelp32Snapshot', 'Thread32First', 'Thread32Next', 'Process32First', 'Process32Next', 'Process32FirstW', 'Process32NextW', 'GetProcAddress', 'LoadLibraryA', 'LoadLibraryW', 'OpenProcessToken', 'LookupPrivilegeValueA', 'LookupPrivilegeValueW', 'AdjustTokenPrivileges', 'FindResourceA', 'FindResourceW', 'SizeofResource', 'LoadResource', 'LockResource', 'GetVersionExA', 'GetVersionExW', 'GetVersion', 'GetCurrentThread', 'GetCurrentThreadId', 'GetCurrentProcessorNumber', 'AllocConsole', 'FreeConsole', 'GetStdHandle', 'SetStdHandle', 'SetThreadAffinityMask', 'ReadFile', 'WriteFile', 'GetExtendedTcpTable', 'GetExtendedUdpTable', 'SetTcpEntry', 'AddVectoredContinueHandler', 'AddVectoredExceptionHandler', 'TerminateThread', 'ExitThread', 'RemoveVectoredExceptionHandler', 'ResumeThread', 'SuspendThread', 'WaitForSingleObject', 'GetThreadId', 'LoadLibraryExA', 'LoadLibraryExW', 'SymInitialize', 'SymFromName', 'SymLoadModuleEx', 'SymSetOptions', 'SymGetTypeInfo', 'DeviceIoControl', 'GetTokenInformation', 'RegOpenKeyExA', 'RegOpenKeyExW', 'RegGetValueA', 'RegGetValueW', 'RegCloseKey', 'Wow64DisableWow64FsRedirection', 'Wow64RevertWow64FsRedirection', 'Wow64EnableWow64FsRedirection', 'Wow64GetThreadContext', 'SetConsoleCtrlHandler', 'WinVerifyTrust', 'GlobalAlloc', 'GlobalFree', 'GlobalUnlock', 'GlobalLock', 'OpenClipboard', 'EmptyClipboard', 'CloseClipboard', 'SetClipboardData', 'GetClipboardData', 'EnumClipboardFormats', 'GetClipboardFormatNameA', 'GetClipboardFormatNameW', 'WinVerifyTrust', 'OpenProcessToken', 'OpenThreadToken', 'GetTokenInformation', 'SetTokenInformation', 'GetSidIdentifierAuthority', 'GetSidSubAuthority', 'GetSidSubAuthorityCount', 'DebugBreak', 'WaitForDebugEvent', 'ContinueDebugEvent', 'DebugActiveProcess', 'DebugActiveProcessStop', 'DebugSetProcessKillOnExit', 'DebugBreakProcess', 'GetProcessId', 'Wow64SetThreadContext', 'GetMappedFileNameW', 'GetMappedFileNameA', 'RtlInitString', 'RtlInitUnicodeString', 'RtlAnsiStringToUnicodeString', 'OpenEventA', 'OpenEventW', 'NtOpenEvent', 'NtAlpcCreatePort', 'NtAlpcConnectPort', 'NtAlpcConnectPortEx', 'NtAlpcAcceptConnectPort', 'AlpcInitializeMessageAttribute', 'AlpcGetMessageAttribute', 'NtAlpcSendWaitReceivePort', 'lstrcmpA', 'lstrcmpW', 'CreateFileMappingA', 'CreateFileMappingW', 'MapViewOfFile', 'OpenSCManagerA', 'OpenSCManagerW', 'EnumServicesStatusExA', 'EnumServicesStatusExW', 'EnumWindows', 'GetWindowTextA', 'GetWindowTextW', 'GetWindowModuleFileNameA', 'GetWindowModuleFileNameW', 'CryptCATAdminCalcHashFromFileHandle', 'CryptCATAdminEnumCatalogFromHash', 'CryptCATAdminAcquireContext', 'CryptCATCatalogInfoFromContext', 'CryptCATAdminReleaseCatalogContext', 'CryptCATAdminReleaseContext', 'GetLogicalDriveStringsA', 'GetLogicalDriveStringsW', 'GetVolumeInformationA', 'GetVolumeInformationW', 'GetVolumeNameForVolumeMountPointA', 'GetVolumeNameForVolumeMountPointW', 'GetDriveTypeA', 'GetDriveTypeW', 'QueryDosDeviceA', 'QueryDosDeviceW', 'NtQueryObject', 'DuplicateHandle', 'GetModuleBaseNameA', 'GetModuleBaseNameW', 'GetProcessImageFileNameA', 'GetProcessImageFileNameW', 'GetFileVersionInfoA', 'GetFileVersionInfoW', 'GetFileVersionInfoSizeA', 'GetFileVersionInfoSizeW', 'VerQueryValueA', 'VerQueryValueW', 'GetSystemMetrics', 'GetComputerNameA', 'GetComputerNameW', 'LookupAccountSidA', 'LookupAccountSidW', 'CoInitializeEx', 'CoInitializeSecurity', 'CoCreateInstance', 'GetInterfaceInfo', 'GetIfTable', 'GetIpAddrTable', 'NtOpenDirectoryObject', 'NtQueryDirectoryObject', 'NtQuerySymbolicLinkObject', 'NtOpenSymbolicLinkObject', 'GetProcessTimes', 'GetShortPathNameA', 'GetShortPathNameW', 'GetLongPathNameA', 'GetLongPathNameW', 'GetProcessDEPPolicy', 'CryptQueryObject', 'CryptMsgGetParam', 'CryptDecodeObject', 'CertFindCertificateInStore', 'CertGetNameStringA', 'CertGetNameStringW', 'CertGetCertificateChain', 'CertCreateSelfSignCertificate', 'CertStrToNameA', 'CertStrToNameW', 'CertOpenStore', 'CertAddCertificateContextToStore', 'PFXExportCertStoreEx', 'PFXImportCertStore', 'CryptGenKey', 'CryptAcquireContextA', 'CryptAcquireContextW', 'CryptExportKey', 'CertGetCertificateContextProperty', 'CertEnumCertificateContextProperties', 'CryptEncryptMessage', 'CryptDecryptMessage', 'CryptAcquireCertificatePrivateKey', 'CertDuplicateCertificateContext', 'CertEnumCertificatesInStore', 'CryptEncodeObjectEx', 'CertCreateCertificateContext'] #def ExitProcess(uExitCode): @@ -1213,3 +1213,8 @@ CertEnumCertificatesInStoreParams = ((1, 'hCertStore'), (1, 'pPrevCertContext')) # return CryptEncodeObjectEx.ctypes_function(dwCertEncodingType, lpszStructType, pvStructInfo, dwFlags, pEncodePara, pvEncoded, pcbEncoded) CryptEncodeObjectExPrototype = WINFUNCTYPE(BOOL, DWORD, LPCSTR, PVOID, DWORD, PCRYPT_ENCODE_PARA, PVOID, POINTER(DWORD)) CryptEncodeObjectExParams = ((1, 'dwCertEncodingType'), (1, 'lpszStructType'), (1, 'pvStructInfo'), (1, 'dwFlags'), (1, 'pEncodePara'), (1, 'pvEncoded'), (1, 'pcbEncoded')) + +#def CertCreateCertificateContext(dwCertEncodingType, pbCertEncoded, cbCertEncoded): +# return CertCreateCertificateContext.ctypes_function(dwCertEncodingType, pbCertEncoded, cbCertEncoded) +CertCreateCertificateContextPrototype = WINFUNCTYPE(PCCERT_CONTEXT, DWORD, POINTER(BYTE), DWORD) +CertCreateCertificateContextParams = ((1, 'dwCertEncodingType'), (1, 'pbCertEncoded'), (1, 'cbCertEncoded')) diff --git a/windows/test/mytest.py b/windows/test/mytest.py index 217ce22..0b13d8b 100644 --- a/windows/test/mytest.py +++ b/windows/test/mytest.py @@ -533,6 +533,10 @@ class WindowsAPITestCase(unittest.TestCase): with self.assertRaises(WindowsError) as ar: windows.winproxy.CreateFileA("NONEXISTFILE.FILE") +class GeneratedCodeTestCase(unittest.TestCase): + def test_str_flags_value(self): + self.assertEqual(windows.generated_def.MS_ENHANCED_PROV, windows.generated_def.MS_ENHANCED_PROV_A) + class NativeUtilsTestCase(unittest.TestCase): @process_64bit_only def test_strlenw64(self): @@ -595,6 +599,7 @@ if __name__ == '__main__': alltests.addTest(unittest.makeSuite(WindowsTestCase)) alltests.addTest(unittest.makeSuite(WindowsAPITestCase)) alltests.addTest(unittest.makeSuite(NativeUtilsTestCase)) + alltests.addTest(unittest.makeSuite(GeneratedCodeTestCase)) alltests.debug() tester = unittest.TextTestRunner(verbosity=2) tester.run(alltests) diff --git a/windows/winproxy.py b/windows/winproxy.py index 7006a1a..501fa77 100644 --- a/windows/winproxy.py +++ b/windows/winproxy.py @@ -1015,6 +1015,8 @@ def CertCreateSelfSignCertificate(hCryptProvOrNCryptKey, pSubjectIssuerBlob, dwF @Crypt32Proxy('CertOpenStore') def CertOpenStore(lpszStoreProvider, dwMsgAndCertEncodingType, hCryptProv, dwFlags, pvPara): + if isinstance(lpszStoreProvider, (long, int)): + lpszStoreProvider = LPCSTR(lpszStoreProvider) return CertOpenStore.ctypes_function(lpszStoreProvider, dwMsgAndCertEncodingType, hCryptProv, dwFlags, pvPara) @@ -1113,8 +1115,13 @@ def CertEnumCertificatesInStore(hCertStore, pPrevCertContext): @Crypt32Proxy('CryptEncodeObjectEx') def CryptEncodeObjectEx(dwCertEncodingType, lpszStructType, pvStructInfo, dwFlags, pEncodePara, pvEncoded, pcbEncoded): + lpszStructType = LPCSTR(lpszStructType) if isinstance(lpszStructType, (int, long)) else lpszStructType return CryptEncodeObjectEx.ctypes_function(dwCertEncodingType, lpszStructType, pvStructInfo, dwFlags, pEncodePara, pvEncoded, pcbEncoded) +@Crypt32Proxy('CertCreateCertificateContext') +def CertCreateCertificateContext(dwCertEncodingType, pbCertEncoded, cbCertEncoded): + return CertCreateCertificateContext.ctypes_function(dwCertEncodingType, pbCertEncoded, cbCertEncoded) + # ## User32 stuff ## # EnumWindows = TransparentUser32Proxy('EnumWindows')