mirror of
https://github.com/hakril/PythonForWindows
synced 2026-06-08 14:31:45 +00:00
still Working on windows.crypto object + API + test
This commit is contained in:
committed by
Clement Rouault
parent
68e809728a
commit
98bc95204d
@@ -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
|
||||
|
||||
@@ -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
|
||||
);
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
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 *
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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 ))
|
||||
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)
|
||||
File diff suppressed because one or more lines are too long
@@ -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)
|
||||
|
||||
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user