still Working on windows.crypto object + API + test

This commit is contained in:
Clement Rouault
2016-12-30 18:03:51 +01:00
committed by Clement Rouault
parent 68e809728a
commit 98bc95204d
9 changed files with 417 additions and 16 deletions
@@ -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
);
+2
View File
@@ -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):
+4 -2
View File
@@ -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 *
+39 -2
View File
@@ -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):
+150 -1
View File
@@ -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
+5
View File
@@ -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)
+7
View File
@@ -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')