"Fossies" - the Fresh Open Source Software Archive

Member "FreeBASIC-1.09.0-win64/inc/win/wincrypt.bi" (1 Jan 2022, 275124 Bytes) of package /windows/misc/FreeBASIC-1.09.0-win64.zip:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Visual Basic source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

A hint: This file contains one or more very long lines, so maybe it is better readable using the pure text view mode that shows the contents as wrapped lines within the browser window.


    1 '' FreeBASIC binding for mingw-w64-v4.0.4
    2 ''
    3 '' based on the C header files:
    4 ''   DISCLAIMER
    5 ''   This file has no copyright assigned and is placed in the Public Domain.
    6 ''   This file is part of the mingw-w64 runtime package.
    7 ''
    8 ''   The mingw-w64 runtime package and its code is distributed in the hope that it 
    9 ''   will be useful but WITHOUT ANY WARRANTY.  ALL WARRANTIES, EXPRESSED OR 
   10 ''   IMPLIED ARE HEREBY DISCLAIMED.  This includes but is not limited to 
   11 ''   warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   12 ''
   13 '' translated to FreeBASIC by:
   14 ''   Copyright © 2015 FreeBASIC development team
   15 
   16 #pragma once
   17 
   18 #include once "_mingw.bi"
   19 #include once "_mingw_unicode.bi"
   20 #include once "guiddef.bi"
   21 #include once "winapifamily.bi"
   22 
   23 extern "Windows"
   24 
   25 #define __WINCRYPT_H__
   26 #define GET_ALG_CLASS(x) (x and (7 shl 13))
   27 #define GET_ALG_TYPE(x) (x and (15 shl 9))
   28 #define GET_ALG_SID(x) (x and 511)
   29 const ALG_CLASS_ANY = 0
   30 const ALG_CLASS_SIGNATURE = 1 shl 13
   31 const ALG_CLASS_MSG_ENCRYPT = 2 shl 13
   32 const ALG_CLASS_DATA_ENCRYPT = 3 shl 13
   33 const ALG_CLASS_HASH = 4 shl 13
   34 const ALG_CLASS_KEY_EXCHANGE = 5 shl 13
   35 const ALG_CLASS_ALL = 7 shl 13
   36 const ALG_TYPE_ANY = 0
   37 const ALG_TYPE_DSS = 1 shl 9
   38 const ALG_TYPE_RSA = 2 shl 9
   39 const ALG_TYPE_BLOCK = 3 shl 9
   40 const ALG_TYPE_STREAM = 4 shl 9
   41 const ALG_TYPE_DH = 5 shl 9
   42 const ALG_TYPE_SECURECHANNEL = 6 shl 9
   43 const ALG_SID_ANY = 0
   44 const ALG_SID_RSA_ANY = 0
   45 const ALG_SID_RSA_PKCS = 1
   46 const ALG_SID_RSA_MSATWORK = 2
   47 const ALG_SID_RSA_ENTRUST = 3
   48 const ALG_SID_RSA_PGP = 4
   49 const ALG_SID_DSS_ANY = 0
   50 const ALG_SID_DSS_PKCS = 1
   51 const ALG_SID_DSS_DMS = 2
   52 
   53 #if _WIN32_WINNT >= &h0600
   54     const ALG_SID_ECDSA = 3
   55 #endif
   56 
   57 const ALG_SID_DES = 1
   58 const ALG_SID_3DES = 3
   59 const ALG_SID_DESX = 4
   60 const ALG_SID_IDEA = 5
   61 const ALG_SID_CAST = 6
   62 const ALG_SID_SAFERSK64 = 7
   63 const ALG_SID_SAFERSK128 = 8
   64 const ALG_SID_3DES_112 = 9
   65 const ALG_SID_SKIPJACK = 10
   66 const ALG_SID_TEK = 11
   67 const ALG_SID_CYLINK_MEK = 12
   68 const ALG_SID_RC5 = 13
   69 const ALG_SID_AES_128 = 14
   70 const ALG_SID_AES_192 = 15
   71 const ALG_SID_AES_256 = 16
   72 const ALG_SID_AES = 17
   73 const CRYPT_MODE_CBCI = 6
   74 const CRYPT_MODE_CFBP = 7
   75 const CRYPT_MODE_OFBP = 8
   76 const CRYPT_MODE_CBCOFM = 9
   77 const CRYPT_MODE_CBCOFMI = 10
   78 const ALG_SID_RC2 = 2
   79 const ALG_SID_RC4 = 1
   80 const ALG_SID_SEAL = 2
   81 const ALG_SID_DH_SANDF = 1
   82 const ALG_SID_DH_EPHEM = 2
   83 const ALG_SID_AGREED_KEY_ANY = 3
   84 const ALG_SID_KEA = 4
   85 
   86 #if _WIN32_WINNT >= &h0600
   87     const ALG_SID_ECDH = 5
   88 #endif
   89 
   90 const ALG_SID_MD2 = 1
   91 const ALG_SID_MD4 = 2
   92 const ALG_SID_MD5 = 3
   93 const ALG_SID_SHA = 4
   94 const ALG_SID_SHA1 = 4
   95 const ALG_SID_MAC = 5
   96 const ALG_SID_RIPEMD = 6
   97 const ALG_SID_RIPEMD160 = 7
   98 const ALG_SID_SSL3SHAMD5 = 8
   99 const ALG_SID_HMAC = 9
  100 const ALG_SID_TLS1PRF = 10
  101 const ALG_SID_HASH_REPLACE_OWF = 11
  102 const ALG_SID_SHA_256 = 12
  103 const ALG_SID_SHA_384 = 13
  104 const ALG_SID_SHA_512 = 14
  105 const ALG_SID_SSL3_MASTER = 1
  106 const ALG_SID_SCHANNEL_MASTER_HASH = 2
  107 const ALG_SID_SCHANNEL_MAC_KEY = 3
  108 const ALG_SID_PCT1_MASTER = 4
  109 const ALG_SID_SSL2_MASTER = 5
  110 const ALG_SID_TLS1_MASTER = 6
  111 const ALG_SID_SCHANNEL_ENC_KEY = 7
  112 
  113 #if _WIN32_WINNT >= &h0600
  114     const ALG_SID_ECMQV = 1
  115 #endif
  116 
  117 const ALG_SID_EXAMPLE = 80
  118 #define ALGIDDEF
  119 type ALG_ID as ulong
  120 const CALG_MD2 = (ALG_CLASS_HASH or ALG_TYPE_ANY) or ALG_SID_MD2
  121 const CALG_MD4 = (ALG_CLASS_HASH or ALG_TYPE_ANY) or ALG_SID_MD4
  122 const CALG_MD5 = (ALG_CLASS_HASH or ALG_TYPE_ANY) or ALG_SID_MD5
  123 const CALG_SHA = (ALG_CLASS_HASH or ALG_TYPE_ANY) or ALG_SID_SHA
  124 const CALG_SHA1 = (ALG_CLASS_HASH or ALG_TYPE_ANY) or ALG_SID_SHA1
  125 const CALG_MAC = (ALG_CLASS_HASH or ALG_TYPE_ANY) or ALG_SID_MAC
  126 const CALG_RSA_SIGN = (ALG_CLASS_SIGNATURE or ALG_TYPE_RSA) or ALG_SID_RSA_ANY
  127 const CALG_DSS_SIGN = (ALG_CLASS_SIGNATURE or ALG_TYPE_DSS) or ALG_SID_DSS_ANY
  128 const CALG_NO_SIGN = (ALG_CLASS_SIGNATURE or ALG_TYPE_ANY) or ALG_SID_ANY
  129 const CALG_RSA_KEYX = (ALG_CLASS_KEY_EXCHANGE or ALG_TYPE_RSA) or ALG_SID_RSA_ANY
  130 const CALG_DES = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK) or ALG_SID_DES
  131 const CALG_3DES_112 = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK) or ALG_SID_3DES_112
  132 const CALG_3DES = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK) or ALG_SID_3DES
  133 const CALG_DESX = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK) or ALG_SID_DESX
  134 const CALG_RC2 = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK) or ALG_SID_RC2
  135 const CALG_RC4 = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_STREAM) or ALG_SID_RC4
  136 const CALG_SEAL = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_STREAM) or ALG_SID_SEAL
  137 const CALG_DH_SF = (ALG_CLASS_KEY_EXCHANGE or ALG_TYPE_DH) or ALG_SID_DH_SANDF
  138 const CALG_DH_EPHEM = (ALG_CLASS_KEY_EXCHANGE or ALG_TYPE_DH) or ALG_SID_DH_EPHEM
  139 const CALG_AGREEDKEY_ANY = (ALG_CLASS_KEY_EXCHANGE or ALG_TYPE_DH) or ALG_SID_AGREED_KEY_ANY
  140 const CALG_KEA_KEYX = (ALG_CLASS_KEY_EXCHANGE or ALG_TYPE_DH) or ALG_SID_KEA
  141 const CALG_HUGHES_MD5 = (ALG_CLASS_KEY_EXCHANGE or ALG_TYPE_ANY) or ALG_SID_MD5
  142 const CALG_SKIPJACK = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK) or ALG_SID_SKIPJACK
  143 const CALG_TEK = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK) or ALG_SID_TEK
  144 const CALG_CYLINK_MEK = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK) or ALG_SID_CYLINK_MEK
  145 const CALG_SSL3_SHAMD5 = (ALG_CLASS_HASH or ALG_TYPE_ANY) or ALG_SID_SSL3SHAMD5
  146 const CALG_SSL3_MASTER = (ALG_CLASS_MSG_ENCRYPT or ALG_TYPE_SECURECHANNEL) or ALG_SID_SSL3_MASTER
  147 const CALG_SCHANNEL_MASTER_HASH = (ALG_CLASS_MSG_ENCRYPT or ALG_TYPE_SECURECHANNEL) or ALG_SID_SCHANNEL_MASTER_HASH
  148 const CALG_SCHANNEL_MAC_KEY = (ALG_CLASS_MSG_ENCRYPT or ALG_TYPE_SECURECHANNEL) or ALG_SID_SCHANNEL_MAC_KEY
  149 const CALG_SCHANNEL_ENC_KEY = (ALG_CLASS_MSG_ENCRYPT or ALG_TYPE_SECURECHANNEL) or ALG_SID_SCHANNEL_ENC_KEY
  150 const CALG_PCT1_MASTER = (ALG_CLASS_MSG_ENCRYPT or ALG_TYPE_SECURECHANNEL) or ALG_SID_PCT1_MASTER
  151 const CALG_SSL2_MASTER = (ALG_CLASS_MSG_ENCRYPT or ALG_TYPE_SECURECHANNEL) or ALG_SID_SSL2_MASTER
  152 const CALG_TLS1_MASTER = (ALG_CLASS_MSG_ENCRYPT or ALG_TYPE_SECURECHANNEL) or ALG_SID_TLS1_MASTER
  153 const CALG_RC5 = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK) or ALG_SID_RC5
  154 const CALG_HMAC = (ALG_CLASS_HASH or ALG_TYPE_ANY) or ALG_SID_HMAC
  155 const CALG_TLS1PRF = (ALG_CLASS_HASH or ALG_TYPE_ANY) or ALG_SID_TLS1PRF
  156 const CALG_HASH_REPLACE_OWF = (ALG_CLASS_HASH or ALG_TYPE_ANY) or ALG_SID_HASH_REPLACE_OWF
  157 const CALG_AES_128 = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK) or ALG_SID_AES_128
  158 const CALG_AES_192 = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK) or ALG_SID_AES_192
  159 const CALG_AES_256 = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK) or ALG_SID_AES_256
  160 const CALG_AES = (ALG_CLASS_DATA_ENCRYPT or ALG_TYPE_BLOCK) or ALG_SID_AES
  161 const CALG_SHA_256 = (ALG_CLASS_HASH or ALG_TYPE_ANY) or ALG_SID_SHA_256
  162 const CALG_SHA_384 = (ALG_CLASS_HASH or ALG_TYPE_ANY) or ALG_SID_SHA_384
  163 const CALG_SHA_512 = (ALG_CLASS_HASH or ALG_TYPE_ANY) or ALG_SID_SHA_512
  164 
  165 #if _WIN32_WINNT >= &h0600
  166     const CALG_ECDH = (ALG_CLASS_KEY_EXCHANGE or ALG_TYPE_DH) or ALG_SID_ECDH
  167     const CALG_ECMQV = (ALG_CLASS_KEY_EXCHANGE or ALG_TYPE_ANY) or ALG_SID_ECMQV
  168     const CALG_ECDSA = (ALG_CLASS_SIGNATURE or ALG_TYPE_DSS) or ALG_SID_ECDSA
  169 #endif
  170 
  171 #define HCRYPTPROV_DEFINED
  172 type HCRYPTHASH as ULONG_PTR
  173 type HCRYPTKEY as ULONG_PTR
  174 type HCRYPTPROV as ULONG_PTR
  175 
  176 const CRYPT_VERIFYCONTEXT = &hf0000000
  177 const CRYPT_NEWKEYSET = &h8
  178 const CRYPT_DELETEKEYSET = &h10
  179 const CRYPT_MACHINE_KEYSET = &h20
  180 const CRYPT_SILENT = &h40
  181 
  182 #if _WIN32_WINNT >= &h0600
  183     const CRYPT_DEFAULT_CONTAINER_OPTIONAL = &h80
  184 #endif
  185 
  186 const CRYPT_EXPORTABLE = &h1
  187 const CRYPT_USER_PROTECTED = &h2
  188 const CRYPT_CREATE_SALT = &h4
  189 const CRYPT_UPDATE_KEY = &h8
  190 const CRYPT_NO_SALT = &h10
  191 const CRYPT_PREGEN = &h40
  192 const CRYPT_RECIPIENT = &h10
  193 const CRYPT_INITIATOR = &h40
  194 const CRYPT_ONLINE = &h80
  195 const CRYPT_SF = &h100
  196 const CRYPT_CREATE_IV = &h200
  197 const CRYPT_KEK = &h400
  198 const CRYPT_DATA_KEY = &h800
  199 const CRYPT_VOLATILE = &h1000
  200 const CRYPT_SGCKEY = &h2000
  201 const CRYPT_ARCHIVABLE = &h4000
  202 
  203 #if _WIN32_WINNT >= &h0600
  204     const CRYPT_FORCE_KEY_PROTECTION_HIGH = &h8000
  205 #endif
  206 
  207 const CRYPT_USER_PROTECTED_STRONG = &h100000
  208 const RSA1024BIT_KEY = &h4000000
  209 const CRYPT_SERVER = &h400
  210 const KEY_LENGTH_MASK = &hffff0000
  211 const CRYPT_Y_ONLY = &h1
  212 const CRYPT_SSL2_FALLBACK = &h2
  213 const CRYPT_DESTROYKEY = &h4
  214 const CRYPT_DECRYPT_RSA_NO_PADDING_CHECK = &h20
  215 const CRYPT_OAEP = &h40
  216 const CRYPT_BLOB_VER3 = &h80
  217 const CRYPT_IPSEC_HMAC_KEY = &h100
  218 const CRYPT_SECRETDIGEST = &h1
  219 const CRYPT_OWF_REPL_LM_HASH = &h1
  220 const CRYPT_LITTLE_ENDIAN = &h1
  221 const CRYPT_NOHASHOID = &h1
  222 const CRYPT_TYPE2_FORMAT = &h2
  223 const CRYPT_X931_FORMAT = &h4
  224 const CRYPT_MACHINE_DEFAULT = &h1
  225 const CRYPT_USER_DEFAULT = &h2
  226 const CRYPT_DELETE_DEFAULT = &h4
  227 const SIMPLEBLOB = &h1
  228 const PUBLICKEYBLOB = &h6
  229 const PRIVATEKEYBLOB = &h7
  230 const PLAINTEXTKEYBLOB = &h8
  231 const OPAQUEKEYBLOB = &h9
  232 const PUBLICKEYBLOBEX = &ha
  233 const SYMMETRICWRAPKEYBLOB = &hb
  234 const KEYSTATEBLOB = &hc
  235 const AT_KEYEXCHANGE = 1
  236 const AT_SIGNATURE = 2
  237 const CRYPT_USERDATA = 1
  238 const KP_IV = 1
  239 const KP_SALT = 2
  240 const KP_PADDING = 3
  241 const KP_MODE = 4
  242 const KP_MODE_BITS = 5
  243 const KP_PERMISSIONS = 6
  244 const KP_ALGID = 7
  245 const KP_BLOCKLEN = 8
  246 const KP_KEYLEN = 9
  247 const KP_SALT_EX = 10
  248 const KP_P = 11
  249 const KP_G = 12
  250 const KP_Q = 13
  251 const KP_X = 14
  252 const KP_Y = 15
  253 const KP_RA = 16
  254 const KP_RB = 17
  255 const KP_INFO = 18
  256 const KP_EFFECTIVE_KEYLEN = 19
  257 const KP_SCHANNEL_ALG = 20
  258 const KP_CLIENT_RANDOM = 21
  259 const KP_SERVER_RANDOM = 22
  260 const KP_RP = 23
  261 const KP_PRECOMP_MD5 = 24
  262 const KP_PRECOMP_SHA = 25
  263 const KP_CERTIFICATE = 26
  264 const KP_CLEAR_KEY = 27
  265 const KP_PUB_EX_LEN = 28
  266 const KP_PUB_EX_VAL = 29
  267 const KP_KEYVAL = 30
  268 const KP_ADMIN_PIN = 31
  269 const KP_KEYEXCHANGE_PIN = 32
  270 const KP_SIGNATURE_PIN = 33
  271 const KP_PREHASH = 34
  272 const KP_ROUNDS = 35
  273 const KP_OAEP_PARAMS = 36
  274 const KP_CMS_KEY_INFO = 37
  275 const KP_CMS_DH_KEY_INFO = 38
  276 const KP_PUB_PARAMS = 39
  277 const KP_VERIFY_PARAMS = 40
  278 const KP_HIGHEST_VERSION = 41
  279 const KP_GET_USE_COUNT = 42
  280 const KP_PIN_ID = 43
  281 const KP_PIN_INFO = 44
  282 const PKCS5_PADDING = 1
  283 const RANDOM_PADDING = 2
  284 const ZERO_PADDING = 3
  285 const CRYPT_MODE_CBC = 1
  286 const CRYPT_MODE_ECB = 2
  287 const CRYPT_MODE_OFB = 3
  288 const CRYPT_MODE_CFB = 4
  289 const CRYPT_MODE_CTS = 5
  290 const CRYPT_ENCRYPT = &h1
  291 const CRYPT_DECRYPT = &h2
  292 const CRYPT_EXPORT = &h4
  293 const CRYPT_READ = &h8
  294 const CRYPT_WRITE = &h10
  295 const CRYPT_MAC = &h20
  296 const CRYPT_EXPORT_KEY = &h40
  297 const CRYPT_IMPORT_KEY = &h80
  298 const CRYPT_ARCHIVE = &h100
  299 const HP_ALGID = &h1
  300 const HP_HASHVAL = &h2
  301 const HP_HASHSIZE = &h4
  302 const HP_HMAC_INFO = &h5
  303 const HP_TLS1PRF_LABEL = &h6
  304 const HP_TLS1PRF_SEED = &h7
  305 const CRYPT_FAILED = FALSE
  306 const CRYPT_SUCCEED = CTRUE
  307 #define RCRYPT_SUCCEEDED(RT) ((RT) = CRYPT_SUCCEED)
  308 #define RCRYPT_FAILED(RT) ((RT) = CRYPT_FAILED)
  309 const PP_ENUMALGS = 1
  310 const PP_ENUMCONTAINERS = 2
  311 const PP_IMPTYPE = 3
  312 const PP_NAME = 4
  313 const PP_VERSION = 5
  314 const PP_CONTAINER = 6
  315 const PP_CHANGE_PASSWORD = 7
  316 const PP_KEYSET_SEC_DESCR = 8
  317 const PP_CERTCHAIN = 9
  318 const PP_KEY_TYPE_SUBTYPE = 10
  319 const PP_PROVTYPE = 16
  320 const PP_KEYSTORAGE = 17
  321 const PP_APPLI_CERT = 18
  322 const PP_SYM_KEYSIZE = 19
  323 const PP_SESSION_KEYSIZE = 20
  324 const PP_UI_PROMPT = 21
  325 const PP_ENUMALGS_EX = 22
  326 const PP_ENUMMANDROOTS = 25
  327 const PP_ENUMELECTROOTS = 26
  328 const PP_KEYSET_TYPE = 27
  329 const PP_ADMIN_PIN = 31
  330 const PP_KEYEXCHANGE_PIN = 32
  331 const PP_SIGNATURE_PIN = 33
  332 const PP_SIG_KEYSIZE_INC = 34
  333 const PP_KEYX_KEYSIZE_INC = 35
  334 const PP_UNIQUE_CONTAINER = 36
  335 const PP_SGC_INFO = 37
  336 const PP_USE_HARDWARE_RNG = 38
  337 const PP_KEYSPEC = 39
  338 const PP_ENUMEX_SIGNING_PROT = 40
  339 const PP_CRYPT_COUNT_KEY_USE = 41
  340 
  341 #if _WIN32_WINNT >= &h0600
  342     const PP_USER_CERTSTORE = 42
  343     const PP_SMARTCARD_READER = 43
  344     const PP_SMARTCARD_GUID = 45
  345     const PP_ROOT_CERTSTORE = 46
  346 #endif
  347 
  348 #if _WIN32_WINNT = &h0602
  349     const PP_SMARTCARD_READER_ICON = 47
  350 #endif
  351 
  352 const CRYPT_FIRST = 1
  353 const CRYPT_NEXT = 2
  354 const CRYPT_SGC_ENUM = 4
  355 const CRYPT_IMPL_HARDWARE = 1
  356 const CRYPT_IMPL_SOFTWARE = 2
  357 const CRYPT_IMPL_MIXED = 3
  358 const CRYPT_IMPL_UNKNOWN = 4
  359 const CRYPT_IMPL_REMOVABLE = 8
  360 const CRYPT_SEC_DESCR = &h1
  361 const CRYPT_PSTORE = &h2
  362 const CRYPT_UI_PROMPT = &h4
  363 const CRYPT_FLAG_PCT1 = &h1
  364 const CRYPT_FLAG_SSL2 = &h2
  365 const CRYPT_FLAG_SSL3 = &h4
  366 const CRYPT_FLAG_TLS1 = &h8
  367 const CRYPT_FLAG_IPSEC = &h10
  368 const CRYPT_FLAG_SIGNING = &h20
  369 const CRYPT_SGC = &h1
  370 const CRYPT_FASTSGC = &h2
  371 const PP_CLIENT_HWND = 1
  372 const PP_CONTEXT_INFO = 11
  373 const PP_KEYEXCHANGE_KEYSIZE = 12
  374 const PP_SIGNATURE_KEYSIZE = 13
  375 const PP_KEYEXCHANGE_ALG = 14
  376 const PP_SIGNATURE_ALG = 15
  377 const PP_DELETEKEY = 24
  378 
  379 #if _WIN32_WINNT >= &h0600
  380     const PP_PIN_PROMPT_STRING = 44
  381     const PP_SECURE_KEYEXCHANGE_PIN = 47
  382     const PP_SECURE_SIGNATURE_PIN = 48
  383 #endif
  384 
  385 const PROV_RSA_FULL = 1
  386 const PROV_RSA_SIG = 2
  387 const PROV_DSS = 3
  388 const PROV_FORTEZZA = 4
  389 const PROV_MS_EXCHANGE = 5
  390 const PROV_SSL = 6
  391 const PROV_STT_MER = 7
  392 const PROV_STT_ACQ = 8
  393 const PROV_STT_BRND = 9
  394 const PROV_STT_ROOT = 10
  395 const PROV_STT_ISS = 11
  396 const PROV_RSA_SCHANNEL = 12
  397 const PROV_DSS_DH = 13
  398 const PROV_EC_ECDSA_SIG = 14
  399 const PROV_EC_ECNRA_SIG = 15
  400 const PROV_EC_ECDSA_FULL = 16
  401 const PROV_EC_ECNRA_FULL = 17
  402 const PROV_DH_SCHANNEL = 18
  403 const PROV_SPYRUS_LYNKS = 20
  404 const PROV_RNG = 21
  405 const PROV_INTEL_SEC = 22
  406 const PROV_REPLACE_OWF = 23
  407 const PROV_RSA_AES = 24
  408 
  409 #ifdef UNICODE
  410     #define MS_DEF_PROV MS_DEF_PROV_W
  411     #define MS_ENHANCED_PROV MS_ENHANCED_PROV_W
  412     #define MS_STRONG_PROV MS_STRONG_PROV_W
  413     #define MS_DEF_RSA_SIG_PROV MS_DEF_RSA_SIG_PROV_W
  414     #define MS_DEF_RSA_SCHANNEL_PROV MS_DEF_RSA_SCHANNEL_PROV_W
  415     #define MS_DEF_DSS_PROV MS_DEF_DSS_PROV_W
  416     #define MS_DEF_DSS_DH_PROV MS_DEF_DSS_DH_PROV_W
  417     #define MS_ENH_DSS_DH_PROV MS_ENH_DSS_DH_PROV_W
  418     #define MS_DEF_DH_SCHANNEL_PROV MS_DEF_DH_SCHANNEL_PROV_W
  419     #define MS_SCARD_PROV MS_SCARD_PROV_W
  420     #define MS_ENH_RSA_AES_PROV_XP MS_ENH_RSA_AES_PROV_XP_W
  421     #define MS_ENH_RSA_AES_PROV MS_ENH_RSA_AES_PROV_W
  422 #else
  423     #define MS_DEF_PROV MS_DEF_PROV_A
  424     #define MS_ENHANCED_PROV MS_ENHANCED_PROV_A
  425     #define MS_STRONG_PROV MS_STRONG_PROV_A
  426     #define MS_DEF_RSA_SIG_PROV MS_DEF_RSA_SIG_PROV_A
  427     #define MS_DEF_RSA_SCHANNEL_PROV MS_DEF_RSA_SCHANNEL_PROV_A
  428     #define MS_DEF_DSS_PROV MS_DEF_DSS_PROV_A
  429     #define MS_DEF_DSS_DH_PROV MS_DEF_DSS_DH_PROV_A
  430     #define MS_ENH_DSS_DH_PROV MS_ENH_DSS_DH_PROV_A
  431     #define MS_DEF_DH_SCHANNEL_PROV MS_DEF_DH_SCHANNEL_PROV_A
  432     #define MS_SCARD_PROV MS_SCARD_PROV_A
  433     #define MS_ENH_RSA_AES_PROV_XP MS_ENH_RSA_AES_PROV_XP_A
  434     #define MS_ENH_RSA_AES_PROV MS_ENH_RSA_AES_PROV_A
  435 #endif
  436 
  437 #define MS_DEF_PROV_A "Microsoft Base Cryptographic Provider v1.0"
  438 #define MS_DEF_PROV_W wstr("Microsoft Base Cryptographic Provider v1.0")
  439 #define MS_ENHANCED_PROV_A "Microsoft Enhanced Cryptographic Provider v1.0"
  440 #define MS_ENHANCED_PROV_W wstr("Microsoft Enhanced Cryptographic Provider v1.0")
  441 #define MS_STRONG_PROV_A "Microsoft Strong Cryptographic Provider"
  442 #define MS_STRONG_PROV_W wstr("Microsoft Strong Cryptographic Provider")
  443 #define MS_DEF_RSA_SIG_PROV_A "Microsoft RSA Signature Cryptographic Provider"
  444 #define MS_DEF_RSA_SIG_PROV_W wstr("Microsoft RSA Signature Cryptographic Provider")
  445 #define MS_DEF_RSA_SCHANNEL_PROV_A "Microsoft RSA SChannel Cryptographic Provider"
  446 #define MS_DEF_RSA_SCHANNEL_PROV_W wstr("Microsoft RSA SChannel Cryptographic Provider")
  447 #define MS_DEF_DSS_PROV_A "Microsoft Base DSS Cryptographic Provider"
  448 #define MS_DEF_DSS_PROV_W wstr("Microsoft Base DSS Cryptographic Provider")
  449 #define MS_DEF_DSS_DH_PROV_A "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider"
  450 #define MS_DEF_DSS_DH_PROV_W wstr("Microsoft Base DSS and Diffie-Hellman Cryptographic Provider")
  451 #define MS_ENH_DSS_DH_PROV_A "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider"
  452 #define MS_ENH_DSS_DH_PROV_W wstr("Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider")
  453 #define MS_DEF_DH_SCHANNEL_PROV_A "Microsoft DH SChannel Cryptographic Provider"
  454 #define MS_DEF_DH_SCHANNEL_PROV_W wstr("Microsoft DH SChannel Cryptographic Provider")
  455 #define MS_SCARD_PROV_A "Microsoft Base Smart Card Crypto Provider"
  456 #define MS_SCARD_PROV_W wstr("Microsoft Base Smart Card Crypto Provider")
  457 #define MS_ENH_RSA_AES_PROV_A "Microsoft Enhanced RSA and AES Cryptographic Provider"
  458 #define MS_ENH_RSA_AES_PROV_W wstr("Microsoft Enhanced RSA and AES Cryptographic Provider")
  459 #define MS_ENH_RSA_AES_PROV_XP_A "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
  460 #define MS_ENH_RSA_AES_PROV_XP_W wstr("Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)")
  461 const MAXUIDLEN = 64
  462 #define EXPO_OFFLOAD_REG_VALUE "ExpoOffload"
  463 #define EXPO_OFFLOAD_FUNC_NAME "OffloadModExpo"
  464 #define szKEY_CRYPTOAPI_PRIVATE_KEY_OPTIONS !"Software\\Policies\\Microsoft\\Cryptography"
  465 #define szKEY_CACHE_ENABLED "CachePrivateKeys"
  466 #define szKEY_CACHE_SECONDS "PrivateKeyLifetimeSeconds"
  467 #define szPRIV_KEY_CACHE_MAX_ITEMS "PrivKeyCacheMaxItems"
  468 const cPRIV_KEY_CACHE_MAX_ITEMS_DEFAULT = 20
  469 #define szPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS "PrivKeyCachePurgeIntervalSeconds"
  470 const cPRIV_KEY_CACHE_PURGE_INTERVAL_SECONDS_DEFAULT = 86400
  471 const CUR_BLOB_VERSION = 2
  472 
  473 type _CMS_KEY_INFO
  474     dwVersion as DWORD
  475     Algid as ALG_ID
  476     pbOID as UBYTE ptr
  477     cbOID as DWORD
  478 end type
  479 
  480 type CMS_KEY_INFO as _CMS_KEY_INFO
  481 type PCMS_KEY_INFO as _CMS_KEY_INFO ptr
  482 
  483 type _HMAC_Info
  484     HashAlgid as ALG_ID
  485     pbInnerString as UBYTE ptr
  486     cbInnerString as DWORD
  487     pbOuterString as UBYTE ptr
  488     cbOuterString as DWORD
  489 end type
  490 
  491 type HMAC_INFO as _HMAC_Info
  492 type PHMAC_INFO as _HMAC_Info ptr
  493 
  494 type _SCHANNEL_ALG
  495     dwUse as DWORD
  496     Algid as ALG_ID
  497     cBits as DWORD
  498     dwFlags as DWORD
  499     dwReserved as DWORD
  500 end type
  501 
  502 type SCHANNEL_ALG as _SCHANNEL_ALG
  503 type PSCHANNEL_ALG as _SCHANNEL_ALG ptr
  504 const SCHANNEL_MAC_KEY = &h0
  505 const SCHANNEL_ENC_KEY = &h1
  506 const INTERNATIONAL_USAGE = &h1
  507 
  508 type _PROV_ENUMALGS
  509     aiAlgid as ALG_ID
  510     dwBitLen as DWORD
  511     dwNameLen as DWORD
  512     szName as zstring * 20
  513 end type
  514 
  515 type PROV_ENUMALGS as _PROV_ENUMALGS
  516 
  517 type _PROV_ENUMALGS_EX
  518     aiAlgid as ALG_ID
  519     dwDefaultLen as DWORD
  520     dwMinLen as DWORD
  521     dwMaxLen as DWORD
  522     dwProtocols as DWORD
  523     dwNameLen as DWORD
  524     szName as zstring * 20
  525     dwLongNameLen as DWORD
  526     szLongName as zstring * 40
  527 end type
  528 
  529 type PROV_ENUMALGS_EX as _PROV_ENUMALGS_EX
  530 
  531 type _PUBLICKEYSTRUC
  532     bType as UBYTE
  533     bVersion as UBYTE
  534     reserved as WORD
  535     aiKeyAlg as ALG_ID
  536 end type
  537 
  538 type BLOBHEADER as _PUBLICKEYSTRUC
  539 type PUBLICKEYSTRUC as _PUBLICKEYSTRUC
  540 
  541 type _RSAPUBKEY
  542     magic as DWORD
  543     bitlen as DWORD
  544     pubexp as DWORD
  545 end type
  546 
  547 type RSAPUBKEY as _RSAPUBKEY
  548 
  549 type _PUBKEY
  550     magic as DWORD
  551     bitlen as DWORD
  552 end type
  553 
  554 type DHPUBKEY as _PUBKEY
  555 type DSSPUBKEY as _PUBKEY
  556 type KEAPUBKEY as _PUBKEY
  557 type TEKPUBKEY as _PUBKEY
  558 
  559 type _DSSSEED
  560     counter as DWORD
  561     seed(0 to 19) as UBYTE
  562 end type
  563 
  564 type DSSSEED as _DSSSEED
  565 
  566 type _PUBKEYVER3
  567     magic as DWORD
  568     bitlenP as DWORD
  569     bitlenQ as DWORD
  570     bitlenJ as DWORD
  571     DSSSeed as DSSSEED
  572 end type
  573 
  574 type DHPUBKEY_VER3 as _PUBKEYVER3
  575 type DSSPUBKEY_VER3 as _PUBKEYVER3
  576 
  577 type _PRIVKEYVER3
  578     magic as DWORD
  579     bitlenP as DWORD
  580     bitlenQ as DWORD
  581     bitlenJ as DWORD
  582     bitlenX as DWORD
  583     DSSSeed as DSSSEED
  584 end type
  585 
  586 type DHPRIVKEY_VER3 as _PRIVKEYVER3
  587 type DSSPRIVKEY_VER3 as _PRIVKEYVER3
  588 
  589 type _KEY_TYPE_SUBTYPE
  590     dwKeySpec as DWORD
  591     as GUID Type
  592     Subtype as GUID
  593 end type
  594 
  595 type KEY_TYPE_SUBTYPE as _KEY_TYPE_SUBTYPE
  596 type PKEY_TYPE_SUBTYPE as _KEY_TYPE_SUBTYPE ptr
  597 
  598 type _CERT_FORTEZZA_DATA_PROP
  599     SerialNumber(0 to 7) as ubyte
  600     CertIndex as long
  601     CertLabel(0 to 35) as ubyte
  602 end type
  603 
  604 type CERT_FORTEZZA_DATA_PROP as _CERT_FORTEZZA_DATA_PROP
  605 
  606 type _CRYPT_RC4_KEY_STATE
  607     Key(0 to 15) as ubyte
  608     SBox(0 to 255) as ubyte
  609     i as ubyte
  610     j as ubyte
  611 end type
  612 
  613 type CRYPT_RC4_KEY_STATE as _CRYPT_RC4_KEY_STATE
  614 type PCRYPT_RC4_KEY_STATE as _CRYPT_RC4_KEY_STATE ptr
  615 
  616 type _CRYPT_DES_KEY_STATE
  617     Key(0 to 7) as ubyte
  618     IV(0 to 7) as ubyte
  619     Feedback(0 to 7) as ubyte
  620 end type
  621 
  622 type CRYPT_DES_KEY_STATE as _CRYPT_DES_KEY_STATE
  623 type PCRYPT_DES_KEY_STATE as _CRYPT_DES_KEY_STATE ptr
  624 
  625 type _CRYPT_3DES_KEY_STATE
  626     Key(0 to 23) as ubyte
  627     IV(0 to 7) as ubyte
  628     Feedback(0 to 7) as ubyte
  629 end type
  630 
  631 type CRYPT_3DES_KEY_STATE as _CRYPT_3DES_KEY_STATE
  632 type PCRYPT_3DES_KEY_STATE as _CRYPT_3DES_KEY_STATE ptr
  633 
  634 #if _WIN32_WINNT >= &h0600
  635     type _CRYPT_AES_128_KEY_STATE
  636         Key(0 to 15) as ubyte
  637         IV(0 to 15) as ubyte
  638         EncryptionState(0 to 10, 0 to 15) as ubyte
  639         DecryptionState(0 to 10, 0 to 15) as ubyte
  640         Feedback(0 to 15) as ubyte
  641     end type
  642 
  643     type CRYPT_AES_128_KEY_STATE as _CRYPT_AES_128_KEY_STATE
  644     type PCRYPT_AES_128_KEY_STATE as _CRYPT_AES_128_KEY_STATE ptr
  645 
  646     type _CRYPT_AES_256_KEY_STATE
  647         Key(0 to 31) as ubyte
  648         IV(0 to 15) as ubyte
  649         EncryptionState(0 to 14, 0 to 15) as ubyte
  650         DecryptionState(0 to 14, 0 to 15) as ubyte
  651         Feedback(0 to 15) as ubyte
  652     end type
  653 
  654     type CRYPT_AES_256_KEY_STATE as _CRYPT_AES_256_KEY_STATE
  655     type PCRYPT_AES_256_KEY_STATE as _CRYPT_AES_256_KEY_STATE ptr
  656 #endif
  657 
  658 #define CRYPTO_BLOBS_DEFINED
  659 
  660 type _CRYPTOAPI_BLOB
  661     cbData as DWORD
  662     pbData as UBYTE ptr
  663 end type
  664 
  665 type CRYPT_INTEGER_BLOB as _CRYPTOAPI_BLOB
  666 type PCRYPT_INTEGER_BLOB as _CRYPTOAPI_BLOB ptr
  667 type CRYPT_UINT_BLOB as _CRYPTOAPI_BLOB
  668 type PCRYPT_UINT_BLOB as _CRYPTOAPI_BLOB ptr
  669 type CRYPT_OBJID_BLOB as _CRYPTOAPI_BLOB
  670 type PCRYPT_OBJID_BLOB as _CRYPTOAPI_BLOB ptr
  671 type CERT_NAME_BLOB as _CRYPTOAPI_BLOB
  672 type PCERT_NAME_BLOB as _CRYPTOAPI_BLOB ptr
  673 type CERT_RDN_VALUE_BLOB as _CRYPTOAPI_BLOB
  674 type PCERT_RDN_VALUE_BLOB as _CRYPTOAPI_BLOB ptr
  675 type CERT_BLOB as _CRYPTOAPI_BLOB
  676 type PCERT_BLOB as _CRYPTOAPI_BLOB ptr
  677 type CRL_BLOB as _CRYPTOAPI_BLOB
  678 type PCRL_BLOB as _CRYPTOAPI_BLOB ptr
  679 type DATA_BLOB as _CRYPTOAPI_BLOB
  680 type PDATA_BLOB as _CRYPTOAPI_BLOB ptr
  681 type CRYPT_DATA_BLOB as _CRYPTOAPI_BLOB
  682 type PCRYPT_DATA_BLOB as _CRYPTOAPI_BLOB ptr
  683 type CRYPT_HASH_BLOB as _CRYPTOAPI_BLOB
  684 type PCRYPT_HASH_BLOB as _CRYPTOAPI_BLOB ptr
  685 type CRYPT_DIGEST_BLOB as _CRYPTOAPI_BLOB
  686 type PCRYPT_DIGEST_BLOB as _CRYPTOAPI_BLOB ptr
  687 type CRYPT_DER_BLOB as _CRYPTOAPI_BLOB
  688 type PCRYPT_DER_BLOB as _CRYPTOAPI_BLOB ptr
  689 type CRYPT_ATTR_BLOB as _CRYPTOAPI_BLOB
  690 type PCRYPT_ATTR_BLOB as _CRYPTOAPI_BLOB ptr
  691 
  692 type _CMS_DH_KEY_INFO
  693     dwVersion as DWORD
  694     Algid as ALG_ID
  695     pszContentEncObjId as LPSTR
  696     PubInfo as CRYPT_DATA_BLOB
  697     pReserved as any ptr
  698 end type
  699 
  700 type CMS_DH_KEY_INFO as _CMS_DH_KEY_INFO
  701 type PCMS_DH_KEY_INFO as _CMS_DH_KEY_INFO ptr
  702 declare function CryptAcquireContextA(byval phProv as HCRYPTPROV ptr, byval szContainer as LPCSTR, byval szProvider as LPCSTR, byval dwProvType as DWORD, byval dwFlags as DWORD) as WINBOOL
  703 
  704 #ifndef UNICODE
  705     declare function CryptAcquireContext alias "CryptAcquireContextA"(byval phProv as HCRYPTPROV ptr, byval szContainer as LPCSTR, byval szProvider as LPCSTR, byval dwProvType as DWORD, byval dwFlags as DWORD) as WINBOOL
  706 #endif
  707 
  708 declare function CryptAcquireContextW(byval phProv as HCRYPTPROV ptr, byval szContainer as LPCWSTR, byval szProvider as LPCWSTR, byval dwProvType as DWORD, byval dwFlags as DWORD) as WINBOOL
  709 
  710 #ifdef UNICODE
  711     declare function CryptAcquireContext alias "CryptAcquireContextW"(byval phProv as HCRYPTPROV ptr, byval szContainer as LPCWSTR, byval szProvider as LPCWSTR, byval dwProvType as DWORD, byval dwFlags as DWORD) as WINBOOL
  712 #endif
  713 
  714 declare function CryptReleaseContext(byval hProv as HCRYPTPROV, byval dwFlags as DWORD) as WINBOOL
  715 declare function CryptGenKey(byval hProv as HCRYPTPROV, byval Algid as ALG_ID, byval dwFlags as DWORD, byval phKey as HCRYPTKEY ptr) as WINBOOL
  716 declare function CryptDeriveKey(byval hProv as HCRYPTPROV, byval Algid as ALG_ID, byval hBaseData as HCRYPTHASH, byval dwFlags as DWORD, byval phKey as HCRYPTKEY ptr) as WINBOOL
  717 declare function CryptDestroyKey(byval hKey as HCRYPTKEY) as WINBOOL
  718 declare function CryptSetKeyParam(byval hKey as HCRYPTKEY, byval dwParam as DWORD, byval pbData as const UBYTE ptr, byval dwFlags as DWORD) as WINBOOL
  719 declare function CryptGetKeyParam(byval hKey as HCRYPTKEY, byval dwParam as DWORD, byval pbData as UBYTE ptr, byval pdwDataLen as DWORD ptr, byval dwFlags as DWORD) as WINBOOL
  720 declare function CryptSetHashParam(byval hHash as HCRYPTHASH, byval dwParam as DWORD, byval pbData as const UBYTE ptr, byval dwFlags as DWORD) as WINBOOL
  721 declare function CryptGetHashParam(byval hHash as HCRYPTHASH, byval dwParam as DWORD, byval pbData as UBYTE ptr, byval pdwDataLen as DWORD ptr, byval dwFlags as DWORD) as WINBOOL
  722 declare function CryptSetProvParam(byval hProv as HCRYPTPROV, byval dwParam as DWORD, byval pbData as const UBYTE ptr, byval dwFlags as DWORD) as WINBOOL
  723 declare function CryptGetProvParam(byval hProv as HCRYPTPROV, byval dwParam as DWORD, byval pbData as UBYTE ptr, byval pdwDataLen as DWORD ptr, byval dwFlags as DWORD) as WINBOOL
  724 declare function CryptGenRandom(byval hProv as HCRYPTPROV, byval dwLen as DWORD, byval pbBuffer as UBYTE ptr) as WINBOOL
  725 declare function CryptGetUserKey(byval hProv as HCRYPTPROV, byval dwKeySpec as DWORD, byval phUserKey as HCRYPTKEY ptr) as WINBOOL
  726 declare function CryptExportKey(byval hKey as HCRYPTKEY, byval hExpKey as HCRYPTKEY, byval dwBlobType as DWORD, byval dwFlags as DWORD, byval pbData as UBYTE ptr, byval pdwDataLen as DWORD ptr) as WINBOOL
  727 declare function CryptImportKey(byval hProv as HCRYPTPROV, byval pbData as const UBYTE ptr, byval dwDataLen as DWORD, byval hPubKey as HCRYPTKEY, byval dwFlags as DWORD, byval phKey as HCRYPTKEY ptr) as WINBOOL
  728 declare function CryptEncrypt(byval hKey as HCRYPTKEY, byval hHash as HCRYPTHASH, byval Final as WINBOOL, byval dwFlags as DWORD, byval pbData as UBYTE ptr, byval pdwDataLen as DWORD ptr, byval dwBufLen as DWORD) as WINBOOL
  729 declare function CryptDecrypt(byval hKey as HCRYPTKEY, byval hHash as HCRYPTHASH, byval Final as WINBOOL, byval dwFlags as DWORD, byval pbData as UBYTE ptr, byval pdwDataLen as DWORD ptr) as WINBOOL
  730 declare function CryptCreateHash(byval hProv as HCRYPTPROV, byval Algid as ALG_ID, byval hKey as HCRYPTKEY, byval dwFlags as DWORD, byval phHash as HCRYPTHASH ptr) as WINBOOL
  731 declare function CryptHashData(byval hHash as HCRYPTHASH, byval pbData as const UBYTE ptr, byval dwDataLen as DWORD, byval dwFlags as DWORD) as WINBOOL
  732 declare function CryptHashSessionKey(byval hHash as HCRYPTHASH, byval hKey as HCRYPTKEY, byval dwFlags as DWORD) as WINBOOL
  733 declare function CryptDestroyHash(byval hHash as HCRYPTHASH) as WINBOOL
  734 declare function CryptSignHashA(byval hHash as HCRYPTHASH, byval dwKeySpec as DWORD, byval szDescription as LPCSTR, byval dwFlags as DWORD, byval pbSignature as UBYTE ptr, byval pdwSigLen as DWORD ptr) as WINBOOL
  735 
  736 #ifndef UNICODE
  737     declare function CryptSignHash alias "CryptSignHashA"(byval hHash as HCRYPTHASH, byval dwKeySpec as DWORD, byval szDescription as LPCSTR, byval dwFlags as DWORD, byval pbSignature as UBYTE ptr, byval pdwSigLen as DWORD ptr) as WINBOOL
  738 #endif
  739 
  740 declare function CryptSignHashW(byval hHash as HCRYPTHASH, byval dwKeySpec as DWORD, byval szDescription as LPCWSTR, byval dwFlags as DWORD, byval pbSignature as UBYTE ptr, byval pdwSigLen as DWORD ptr) as WINBOOL
  741 
  742 #ifdef UNICODE
  743     declare function CryptSignHash alias "CryptSignHashW"(byval hHash as HCRYPTHASH, byval dwKeySpec as DWORD, byval szDescription as LPCWSTR, byval dwFlags as DWORD, byval pbSignature as UBYTE ptr, byval pdwSigLen as DWORD ptr) as WINBOOL
  744 #endif
  745 
  746 declare function CryptVerifySignatureA(byval hHash as HCRYPTHASH, byval pbSignature as const UBYTE ptr, byval dwSigLen as DWORD, byval hPubKey as HCRYPTKEY, byval szDescription as LPCSTR, byval dwFlags as DWORD) as WINBOOL
  747 
  748 #ifndef UNICODE
  749     declare function CryptVerifySignature alias "CryptVerifySignatureA"(byval hHash as HCRYPTHASH, byval pbSignature as const UBYTE ptr, byval dwSigLen as DWORD, byval hPubKey as HCRYPTKEY, byval szDescription as LPCSTR, byval dwFlags as DWORD) as WINBOOL
  750 #endif
  751 
  752 declare function CryptVerifySignatureW(byval hHash as HCRYPTHASH, byval pbSignature as const UBYTE ptr, byval dwSigLen as DWORD, byval hPubKey as HCRYPTKEY, byval szDescription as LPCWSTR, byval dwFlags as DWORD) as WINBOOL
  753 
  754 #ifdef UNICODE
  755     declare function CryptVerifySignature alias "CryptVerifySignatureW"(byval hHash as HCRYPTHASH, byval pbSignature as const UBYTE ptr, byval dwSigLen as DWORD, byval hPubKey as HCRYPTKEY, byval szDescription as LPCWSTR, byval dwFlags as DWORD) as WINBOOL
  756 #endif
  757 
  758 declare function CryptSetProviderA(byval pszProvName as LPCSTR, byval dwProvType as DWORD) as WINBOOL
  759 
  760 #ifndef UNICODE
  761     declare function CryptSetProvider alias "CryptSetProviderA"(byval pszProvName as LPCSTR, byval dwProvType as DWORD) as WINBOOL
  762 #endif
  763 
  764 declare function CryptSetProviderW(byval pszProvName as LPCWSTR, byval dwProvType as DWORD) as WINBOOL
  765 
  766 #ifdef UNICODE
  767     declare function CryptSetProvider alias "CryptSetProviderW"(byval pszProvName as LPCWSTR, byval dwProvType as DWORD) as WINBOOL
  768 #endif
  769 
  770 declare function CryptSetProviderExA(byval pszProvName as LPCSTR, byval dwProvType as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD) as WINBOOL
  771 
  772 #ifndef UNICODE
  773     declare function CryptSetProviderEx alias "CryptSetProviderExA"(byval pszProvName as LPCSTR, byval dwProvType as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD) as WINBOOL
  774 #endif
  775 
  776 declare function CryptSetProviderExW(byval pszProvName as LPCWSTR, byval dwProvType as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD) as WINBOOL
  777 
  778 #ifdef UNICODE
  779     declare function CryptSetProviderEx alias "CryptSetProviderExW"(byval pszProvName as LPCWSTR, byval dwProvType as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD) as WINBOOL
  780 #endif
  781 
  782 declare function CryptGetDefaultProviderA(byval dwProvType as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD, byval pszProvName as LPSTR, byval pcbProvName as DWORD ptr) as WINBOOL
  783 
  784 #ifndef UNICODE
  785     declare function CryptGetDefaultProvider alias "CryptGetDefaultProviderA"(byval dwProvType as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD, byval pszProvName as LPSTR, byval pcbProvName as DWORD ptr) as WINBOOL
  786 #endif
  787 
  788 declare function CryptGetDefaultProviderW(byval dwProvType as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD, byval pszProvName as LPWSTR, byval pcbProvName as DWORD ptr) as WINBOOL
  789 
  790 #ifdef UNICODE
  791     declare function CryptGetDefaultProvider alias "CryptGetDefaultProviderW"(byval dwProvType as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD, byval pszProvName as LPWSTR, byval pcbProvName as DWORD ptr) as WINBOOL
  792 #endif
  793 
  794 declare function CryptEnumProviderTypesA(byval dwIndex as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD, byval pdwProvType as DWORD ptr, byval szTypeName as LPSTR, byval pcbTypeName as DWORD ptr) as WINBOOL
  795 
  796 #ifndef UNICODE
  797     declare function CryptEnumProviderTypes alias "CryptEnumProviderTypesA"(byval dwIndex as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD, byval pdwProvType as DWORD ptr, byval szTypeName as LPSTR, byval pcbTypeName as DWORD ptr) as WINBOOL
  798 #endif
  799 
  800 declare function CryptEnumProviderTypesW(byval dwIndex as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD, byval pdwProvType as DWORD ptr, byval szTypeName as LPWSTR, byval pcbTypeName as DWORD ptr) as WINBOOL
  801 
  802 #ifdef UNICODE
  803     declare function CryptEnumProviderTypes alias "CryptEnumProviderTypesW"(byval dwIndex as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD, byval pdwProvType as DWORD ptr, byval szTypeName as LPWSTR, byval pcbTypeName as DWORD ptr) as WINBOOL
  804 #endif
  805 
  806 declare function CryptEnumProvidersA(byval dwIndex as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD, byval pdwProvType as DWORD ptr, byval szProvName as LPSTR, byval pcbProvName as DWORD ptr) as WINBOOL
  807 
  808 #ifndef UNICODE
  809     declare function CryptEnumProviders alias "CryptEnumProvidersA"(byval dwIndex as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD, byval pdwProvType as DWORD ptr, byval szProvName as LPSTR, byval pcbProvName as DWORD ptr) as WINBOOL
  810 #endif
  811 
  812 declare function CryptEnumProvidersW(byval dwIndex as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD, byval pdwProvType as DWORD ptr, byval szProvName as LPWSTR, byval pcbProvName as DWORD ptr) as WINBOOL
  813 
  814 #ifdef UNICODE
  815     declare function CryptEnumProviders alias "CryptEnumProvidersW"(byval dwIndex as DWORD, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD, byval pdwProvType as DWORD ptr, byval szProvName as LPWSTR, byval pcbProvName as DWORD ptr) as WINBOOL
  816 #endif
  817 
  818 declare function CryptContextAddRef(byval hProv as HCRYPTPROV, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD) as WINBOOL
  819 declare function CryptDuplicateKey(byval hKey as HCRYPTKEY, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD, byval phKey as HCRYPTKEY ptr) as WINBOOL
  820 declare function CryptDuplicateHash(byval hHash as HCRYPTHASH, byval pdwReserved as DWORD ptr, byval dwFlags as DWORD, byval phHash as HCRYPTHASH ptr) as WINBOOL
  821 declare function GetEncSChannel cdecl(byval pData as UBYTE ptr ptr, byval dwDecSize as DWORD ptr) as WINBOOL
  822 type HCRYPTPROV_OR_NCRYPT_KEY_HANDLE as ULONG_PTR
  823 type HCRYPTPROV_LEGACY as ULONG_PTR
  824 
  825 end extern
  826 
  827 #include once "bcrypt.bi"
  828 #include once "ncrypt.bi"
  829 
  830 extern "Windows"
  831 
  832 type _CRYPT_BIT_BLOB
  833     cbData as DWORD
  834     pbData as UBYTE ptr
  835     cUnusedBits as DWORD
  836 end type
  837 
  838 type CRYPT_BIT_BLOB as _CRYPT_BIT_BLOB
  839 type PCRYPT_BIT_BLOB as _CRYPT_BIT_BLOB ptr
  840 
  841 type _CRYPT_ALGORITHM_IDENTIFIER
  842     pszObjId as LPSTR
  843     Parameters as CRYPT_OBJID_BLOB
  844 end type
  845 
  846 type CRYPT_ALGORITHM_IDENTIFIER as _CRYPT_ALGORITHM_IDENTIFIER
  847 type PCRYPT_ALGORITHM_IDENTIFIER as _CRYPT_ALGORITHM_IDENTIFIER ptr
  848 #define szOID_RSA "1.2.840.113549"
  849 #define szOID_PKCS "1.2.840.113549.1"
  850 #define szOID_RSA_HASH "1.2.840.113549.2"
  851 #define szOID_RSA_ENCRYPT "1.2.840.113549.3"
  852 #define szOID_PKCS_1 "1.2.840.113549.1.1"
  853 #define szOID_PKCS_2 "1.2.840.113549.1.2"
  854 #define szOID_PKCS_3 "1.2.840.113549.1.3"
  855 #define szOID_PKCS_4 "1.2.840.113549.1.4"
  856 #define szOID_PKCS_5 "1.2.840.113549.1.5"
  857 #define szOID_PKCS_6 "1.2.840.113549.1.6"
  858 #define szOID_PKCS_7 "1.2.840.113549.1.7"
  859 #define szOID_PKCS_8 "1.2.840.113549.1.8"
  860 #define szOID_PKCS_9 "1.2.840.113549.1.9"
  861 #define szOID_PKCS_10 "1.2.840.113549.1.10"
  862 #define szOID_PKCS_12 "1.2.840.113549.1.12"
  863 #define szOID_RSA_RSA "1.2.840.113549.1.1.1"
  864 #define szOID_RSA_MD2RSA "1.2.840.113549.1.1.2"
  865 #define szOID_RSA_MD4RSA "1.2.840.113549.1.1.3"
  866 #define szOID_RSA_MD5RSA "1.2.840.113549.1.1.4"
  867 #define szOID_RSA_SHA1RSA "1.2.840.113549.1.1.5"
  868 #define szOID_RSA_SETOAEP_RSA "1.2.840.113549.1.1.6"
  869 #define szOID_RSAES_OAEP "1.2.840.113549.1.1.7"
  870 #define szOID_RSA_MGF1 "1.2.840.113549.1.1.8"
  871 #define szOID_RSA_PSPECIFIED "1.2.840.113549.1.1.9"
  872 #define szOID_RSA_SSA_PSS "1.2.840.113549.1.1.10"
  873 #define szOID_RSA_SHA256RSA "1.2.840.113549.1.1.11"
  874 #define szOID_RSA_SHA384RSA "1.2.840.113549.1.1.12"
  875 #define szOID_RSA_SHA512RSA "1.2.840.113549.1.1.13"
  876 #define szOID_RSA_DH "1.2.840.113549.1.3.1"
  877 #define szOID_RSA_data "1.2.840.113549.1.7.1"
  878 #define szOID_RSA_signedData "1.2.840.113549.1.7.2"
  879 #define szOID_RSA_envelopedData "1.2.840.113549.1.7.3"
  880 #define szOID_RSA_signEnvData "1.2.840.113549.1.7.4"
  881 #define szOID_RSA_digestedData "1.2.840.113549.1.7.5"
  882 #define szOID_RSA_hashedData "1.2.840.113549.1.7.5"
  883 #define szOID_RSA_encryptedData "1.2.840.113549.1.7.6"
  884 #define szOID_RSA_emailAddr "1.2.840.113549.1.9.1"
  885 #define szOID_RSA_unstructName "1.2.840.113549.1.9.2"
  886 #define szOID_RSA_contentType "1.2.840.113549.1.9.3"
  887 #define szOID_RSA_messageDigest "1.2.840.113549.1.9.4"
  888 #define szOID_RSA_signingTime "1.2.840.113549.1.9.5"
  889 #define szOID_RSA_counterSign "1.2.840.113549.1.9.6"
  890 #define szOID_RSA_challengePwd "1.2.840.113549.1.9.7"
  891 #define szOID_RSA_unstructAddr "1.2.840.113549.1.9.8"
  892 #define szOID_RSA_extCertAttrs "1.2.840.113549.1.9.9"
  893 #define szOID_RSA_certExtensions "1.2.840.113549.1.9.14"
  894 #define szOID_RSA_SMIMECapabilities "1.2.840.113549.1.9.15"
  895 #define szOID_RSA_preferSignedData "1.2.840.113549.1.9.15.1"
  896 #define szOID_TIMESTAMP_TOKEN "1.2.840.113549.1.9.16.1.4"
  897 #define szOID_RFC3161_counterSign "1.3.6.1.4.1.311.3.3.1"
  898 #define szOID_RSA_SMIMEalg "1.2.840.113549.1.9.16.3"
  899 #define szOID_RSA_SMIMEalgESDH "1.2.840.113549.1.9.16.3.5"
  900 #define szOID_RSA_SMIMEalgCMS3DESwrap "1.2.840.113549.1.9.16.3.6"
  901 #define szOID_RSA_SMIMEalgCMSRC2wrap "1.2.840.113549.1.9.16.3.7"
  902 #define szOID_RSA_MD2 "1.2.840.113549.2.2"
  903 #define szOID_RSA_MD4 "1.2.840.113549.2.4"
  904 #define szOID_RSA_MD5 "1.2.840.113549.2.5"
  905 #define szOID_RSA_RC2CBC "1.2.840.113549.3.2"
  906 #define szOID_RSA_RC4 "1.2.840.113549.3.4"
  907 #define szOID_RSA_DES_EDE3_CBC "1.2.840.113549.3.7"
  908 #define szOID_RSA_RC5_CBCPad "1.2.840.113549.3.9"
  909 #define szOID_ANSI_X942 "1.2.840.10046"
  910 #define szOID_ANSI_X942_DH "1.2.840.10046.2.1"
  911 #define szOID_X957 "1.2.840.10040"
  912 #define szOID_X957_DSA "1.2.840.10040.4.1"
  913 #define szOID_X957_SHA1DSA "1.2.840.10040.4.3"
  914 #define szOID_ECC_PUBLIC_KEY "1.2.840.10045.2.1"
  915 #define szOID_ECC_CURVE_P256 "1.2.840.10045.3.1.7"
  916 #define szOID_ECC_CURVE_P384 "1.3.132.0.34"
  917 #define szOID_ECC_CURVE_P521 "1.3.132.0.35"
  918 #define szOID_ECDSA_SHA1 "1.2.840.10045.4.1"
  919 #define szOID_ECDSA_SPECIFIED "1.2.840.10045.4.3"
  920 #define szOID_ECDSA_SHA256 "1.2.840.10045.4.3.2"
  921 #define szOID_ECDSA_SHA384 "1.2.840.10045.4.3.3"
  922 #define szOID_ECDSA_SHA512 "1.2.840.10045.4.3.4"
  923 #define szOID_NIST_AES128_CBC "2.16.840.1.101.3.4.1.2"
  924 #define szOID_NIST_AES192_CBC "2.16.840.1.101.3.4.1.22"
  925 #define szOID_NIST_AES256_CBC "2.16.840.1.101.3.4.1.42"
  926 #define szOID_NIST_AES128_WRAP "2.16.840.1.101.3.4.1.5"
  927 #define szOID_NIST_AES192_WRAP "2.16.840.1.101.3.4.1.25"
  928 #define szOID_NIST_AES256_WRAP "2.16.840.1.101.3.4.1.45"
  929 #define szOID_DH_SINGLE_PASS_STDDH_SHA1_KDF "1.3.133.16.840.63.0.2"
  930 #define szOID_DH_SINGLE_PASS_STDDH_SHA256_KDF "1.3.132.1.11.1"
  931 #define szOID_DH_SINGLE_PASS_STDDH_SHA384_KDF "1.3.132.1.11.2"
  932 #define szOID_DS "2.5"
  933 #define szOID_DSALG "2.5.8"
  934 #define szOID_DSALG_CRPT "2.5.8.1"
  935 #define szOID_DSALG_HASH "2.5.8.2"
  936 #define szOID_DSALG_SIGN "2.5.8.3"
  937 #define szOID_DSALG_RSA "2.5.8.1.1"
  938 #define szOID_OIW "1.3.14"
  939 #define szOID_OIWSEC "1.3.14.3.2"
  940 #define szOID_OIWSEC_md4RSA "1.3.14.3.2.2"
  941 #define szOID_OIWSEC_md5RSA "1.3.14.3.2.3"
  942 #define szOID_OIWSEC_md4RSA2 "1.3.14.3.2.4"
  943 #define szOID_OIWSEC_desECB "1.3.14.3.2.6"
  944 #define szOID_OIWSEC_desCBC "1.3.14.3.2.7"
  945 #define szOID_OIWSEC_desOFB "1.3.14.3.2.8"
  946 #define szOID_OIWSEC_desCFB "1.3.14.3.2.9"
  947 #define szOID_OIWSEC_desMAC "1.3.14.3.2.10"
  948 #define szOID_OIWSEC_rsaSign "1.3.14.3.2.11"
  949 #define szOID_OIWSEC_dsa "1.3.14.3.2.12"
  950 #define szOID_OIWSEC_shaDSA "1.3.14.3.2.13"
  951 #define szOID_OIWSEC_mdc2RSA "1.3.14.3.2.14"
  952 #define szOID_OIWSEC_shaRSA "1.3.14.3.2.15"
  953 #define szOID_OIWSEC_dhCommMod "1.3.14.3.2.16"
  954 #define szOID_OIWSEC_desEDE "1.3.14.3.2.17"
  955 #define szOID_OIWSEC_sha "1.3.14.3.2.18"
  956 #define szOID_OIWSEC_mdc2 "1.3.14.3.2.19"
  957 #define szOID_OIWSEC_dsaComm "1.3.14.3.2.20"
  958 #define szOID_OIWSEC_dsaCommSHA "1.3.14.3.2.21"
  959 #define szOID_OIWSEC_rsaXchg "1.3.14.3.2.22"
  960 #define szOID_OIWSEC_keyHashSeal "1.3.14.3.2.23"
  961 #define szOID_OIWSEC_md2RSASign "1.3.14.3.2.24"
  962 #define szOID_OIWSEC_md5RSASign "1.3.14.3.2.25"
  963 #define szOID_OIWSEC_sha1 "1.3.14.3.2.26"
  964 #define szOID_OIWSEC_dsaSHA1 "1.3.14.3.2.27"
  965 #define szOID_OIWSEC_dsaCommSHA1 "1.3.14.3.2.28"
  966 #define szOID_OIWSEC_sha1RSASign "1.3.14.3.2.29"
  967 #define szOID_OIWDIR "1.3.14.7.2"
  968 #define szOID_OIWDIR_CRPT "1.3.14.7.2.1"
  969 #define szOID_OIWDIR_HASH "1.3.14.7.2.2"
  970 #define szOID_OIWDIR_SIGN "1.3.14.7.2.3"
  971 #define szOID_OIWDIR_md2 "1.3.14.7.2.2.1"
  972 #define szOID_OIWDIR_md2RSA "1.3.14.7.2.3.1"
  973 #define szOID_INFOSEC "2.16.840.1.101.2.1"
  974 #define szOID_INFOSEC_sdnsSignature "2.16.840.1.101.2.1.1.1"
  975 #define szOID_INFOSEC_mosaicSignature "2.16.840.1.101.2.1.1.2"
  976 #define szOID_INFOSEC_sdnsConfidentiality "2.16.840.1.101.2.1.1.3"
  977 #define szOID_INFOSEC_mosaicConfidentiality "2.16.840.1.101.2.1.1.4"
  978 #define szOID_INFOSEC_sdnsIntegrity "2.16.840.1.101.2.1.1.5"
  979 #define szOID_INFOSEC_mosaicIntegrity "2.16.840.1.101.2.1.1.6"
  980 #define szOID_INFOSEC_sdnsTokenProtection "2.16.840.1.101.2.1.1.7"
  981 #define szOID_INFOSEC_mosaicTokenProtection "2.16.840.1.101.2.1.1.8"
  982 #define szOID_INFOSEC_sdnsKeyManagement "2.16.840.1.101.2.1.1.9"
  983 #define szOID_INFOSEC_mosaicKeyManagement "2.16.840.1.101.2.1.1.10"
  984 #define szOID_INFOSEC_sdnsKMandSig "2.16.840.1.101.2.1.1.11"
  985 #define szOID_INFOSEC_mosaicKMandSig "2.16.840.1.101.2.1.1.12"
  986 #define szOID_INFOSEC_SuiteASignature "2.16.840.1.101.2.1.1.13"
  987 #define szOID_INFOSEC_SuiteAConfidentiality "2.16.840.1.101.2.1.1.14"
  988 #define szOID_INFOSEC_SuiteAIntegrity "2.16.840.1.101.2.1.1.15"
  989 #define szOID_INFOSEC_SuiteATokenProtection "2.16.840.1.101.2.1.1.16"
  990 #define szOID_INFOSEC_SuiteAKeyManagement "2.16.840.1.101.2.1.1.17"
  991 #define szOID_INFOSEC_SuiteAKMandSig "2.16.840.1.101.2.1.1.18"
  992 #define szOID_INFOSEC_mosaicUpdatedSig "2.16.840.1.101.2.1.1.19"
  993 #define szOID_INFOSEC_mosaicKMandUpdSig "2.16.840.1.101.2.1.1.20"
  994 #define szOID_INFOSEC_mosaicUpdatedInteg "2.16.840.1.101.2.1.1.21"
  995 #define szOID_NIST_sha256 "2.16.840.1.101.3.4.2.1"
  996 #define szOID_NIST_sha384 "2.16.840.1.101.3.4.2.2"
  997 #define szOID_NIST_sha512 "2.16.840.1.101.3.4.2.3"
  998 
  999 type _CRYPT_OBJID_TABLE
 1000     dwAlgId as DWORD
 1001     pszObjId as LPCSTR
 1002 end type
 1003 
 1004 type CRYPT_OBJID_TABLE as _CRYPT_OBJID_TABLE
 1005 type PCRYPT_OBJID_TABLE as _CRYPT_OBJID_TABLE ptr
 1006 
 1007 type _CRYPT_HASH_INFO
 1008     HashAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 1009     Hash as CRYPT_HASH_BLOB
 1010 end type
 1011 
 1012 type CRYPT_HASH_INFO as _CRYPT_HASH_INFO
 1013 type PCRYPT_HASH_INFO as _CRYPT_HASH_INFO ptr
 1014 
 1015 type _CERT_EXTENSION
 1016     pszObjId as LPSTR
 1017     fCritical as WINBOOL
 1018     Value as CRYPT_OBJID_BLOB
 1019 end type
 1020 
 1021 type CERT_EXTENSION as _CERT_EXTENSION
 1022 type PCERT_EXTENSION as _CERT_EXTENSION ptr
 1023 type PCCERT_EXTENSION as const CERT_EXTENSION ptr
 1024 
 1025 type _CRYPT_ATTRIBUTE_TYPE_VALUE
 1026     pszObjId as LPSTR
 1027     Value as CRYPT_OBJID_BLOB
 1028 end type
 1029 
 1030 type CRYPT_ATTRIBUTE_TYPE_VALUE as _CRYPT_ATTRIBUTE_TYPE_VALUE
 1031 type PCRYPT_ATTRIBUTE_TYPE_VALUE as _CRYPT_ATTRIBUTE_TYPE_VALUE ptr
 1032 
 1033 type _CRYPT_ATTRIBUTE
 1034     pszObjId as LPSTR
 1035     cValue as DWORD
 1036     rgValue as PCRYPT_ATTR_BLOB
 1037 end type
 1038 
 1039 type CRYPT_ATTRIBUTE as _CRYPT_ATTRIBUTE
 1040 type PCRYPT_ATTRIBUTE as _CRYPT_ATTRIBUTE ptr
 1041 
 1042 type _CRYPT_ATTRIBUTES
 1043     cAttr as DWORD
 1044     rgAttr as PCRYPT_ATTRIBUTE
 1045 end type
 1046 
 1047 type CRYPT_ATTRIBUTES as _CRYPT_ATTRIBUTES
 1048 type PCRYPT_ATTRIBUTES as _CRYPT_ATTRIBUTES ptr
 1049 
 1050 type _CERT_RDN_ATTR
 1051     pszObjId as LPSTR
 1052     dwValueType as DWORD
 1053     Value as CERT_RDN_VALUE_BLOB
 1054 end type
 1055 
 1056 type CERT_RDN_ATTR as _CERT_RDN_ATTR
 1057 type PCERT_RDN_ATTR as _CERT_RDN_ATTR ptr
 1058 #define szOID_COMMON_NAME "2.5.4.3"
 1059 #define szOID_SUR_NAME "2.5.4.4"
 1060 #define szOID_DEVICE_SERIAL_NUMBER "2.5.4.5"
 1061 #define szOID_COUNTRY_NAME "2.5.4.6"
 1062 #define szOID_LOCALITY_NAME "2.5.4.7"
 1063 #define szOID_STATE_OR_PROVINCE_NAME "2.5.4.8"
 1064 #define szOID_STREET_ADDRESS "2.5.4.9"
 1065 #define szOID_ORGANIZATION_NAME "2.5.4.10"
 1066 #define szOID_ORGANIZATIONAL_UNIT_NAME "2.5.4.11"
 1067 #define szOID_TITLE "2.5.4.12"
 1068 #define szOID_DESCRIPTION "2.5.4.13"
 1069 #define szOID_SEARCH_GUIDE "2.5.4.14"
 1070 #define szOID_BUSINESS_CATEGORY "2.5.4.15"
 1071 #define szOID_POSTAL_ADDRESS "2.5.4.16"
 1072 #define szOID_POSTAL_CODE "2.5.4.17"
 1073 #define szOID_POST_OFFICE_BOX "2.5.4.18"
 1074 #define szOID_PHYSICAL_DELIVERY_OFFICE_NAME "2.5.4.19"
 1075 #define szOID_TELEPHONE_NUMBER "2.5.4.20"
 1076 #define szOID_TELEX_NUMBER "2.5.4.21"
 1077 #define szOID_TELETEXT_TERMINAL_IDENTIFIER "2.5.4.22"
 1078 #define szOID_FACSIMILE_TELEPHONE_NUMBER "2.5.4.23"
 1079 #define szOID_X21_ADDRESS "2.5.4.24"
 1080 #define szOID_INTERNATIONAL_ISDN_NUMBER "2.5.4.25"
 1081 #define szOID_REGISTERED_ADDRESS "2.5.4.26"
 1082 #define szOID_DESTINATION_INDICATOR "2.5.4.27"
 1083 #define szOID_PREFERRED_DELIVERY_METHOD "2.5.4.28"
 1084 #define szOID_PRESENTATION_ADDRESS "2.5.4.29"
 1085 #define szOID_SUPPORTED_APPLICATION_CONTEXT "2.5.4.30"
 1086 #define szOID_MEMBER "2.5.4.31"
 1087 #define szOID_OWNER "2.5.4.32"
 1088 #define szOID_ROLE_OCCUPANT "2.5.4.33"
 1089 #define szOID_SEE_ALSO "2.5.4.34"
 1090 #define szOID_USER_PASSWORD "2.5.4.35"
 1091 #define szOID_USER_CERTIFICATE "2.5.4.36"
 1092 #define szOID_CA_CERTIFICATE "2.5.4.37"
 1093 #define szOID_AUTHORITY_REVOCATION_LIST "2.5.4.38"
 1094 #define szOID_CERTIFICATE_REVOCATION_LIST "2.5.4.39"
 1095 #define szOID_CROSS_CERTIFICATE_PAIR "2.5.4.40"
 1096 #define szOID_GIVEN_NAME "2.5.4.42"
 1097 #define szOID_INITIALS "2.5.4.43"
 1098 #define szOID_DN_QUALIFIER "2.5.4.46"
 1099 #define szOID_DOMAIN_COMPONENT "0.9.2342.19200300.100.1.25"
 1100 #define szOID_PKCS_12_FRIENDLY_NAME_ATTR "1.2.840.113549.1.9.20"
 1101 #define szOID_PKCS_12_LOCAL_KEY_ID "1.2.840.113549.1.9.21"
 1102 #define szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR "1.3.6.1.4.1.311.17.1"
 1103 #define szOID_LOCAL_MACHINE_KEYSET "1.3.6.1.4.1.311.17.2"
 1104 #define szOID_PKCS_12_EXTENDED_ATTRIBUTES "1.3.6.1.4.1.311.17.3"
 1105 #define szOID_PKCS_12_PROTECTED_PASSWORD_SECRET_BAG_TYPE_ID "1.3.6.1.4.1.311.17.4"
 1106 #define szOID_KEYID_RDN "1.3.6.1.4.1.311.10.7.1"
 1107 #define szOID_EV_RDN_LOCALE "1.3.6.1.4.1.311.60.2.1.1"
 1108 #define szOID_EV_RDN_STATE_OR_PROVINCE "1.3.6.1.4.1.311.60.2.1.2"
 1109 #define szOID_EV_RDN_COUNTRY "1.3.6.1.4.1.311.60.2.1.3"
 1110 const CERT_RDN_ANY_TYPE = 0
 1111 const CERT_RDN_ENCODED_BLOB = 1
 1112 const CERT_RDN_OCTET_STRING = 2
 1113 const CERT_RDN_NUMERIC_STRING = 3
 1114 const CERT_RDN_PRINTABLE_STRING = 4
 1115 const CERT_RDN_TELETEX_STRING = 5
 1116 const CERT_RDN_T61_STRING = 5
 1117 const CERT_RDN_VIDEOTEX_STRING = 6
 1118 const CERT_RDN_IA5_STRING = 7
 1119 const CERT_RDN_GRAPHIC_STRING = 8
 1120 const CERT_RDN_VISIBLE_STRING = 9
 1121 const CERT_RDN_ISO646_STRING = 9
 1122 const CERT_RDN_GENERAL_STRING = 10
 1123 const CERT_RDN_UNIVERSAL_STRING = 11
 1124 const CERT_RDN_INT4_STRING = 11
 1125 const CERT_RDN_BMP_STRING = 12
 1126 const CERT_RDN_UNICODE_STRING = 12
 1127 const CERT_RDN_UTF8_STRING = 13
 1128 const CERT_RDN_TYPE_MASK = &h000000ff
 1129 const CERT_RDN_FLAGS_MASK = &hff000000
 1130 const CERT_RDN_ENABLE_T61_UNICODE_FLAG = &h80000000
 1131 const CERT_RDN_ENABLE_UTF8_UNICODE_FLAG = &h20000000
 1132 const CERT_RDN_FORCE_UTF8_UNICODE_FLAG = &h10000000
 1133 const CERT_RDN_DISABLE_CHECK_TYPE_FLAG = &h40000000
 1134 const CERT_RDN_DISABLE_IE4_UTF8_FLAG = &h1000000
 1135 const CERT_RDN_ENABLE_PUNYCODE_FLAG = &h2000000
 1136 #define IS_CERT_RDN_CHAR_STRING(X) (((X) and CERT_RDN_TYPE_MASK) >= CERT_RDN_NUMERIC_STRING)
 1137 
 1138 type _CERT_RDN
 1139     cRDNAttr as DWORD
 1140     rgRDNAttr as PCERT_RDN_ATTR
 1141 end type
 1142 
 1143 type CERT_RDN as _CERT_RDN
 1144 type PCERT_RDN as _CERT_RDN ptr
 1145 
 1146 type _CERT_NAME_INFO
 1147     cRDN as DWORD
 1148     rgRDN as PCERT_RDN
 1149 end type
 1150 
 1151 type CERT_NAME_INFO as _CERT_NAME_INFO
 1152 type PCERT_NAME_INFO as _CERT_NAME_INFO ptr
 1153 
 1154 type _CERT_NAME_VALUE
 1155     dwValueType as DWORD
 1156     Value as CERT_RDN_VALUE_BLOB
 1157 end type
 1158 
 1159 type CERT_NAME_VALUE as _CERT_NAME_VALUE
 1160 type PCERT_NAME_VALUE as _CERT_NAME_VALUE ptr
 1161 
 1162 type _CERT_PUBLIC_KEY_INFO
 1163     Algorithm as CRYPT_ALGORITHM_IDENTIFIER
 1164     PublicKey as CRYPT_BIT_BLOB
 1165 end type
 1166 
 1167 type CERT_PUBLIC_KEY_INFO as _CERT_PUBLIC_KEY_INFO
 1168 type PCERT_PUBLIC_KEY_INFO as _CERT_PUBLIC_KEY_INFO ptr
 1169 #define CERT_RSA_PUBLIC_KEY_OBJID szOID_RSA_RSA
 1170 #define CERT_DEFAULT_OID_PUBLIC_KEY_SIGN szOID_RSA_RSA
 1171 #define CERT_DEFAULT_OID_PUBLIC_KEY_XCHG szOID_RSA_RSA
 1172 
 1173 type _CRYPT_ECC_PRIVATE_KEY_INFO
 1174     dwVersion as DWORD
 1175     PrivateKey as CRYPT_DER_BLOB
 1176     szCurveOid as LPSTR
 1177     PublicKey as CRYPT_BIT_BLOB
 1178 end type
 1179 
 1180 type CRYPT_ECC_PRIVATE_KEY_INFO as _CRYPT_ECC_PRIVATE_KEY_INFO
 1181 type PCRYPT_ECC_PRIVATE_KEY_INFO as _CRYPT_ECC_PRIVATE_KEY_INFO ptr
 1182 const CRYPT_ECC_PRIVATE_KEY_INFO_v1 = 1
 1183 
 1184 type _CRYPT_PRIVATE_KEY_INFO
 1185     Version as DWORD
 1186     Algorithm as CRYPT_ALGORITHM_IDENTIFIER
 1187     PrivateKey as CRYPT_DER_BLOB
 1188     pAttributes as PCRYPT_ATTRIBUTES
 1189 end type
 1190 
 1191 type CRYPT_PRIVATE_KEY_INFO as _CRYPT_PRIVATE_KEY_INFO
 1192 type PCRYPT_PRIVATE_KEY_INFO as _CRYPT_PRIVATE_KEY_INFO ptr
 1193 
 1194 type _CRYPT_ENCRYPTED_PRIVATE_KEY_INFO
 1195     EncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 1196     EncryptedPrivateKey as CRYPT_DATA_BLOB
 1197 end type
 1198 
 1199 type CRYPT_ENCRYPTED_PRIVATE_KEY_INFO as _CRYPT_ENCRYPTED_PRIVATE_KEY_INFO
 1200 type PCRYPT_ENCRYPTED_PRIVATE_KEY_INFO as _CRYPT_ENCRYPTED_PRIVATE_KEY_INFO ptr
 1201 type PCRYPT_DECRYPT_PRIVATE_KEY_FUNC as function(byval Algorithm as CRYPT_ALGORITHM_IDENTIFIER, byval EncryptedPrivateKey as CRYPT_DATA_BLOB, byval pbClearTextKey as UBYTE ptr, byval pcbClearTextKey as DWORD ptr, byval pVoidDecryptFunc as LPVOID) as WINBOOL
 1202 type PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC as function(byval pAlgorithm as CRYPT_ALGORITHM_IDENTIFIER ptr, byval pClearTextPrivateKey as CRYPT_DATA_BLOB ptr, byval pbEncryptedKey as UBYTE ptr, byval pcbEncryptedKey as DWORD ptr, byval pVoidEncryptFunc as LPVOID) as WINBOOL
 1203 type PCRYPT_RESOLVE_HCRYPTPROV_FUNC as function(byval pPrivateKeyInfo as CRYPT_PRIVATE_KEY_INFO ptr, byval phCryptProv as HCRYPTPROV ptr, byval pVoidResolveFunc as LPVOID) as WINBOOL
 1204 
 1205 type _CRYPT_PKCS8_IMPORT_PARAMS
 1206     PrivateKey as CRYPT_DIGEST_BLOB
 1207     pResolvehCryptProvFunc as PCRYPT_RESOLVE_HCRYPTPROV_FUNC
 1208     pVoidResolveFunc as LPVOID
 1209     pDecryptPrivateKeyFunc as PCRYPT_DECRYPT_PRIVATE_KEY_FUNC
 1210     pVoidDecryptFunc as LPVOID
 1211 end type
 1212 
 1213 type CRYPT_PKCS8_IMPORT_PARAMS as _CRYPT_PKCS8_IMPORT_PARAMS
 1214 type PCRYPT_PKCS8_IMPORT_PARAMS as _CRYPT_PKCS8_IMPORT_PARAMS ptr
 1215 type CRYPT_PRIVATE_KEY_BLOB_AND_PARAMS as _CRYPT_PKCS8_IMPORT_PARAMS
 1216 type PCRYPT_PRIVATE_KEY_BLOB_AND_PARAMS as _CRYPT_PKCS8_IMPORT_PARAMS ptr
 1217 
 1218 type _CRYPT_PKCS8_EXPORT_PARAMS
 1219     hCryptProv as HCRYPTPROV
 1220     dwKeySpec as DWORD
 1221     pszPrivateKeyObjId as LPSTR
 1222     pEncryptPrivateKeyFunc as PCRYPT_ENCRYPT_PRIVATE_KEY_FUNC
 1223     pVoidEncryptFunc as LPVOID
 1224 end type
 1225 
 1226 type CRYPT_PKCS8_EXPORT_PARAMS as _CRYPT_PKCS8_EXPORT_PARAMS
 1227 type PCRYPT_PKCS8_EXPORT_PARAMS as _CRYPT_PKCS8_EXPORT_PARAMS ptr
 1228 
 1229 type _CERT_INFO
 1230     dwVersion as DWORD
 1231     SerialNumber as CRYPT_INTEGER_BLOB
 1232     SignatureAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 1233     Issuer as CERT_NAME_BLOB
 1234     NotBefore as FILETIME
 1235     NotAfter as FILETIME
 1236     Subject as CERT_NAME_BLOB
 1237     SubjectPublicKeyInfo as CERT_PUBLIC_KEY_INFO
 1238     IssuerUniqueId as CRYPT_BIT_BLOB
 1239     SubjectUniqueId as CRYPT_BIT_BLOB
 1240     cExtension as DWORD
 1241     rgExtension as PCERT_EXTENSION
 1242 end type
 1243 
 1244 type CERT_INFO as _CERT_INFO
 1245 type PCERT_INFO as _CERT_INFO ptr
 1246 const CERT_V1 = 0
 1247 const CERT_V2 = 1
 1248 const CERT_V3 = 2
 1249 const CERT_INFO_VERSION_FLAG = 1
 1250 const CERT_INFO_SERIAL_NUMBER_FLAG = 2
 1251 const CERT_INFO_SIGNATURE_ALGORITHM_FLAG = 3
 1252 const CERT_INFO_ISSUER_FLAG = 4
 1253 const CERT_INFO_NOT_BEFORE_FLAG = 5
 1254 const CERT_INFO_NOT_AFTER_FLAG = 6
 1255 const CERT_INFO_SUBJECT_FLAG = 7
 1256 const CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG = 8
 1257 const CERT_INFO_ISSUER_UNIQUE_ID_FLAG = 9
 1258 const CERT_INFO_SUBJECT_UNIQUE_ID_FLAG = 10
 1259 const CERT_INFO_EXTENSION_FLAG = 11
 1260 
 1261 type _CRL_ENTRY
 1262     SerialNumber as CRYPT_INTEGER_BLOB
 1263     RevocationDate as FILETIME
 1264     cExtension as DWORD
 1265     rgExtension as PCERT_EXTENSION
 1266 end type
 1267 
 1268 type CRL_ENTRY as _CRL_ENTRY
 1269 type PCRL_ENTRY as _CRL_ENTRY ptr
 1270 
 1271 type _CRL_INFO
 1272     dwVersion as DWORD
 1273     SignatureAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 1274     Issuer as CERT_NAME_BLOB
 1275     ThisUpdate as FILETIME
 1276     NextUpdate as FILETIME
 1277     cCRLEntry as DWORD
 1278     rgCRLEntry as PCRL_ENTRY
 1279     cExtension as DWORD
 1280     rgExtension as PCERT_EXTENSION
 1281 end type
 1282 
 1283 type CRL_INFO as _CRL_INFO
 1284 type PCRL_INFO as _CRL_INFO ptr
 1285 const CRL_V1 = 0
 1286 const CRL_V2 = 1
 1287 const CERT_BUNDLE_CERTIFICATE = 0
 1288 const CERT_BUNDLE_CRL = 1
 1289 
 1290 type _CERT_OR_CRL_BLOB
 1291     dwChoice as DWORD
 1292     cbEncoded as DWORD
 1293     pbEncoded as UBYTE ptr
 1294 end type
 1295 
 1296 type CERT_OR_CRL_BLOB as _CERT_OR_CRL_BLOB
 1297 type PCERT_OR_CRL_BLOB as _CERT_OR_CRL_BLOB ptr
 1298 
 1299 type _CERT_OR_CRL_BUNDLE
 1300     cItem as DWORD
 1301     rgItem as PCERT_OR_CRL_BLOB
 1302 end type
 1303 
 1304 type CERT_OR_CRL_BUNDLE as _CERT_OR_CRL_BUNDLE
 1305 type PCERT_OR_CRL_BUNDLE as _CERT_OR_CRL_BUNDLE ptr
 1306 
 1307 type _CERT_REQUEST_INFO
 1308     dwVersion as DWORD
 1309     Subject as CERT_NAME_BLOB
 1310     SubjectPublicKeyInfo as CERT_PUBLIC_KEY_INFO
 1311     cAttribute as DWORD
 1312     rgAttribute as PCRYPT_ATTRIBUTE
 1313 end type
 1314 
 1315 type CERT_REQUEST_INFO as _CERT_REQUEST_INFO
 1316 type PCERT_REQUEST_INFO as _CERT_REQUEST_INFO ptr
 1317 const CERT_REQUEST_V1 = 0
 1318 
 1319 type _CERT_KEYGEN_REQUEST_INFO
 1320     dwVersion as DWORD
 1321     SubjectPublicKeyInfo as CERT_PUBLIC_KEY_INFO
 1322     pwszChallengeString as LPWSTR
 1323 end type
 1324 
 1325 type CERT_KEYGEN_REQUEST_INFO as _CERT_KEYGEN_REQUEST_INFO
 1326 type PCERT_KEYGEN_REQUEST_INFO as _CERT_KEYGEN_REQUEST_INFO ptr
 1327 const CERT_KEYGEN_REQUEST_V1 = 0
 1328 
 1329 type _CERT_SIGNED_CONTENT_INFO
 1330     ToBeSigned as CRYPT_DER_BLOB
 1331     SignatureAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 1332     Signature as CRYPT_BIT_BLOB
 1333 end type
 1334 
 1335 type CERT_SIGNED_CONTENT_INFO as _CERT_SIGNED_CONTENT_INFO
 1336 type PCERT_SIGNED_CONTENT_INFO as _CERT_SIGNED_CONTENT_INFO ptr
 1337 
 1338 type _CTL_USAGE
 1339     cUsageIdentifier as DWORD
 1340     rgpszUsageIdentifier as LPSTR ptr
 1341 end type
 1342 
 1343 type CTL_USAGE as _CTL_USAGE
 1344 type PCTL_USAGE as _CTL_USAGE ptr
 1345 type CERT_ENHKEY_USAGE as _CTL_USAGE
 1346 type PCERT_ENHKEY_USAGE as _CTL_USAGE ptr
 1347 type PCCTL_USAGE as const CTL_USAGE ptr
 1348 type PCCERT_ENHKEY_USAGE as const CERT_ENHKEY_USAGE ptr
 1349 
 1350 type _CTL_ENTRY
 1351     SubjectIdentifier as CRYPT_DATA_BLOB
 1352     cAttribute as DWORD
 1353     rgAttribute as PCRYPT_ATTRIBUTE
 1354 end type
 1355 
 1356 type CTL_ENTRY as _CTL_ENTRY
 1357 type PCTL_ENTRY as _CTL_ENTRY ptr
 1358 
 1359 type _CTL_INFO
 1360     dwVersion as DWORD
 1361     SubjectUsage as CTL_USAGE
 1362     ListIdentifier as CRYPT_DATA_BLOB
 1363     SequenceNumber as CRYPT_INTEGER_BLOB
 1364     ThisUpdate as FILETIME
 1365     NextUpdate as FILETIME
 1366     SubjectAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 1367     cCTLEntry as DWORD
 1368     rgCTLEntry as PCTL_ENTRY
 1369     cExtension as DWORD
 1370     rgExtension as PCERT_EXTENSION
 1371 end type
 1372 
 1373 type CTL_INFO as _CTL_INFO
 1374 type PCTL_INFO as _CTL_INFO ptr
 1375 const CTL_V1 = 0
 1376 
 1377 type _CRYPT_TIME_STAMP_REQUEST_INFO
 1378     pszTimeStampAlgorithm as LPSTR
 1379     pszContentType as LPSTR
 1380     Content as CRYPT_OBJID_BLOB
 1381     cAttribute as DWORD
 1382     rgAttribute as PCRYPT_ATTRIBUTE
 1383 end type
 1384 
 1385 type CRYPT_TIME_STAMP_REQUEST_INFO as _CRYPT_TIME_STAMP_REQUEST_INFO
 1386 type PCRYPT_TIME_STAMP_REQUEST_INFO as _CRYPT_TIME_STAMP_REQUEST_INFO ptr
 1387 
 1388 type _CRYPT_ENROLLMENT_NAME_VALUE_PAIR
 1389     pwszName as LPWSTR
 1390     pwszValue as LPWSTR
 1391 end type
 1392 
 1393 type CRYPT_ENROLLMENT_NAME_VALUE_PAIR as _CRYPT_ENROLLMENT_NAME_VALUE_PAIR
 1394 type PCRYPT_ENROLLMENT_NAME_VALUE_PAIR as _CRYPT_ENROLLMENT_NAME_VALUE_PAIR ptr
 1395 
 1396 type _CRYPT_CSP_PROVIDER
 1397     dwKeySpec as DWORD
 1398     pwszProviderName as LPWSTR
 1399     Signature as CRYPT_BIT_BLOB
 1400 end type
 1401 
 1402 type CRYPT_CSP_PROVIDER as _CRYPT_CSP_PROVIDER
 1403 type PCRYPT_CSP_PROVIDER as _CRYPT_CSP_PROVIDER ptr
 1404 const CERT_ENCODING_TYPE_MASK = &h0000ffff
 1405 const CMSG_ENCODING_TYPE_MASK = &hffff0000
 1406 #define GET_CERT_ENCODING_TYPE(T) (T and CERT_ENCODING_TYPE_MASK)
 1407 #define GET_CMSG_ENCODING_TYPE(T) (T and CMSG_ENCODING_TYPE_MASK)
 1408 const CRYPT_ASN_ENCODING = &h1
 1409 const CRYPT_NDR_ENCODING = &h2
 1410 const X509_ASN_ENCODING = &h1
 1411 const X509_NDR_ENCODING = &h2
 1412 const PKCS_7_ASN_ENCODING = &h10000
 1413 const PKCS_7_NDR_ENCODING = &h20000
 1414 declare function CryptFormatObject(byval dwCertEncodingType as DWORD, byval dwFormatType as DWORD, byval dwFormatStrType as DWORD, byval pFormatStruct as any ptr, byval lpszStructType as LPCSTR, byval pbEncoded as const UBYTE ptr, byval cbEncoded as DWORD, byval pbFormat as any ptr, byval pcbFormat as DWORD ptr) as WINBOOL
 1415 const CRYPT_FORMAT_STR_MULTI_LINE = &h1
 1416 const CRYPT_FORMAT_STR_NO_HEX = &h10
 1417 const CRYPT_FORMAT_SIMPLE = &h1
 1418 const CRYPT_FORMAT_X509 = &h2
 1419 const CRYPT_FORMAT_OID = &h4
 1420 const CRYPT_FORMAT_RDN_SEMICOLON = &h100
 1421 const CRYPT_FORMAT_RDN_CRLF = &h200
 1422 const CRYPT_FORMAT_RDN_UNQUOTE = &h400
 1423 const CRYPT_FORMAT_RDN_REVERSE = &h800
 1424 const CRYPT_FORMAT_COMMA = &h1000
 1425 const CRYPT_FORMAT_SEMICOLON = CRYPT_FORMAT_RDN_SEMICOLON
 1426 const CRYPT_FORMAT_CRLF = CRYPT_FORMAT_RDN_CRLF
 1427 type PFN_CRYPT_ALLOC as function(byval cbSize as uinteger) as LPVOID
 1428 type PFN_CRYPT_FREE as sub(byval pv as LPVOID)
 1429 
 1430 type _CRYPT_ENCODE_PARA
 1431     cbSize as DWORD
 1432     pfnAlloc as PFN_CRYPT_ALLOC
 1433     pfnFree as PFN_CRYPT_FREE
 1434 end type
 1435 
 1436 type CRYPT_ENCODE_PARA as _CRYPT_ENCODE_PARA
 1437 type PCRYPT_ENCODE_PARA as _CRYPT_ENCODE_PARA ptr
 1438 declare function CryptEncodeObjectEx(byval dwCertEncodingType as DWORD, byval lpszStructType as LPCSTR, byval pvStructInfo as const any ptr, byval dwFlags as DWORD, byval pEncodePara as PCRYPT_ENCODE_PARA, byval pvEncoded as any ptr, byval pcbEncoded as DWORD ptr) as WINBOOL
 1439 declare function CryptEncodeObject(byval dwCertEncodingType as DWORD, byval lpszStructType as LPCSTR, byval pvStructInfo as const any ptr, byval pbEncoded as UBYTE ptr, byval pcbEncoded as DWORD ptr) as WINBOOL
 1440 const CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG = &h8
 1441 const CRYPT_ENCODE_ALLOC_FLAG = &h8000
 1442 const CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG = CERT_RDN_ENABLE_T61_UNICODE_FLAG
 1443 const CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG = CERT_RDN_ENABLE_UTF8_UNICODE_FLAG
 1444 const CRYPT_UNICODE_NAME_ENCODE_FORCE_UTF8_UNICODE_FLAG = CERT_RDN_FORCE_UTF8_UNICODE_FLAG
 1445 const CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG = CERT_RDN_DISABLE_CHECK_TYPE_FLAG
 1446 const CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG = &h10000
 1447 const CRYPT_ENCODE_ENABLE_PUNYCODE_FLAG = &h20000
 1448 const CRYPT_ENCODE_ENABLE_UTF8PERCENT_FLAG = &h40000
 1449 const CRYPT_ENCODE_ENABLE_IA5CONVERSION_FLAG = CRYPT_ENCODE_ENABLE_PUNYCODE_FLAG or CRYPT_ENCODE_ENABLE_UTF8PERCENT_FLAG
 1450 
 1451 type _CRYPT_DECODE_PARA
 1452     cbSize as DWORD
 1453     pfnAlloc as PFN_CRYPT_ALLOC
 1454     pfnFree as PFN_CRYPT_FREE
 1455 end type
 1456 
 1457 type CRYPT_DECODE_PARA as _CRYPT_DECODE_PARA
 1458 type PCRYPT_DECODE_PARA as _CRYPT_DECODE_PARA ptr
 1459 declare function CryptDecodeObjectEx(byval dwCertEncodingType as DWORD, byval lpszStructType as LPCSTR, byval pbEncoded as const UBYTE ptr, byval cbEncoded as DWORD, byval dwFlags as DWORD, byval pDecodePara as PCRYPT_DECODE_PARA, byval pvStructInfo as any ptr, byval pcbStructInfo as DWORD ptr) as WINBOOL
 1460 declare function CryptDecodeObject(byval dwCertEncodingType as DWORD, byval lpszStructType as LPCSTR, byval pbEncoded as const UBYTE ptr, byval cbEncoded as DWORD, byval dwFlags as DWORD, byval pvStructInfo as any ptr, byval pcbStructInfo as DWORD ptr) as WINBOOL
 1461 const CRYPT_DECODE_NOCOPY_FLAG = &h1
 1462 const CRYPT_DECODE_TO_BE_SIGNED_FLAG = &h2
 1463 const CRYPT_DECODE_SHARE_OID_STRING_FLAG = &h4
 1464 const CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG = &h8
 1465 const CRYPT_DECODE_ALLOC_FLAG = &h8000
 1466 const CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG = CERT_RDN_DISABLE_IE4_UTF8_FLAG
 1467 const CRYPT_DECODE_ENABLE_PUNYCODE_FLAG = &h2000000
 1468 const CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG = &h4000000
 1469 const CRYPT_DECODE_ENABLE_IA5CONVERSION_FLAG = CRYPT_DECODE_ENABLE_PUNYCODE_FLAG or CRYPT_DECODE_ENABLE_UTF8PERCENT_FLAG
 1470 const CRYPT_ENCODE_DECODE_NONE = 0
 1471 const X509_CERT = cast(LPCSTR, 1)
 1472 const X509_CERT_TO_BE_SIGNED = cast(LPCSTR, 2)
 1473 const X509_CERT_CRL_TO_BE_SIGNED = cast(LPCSTR, 3)
 1474 const X509_CERT_REQUEST_TO_BE_SIGNED = cast(LPCSTR, 4)
 1475 const X509_EXTENSIONS = cast(LPCSTR, 5)
 1476 const X509_NAME_VALUE = cast(LPCSTR, 6)
 1477 const X509_NAME = cast(LPCSTR, 7)
 1478 const X509_PUBLIC_KEY_INFO = cast(LPCSTR, 8)
 1479 const X509_AUTHORITY_KEY_ID = cast(LPCSTR, 9)
 1480 const X509_KEY_ATTRIBUTES = cast(LPCSTR, 10)
 1481 const X509_KEY_USAGE_RESTRICTION = cast(LPCSTR, 11)
 1482 const X509_ALTERNATE_NAME = cast(LPCSTR, 12)
 1483 const X509_BASIC_CONSTRAINTS = cast(LPCSTR, 13)
 1484 const X509_KEY_USAGE = cast(LPCSTR, 14)
 1485 const X509_BASIC_CONSTRAINTS2 = cast(LPCSTR, 15)
 1486 const X509_CERT_POLICIES = cast(LPCSTR, 16)
 1487 const PKCS_UTC_TIME = cast(LPCSTR, 17)
 1488 const PKCS_TIME_REQUEST = cast(LPCSTR, 18)
 1489 const RSA_CSP_PUBLICKEYBLOB = cast(LPCSTR, 19)
 1490 const X509_UNICODE_NAME = cast(LPCSTR, 20)
 1491 const X509_KEYGEN_REQUEST_TO_BE_SIGNED = cast(LPCSTR, 21)
 1492 const PKCS_ATTRIBUTE = cast(LPCSTR, 22)
 1493 const PKCS_CONTENT_INFO_SEQUENCE_OF_ANY = cast(LPCSTR, 23)
 1494 const X509_UNICODE_NAME_VALUE = cast(LPCSTR, 24)
 1495 const X509_ANY_STRING = X509_NAME_VALUE
 1496 const X509_UNICODE_ANY_STRING = X509_UNICODE_NAME_VALUE
 1497 const X509_OCTET_STRING = cast(LPCSTR, 25)
 1498 const X509_BITS = cast(LPCSTR, 26)
 1499 const X509_INTEGER = cast(LPCSTR, 27)
 1500 const X509_MULTI_BYTE_INTEGER = cast(LPCSTR, 28)
 1501 const X509_ENUMERATED = cast(LPCSTR, 29)
 1502 const X509_CHOICE_OF_TIME = cast(LPCSTR, 30)
 1503 const X509_AUTHORITY_KEY_ID2 = cast(LPCSTR, 31)
 1504 const X509_AUTHORITY_INFO_ACCESS = cast(LPCSTR, 32)
 1505 const X509_SUBJECT_INFO_ACCESS = X509_AUTHORITY_INFO_ACCESS
 1506 const X509_CRL_REASON_CODE = X509_ENUMERATED
 1507 const PKCS_CONTENT_INFO = cast(LPCSTR, 33)
 1508 const X509_SEQUENCE_OF_ANY = cast(LPCSTR, 34)
 1509 const X509_CRL_DIST_POINTS = cast(LPCSTR, 35)
 1510 const X509_ENHANCED_KEY_USAGE = cast(LPCSTR, 36)
 1511 const PKCS_CTL = cast(LPCSTR, 37)
 1512 const X509_MULTI_BYTE_UINT = cast(LPCSTR, 38)
 1513 const X509_DSS_PUBLICKEY = X509_MULTI_BYTE_UINT
 1514 const X509_DSS_PARAMETERS = cast(LPCSTR, 39)
 1515 const X509_DSS_SIGNATURE = cast(LPCSTR, 40)
 1516 const PKCS_RC2_CBC_PARAMETERS = cast(LPCSTR, 41)
 1517 const PKCS_SMIME_CAPABILITIES = cast(LPCSTR, 42)
 1518 const X509_QC_STATEMENTS_EXT = cast(LPCSTR, 42)
 1519 const PKCS_RSA_PRIVATE_KEY = cast(LPCSTR, 43)
 1520 const PKCS_PRIVATE_KEY_INFO = cast(LPCSTR, 44)
 1521 const PKCS_ENCRYPTED_PRIVATE_KEY_INFO = cast(LPCSTR, 45)
 1522 const X509_PKIX_POLICY_QUALIFIER_USERNOTICE = cast(LPCSTR, 46)
 1523 const X509_DH_PUBLICKEY = X509_MULTI_BYTE_UINT
 1524 const X509_DH_PARAMETERS = cast(LPCSTR, 47)
 1525 const X509_ECC_SIGNATURE = cast(LPCSTR, 47)
 1526 const PKCS_ATTRIBUTES = cast(LPCSTR, 48)
 1527 const PKCS_SORTED_CTL = cast(LPCSTR, 49)
 1528 const X942_DH_PARAMETERS = cast(LPCSTR, 50)
 1529 const X509_BITS_WITHOUT_TRAILING_ZEROES = cast(LPCSTR, 51)
 1530 const X942_OTHER_INFO = cast(LPCSTR, 52)
 1531 const X509_CERT_PAIR = cast(LPCSTR, 53)
 1532 const X509_ISSUING_DIST_POINT = cast(LPCSTR, 54)
 1533 const X509_NAME_CONSTRAINTS = cast(LPCSTR, 55)
 1534 const X509_POLICY_MAPPINGS = cast(LPCSTR, 56)
 1535 const X509_POLICY_CONSTRAINTS = cast(LPCSTR, 57)
 1536 const X509_CROSS_CERT_DIST_POINTS = cast(LPCSTR, 58)
 1537 const CMC_DATA = cast(LPCSTR, 59)
 1538 const CMC_RESPONSE = cast(LPCSTR, 60)
 1539 const CMC_STATUS = cast(LPCSTR, 61)
 1540 const CMC_ADD_EXTENSIONS = cast(LPCSTR, 62)
 1541 const CMC_ADD_ATTRIBUTES = cast(LPCSTR, 63)
 1542 const X509_CERTIFICATE_TEMPLATE = cast(LPCSTR, 64)
 1543 const OCSP_SIGNED_REQUEST = cast(LPCSTR, 65)
 1544 const OCSP_REQUEST = cast(LPCSTR, 66)
 1545 const OCSP_RESPONSE = cast(LPCSTR, 67)
 1546 const OCSP_BASIC_SIGNED_RESPONSE = cast(LPCSTR, 68)
 1547 const OCSP_BASIC_RESPONSE = cast(LPCSTR, 69)
 1548 const X509_LOGOTYPE_EXT = cast(LPCSTR, 70)
 1549 const X509_BIOMETRIC_EXT = cast(LPCSTR, 71)
 1550 const CNG_RSA_PUBLIC_KEY_BLOB = cast(LPCSTR, 72)
 1551 const X509_OBJECT_IDENTIFIER = cast(LPCSTR, 73)
 1552 const X509_ALGORITHM_IDENTIFIER = cast(LPCSTR, 74)
 1553 const PKCS_RSA_SSA_PSS_PARAMETERS = cast(LPCSTR, 75)
 1554 const PKCS_RSAES_OAEP_PARAMETERS = cast(LPCSTR, 76)
 1555 const ECC_CMS_SHARED_INFO = cast(LPCSTR, 77)
 1556 const TIMESTAMP_REQUEST = cast(LPCSTR, 78)
 1557 const TIMESTAMP_RESPONSE = cast(LPCSTR, 79)
 1558 const TIMESTAMP_INFO = cast(LPCSTR, 80)
 1559 const X509_CERT_BUNDLE = cast(LPCSTR, 81)
 1560 const X509_ECC_PRIVATE_KEY = cast(LPCSTR, 82)
 1561 const CNG_RSA_PRIVATE_KEY_BLOB = cast(LPCSTR, 83)
 1562 const PKCS7_SIGNER_INFO = cast(LPCSTR, 500)
 1563 const CMS_SIGNER_INFO = cast(LPCSTR, 501)
 1564 #define szOID_AUTHORITY_KEY_IDENTIFIER "2.5.29.1"
 1565 #define szOID_KEY_ATTRIBUTES "2.5.29.2"
 1566 #define szOID_CERT_POLICIES_95 "2.5.29.3"
 1567 #define szOID_KEY_USAGE_RESTRICTION "2.5.29.4"
 1568 #define szOID_SUBJECT_ALT_NAME "2.5.29.7"
 1569 #define szOID_ISSUER_ALT_NAME "2.5.29.8"
 1570 #define szOID_BASIC_CONSTRAINTS "2.5.29.10"
 1571 #define szOID_KEY_USAGE "2.5.29.15"
 1572 #define szOID_PRIVATEKEY_USAGE_PERIOD "2.5.29.16"
 1573 #define szOID_BASIC_CONSTRAINTS2 "2.5.29.19"
 1574 #define szOID_CERT_POLICIES "2.5.29.32"
 1575 #define szOID_ANY_CERT_POLICY "2.5.29.32.0"
 1576 #define szOID_INHIBIT_ANY_POLICY "2.5.29.54"
 1577 #define szOID_AUTHORITY_KEY_IDENTIFIER2 "2.5.29.35"
 1578 #define szOID_SUBJECT_KEY_IDENTIFIER "2.5.29.14"
 1579 #define szOID_SUBJECT_ALT_NAME2 "2.5.29.17"
 1580 #define szOID_ISSUER_ALT_NAME2 "2.5.29.18"
 1581 #define szOID_CRL_REASON_CODE "2.5.29.21"
 1582 #define szOID_REASON_CODE_HOLD "2.5.29.23"
 1583 #define szOID_CRL_DIST_POINTS "2.5.29.31"
 1584 #define szOID_ENHANCED_KEY_USAGE "2.5.29.37"
 1585 #define szOID_ANY_ENHANCED_KEY_USAGE "2.5.29.37.0"
 1586 #define szOID_CRL_NUMBER "2.5.29.20"
 1587 #define szOID_DELTA_CRL_INDICATOR "2.5.29.27"
 1588 #define szOID_ISSUING_DIST_POINT "2.5.29.28"
 1589 #define szOID_FRESHEST_CRL "2.5.29.46"
 1590 #define szOID_NAME_CONSTRAINTS "2.5.29.30"
 1591 #define szOID_POLICY_MAPPINGS "2.5.29.33"
 1592 #define szOID_LEGACY_POLICY_MAPPINGS "2.5.29.5"
 1593 #define szOID_POLICY_CONSTRAINTS "2.5.29.36"
 1594 #define szOID_RENEWAL_CERTIFICATE "1.3.6.1.4.1.311.13.1"
 1595 #define szOID_ENROLLMENT_NAME_VALUE_PAIR "1.3.6.1.4.1.311.13.2.1"
 1596 #define szOID_ENROLLMENT_CSP_PROVIDER "1.3.6.1.4.1.311.13.2.2"
 1597 #define szOID_OS_VERSION "1.3.6.1.4.1.311.13.2.3"
 1598 #define szOID_ENROLLMENT_AGENT "1.3.6.1.4.1.311.20.2.1"
 1599 #define szOID_PKIX "1.3.6.1.5.5.7"
 1600 #define szOID_PKIX_PE "1.3.6.1.5.5.7.1"
 1601 #define szOID_AUTHORITY_INFO_ACCESS "1.3.6.1.5.5.7.1.1"
 1602 #define szOID_SUBJECT_INFO_ACCESS "1.3.6.1.5.5.7.1.11"
 1603 #define szOID_BIOMETRIC_EXT "1.3.6.1.5.5.7.1.2"
 1604 #define szOID_QC_STATEMENTS_EXT "1.3.6.1.5.5.7.1.3"
 1605 #define szOID_LOGOTYPE_EXT "1.3.6.1.5.5.7.1.12"
 1606 #define szOID_CERT_EXTENSIONS "1.3.6.1.4.1.311.2.1.14"
 1607 #define szOID_NEXT_UPDATE_LOCATION "1.3.6.1.4.1.311.10.2"
 1608 #define szOID_REMOVE_CERTIFICATE "1.3.6.1.4.1.311.10.8.1"
 1609 #define szOID_CROSS_CERT_DIST_POINTS "1.3.6.1.4.1.311.10.9.1"
 1610 #define szOID_CTL "1.3.6.1.4.1.311.10.1"
 1611 #define szOID_SORTED_CTL "1.3.6.1.4.1.311.10.1.1"
 1612 #define szOID_SERIALIZED "1.3.6.1.4.1.311.10.3.3.1"
 1613 #define szOID_NT_PRINCIPAL_NAME "1.3.6.1.4.1.311.20.2.3"
 1614 #define szOID_INTERNATIONALIZED_EMAIL_ADDRESS "1.3.6.1.4.1.311.20.2.4"
 1615 #define szOID_PRODUCT_UPDATE "1.3.6.1.4.1.311.31.1"
 1616 #define szOID_ANY_APPLICATION_POLICY "1.3.6.1.4.1.311.10.12.1"
 1617 #define szOID_AUTO_ENROLL_CTL_USAGE "1.3.6.1.4.1.311.20.1"
 1618 #define szOID_ENROLL_CERTTYPE_EXTENSION "1.3.6.1.4.1.311.20.2"
 1619 #define szOID_CERT_MANIFOLD "1.3.6.1.4.1.311.20.3"
 1620 #define szOID_CERTSRV_CA_VERSION "1.3.6.1.4.1.311.21.1"
 1621 #define szOID_CERTSRV_PREVIOUS_CERT_HASH "1.3.6.1.4.1.311.21.2"
 1622 #define szOID_CRL_VIRTUAL_BASE "1.3.6.1.4.1.311.21.3"
 1623 #define szOID_CRL_NEXT_PUBLISH "1.3.6.1.4.1.311.21.4"
 1624 #define szOID_KP_CA_EXCHANGE "1.3.6.1.4.1.311.21.5"
 1625 #define szOID_KP_KEY_RECOVERY_AGENT "1.3.6.1.4.1.311.21.6"
 1626 #define szOID_CERTIFICATE_TEMPLATE "1.3.6.1.4.1.311.21.7"
 1627 #define szOID_ENTERPRISE_OID_ROOT "1.3.6.1.4.1.311.21.8"
 1628 #define szOID_RDN_DUMMY_SIGNER "1.3.6.1.4.1.311.21.9"
 1629 #define szOID_APPLICATION_CERT_POLICIES "1.3.6.1.4.1.311.21.10"
 1630 #define szOID_APPLICATION_POLICY_MAPPINGS "1.3.6.1.4.1.311.21.11"
 1631 #define szOID_APPLICATION_POLICY_CONSTRAINTS "1.3.6.1.4.1.311.21.12"
 1632 #define szOID_ARCHIVED_KEY_ATTR "1.3.6.1.4.1.311.21.13"
 1633 #define szOID_CRL_SELF_CDP "1.3.6.1.4.1.311.21.14"
 1634 #define szOID_REQUIRE_CERT_CHAIN_POLICY "1.3.6.1.4.1.311.21.15"
 1635 #define szOID_ARCHIVED_KEY_CERT_HASH "1.3.6.1.4.1.311.21.16"
 1636 #define szOID_ISSUED_CERT_HASH "1.3.6.1.4.1.311.21.17"
 1637 #define szOID_DS_EMAIL_REPLICATION "1.3.6.1.4.1.311.21.19"
 1638 #define szOID_REQUEST_CLIENT_INFO "1.3.6.1.4.1.311.21.20"
 1639 #define szOID_ENCRYPTED_KEY_HASH "1.3.6.1.4.1.311.21.21"
 1640 #define szOID_CERTSRV_CROSSCA_VERSION "1.3.6.1.4.1.311.21.22"
 1641 #define szOID_NTDS_REPLICATION "1.3.6.1.4.1.311.25.1"
 1642 #define szOID_SUBJECT_DIR_ATTRS "2.5.29.9"
 1643 #define szOID_PKIX_KP "1.3.6.1.5.5.7.3"
 1644 #define szOID_PKIX_KP_SERVER_AUTH "1.3.6.1.5.5.7.3.1"
 1645 #define szOID_PKIX_KP_CLIENT_AUTH "1.3.6.1.5.5.7.3.2"
 1646 #define szOID_PKIX_KP_CODE_SIGNING "1.3.6.1.5.5.7.3.3"
 1647 #define szOID_PKIX_KP_EMAIL_PROTECTION "1.3.6.1.5.5.7.3.4"
 1648 #define szOID_PKIX_KP_IPSEC_END_SYSTEM "1.3.6.1.5.5.7.3.5"
 1649 #define szOID_PKIX_KP_IPSEC_TUNNEL "1.3.6.1.5.5.7.3.6"
 1650 #define szOID_PKIX_KP_IPSEC_USER "1.3.6.1.5.5.7.3.7"
 1651 #define szOID_PKIX_KP_TIMESTAMP_SIGNING "1.3.6.1.5.5.7.3.8"
 1652 #define szOID_PKIX_KP_OCSP_SIGNING "1.3.6.1.5.5.7.3.9"
 1653 #define szOID_PKIX_OCSP_NONCE "1.3.6.1.5.5.7.48.1.2"
 1654 #define szOID_PKIX_OCSP_NOCHECK "1.3.6.1.5.5.7.48.1.5"
 1655 #define szOID_IPSEC_KP_IKE_INTERMEDIATE "1.3.6.1.5.5.8.2.2"
 1656 #define szOID_PKINIT_KP_KDC "1.3.6.1.5.2.3.5"
 1657 #define szOID_KP_CTL_USAGE_SIGNING "1.3.6.1.4.1.311.10.3.1"
 1658 #define szOID_KP_TIME_STAMP_SIGNING "1.3.6.1.4.1.311.10.3.2"
 1659 #define szOID_SERVER_GATED_CRYPTO "1.3.6.1.4.1.311.10.3.3"
 1660 #define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1"
 1661 #define szOID_KP_EFS "1.3.6.1.4.1.311.10.3.4"
 1662 #define szOID_EFS_RECOVERY "1.3.6.1.4.1.311.10.3.4.1"
 1663 #define szOID_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.5"
 1664 #define szOID_NT5_CRYPTO "1.3.6.1.4.1.311.10.3.6"
 1665 #define szOID_OEM_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.7"
 1666 #define szOID_EMBEDDED_NT_CRYPTO "1.3.6.1.4.1.311.10.3.8"
 1667 #define szOID_ROOT_LIST_SIGNER "1.3.6.1.4.1.311.10.3.9"
 1668 #define szOID_KP_QUALIFIED_SUBORDINATION "1.3.6.1.4.1.311.10.3.10"
 1669 #define szOID_KP_KEY_RECOVERY "1.3.6.1.4.1.311.10.3.11"
 1670 #define szOID_KP_DOCUMENT_SIGNING "1.3.6.1.4.1.311.10.3.12"
 1671 #define szOID_KP_LIFETIME_SIGNING "1.3.6.1.4.1.311.10.3.13"
 1672 #define szOID_KP_MOBILE_DEVICE_SOFTWARE "1.3.6.1.4.1.311.10.3.14"
 1673 #define szOID_KP_SMART_DISPLAY "1.3.6.1.4.1.311.10.3.15"
 1674 #define szOID_KP_CSP_SIGNATURE "1.3.6.1.4.1.311.10.3.16"
 1675 #define szOID_DRM "1.3.6.1.4.1.311.10.5.1"
 1676 #define szOID_DRM_INDIVIDUALIZATION "1.3.6.1.4.1.311.10.5.2"
 1677 #define szOID_LICENSES "1.3.6.1.4.1.311.10.6.1"
 1678 #define szOID_LICENSE_SERVER "1.3.6.1.4.1.311.10.6.2"
 1679 #define szOID_KP_SMARTCARD_LOGON "1.3.6.1.4.1.311.20.2.2"
 1680 #define szOID_KP_KERNEL_MODE_CODE_SIGNING "1.3.6.1.4.1.311.61.1.1"
 1681 #define szOID_KP_KERNEL_MODE_TRUSTED_BOOT_SIGNING "1.3.6.1.4.1.311.61.4.1"
 1682 #define szOID_REVOKED_LIST_SIGNER "1.3.6.1.4.1.311.10.3.19"
 1683 #define szOID_DISALLOWED_LIST "1.3.6.1.4.1.311.10.3.30"
 1684 #define szOID_KP_KERNEL_MODE_HAL_EXTENSION_SIGNING "1.3.6.1.4.1.311.61.5.1"
 1685 #define szOID_YESNO_TRUST_ATTR "1.3.6.1.4.1.311.10.4.1"
 1686 #define szOID_PKIX_POLICY_QUALIFIER_CPS "1.3.6.1.5.5.7.2.1"
 1687 #define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE "1.3.6.1.5.5.7.2.2"
 1688 #define szOID_ROOT_PROGRAM_FLAGS "1.3.6.1.4.1.311.60.1.1"
 1689 const CERT_ROOT_PROGRAM_FLAG_ORG = &h80
 1690 const CERT_ROOT_PROGRAM_FLAG_LSC = &h40
 1691 const CERT_ROOT_PROGRAM_FLAG_SUBJECT_LOGO = &h20
 1692 const CERT_ROOT_PROGRAM_FLAG_OU = &h10
 1693 const CERT_ROOT_PROGRAM_FLAG_ADDRESS = &h08
 1694 #define szOID_CERT_POLICIES_95_QUALIFIER1 "2.16.840.1.113733.1.7.1.1"
 1695 
 1696 type _CERT_EXTENSIONS
 1697     cExtension as DWORD
 1698     rgExtension as PCERT_EXTENSION
 1699 end type
 1700 
 1701 type CERT_EXTENSIONS as _CERT_EXTENSIONS
 1702 type PCERT_EXTENSIONS as _CERT_EXTENSIONS ptr
 1703 const CERT_UNICODE_RDN_ERR_INDEX_MASK = &h3ff
 1704 const CERT_UNICODE_RDN_ERR_INDEX_SHIFT = 22
 1705 const CERT_UNICODE_ATTR_ERR_INDEX_MASK = &h3f
 1706 const CERT_UNICODE_ATTR_ERR_INDEX_SHIFT = 16
 1707 const CERT_UNICODE_VALUE_ERR_INDEX_MASK = &hffff
 1708 const CERT_UNICODE_VALUE_ERR_INDEX_SHIFT = 0
 1709 #define GET_CERT_UNICODE_RDN_ERR_INDEX(X) ((X shr CERT_UNICODE_RDN_ERR_INDEX_SHIFT) and CERT_UNICODE_RDN_ERR_INDEX_MASK)
 1710 #define GET_CERT_UNICODE_ATTR_ERR_INDEX(X) ((X shr CERT_UNICODE_ATTR_ERR_INDEX_SHIFT) and CERT_UNICODE_ATTR_ERR_INDEX_MASK)
 1711 #define GET_CERT_UNICODE_VALUE_ERR_INDEX(X) (X and CERT_UNICODE_VALUE_ERR_INDEX_MASK)
 1712 
 1713 type _CERT_AUTHORITY_KEY_ID_INFO
 1714     KeyId as CRYPT_DATA_BLOB
 1715     CertIssuer as CERT_NAME_BLOB
 1716     CertSerialNumber as CRYPT_INTEGER_BLOB
 1717 end type
 1718 
 1719 type CERT_AUTHORITY_KEY_ID_INFO as _CERT_AUTHORITY_KEY_ID_INFO
 1720 type PCERT_AUTHORITY_KEY_ID_INFO as _CERT_AUTHORITY_KEY_ID_INFO ptr
 1721 
 1722 type _CERT_PRIVATE_KEY_VALIDITY
 1723     NotBefore as FILETIME
 1724     NotAfter as FILETIME
 1725 end type
 1726 
 1727 type CERT_PRIVATE_KEY_VALIDITY as _CERT_PRIVATE_KEY_VALIDITY
 1728 type PCERT_PRIVATE_KEY_VALIDITY as _CERT_PRIVATE_KEY_VALIDITY ptr
 1729 
 1730 type _CERT_KEY_ATTRIBUTES_INFO
 1731     KeyId as CRYPT_DATA_BLOB
 1732     IntendedKeyUsage as CRYPT_BIT_BLOB
 1733     pPrivateKeyUsagePeriod as PCERT_PRIVATE_KEY_VALIDITY
 1734 end type
 1735 
 1736 type CERT_KEY_ATTRIBUTES_INFO as _CERT_KEY_ATTRIBUTES_INFO
 1737 type PCERT_KEY_ATTRIBUTES_INFO as _CERT_KEY_ATTRIBUTES_INFO ptr
 1738 const CERT_ENCIPHER_ONLY_KEY_USAGE = &h01
 1739 const CERT_OFFLINE_CRL_SIGN_KEY_USAGE = &h02
 1740 const CERT_KEY_CERT_SIGN_KEY_USAGE = &h04
 1741 const CERT_KEY_AGREEMENT_KEY_USAGE = &h08
 1742 const CERT_DATA_ENCIPHERMENT_KEY_USAGE = &h10
 1743 const CERT_KEY_ENCIPHERMENT_KEY_USAGE = &h20
 1744 const CERT_NON_REPUDIATION_KEY_USAGE = &h40
 1745 const CERT_DIGITAL_SIGNATURE_KEY_USAGE = &h80
 1746 const CERT_DECIPHER_ONLY_KEY_USAGE = &h80
 1747 
 1748 type _CERT_POLICY_ID
 1749     cCertPolicyElementId as DWORD
 1750     rgpszCertPolicyElementId as LPSTR ptr
 1751 end type
 1752 
 1753 type CERT_POLICY_ID as _CERT_POLICY_ID
 1754 type PCERT_POLICY_ID as _CERT_POLICY_ID ptr
 1755 
 1756 type _CERT_KEY_USAGE_RESTRICTION_INFO
 1757     cCertPolicyId as DWORD
 1758     rgCertPolicyId as PCERT_POLICY_ID
 1759     RestrictedKeyUsage as CRYPT_BIT_BLOB
 1760 end type
 1761 
 1762 type CERT_KEY_USAGE_RESTRICTION_INFO as _CERT_KEY_USAGE_RESTRICTION_INFO
 1763 type PCERT_KEY_USAGE_RESTRICTION_INFO as _CERT_KEY_USAGE_RESTRICTION_INFO ptr
 1764 
 1765 type _CERT_OTHER_NAME
 1766     pszObjId as LPSTR
 1767     Value as CRYPT_OBJID_BLOB
 1768 end type
 1769 
 1770 type CERT_OTHER_NAME as _CERT_OTHER_NAME
 1771 type PCERT_OTHER_NAME as _CERT_OTHER_NAME ptr
 1772 
 1773 type _CERT_ALT_NAME_ENTRY
 1774     dwAltNameChoice as DWORD
 1775 
 1776     union
 1777         pOtherName as PCERT_OTHER_NAME
 1778         pwszRfc822Name as LPWSTR
 1779         pwszDNSName as LPWSTR
 1780         DirectoryName as CERT_NAME_BLOB
 1781         pwszURL as LPWSTR
 1782         IPAddress as CRYPT_DATA_BLOB
 1783         pszRegisteredID as LPSTR
 1784     end union
 1785 end type
 1786 
 1787 type CERT_ALT_NAME_ENTRY as _CERT_ALT_NAME_ENTRY
 1788 type PCERT_ALT_NAME_ENTRY as _CERT_ALT_NAME_ENTRY ptr
 1789 const CERT_ALT_NAME_OTHER_NAME = 1
 1790 const CERT_ALT_NAME_RFC822_NAME = 2
 1791 const CERT_ALT_NAME_DNS_NAME = 3
 1792 const CERT_ALT_NAME_X400_ADDRESS = 4
 1793 const CERT_ALT_NAME_DIRECTORY_NAME = 5
 1794 const CERT_ALT_NAME_EDI_PARTY_NAME = 6
 1795 const CERT_ALT_NAME_URL = 7
 1796 const CERT_ALT_NAME_IP_ADDRESS = 8
 1797 const CERT_ALT_NAME_REGISTERED_ID = 9
 1798 
 1799 type _CERT_ALT_NAME_INFO
 1800     cAltEntry as DWORD
 1801     rgAltEntry as PCERT_ALT_NAME_ENTRY
 1802 end type
 1803 
 1804 type CERT_ALT_NAME_INFO as _CERT_ALT_NAME_INFO
 1805 type PCERT_ALT_NAME_INFO as _CERT_ALT_NAME_INFO ptr
 1806 const CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK = &hff
 1807 const CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT = 16
 1808 const CERT_ALT_NAME_VALUE_ERR_INDEX_MASK = &h0000ffff
 1809 const CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT = 0
 1810 #define GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(X) ((X shr CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) and CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK)
 1811 #define GET_CERT_ALT_NAME_VALUE_ERR_INDEX(X) (X and CERT_ALT_NAME_VALUE_ERR_INDEX_MASK)
 1812 
 1813 type _CERT_BASIC_CONSTRAINTS_INFO
 1814     SubjectType as CRYPT_BIT_BLOB
 1815     fPathLenConstraint as WINBOOL
 1816     dwPathLenConstraint as DWORD
 1817     cSubtreesConstraint as DWORD
 1818     rgSubtreesConstraint as CERT_NAME_BLOB ptr
 1819 end type
 1820 
 1821 type CERT_BASIC_CONSTRAINTS_INFO as _CERT_BASIC_CONSTRAINTS_INFO
 1822 type PCERT_BASIC_CONSTRAINTS_INFO as _CERT_BASIC_CONSTRAINTS_INFO ptr
 1823 const CERT_CA_SUBJECT_FLAG = &h80
 1824 const CERT_END_ENTITY_SUBJECT_FLAG = &h40
 1825 
 1826 type _CERT_BASIC_CONSTRAINTS2_INFO
 1827     fCA as WINBOOL
 1828     fPathLenConstraint as WINBOOL
 1829     dwPathLenConstraint as DWORD
 1830 end type
 1831 
 1832 type CERT_BASIC_CONSTRAINTS2_INFO as _CERT_BASIC_CONSTRAINTS2_INFO
 1833 type PCERT_BASIC_CONSTRAINTS2_INFO as _CERT_BASIC_CONSTRAINTS2_INFO ptr
 1834 
 1835 type _CERT_POLICY_QUALIFIER_INFO
 1836     pszPolicyQualifierId as LPSTR
 1837     Qualifier as CRYPT_OBJID_BLOB
 1838 end type
 1839 
 1840 type CERT_POLICY_QUALIFIER_INFO as _CERT_POLICY_QUALIFIER_INFO
 1841 type PCERT_POLICY_QUALIFIER_INFO as _CERT_POLICY_QUALIFIER_INFO ptr
 1842 
 1843 type _CERT_POLICY_INFO
 1844     pszPolicyIdentifier as LPSTR
 1845     cPolicyQualifier as DWORD
 1846     rgPolicyQualifier as CERT_POLICY_QUALIFIER_INFO ptr
 1847 end type
 1848 
 1849 type CERT_POLICY_INFO as _CERT_POLICY_INFO
 1850 type PCERT_POLICY_INFO as _CERT_POLICY_INFO ptr
 1851 
 1852 type _CERT_POLICIES_INFO
 1853     cPolicyInfo as DWORD
 1854     rgPolicyInfo as CERT_POLICY_INFO ptr
 1855 end type
 1856 
 1857 type CERT_POLICIES_INFO as _CERT_POLICIES_INFO
 1858 type PCERT_POLICIES_INFO as _CERT_POLICIES_INFO ptr
 1859 
 1860 type _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE
 1861     pszOrganization as LPSTR
 1862     cNoticeNumbers as DWORD
 1863     rgNoticeNumbers as long ptr
 1864 end type
 1865 
 1866 type CERT_POLICY_QUALIFIER_NOTICE_REFERENCE as _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE
 1867 type PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE as _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE ptr
 1868 
 1869 type _CERT_POLICY_QUALIFIER_USER_NOTICE
 1870     pNoticeReference as CERT_POLICY_QUALIFIER_NOTICE_REFERENCE ptr
 1871     pszDisplayText as LPWSTR
 1872 end type
 1873 
 1874 type CERT_POLICY_QUALIFIER_USER_NOTICE as _CERT_POLICY_QUALIFIER_USER_NOTICE
 1875 type PCERT_POLICY_QUALIFIER_USER_NOTICE as _CERT_POLICY_QUALIFIER_USER_NOTICE ptr
 1876 
 1877 type _CPS_URLS
 1878     pszURL as LPWSTR
 1879     pAlgorithm as CRYPT_ALGORITHM_IDENTIFIER ptr
 1880     pDigest as CRYPT_DATA_BLOB ptr
 1881 end type
 1882 
 1883 type CPS_URLS as _CPS_URLS
 1884 type PCPS_URLS as _CPS_URLS ptr
 1885 
 1886 type _CERT_POLICY95_QUALIFIER1
 1887     pszPracticesReference as LPWSTR
 1888     pszNoticeIdentifier as LPSTR
 1889     pszNSINoticeIdentifier as LPSTR
 1890     cCPSURLs as DWORD
 1891     rgCPSURLs as CPS_URLS ptr
 1892 end type
 1893 
 1894 type CERT_POLICY95_QUALIFIER1 as _CERT_POLICY95_QUALIFIER1
 1895 type PCERT_POLICY95_QUALIFIER1 as _CERT_POLICY95_QUALIFIER1 ptr
 1896 
 1897 type _CERT_POLICY_MAPPING
 1898     pszIssuerDomainPolicy as LPSTR
 1899     pszSubjectDomainPolicy as LPSTR
 1900 end type
 1901 
 1902 type CERT_POLICY_MAPPING as _CERT_POLICY_MAPPING
 1903 type PCERT_POLICY_MAPPING as _CERT_POLICY_MAPPING ptr
 1904 
 1905 type _CERT_POLICY_MAPPINGS_INFO
 1906     cPolicyMapping as DWORD
 1907     rgPolicyMapping as PCERT_POLICY_MAPPING
 1908 end type
 1909 
 1910 type CERT_POLICY_MAPPINGS_INFO as _CERT_POLICY_MAPPINGS_INFO
 1911 type PCERT_POLICY_MAPPINGS_INFO as _CERT_POLICY_MAPPINGS_INFO ptr
 1912 
 1913 type _CERT_POLICY_CONSTRAINTS_INFO
 1914     fRequireExplicitPolicy as WINBOOL
 1915     dwRequireExplicitPolicySkipCerts as DWORD
 1916     fInhibitPolicyMapping as WINBOOL
 1917     dwInhibitPolicyMappingSkipCerts as DWORD
 1918 end type
 1919 
 1920 type CERT_POLICY_CONSTRAINTS_INFO as _CERT_POLICY_CONSTRAINTS_INFO
 1921 type PCERT_POLICY_CONSTRAINTS_INFO as _CERT_POLICY_CONSTRAINTS_INFO ptr
 1922 
 1923 type _CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY
 1924     pszObjId as LPSTR
 1925     cValue as DWORD
 1926     rgValue as PCRYPT_DER_BLOB
 1927 end type
 1928 
 1929 type CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY as _CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY
 1930 type PCRYPT_CONTENT_INFO_SEQUENCE_OF_ANY as _CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY ptr
 1931 
 1932 type _CRYPT_CONTENT_INFO
 1933     pszObjId as LPSTR
 1934     Content as CRYPT_DER_BLOB
 1935 end type
 1936 
 1937 type CRYPT_CONTENT_INFO as _CRYPT_CONTENT_INFO
 1938 type PCRYPT_CONTENT_INFO as _CRYPT_CONTENT_INFO ptr
 1939 
 1940 type _CRYPT_SEQUENCE_OF_ANY
 1941     cValue as DWORD
 1942     rgValue as PCRYPT_DER_BLOB
 1943 end type
 1944 
 1945 type CRYPT_SEQUENCE_OF_ANY as _CRYPT_SEQUENCE_OF_ANY
 1946 type PCRYPT_SEQUENCE_OF_ANY as _CRYPT_SEQUENCE_OF_ANY ptr
 1947 
 1948 type _CERT_AUTHORITY_KEY_ID2_INFO
 1949     KeyId as CRYPT_DATA_BLOB
 1950     AuthorityCertIssuer as CERT_ALT_NAME_INFO
 1951     AuthorityCertSerialNumber as CRYPT_INTEGER_BLOB
 1952 end type
 1953 
 1954 type CERT_AUTHORITY_KEY_ID2_INFO as _CERT_AUTHORITY_KEY_ID2_INFO
 1955 type PCERT_AUTHORITY_KEY_ID2_INFO as _CERT_AUTHORITY_KEY_ID2_INFO ptr
 1956 
 1957 type _CERT_ACCESS_DESCRIPTION
 1958     pszAccessMethod as LPSTR
 1959     AccessLocation as CERT_ALT_NAME_ENTRY
 1960 end type
 1961 
 1962 type CERT_ACCESS_DESCRIPTION as _CERT_ACCESS_DESCRIPTION
 1963 type PCERT_ACCESS_DESCRIPTION as _CERT_ACCESS_DESCRIPTION ptr
 1964 
 1965 type _CERT_AUTHORITY_INFO_ACCESS
 1966     cAccDescr as DWORD
 1967     rgAccDescr as PCERT_ACCESS_DESCRIPTION
 1968 end type
 1969 
 1970 type CERT_AUTHORITY_INFO_ACCESS as _CERT_AUTHORITY_INFO_ACCESS
 1971 type PCERT_AUTHORITY_INFO_ACCESS as _CERT_AUTHORITY_INFO_ACCESS ptr
 1972 type CERT_SUBJECT_INFO_ACCESS as CERT_AUTHORITY_INFO_ACCESS
 1973 type PCERT_SUBJECT_INFO_ACCESS as CERT_AUTHORITY_INFO_ACCESS ptr
 1974 
 1975 #define szOID_PKIX_ACC_DESCR "1.3.6.1.5.5.7.48"
 1976 #define szOID_PKIX_OCSP "1.3.6.1.5.5.7.48.1"
 1977 #define szOID_PKIX_CA_ISSUERS "1.3.6.1.5.5.7.48.2"
 1978 #define szOID_PKIX_TIME_STAMPING "1.3.6.1.5.5.7.48.3"
 1979 #define szOID_PKIX_CA_REPOSITORY "1.3.6.1.5.5.7.48.5"
 1980 const CRL_REASON_UNSPECIFIED = 0
 1981 const CRL_REASON_KEY_COMPROMISE = 1
 1982 const CRL_REASON_CA_COMPROMISE = 2
 1983 const CRL_REASON_AFFILIATION_CHANGED = 3
 1984 const CRL_REASON_SUPERSEDED = 4
 1985 const CRL_REASON_CESSATION_OF_OPERATION = 5
 1986 const CRL_REASON_CERTIFICATE_HOLD = 6
 1987 const CRL_REASON_REMOVE_FROM_CRL = 8
 1988 
 1989 type _CRL_DIST_POINT_NAME
 1990     dwDistPointNameChoice as DWORD
 1991 
 1992     union
 1993         FullName as CERT_ALT_NAME_INFO
 1994     end union
 1995 end type
 1996 
 1997 type CRL_DIST_POINT_NAME as _CRL_DIST_POINT_NAME
 1998 type PCRL_DIST_POINT_NAME as _CRL_DIST_POINT_NAME ptr
 1999 const CRL_DIST_POINT_NO_NAME = 0
 2000 const CRL_DIST_POINT_FULL_NAME = 1
 2001 const CRL_DIST_POINT_ISSUER_RDN_NAME = 2
 2002 
 2003 type _CRL_DIST_POINT
 2004     DistPointName as CRL_DIST_POINT_NAME
 2005     ReasonFlags as CRYPT_BIT_BLOB
 2006     CRLIssuer as CERT_ALT_NAME_INFO
 2007 end type
 2008 
 2009 type CRL_DIST_POINT as _CRL_DIST_POINT
 2010 type PCRL_DIST_POINT as _CRL_DIST_POINT ptr
 2011 const CRL_REASON_UNUSED_FLAG = &h80
 2012 const CRL_REASON_KEY_COMPROMISE_FLAG = &h40
 2013 const CRL_REASON_CA_COMPROMISE_FLAG = &h20
 2014 const CRL_REASON_AFFILIATION_CHANGED_FLAG = &h10
 2015 const CRL_REASON_SUPERSEDED_FLAG = &h08
 2016 const CRL_REASON_CESSATION_OF_OPERATION_FLAG = &h04
 2017 const CRL_REASON_CERTIFICATE_HOLD_FLAG = &h02
 2018 
 2019 type _CRL_DIST_POINTS_INFO
 2020     cDistPoint as DWORD
 2021     rgDistPoint as PCRL_DIST_POINT
 2022 end type
 2023 
 2024 type CRL_DIST_POINTS_INFO as _CRL_DIST_POINTS_INFO
 2025 type PCRL_DIST_POINTS_INFO as _CRL_DIST_POINTS_INFO ptr
 2026 const CRL_DIST_POINT_ERR_INDEX_MASK = &h7f
 2027 const CRL_DIST_POINT_ERR_INDEX_SHIFT = 24
 2028 #define GET_CRL_DIST_POINT_ERR_INDEX(X) ((X shr CRL_DIST_POINT_ERR_INDEX_SHIFT) and CRL_DIST_POINT_ERR_INDEX_MASK)
 2029 const CRL_DIST_POINT_ERR_CRL_ISSUER_BIT = &h80000000
 2030 #define IS_CRL_DIST_POINT_ERR_CRL_ISSUER(X) (0 <> (X and CRL_DIST_POINT_ERR_CRL_ISSUER_BIT))
 2031 
 2032 type _CROSS_CERT_DIST_POINTS_INFO
 2033     dwSyncDeltaTime as DWORD
 2034     cDistPoint as DWORD
 2035     rgDistPoint as PCERT_ALT_NAME_INFO
 2036 end type
 2037 
 2038 type CROSS_CERT_DIST_POINTS_INFO as _CROSS_CERT_DIST_POINTS_INFO
 2039 type PCROSS_CERT_DIST_POINTS_INFO as _CROSS_CERT_DIST_POINTS_INFO ptr
 2040 const CROSS_CERT_DIST_POINT_ERR_INDEX_MASK = &hff
 2041 const CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT = 24
 2042 #define GET_CROSS_CERT_DIST_POINT_ERR_INDEX(X) ((X shr CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT) and CROSS_CERT_DIST_POINT_ERR_INDEX_MASK)
 2043 
 2044 type _CERT_PAIR
 2045     Forward as CERT_BLOB
 2046     Reverse as CERT_BLOB
 2047 end type
 2048 
 2049 type CERT_PAIR as _CERT_PAIR
 2050 type PCERT_PAIR as _CERT_PAIR ptr
 2051 
 2052 type _CRL_ISSUING_DIST_POINT
 2053     DistPointName as CRL_DIST_POINT_NAME
 2054     fOnlyContainsUserCerts as WINBOOL
 2055     fOnlyContainsCACerts as WINBOOL
 2056     OnlySomeReasonFlags as CRYPT_BIT_BLOB
 2057     fIndirectCRL as WINBOOL
 2058 end type
 2059 
 2060 type CRL_ISSUING_DIST_POINT as _CRL_ISSUING_DIST_POINT
 2061 type PCRL_ISSUING_DIST_POINT as _CRL_ISSUING_DIST_POINT ptr
 2062 
 2063 type _CERT_GENERAL_SUBTREE
 2064     Base as CERT_ALT_NAME_ENTRY
 2065     dwMinimum as DWORD
 2066     fMaximum as WINBOOL
 2067     dwMaximum as DWORD
 2068 end type
 2069 
 2070 type CERT_GENERAL_SUBTREE as _CERT_GENERAL_SUBTREE
 2071 type PCERT_GENERAL_SUBTREE as _CERT_GENERAL_SUBTREE ptr
 2072 
 2073 type _CERT_NAME_CONSTRAINTS_INFO
 2074     cPermittedSubtree as DWORD
 2075     rgPermittedSubtree as PCERT_GENERAL_SUBTREE
 2076     cExcludedSubtree as DWORD
 2077     rgExcludedSubtree as PCERT_GENERAL_SUBTREE
 2078 end type
 2079 
 2080 type CERT_NAME_CONSTRAINTS_INFO as _CERT_NAME_CONSTRAINTS_INFO
 2081 type PCERT_NAME_CONSTRAINTS_INFO as _CERT_NAME_CONSTRAINTS_INFO ptr
 2082 const CERT_EXCLUDED_SUBTREE_BIT = &h80000000
 2083 #define IS_CERT_EXCLUDED_SUBTREE(X) (0 <> (X and CERT_EXCLUDED_SUBTREE_BIT))
 2084 const SORTED_CTL_EXT_FLAGS_OFFSET = 0
 2085 const SORTED_CTL_EXT_COUNT_OFFSET = 4
 2086 const SORTED_CTL_EXT_MAX_COLLISION_OFFSET = 8
 2087 const SORTED_CTL_EXT_HASH_BUCKET_OFFSET = 12
 2088 const SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG = &h1
 2089 
 2090 type _CERT_DSS_PARAMETERS
 2091     p as CRYPT_UINT_BLOB
 2092     q as CRYPT_UINT_BLOB
 2093     g as CRYPT_UINT_BLOB
 2094 end type
 2095 
 2096 type CERT_DSS_PARAMETERS as _CERT_DSS_PARAMETERS
 2097 type PCERT_DSS_PARAMETERS as _CERT_DSS_PARAMETERS ptr
 2098 const CERT_DSS_R_LEN = 20
 2099 const CERT_DSS_S_LEN = 20
 2100 const CERT_DSS_SIGNATURE_LEN = CERT_DSS_R_LEN + CERT_DSS_S_LEN
 2101 const CERT_MAX_ASN_ENCODED_DSS_SIGNATURE_LEN = 48
 2102 
 2103 type _CERT_DH_PARAMETERS
 2104     p as CRYPT_UINT_BLOB
 2105     g as CRYPT_UINT_BLOB
 2106 end type
 2107 
 2108 type CERT_DH_PARAMETERS as _CERT_DH_PARAMETERS
 2109 type PCERT_DH_PARAMETERS as _CERT_DH_PARAMETERS ptr
 2110 
 2111 type _CERT_ECC_SIGNATURE
 2112     r as CRYPT_UINT_BLOB
 2113     s as CRYPT_UINT_BLOB
 2114 end type
 2115 
 2116 type CERT_ECC_SIGNATURE as _CERT_ECC_SIGNATURE
 2117 type PCERT_ECC_SIGNATURE as _CERT_ECC_SIGNATURE ptr
 2118 
 2119 type _CERT_X942_DH_VALIDATION_PARAMS
 2120     seed as CRYPT_BIT_BLOB
 2121     pgenCounter as DWORD
 2122 end type
 2123 
 2124 type CERT_X942_DH_VALIDATION_PARAMS as _CERT_X942_DH_VALIDATION_PARAMS
 2125 type PCERT_X942_DH_VALIDATION_PARAMS as _CERT_X942_DH_VALIDATION_PARAMS ptr
 2126 
 2127 type _CERT_X942_DH_PARAMETERS
 2128     p as CRYPT_UINT_BLOB
 2129     g as CRYPT_UINT_BLOB
 2130     q as CRYPT_UINT_BLOB
 2131     j as CRYPT_UINT_BLOB
 2132     pValidationParams as PCERT_X942_DH_VALIDATION_PARAMS
 2133 end type
 2134 
 2135 type CERT_X942_DH_PARAMETERS as _CERT_X942_DH_PARAMETERS
 2136 type PCERT_X942_DH_PARAMETERS as _CERT_X942_DH_PARAMETERS ptr
 2137 const CRYPT_X942_COUNTER_BYTE_LENGTH = 4
 2138 const CRYPT_X942_KEY_LENGTH_BYTE_LENGTH = 4
 2139 const CRYPT_X942_PUB_INFO_BYTE_LENGTH = 512 / 8
 2140 
 2141 type _CRYPT_X942_OTHER_INFO
 2142     pszContentEncryptionObjId as LPSTR
 2143     rgbCounter(0 to 3) as UBYTE
 2144     rgbKeyLength(0 to 3) as UBYTE
 2145     PubInfo as CRYPT_DATA_BLOB
 2146 end type
 2147 
 2148 type CRYPT_X942_OTHER_INFO as _CRYPT_X942_OTHER_INFO
 2149 type PCRYPT_X942_OTHER_INFO as _CRYPT_X942_OTHER_INFO ptr
 2150 const CRYPT_ECC_CMS_SHARED_INFO_SUPPPUBINFO_BYTE_LENGTH = 4
 2151 
 2152 type _CRYPT_ECC_CMS_SHARED_INFO
 2153     Algorithm as CRYPT_ALGORITHM_IDENTIFIER
 2154     EntityUInfo as CRYPT_DATA_BLOB
 2155     rgbSuppPubInfo(0 to 3) as UBYTE
 2156 end type
 2157 
 2158 type CRYPT_ECC_CMS_SHARED_INFO as _CRYPT_ECC_CMS_SHARED_INFO
 2159 type PCRYPT_ECC_CMS_SHARED_INFO as _CRYPT_ECC_CMS_SHARED_INFO ptr
 2160 
 2161 type _CRYPT_RC2_CBC_PARAMETERS
 2162     dwVersion as DWORD
 2163     fIV as WINBOOL
 2164     rgbIV(0 to 7) as UBYTE
 2165 end type
 2166 
 2167 type CRYPT_RC2_CBC_PARAMETERS as _CRYPT_RC2_CBC_PARAMETERS
 2168 type PCRYPT_RC2_CBC_PARAMETERS as _CRYPT_RC2_CBC_PARAMETERS ptr
 2169 const CRYPT_RC2_40BIT_VERSION = 160
 2170 const CRYPT_RC2_56BIT_VERSION = 52
 2171 const CRYPT_RC2_64BIT_VERSION = 120
 2172 const CRYPT_RC2_128BIT_VERSION = 58
 2173 
 2174 type _CRYPT_SMIME_CAPABILITY
 2175     pszObjId as LPSTR
 2176     Parameters as CRYPT_OBJID_BLOB
 2177 end type
 2178 
 2179 type CRYPT_SMIME_CAPABILITY as _CRYPT_SMIME_CAPABILITY
 2180 type PCRYPT_SMIME_CAPABILITY as _CRYPT_SMIME_CAPABILITY ptr
 2181 
 2182 type _CRYPT_SMIME_CAPABILITIES
 2183     cCapability as DWORD
 2184     rgCapability as PCRYPT_SMIME_CAPABILITY
 2185 end type
 2186 
 2187 type CRYPT_SMIME_CAPABILITIES as _CRYPT_SMIME_CAPABILITIES
 2188 type PCRYPT_SMIME_CAPABILITIES as _CRYPT_SMIME_CAPABILITIES ptr
 2189 
 2190 type _CERT_QC_STATEMENT
 2191     pszStatementId as LPSTR
 2192     StatementInfo as CRYPT_OBJID_BLOB
 2193 end type
 2194 
 2195 type CERT_QC_STATEMENT as _CERT_QC_STATEMENT
 2196 type PCERT_QC_STATEMENT as _CERT_QC_STATEMENT ptr
 2197 
 2198 type _CERT_QC_STATEMENTS_EXT_INFO
 2199     cStatement as DWORD
 2200     rgStatement as PCERT_QC_STATEMENT
 2201 end type
 2202 
 2203 type CERT_QC_STATEMENTS_EXT_INFO as _CERT_QC_STATEMENTS_EXT_INFO
 2204 type PCERT_QC_STATEMENTS_EXT_INFO as _CERT_QC_STATEMENTS_EXT_INFO ptr
 2205 #define szOID_QC_EU_COMPLIANCE "0.4.0.1862.1.1"
 2206 #define szOID_QC_SSCD "0.4.0.1862.1.4"
 2207 
 2208 type _CRYPT_MASK_GEN_ALGORITHM
 2209     pszObjId as LPSTR
 2210     HashAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 2211 end type
 2212 
 2213 type CRYPT_MASK_GEN_ALGORITHM as _CRYPT_MASK_GEN_ALGORITHM
 2214 type PCRYPT_MASK_GEN_ALGORITHM as _CRYPT_MASK_GEN_ALGORITHM ptr
 2215 
 2216 type _CRYPT_RSA_SSA_PSS_PARAMETERS
 2217     HashAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 2218     MaskGenAlgorithm as CRYPT_MASK_GEN_ALGORITHM
 2219     dwSaltLength as DWORD
 2220     dwTrailerField as DWORD
 2221 end type
 2222 
 2223 type CRYPT_RSA_SSA_PSS_PARAMETERS as _CRYPT_RSA_SSA_PSS_PARAMETERS
 2224 type PCRYPT_RSA_SSA_PSS_PARAMETERS as _CRYPT_RSA_SSA_PSS_PARAMETERS ptr
 2225 const PKCS_RSA_SSA_PSS_TRAILER_FIELD_BC = 1
 2226 
 2227 type _CRYPT_PSOURCE_ALGORITHM
 2228     pszObjId as LPSTR
 2229     EncodingParameters as CRYPT_DATA_BLOB
 2230 end type
 2231 
 2232 type CRYPT_PSOURCE_ALGORITHM as _CRYPT_PSOURCE_ALGORITHM
 2233 type PCRYPT_PSOURCE_ALGORITHM as _CRYPT_PSOURCE_ALGORITHM ptr
 2234 
 2235 type _CRYPT_RSAES_OAEP_PARAMETERS
 2236     HashAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 2237     MaskGenAlgorithm as CRYPT_MASK_GEN_ALGORITHM
 2238     PSourceAlgorithm as CRYPT_PSOURCE_ALGORITHM
 2239 end type
 2240 
 2241 type CRYPT_RSAES_OAEP_PARAMETERS as _CRYPT_RSAES_OAEP_PARAMETERS
 2242 type PCRYPT_RSAES_OAEP_PARAMETERS as _CRYPT_RSAES_OAEP_PARAMETERS ptr
 2243 #define szOID_VERISIGN_PRIVATE_6_9 "2.16.840.1.113733.1.6.9"
 2244 #define szOID_VERISIGN_ONSITE_JURISDICTION_HASH "2.16.840.1.113733.1.6.11"
 2245 #define szOID_VERISIGN_BITSTRING_6_13 "2.16.840.1.113733.1.6.13"
 2246 #define szOID_VERISIGN_ISS_STRONG_CRYPTO "2.16.840.1.113733.1.8.1"
 2247 #define szOID_NETSCAPE "2.16.840.1.113730"
 2248 #define szOID_NETSCAPE_CERT_EXTENSION "2.16.840.1.113730.1"
 2249 #define szOID_NETSCAPE_CERT_TYPE "2.16.840.1.113730.1.1"
 2250 #define szOID_NETSCAPE_BASE_URL "2.16.840.1.113730.1.2"
 2251 #define szOID_NETSCAPE_REVOCATION_URL "2.16.840.1.113730.1.3"
 2252 #define szOID_NETSCAPE_CA_REVOCATION_URL "2.16.840.1.113730.1.4"
 2253 #define szOID_NETSCAPE_CERT_RENEWAL_URL "2.16.840.1.113730.1.7"
 2254 #define szOID_NETSCAPE_CA_POLICY_URL "2.16.840.1.113730.1.8"
 2255 #define szOID_NETSCAPE_SSL_SERVER_NAME "2.16.840.1.113730.1.12"
 2256 #define szOID_NETSCAPE_COMMENT "2.16.840.1.113730.1.13"
 2257 #define szOID_NETSCAPE_DATA_TYPE "2.16.840.1.113730.2"
 2258 #define szOID_NETSCAPE_CERT_SEQUENCE "2.16.840.1.113730.2.5"
 2259 const NETSCAPE_SIGN_CA_CERT_TYPE = &h01
 2260 const NETSCAPE_SMIME_CA_CERT_TYPE = &h02
 2261 const NETSCAPE_SSL_CA_CERT_TYPE = &h04
 2262 const NETSCAPE_SIGN_CERT_TYPE = &h10
 2263 const NETSCAPE_SMIME_CERT_TYPE = &h20
 2264 const NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE = &h40
 2265 const NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE = &h80
 2266 #define szOID_CT_PKI_DATA "1.3.6.1.5.5.7.12.2"
 2267 #define szOID_CT_PKI_RESPONSE "1.3.6.1.5.5.7.12.3"
 2268 #define szOID_PKIX_NO_SIGNATURE "1.3.6.1.5.5.7.6.2"
 2269 #define szOID_CMC "1.3.6.1.5.5.7.7"
 2270 #define szOID_CMC_STATUS_INFO "1.3.6.1.5.5.7.7.1"
 2271 #define szOID_CMC_IDENTIFICATION "1.3.6.1.5.5.7.7.2"
 2272 #define szOID_CMC_IDENTITY_PROOF "1.3.6.1.5.5.7.7.3"
 2273 #define szOID_CMC_DATA_RETURN "1.3.6.1.5.5.7.7.4"
 2274 #define szOID_CMC_TRANSACTION_ID "1.3.6.1.5.5.7.7.5"
 2275 #define szOID_CMC_SENDER_NONCE "1.3.6.1.5.5.7.7.6"
 2276 #define szOID_CMC_RECIPIENT_NONCE "1.3.6.1.5.5.7.7.7"
 2277 #define szOID_CMC_ADD_EXTENSIONS "1.3.6.1.5.5.7.7.8"
 2278 #define szOID_CMC_ENCRYPTED_POP "1.3.6.1.5.5.7.7.9"
 2279 #define szOID_CMC_DECRYPTED_POP "1.3.6.1.5.5.7.7.10"
 2280 #define szOID_CMC_LRA_POP_WITNESS "1.3.6.1.5.5.7.7.11"
 2281 #define szOID_CMC_GET_CERT "1.3.6.1.5.5.7.7.15"
 2282 #define szOID_CMC_GET_CRL "1.3.6.1.5.5.7.7.16"
 2283 #define szOID_CMC_REVOKE_REQUEST "1.3.6.1.5.5.7.7.17"
 2284 #define szOID_CMC_REG_INFO "1.3.6.1.5.5.7.7.18"
 2285 #define szOID_CMC_RESPONSE_INFO "1.3.6.1.5.5.7.7.19"
 2286 #define szOID_CMC_QUERY_PENDING "1.3.6.1.5.5.7.7.21"
 2287 #define szOID_CMC_ID_POP_LINK_RANDOM "1.3.6.1.5.5.7.7.22"
 2288 #define szOID_CMC_ID_POP_LINK_WITNESS "1.3.6.1.5.5.7.7.23"
 2289 #define szOID_CMC_ID_CONFIRM_CERT_ACCEPTANCE "1.3.6.1.5.5.7.7.24"
 2290 #define szOID_CMC_ADD_ATTRIBUTES "1.3.6.1.4.1.311.10.10.1"
 2291 
 2292 type _CMC_TAGGED_ATTRIBUTE
 2293     dwBodyPartID as DWORD
 2294     Attribute as CRYPT_ATTRIBUTE
 2295 end type
 2296 
 2297 type CMC_TAGGED_ATTRIBUTE as _CMC_TAGGED_ATTRIBUTE
 2298 type PCMC_TAGGED_ATTRIBUTE as _CMC_TAGGED_ATTRIBUTE ptr
 2299 
 2300 type _CMC_TAGGED_CERT_REQUEST
 2301     dwBodyPartID as DWORD
 2302     SignedCertRequest as CRYPT_DER_BLOB
 2303 end type
 2304 
 2305 type CMC_TAGGED_CERT_REQUEST as _CMC_TAGGED_CERT_REQUEST
 2306 type PCMC_TAGGED_CERT_REQUEST as _CMC_TAGGED_CERT_REQUEST ptr
 2307 
 2308 type _CMC_TAGGED_REQUEST
 2309     dwTaggedRequestChoice as DWORD
 2310 
 2311     union
 2312         pTaggedCertRequest as PCMC_TAGGED_CERT_REQUEST
 2313     end union
 2314 end type
 2315 
 2316 type CMC_TAGGED_REQUEST as _CMC_TAGGED_REQUEST
 2317 type PCMC_TAGGED_REQUEST as _CMC_TAGGED_REQUEST ptr
 2318 const CMC_TAGGED_CERT_REQUEST_CHOICE = 1
 2319 
 2320 type _CMC_TAGGED_CONTENT_INFO
 2321     dwBodyPartID as DWORD
 2322     EncodedContentInfo as CRYPT_DER_BLOB
 2323 end type
 2324 
 2325 type CMC_TAGGED_CONTENT_INFO as _CMC_TAGGED_CONTENT_INFO
 2326 type PCMC_TAGGED_CONTENT_INFO as _CMC_TAGGED_CONTENT_INFO ptr
 2327 
 2328 type _CMC_TAGGED_OTHER_MSG
 2329     dwBodyPartID as DWORD
 2330     pszObjId as LPSTR
 2331     Value as CRYPT_OBJID_BLOB
 2332 end type
 2333 
 2334 type CMC_TAGGED_OTHER_MSG as _CMC_TAGGED_OTHER_MSG
 2335 type PCMC_TAGGED_OTHER_MSG as _CMC_TAGGED_OTHER_MSG ptr
 2336 
 2337 type _CMC_DATA_INFO
 2338     cTaggedAttribute as DWORD
 2339     rgTaggedAttribute as PCMC_TAGGED_ATTRIBUTE
 2340     cTaggedRequest as DWORD
 2341     rgTaggedRequest as PCMC_TAGGED_REQUEST
 2342     cTaggedContentInfo as DWORD
 2343     rgTaggedContentInfo as PCMC_TAGGED_CONTENT_INFO
 2344     cTaggedOtherMsg as DWORD
 2345     rgTaggedOtherMsg as PCMC_TAGGED_OTHER_MSG
 2346 end type
 2347 
 2348 type CMC_DATA_INFO as _CMC_DATA_INFO
 2349 type PCMC_DATA_INFO as _CMC_DATA_INFO ptr
 2350 
 2351 type _CMC_RESPONSE_INFO
 2352     cTaggedAttribute as DWORD
 2353     rgTaggedAttribute as PCMC_TAGGED_ATTRIBUTE
 2354     cTaggedContentInfo as DWORD
 2355     rgTaggedContentInfo as PCMC_TAGGED_CONTENT_INFO
 2356     cTaggedOtherMsg as DWORD
 2357     rgTaggedOtherMsg as PCMC_TAGGED_OTHER_MSG
 2358 end type
 2359 
 2360 type CMC_RESPONSE_INFO as _CMC_RESPONSE_INFO
 2361 type PCMC_RESPONSE_INFO as _CMC_RESPONSE_INFO ptr
 2362 
 2363 type _CMC_PEND_INFO
 2364     PendToken as CRYPT_DATA_BLOB
 2365     PendTime as FILETIME
 2366 end type
 2367 
 2368 type CMC_PEND_INFO as _CMC_PEND_INFO
 2369 type PCMC_PEND_INFO as _CMC_PEND_INFO ptr
 2370 
 2371 type _CMC_STATUS_INFO
 2372     dwStatus as DWORD
 2373     cBodyList as DWORD
 2374     rgdwBodyList as DWORD ptr
 2375     pwszStatusString as LPWSTR
 2376     dwOtherInfoChoice as DWORD
 2377 
 2378     union
 2379         dwFailInfo as DWORD
 2380         pPendInfo as PCMC_PEND_INFO
 2381     end union
 2382 end type
 2383 
 2384 type CMC_STATUS_INFO as _CMC_STATUS_INFO
 2385 type PCMC_STATUS_INFO as _CMC_STATUS_INFO ptr
 2386 const CMC_OTHER_INFO_NO_CHOICE = 0
 2387 const CMC_OTHER_INFO_FAIL_CHOICE = 1
 2388 const CMC_OTHER_INFO_PEND_CHOICE = 2
 2389 const CMC_STATUS_SUCCESS = 0
 2390 const CMC_STATUS_FAILED = 2
 2391 const CMC_STATUS_PENDING = 3
 2392 const CMC_STATUS_NO_SUPPORT = 4
 2393 const CMC_STATUS_CONFIRM_REQUIRED = 5
 2394 const CMC_FAIL_BAD_ALG = 0
 2395 const CMC_FAIL_BAD_MESSAGE_CHECK = 1
 2396 const CMC_FAIL_BAD_REQUEST = 2
 2397 const CMC_FAIL_BAD_TIME = 3
 2398 const CMC_FAIL_BAD_CERT_ID = 4
 2399 const CMC_FAIL_UNSUPORTED_EXT = 5
 2400 const CMC_FAIL_MUST_ARCHIVE_KEYS = 6
 2401 const CMC_FAIL_BAD_IDENTITY = 7
 2402 const CMC_FAIL_POP_REQUIRED = 8
 2403 const CMC_FAIL_POP_FAILED = 9
 2404 const CMC_FAIL_NO_KEY_REUSE = 10
 2405 const CMC_FAIL_INTERNAL_CA_ERROR = 11
 2406 const CMC_FAIL_TRY_LATER = 12
 2407 
 2408 type _CMC_ADD_EXTENSIONS_INFO
 2409     dwCmcDataReference as DWORD
 2410     cCertReference as DWORD
 2411     rgdwCertReference as DWORD ptr
 2412     cExtension as DWORD
 2413     rgExtension as PCERT_EXTENSION
 2414 end type
 2415 
 2416 type CMC_ADD_EXTENSIONS_INFO as _CMC_ADD_EXTENSIONS_INFO
 2417 type PCMC_ADD_EXTENSIONS_INFO as _CMC_ADD_EXTENSIONS_INFO ptr
 2418 
 2419 type _CMC_ADD_ATTRIBUTES_INFO
 2420     dwCmcDataReference as DWORD
 2421     cCertReference as DWORD
 2422     rgdwCertReference as DWORD ptr
 2423     cAttribute as DWORD
 2424     rgAttribute as PCRYPT_ATTRIBUTE
 2425 end type
 2426 
 2427 type CMC_ADD_ATTRIBUTES_INFO as _CMC_ADD_ATTRIBUTES_INFO
 2428 type PCMC_ADD_ATTRIBUTES_INFO as _CMC_ADD_ATTRIBUTES_INFO ptr
 2429 
 2430 type _CERT_TEMPLATE_EXT
 2431     pszObjId as LPSTR
 2432     dwMajorVersion as DWORD
 2433     fMinorVersion as WINBOOL
 2434     dwMinorVersion as DWORD
 2435 end type
 2436 
 2437 type CERT_TEMPLATE_EXT as _CERT_TEMPLATE_EXT
 2438 type PCERT_TEMPLATE_EXT as _CERT_TEMPLATE_EXT ptr
 2439 
 2440 type _CERT_HASHED_URL
 2441     HashAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 2442     Hash as CRYPT_HASH_BLOB
 2443     pwszUrl as LPWSTR
 2444 end type
 2445 
 2446 type CERT_HASHED_URL as _CERT_HASHED_URL
 2447 type PCERT_HASHED_URL as _CERT_HASHED_URL ptr
 2448 
 2449 type _CERT_LOGOTYPE_DETAILS
 2450     pwszMimeType as LPWSTR
 2451     cHashedUrl as DWORD
 2452     rgHashedUrl as PCERT_HASHED_URL
 2453 end type
 2454 
 2455 type CERT_LOGOTYPE_DETAILS as _CERT_LOGOTYPE_DETAILS
 2456 type PCERT_LOGOTYPE_DETAILS as _CERT_LOGOTYPE_DETAILS ptr
 2457 
 2458 type _CERT_LOGOTYPE_REFERENCE
 2459     cHashedUrl as DWORD
 2460     rgHashedUrl as PCERT_HASHED_URL
 2461 end type
 2462 
 2463 type CERT_LOGOTYPE_REFERENCE as _CERT_LOGOTYPE_REFERENCE
 2464 type PCERT_LOGOTYPE_REFERENCE as _CERT_LOGOTYPE_REFERENCE ptr
 2465 
 2466 type _CERT_LOGOTYPE_IMAGE_INFO
 2467     dwLogotypeImageInfoChoice as DWORD
 2468     dwFileSize as DWORD
 2469     dwXSize as DWORD
 2470     dwYSize as DWORD
 2471     dwLogotypeImageResolutionChoice as DWORD
 2472 
 2473     union
 2474         dwNumBits as DWORD
 2475         dwTableSize as DWORD
 2476     end union
 2477 
 2478     pwszLanguage as LPWSTR
 2479 end type
 2480 
 2481 type CERT_LOGOTYPE_IMAGE_INFO as _CERT_LOGOTYPE_IMAGE_INFO
 2482 type PCERT_LOGOTYPE_IMAGE_INFO as _CERT_LOGOTYPE_IMAGE_INFO ptr
 2483 const CERT_LOGOTYPE_GRAY_SCALE_IMAGE_INFO_CHOICE = 1
 2484 const CERT_LOGOTYPE_COLOR_IMAGE_INFO_CHOICE = 2
 2485 const CERT_LOGOTYPE_NO_IMAGE_RESOLUTION_CHOICE = 0
 2486 const CERT_LOGOTYPE_BITS_IMAGE_RESOLUTION_CHOICE = 1
 2487 const CERT_LOGOTYPE_TABLE_SIZE_IMAGE_RESOLUTION_CHOICE = 2
 2488 
 2489 type _CERT_LOGOTYPE_IMAGE
 2490     LogotypeDetails as CERT_LOGOTYPE_DETAILS
 2491     pLogotypeImageInfo as PCERT_LOGOTYPE_IMAGE_INFO
 2492 end type
 2493 
 2494 type CERT_LOGOTYPE_IMAGE as _CERT_LOGOTYPE_IMAGE
 2495 type PCERT_LOGOTYPE_IMAGE as _CERT_LOGOTYPE_IMAGE ptr
 2496 
 2497 type _CERT_LOGOTYPE_AUDIO_INFO
 2498     dwFileSize as DWORD
 2499     dwPlayTime as DWORD
 2500     dwChannels as DWORD
 2501     dwSampleRate as DWORD
 2502     pwszLanguage as LPWSTR
 2503 end type
 2504 
 2505 type CERT_LOGOTYPE_AUDIO_INFO as _CERT_LOGOTYPE_AUDIO_INFO
 2506 type PCERT_LOGOTYPE_AUDIO_INFO as _CERT_LOGOTYPE_AUDIO_INFO ptr
 2507 
 2508 type _CERT_LOGOTYPE_AUDIO
 2509     LogotypeDetails as CERT_LOGOTYPE_DETAILS
 2510     pLogotypeAudioInfo as PCERT_LOGOTYPE_AUDIO_INFO
 2511 end type
 2512 
 2513 type CERT_LOGOTYPE_AUDIO as _CERT_LOGOTYPE_AUDIO
 2514 type PCERT_LOGOTYPE_AUDIO as _CERT_LOGOTYPE_AUDIO ptr
 2515 
 2516 type _CERT_LOGOTYPE_DATA
 2517     cLogotypeImage as DWORD
 2518     rgLogotypeImage as PCERT_LOGOTYPE_IMAGE
 2519     cLogotypeAudio as DWORD
 2520     rgLogotypeAudio as PCERT_LOGOTYPE_AUDIO
 2521 end type
 2522 
 2523 type CERT_LOGOTYPE_DATA as _CERT_LOGOTYPE_DATA
 2524 type PCERT_LOGOTYPE_DATA as _CERT_LOGOTYPE_DATA ptr
 2525 
 2526 type _CERT_LOGOTYPE_INFO
 2527     dwLogotypeInfoChoice as DWORD
 2528 
 2529     union
 2530         pLogotypeDirectInfo as PCERT_LOGOTYPE_DATA
 2531         pLogotypeIndirectInfo as PCERT_LOGOTYPE_REFERENCE
 2532     end union
 2533 end type
 2534 
 2535 type CERT_LOGOTYPE_INFO as _CERT_LOGOTYPE_INFO
 2536 type PCERT_LOGOTYPE_INFO as _CERT_LOGOTYPE_INFO ptr
 2537 const CERT_LOGOTYPE_DIRECT_INFO_CHOICE = 1
 2538 const CERT_LOGOTYPE_INDIRECT_INFO_CHOICE = 2
 2539 
 2540 type _CERT_OTHER_LOGOTYPE_INFO
 2541     pszObjId as LPSTR
 2542     LogotypeInfo as CERT_LOGOTYPE_INFO
 2543 end type
 2544 
 2545 type CERT_OTHER_LOGOTYPE_INFO as _CERT_OTHER_LOGOTYPE_INFO
 2546 type PCERT_OTHER_LOGOTYPE_INFO as _CERT_OTHER_LOGOTYPE_INFO ptr
 2547 #define szOID_LOYALTY_OTHER_LOGOTYPE "1.3.6.1.5.5.7.20.1"
 2548 #define szOID_BACKGROUND_OTHER_LOGOTYPE "1.3.6.1.5.5.7.20.2"
 2549 
 2550 type _CERT_LOGOTYPE_EXT_INFO
 2551     cCommunityLogo as DWORD
 2552     rgCommunityLogo as PCERT_LOGOTYPE_INFO
 2553     pIssuerLogo as PCERT_LOGOTYPE_INFO
 2554     pSubjectLogo as PCERT_LOGOTYPE_INFO
 2555     cOtherLogo as DWORD
 2556     rgOtherLogo as PCERT_OTHER_LOGOTYPE_INFO
 2557 end type
 2558 
 2559 type CERT_LOGOTYPE_EXT_INFO as _CERT_LOGOTYPE_EXT_INFO
 2560 type PCERT_LOGOTYPE_EXT_INFO as _CERT_LOGOTYPE_EXT_INFO ptr
 2561 
 2562 type _CERT_BIOMETRIC_DATA
 2563     dwTypeOfBiometricDataChoice as DWORD
 2564 
 2565     union
 2566         dwPredefined as DWORD
 2567         pszObjId as LPSTR
 2568     end union
 2569 
 2570     HashedUrl as CERT_HASHED_URL
 2571 end type
 2572 
 2573 type CERT_BIOMETRIC_DATA as _CERT_BIOMETRIC_DATA
 2574 type PCERT_BIOMETRIC_DATA as _CERT_BIOMETRIC_DATA ptr
 2575 const CERT_BIOMETRIC_PREDEFINED_DATA_CHOICE = 1
 2576 const CERT_BIOMETRIC_OID_DATA_CHOICE = 2
 2577 const CERT_BIOMETRIC_PICTURE_TYPE = 0
 2578 const CERT_BIOMETRIC_SIGNATURE_TYPE = 1
 2579 
 2580 type _CERT_BIOMETRIC_EXT_INFO
 2581     cBiometricData as DWORD
 2582     rgBiometricData as PCERT_BIOMETRIC_DATA
 2583 end type
 2584 
 2585 type CERT_BIOMETRIC_EXT_INFO as _CERT_BIOMETRIC_EXT_INFO
 2586 type PCERT_BIOMETRIC_EXT_INFO as _CERT_BIOMETRIC_EXT_INFO ptr
 2587 
 2588 type _OCSP_SIGNATURE_INFO
 2589     SignatureAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 2590     Signature as CRYPT_BIT_BLOB
 2591     cCertEncoded as DWORD
 2592     rgCertEncoded as PCERT_BLOB
 2593 end type
 2594 
 2595 type OCSP_SIGNATURE_INFO as _OCSP_SIGNATURE_INFO
 2596 type POCSP_SIGNATURE_INFO as _OCSP_SIGNATURE_INFO ptr
 2597 
 2598 type _OCSP_SIGNED_REQUEST_INFO
 2599     ToBeSigned as CRYPT_DER_BLOB
 2600     pOptionalSignatureInfo as POCSP_SIGNATURE_INFO
 2601 end type
 2602 
 2603 type OCSP_SIGNED_REQUEST_INFO as _OCSP_SIGNED_REQUEST_INFO
 2604 type POCSP_SIGNED_REQUEST_INFO as _OCSP_SIGNED_REQUEST_INFO ptr
 2605 
 2606 type _OCSP_CERT_ID
 2607     HashAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 2608     IssuerNameHash as CRYPT_HASH_BLOB
 2609     IssuerKeyHash as CRYPT_HASH_BLOB
 2610     SerialNumber as CRYPT_INTEGER_BLOB
 2611 end type
 2612 
 2613 type OCSP_CERT_ID as _OCSP_CERT_ID
 2614 type POCSP_CERT_ID as _OCSP_CERT_ID ptr
 2615 
 2616 type _OCSP_REQUEST_ENTRY
 2617     CertId as OCSP_CERT_ID
 2618     cExtension as DWORD
 2619     rgExtension as PCERT_EXTENSION
 2620 end type
 2621 
 2622 type OCSP_REQUEST_ENTRY as _OCSP_REQUEST_ENTRY
 2623 type POCSP_REQUEST_ENTRY as _OCSP_REQUEST_ENTRY ptr
 2624 
 2625 type _OCSP_REQUEST_INFO
 2626     dwVersion as DWORD
 2627     pRequestorName as PCERT_ALT_NAME_ENTRY
 2628     cRequestEntry as DWORD
 2629     rgRequestEntry as POCSP_REQUEST_ENTRY
 2630     cExtension as DWORD
 2631     rgExtension as PCERT_EXTENSION
 2632 end type
 2633 
 2634 type OCSP_REQUEST_INFO as _OCSP_REQUEST_INFO
 2635 type POCSP_REQUEST_INFO as _OCSP_REQUEST_INFO ptr
 2636 const OCSP_REQUEST_V1 = 0
 2637 
 2638 type _OCSP_RESPONSE_INFO
 2639     dwStatus as DWORD
 2640     pszObjId as LPSTR
 2641     Value as CRYPT_OBJID_BLOB
 2642 end type
 2643 
 2644 type OCSP_RESPONSE_INFO as _OCSP_RESPONSE_INFO
 2645 type POCSP_RESPONSE_INFO as _OCSP_RESPONSE_INFO ptr
 2646 const OCSP_SUCCESSFUL_RESPONSE = 0
 2647 const OCSP_MALFORMED_REQUEST_RESPONSE = 1
 2648 const OCSP_INTERNAL_ERROR_RESPONSE = 2
 2649 const OCSP_TRY_LATER_RESPONSE = 3
 2650 const OCSP_SIG_REQUIRED_RESPONSE = 5
 2651 const OCSP_UNAUTHORIZED_RESPONSE = 6
 2652 #define szOID_PKIX_OCSP_BASIC_SIGNED_RESPONSE "1.3.6.1.5.5.7.48.1.1"
 2653 
 2654 type _OCSP_BASIC_SIGNED_RESPONSE_INFO
 2655     ToBeSigned as CRYPT_DER_BLOB
 2656     SignatureInfo as OCSP_SIGNATURE_INFO
 2657 end type
 2658 
 2659 type OCSP_BASIC_SIGNED_RESPONSE_INFO as _OCSP_BASIC_SIGNED_RESPONSE_INFO
 2660 type POCSP_BASIC_SIGNED_RESPONSE_INFO as _OCSP_BASIC_SIGNED_RESPONSE_INFO ptr
 2661 
 2662 type _OCSP_BASIC_REVOKED_INFO
 2663     RevocationDate as FILETIME
 2664     dwCrlReasonCode as DWORD
 2665 end type
 2666 
 2667 type OCSP_BASIC_REVOKED_INFO as _OCSP_BASIC_REVOKED_INFO
 2668 type POCSP_BASIC_REVOKED_INFO as _OCSP_BASIC_REVOKED_INFO ptr
 2669 
 2670 type _OCSP_BASIC_RESPONSE_ENTRY
 2671     CertId as OCSP_CERT_ID
 2672     dwCertStatus as DWORD
 2673 
 2674     union
 2675         pRevokedInfo as POCSP_BASIC_REVOKED_INFO
 2676     end union
 2677 
 2678     ThisUpdate as FILETIME
 2679     NextUpdate as FILETIME
 2680     cExtension as DWORD
 2681     rgExtension as PCERT_EXTENSION
 2682 end type
 2683 
 2684 type OCSP_BASIC_RESPONSE_ENTRY as _OCSP_BASIC_RESPONSE_ENTRY
 2685 type POCSP_BASIC_RESPONSE_ENTRY as _OCSP_BASIC_RESPONSE_ENTRY ptr
 2686 const OCSP_BASIC_GOOD_CERT_STATUS = 0
 2687 const OCSP_BASIC_REVOKED_CERT_STATUS = 1
 2688 const OCSP_BASIC_UNKNOWN_CERT_STATUS = 2
 2689 
 2690 type _OCSP_BASIC_RESPONSE_INFO
 2691     dwVersion as DWORD
 2692     dwResponderIdChoice as DWORD
 2693 
 2694     union
 2695         ByNameResponderId as CERT_NAME_BLOB
 2696         ByKeyResponderId as CRYPT_HASH_BLOB
 2697     end union
 2698 
 2699     ProducedAt as FILETIME
 2700     cResponseEntry as DWORD
 2701     rgResponseEntry as POCSP_BASIC_RESPONSE_ENTRY
 2702     cExtension as DWORD
 2703     rgExtension as PCERT_EXTENSION
 2704 end type
 2705 
 2706 type OCSP_BASIC_RESPONSE_INFO as _OCSP_BASIC_RESPONSE_INFO
 2707 type POCSP_BASIC_RESPONSE_INFO as _OCSP_BASIC_RESPONSE_INFO ptr
 2708 const OCSP_BASIC_RESPONSE_V1 = 0
 2709 const OCSP_BASIC_BY_NAME_RESPONDER_ID = 1
 2710 const OCSP_BASIC_BY_KEY_RESPONDER_ID = 2
 2711 type HCRYPTOIDFUNCSET as any ptr
 2712 type HCRYPTOIDFUNCADDR as any ptr
 2713 #define CRYPT_OID_ENCODE_OBJECT_FUNC "CryptDllEncodeObject"
 2714 #define CRYPT_OID_DECODE_OBJECT_FUNC "CryptDllDecodeObject"
 2715 #define CRYPT_OID_ENCODE_OBJECT_EX_FUNC "CryptDllEncodeObjectEx"
 2716 #define CRYPT_OID_DECODE_OBJECT_EX_FUNC "CryptDllDecodeObjectEx"
 2717 #define CRYPT_OID_CREATE_COM_OBJECT_FUNC "CryptDllCreateCOMObject"
 2718 #define CRYPT_OID_VERIFY_REVOCATION_FUNC "CertDllVerifyRevocation"
 2719 #define CRYPT_OID_VERIFY_CTL_USAGE_FUNC "CertDllVerifyCTLUsage"
 2720 #define CRYPT_OID_FORMAT_OBJECT_FUNC "CryptDllFormatObject"
 2721 #define CRYPT_OID_FIND_OID_INFO_FUNC "CryptDllFindOIDInfo"
 2722 #define CRYPT_OID_FIND_LOCALIZED_NAME_FUNC "CryptDllFindLocalizedName"
 2723 #define CRYPT_OID_REGPATH !"Software\\Microsoft\\Cryptography\\OID"
 2724 #define CRYPT_OID_REG_ENCODING_TYPE_PREFIX "EncodingType "
 2725 #define CRYPT_OID_REG_DLL_VALUE_NAME wstr("Dll")
 2726 #define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME wstr("FuncName")
 2727 #define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME_A "FuncName"
 2728 #define CRYPT_OID_REG_FLAGS_VALUE_NAME wstr("CryptFlags")
 2729 #define CRYPT_DEFAULT_OID "DEFAULT"
 2730 
 2731 type _CRYPT_OID_FUNC_ENTRY
 2732     pszOID as LPCSTR
 2733     pvFuncAddr as any ptr
 2734 end type
 2735 
 2736 type CRYPT_OID_FUNC_ENTRY as _CRYPT_OID_FUNC_ENTRY
 2737 type PCRYPT_OID_FUNC_ENTRY as _CRYPT_OID_FUNC_ENTRY ptr
 2738 const CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG = 1
 2739 const CRYPT_GET_INSTALLED_OID_FUNC_FLAG = &h1
 2740 const CRYPT_REGISTER_FIRST_INDEX = 0
 2741 const CRYPT_REGISTER_LAST_INDEX = &hffffffff
 2742 
 2743 declare function CryptInstallOIDFunctionAddress(byval hModule as HMODULE, byval dwEncodingType as DWORD, byval pszFuncName as LPCSTR, byval cFuncEntry as DWORD, byval rgFuncEntry as const CRYPT_OID_FUNC_ENTRY ptr, byval dwFlags as DWORD) as WINBOOL
 2744 declare function CryptInitOIDFunctionSet(byval pszFuncName as LPCSTR, byval dwFlags as DWORD) as HCRYPTOIDFUNCSET
 2745 declare function CryptGetOIDFunctionAddress(byval hFuncSet as HCRYPTOIDFUNCSET, byval dwEncodingType as DWORD, byval pszOID as LPCSTR, byval dwFlags as DWORD, byval ppvFuncAddr as any ptr ptr, byval phFuncAddr as HCRYPTOIDFUNCADDR ptr) as WINBOOL
 2746 declare function CryptGetDefaultOIDDllList(byval hFuncSet as HCRYPTOIDFUNCSET, byval dwEncodingType as DWORD, byval pwszDllList as wstring ptr, byval pcchDllList as DWORD ptr) as WINBOOL
 2747 declare function CryptGetDefaultOIDFunctionAddress(byval hFuncSet as HCRYPTOIDFUNCSET, byval dwEncodingType as DWORD, byval pwszDll as LPCWSTR, byval dwFlags as DWORD, byval ppvFuncAddr as any ptr ptr, byval phFuncAddr as HCRYPTOIDFUNCADDR ptr) as WINBOOL
 2748 declare function CryptFreeOIDFunctionAddress(byval hFuncAddr as HCRYPTOIDFUNCADDR, byval dwFlags as DWORD) as WINBOOL
 2749 declare function CryptRegisterOIDFunction(byval dwEncodingType as DWORD, byval pszFuncName as LPCSTR, byval pszOID as LPCSTR, byval pwszDll as LPCWSTR, byval pszOverrideFuncName as LPCSTR) as WINBOOL
 2750 declare function CryptUnregisterOIDFunction(byval dwEncodingType as DWORD, byval pszFuncName as LPCSTR, byval pszOID as LPCSTR) as WINBOOL
 2751 declare function CryptRegisterDefaultOIDFunction(byval dwEncodingType as DWORD, byval pszFuncName as LPCSTR, byval dwIndex as DWORD, byval pwszDll as LPCWSTR) as WINBOOL
 2752 declare function CryptUnregisterDefaultOIDFunction(byval dwEncodingType as DWORD, byval pszFuncName as LPCSTR, byval pwszDll as LPCWSTR) as WINBOOL
 2753 declare function CryptSetOIDFunctionValue(byval dwEncodingType as DWORD, byval pszFuncName as LPCSTR, byval pszOID as LPCSTR, byval pwszValueName as LPCWSTR, byval dwValueType as DWORD, byval pbValueData as const UBYTE ptr, byval cbValueData as DWORD) as WINBOOL
 2754 declare function CryptGetOIDFunctionValue(byval dwEncodingType as DWORD, byval pszFuncName as LPCSTR, byval pszOID as LPCSTR, byval pwszValueName as LPCWSTR, byval pdwValueType as DWORD ptr, byval pbValueData as UBYTE ptr, byval pcbValueData as DWORD ptr) as WINBOOL
 2755 type PFN_CRYPT_ENUM_OID_FUNC as function(byval dwEncodingType as DWORD, byval pszFuncName as LPCSTR, byval pszOID as LPCSTR, byval cValue as DWORD, byval rgdwValueType as const DWORD ptr, byval rgpwszValueName as const LPCWSTR ptr, byval rgpbValueData as const UBYTE const ptr ptr, byval rgcbValueData as const DWORD ptr, byval pvArg as any ptr) as WINBOOL
 2756 declare function CryptEnumOIDFunction(byval dwEncodingType as DWORD, byval pszFuncName as LPCSTR, byval pszOID as LPCSTR, byval dwFlags as DWORD, byval pvArg as any ptr, byval pfnEnumOIDFunc as PFN_CRYPT_ENUM_OID_FUNC) as WINBOOL
 2757 
 2758 const CRYPT_MATCH_ANY_ENCODING_TYPE = &hffffffff
 2759 const CALG_OID_INFO_CNG_ONLY = &hffffffff
 2760 const CALG_OID_INFO_PARAMETERS = &hfffffffe
 2761 #define IS_SPECIAL_OID_INFO_ALGID(Algid) (Algid >= CALG_OID_INFO_PARAMETERS)
 2762 #define CRYPT_OID_INFO_HASH_PARAMETERS_ALGORITHM wstr("CryptOIDInfoHashParameters")
 2763 #define CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM wstr("CryptOIDInfoECCParameters")
 2764 #define CRYPT_OID_INFO_MGF1_PARAMETERS_ALGORITHM wstr("CryptOIDInfoMgf1Parameters")
 2765 #define CRYPT_OID_INFO_NO_SIGN_ALGORITHM wstr("CryptOIDInfoNoSign")
 2766 #define CRYPT_OID_INFO_OAEP_PARAMETERS_ALGORITHM wstr("CryptOIDInfoOAEPParameters")
 2767 #define CRYPT_OID_INFO_ECC_WRAP_PARAMETERS_ALGORITHM wstr("CryptOIDInfoECCWrapParameters")
 2768 #define CRYPT_OID_INFO_NO_PARAMETERS_ALGORITHM wstr("CryptOIDInfoNoParameters")
 2769 
 2770 type _CRYPT_OID_INFO
 2771     cbSize as DWORD
 2772     pszOID as LPCSTR
 2773     pwszName as LPCWSTR
 2774     dwGroupId as DWORD
 2775 
 2776     union
 2777         dwValue as DWORD
 2778         Algid as ALG_ID
 2779         dwLength as DWORD
 2780     end union
 2781 
 2782     ExtraInfo as CRYPT_DATA_BLOB
 2783 end type
 2784 
 2785 type CRYPT_OID_INFO as _CRYPT_OID_INFO
 2786 type PCRYPT_OID_INFO as _CRYPT_OID_INFO ptr
 2787 type CCRYPT_OID_INFO as const CRYPT_OID_INFO
 2788 type PCCRYPT_OID_INFO as const CRYPT_OID_INFO ptr
 2789 
 2790 const CRYPT_HASH_ALG_OID_GROUP_ID = 1
 2791 const CRYPT_ENCRYPT_ALG_OID_GROUP_ID = 2
 2792 const CRYPT_PUBKEY_ALG_OID_GROUP_ID = 3
 2793 const CRYPT_SIGN_ALG_OID_GROUP_ID = 4
 2794 const CRYPT_RDN_ATTR_OID_GROUP_ID = 5
 2795 const CRYPT_EXT_OR_ATTR_OID_GROUP_ID = 6
 2796 const CRYPT_ENHKEY_USAGE_OID_GROUP_ID = 7
 2797 const CRYPT_POLICY_OID_GROUP_ID = 8
 2798 const CRYPT_TEMPLATE_OID_GROUP_ID = 9
 2799 const CRYPT_KDF_OID_GROUP_ID = 10
 2800 const CRYPT_LAST_OID_GROUP_ID = 10
 2801 const CRYPT_FIRST_ALG_OID_GROUP_ID = CRYPT_HASH_ALG_OID_GROUP_ID
 2802 const CRYPT_LAST_ALG_OID_GROUP_ID = CRYPT_SIGN_ALG_OID_GROUP_ID
 2803 const CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG = &h1
 2804 const CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG = &h2
 2805 const CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG = &h4
 2806 const CRYPT_OID_PUBKEY_ENCRYPT_ONLY_FLAG = &h40000000
 2807 const CRYPT_OID_PUBKEY_SIGN_ONLY_FLAG = &h80000000
 2808 declare function CryptFindOIDInfo(byval dwKeyType as DWORD, byval pvKey as any ptr, byval dwGroupId as DWORD) as PCCRYPT_OID_INFO
 2809 const CRYPT_OID_INFO_OID_KEY = 1
 2810 const CRYPT_OID_INFO_NAME_KEY = 2
 2811 const CRYPT_OID_INFO_ALGID_KEY = 3
 2812 const CRYPT_OID_INFO_SIGN_KEY = 4
 2813 const CRYPT_OID_INFO_CNG_ALGID_KEY = 5
 2814 const CRYPT_OID_INFO_CNG_SIGN_KEY = 6
 2815 const CRYPT_OID_INFO_OID_KEY_FLAGS_MASK = &hffff0000
 2816 const CRYPT_OID_INFO_PUBKEY_SIGN_KEY_FLAG = &h80000000
 2817 const CRYPT_OID_INFO_PUBKEY_ENCRYPT_KEY_FLAG = &h40000000
 2818 const CRYPT_OID_DISABLE_SEARCH_DS_FLAG = &h80000000
 2819 const CRYPT_OID_INFO_OID_GROUP_BIT_LEN_MASK = &h0fff0000
 2820 const CRYPT_OID_INFO_OID_GROUP_BIT_LEN_SHIFT = 16
 2821 const CRYPT_INSTALL_OID_INFO_BEFORE_FLAG = 1
 2822 type PFN_CRYPT_ENUM_OID_INFO as function(byval pInfo as PCCRYPT_OID_INFO, byval pvArg as any ptr) as WINBOOL
 2823 
 2824 declare function CryptRegisterOIDInfo(byval pInfo as PCCRYPT_OID_INFO, byval dwFlags as DWORD) as WINBOOL
 2825 declare function CryptUnregisterOIDInfo(byval pInfo as PCCRYPT_OID_INFO) as WINBOOL
 2826 declare function CryptEnumOIDInfo(byval dwGroupId as DWORD, byval dwFlags as DWORD, byval pvArg as any ptr, byval pfnEnumOIDInfo as PFN_CRYPT_ENUM_OID_INFO) as WINBOOL
 2827 declare function CryptFindLocalizedName(byval pwszCryptName as LPCWSTR) as LPCWSTR
 2828 
 2829 const CRYPT_LOCALIZED_NAME_ENCODING_TYPE = 0
 2830 #define CRYPT_LOCALIZED_NAME_OID "LocalizedNames"
 2831 #define CERT_STRONG_SIGN_ECDSA_ALGORITHM wstr("ECDSA")
 2832 
 2833 type _CERT_STRONG_SIGN_SERIALIZED_INFO
 2834     dwFlags as DWORD
 2835     pwszCNGSignHashAlgids as LPWSTR
 2836     pwszCNGPubKeyMinBitLengths as LPWSTR
 2837 end type
 2838 
 2839 type CERT_STRONG_SIGN_SERIALIZED_INFO as _CERT_STRONG_SIGN_SERIALIZED_INFO
 2840 type PCERT_STRONG_SIGN_SERIALIZED_INFO as _CERT_STRONG_SIGN_SERIALIZED_INFO ptr
 2841 
 2842 type _CERT_STRONG_SIGN_PARA
 2843     cbSize as DWORD
 2844     dwInfoChoice as DWORD
 2845 
 2846     union
 2847         pvInfo as any ptr
 2848         pSerializedInfo as PCERT_STRONG_SIGN_SERIALIZED_INFO
 2849         pszOID as LPSTR
 2850     end union
 2851 end type
 2852 
 2853 type CERT_STRONG_SIGN_PARA as _CERT_STRONG_SIGN_PARA
 2854 type PCERT_STRONG_SIGN_PARA as _CERT_STRONG_SIGN_PARA ptr
 2855 type PCCERT_STRONG_SIGN_PARA as const CERT_STRONG_SIGN_PARA ptr
 2856 
 2857 const CERT_STRONG_SIGN_SERIALIZED_INFO_CHOICE = 1
 2858 const CERT_STRONG_SIGN_OID_INFO_CHOICE = 2
 2859 const CERT_STRONG_SIGN_ENABLE_CRL_CHECK = &h1
 2860 const CERT_STRONG_SIGN_ENABLE_OCSP_CHECK = &h2
 2861 #define szOID_CERT_STRONG_SIGN_OS_PREFIX "1.3.6.1.4.1.311.72.1."
 2862 #define szOID_CERT_STRONG_SIGN_OS_1 "1.3.6.1.4.1.311.72.1.1"
 2863 #define szOID_CERT_STRONG_SIGN_OS_CURRENT szOID_CERT_STRONG_SIGN_OS_1
 2864 #define CERT_STRONG_SIGN_PARA_OS_1 (sizeof(CERT_STRONG_SIGN_PARA), CERT_STRONG_SIGN_OID_INFO_CHOICE, szOID_CERT_STRONG_SIGN_OS_1)
 2865 #define CERT_STRONG_SIGN_PARA_OS_CURRENT (sizeof(CERT_STRONG_SIGN_PARA), CERT_STRONG_SIGN_OID_INFO_CHOICE, szOID_CERT_STRONG_SIGN_OS_CURRENT)
 2866 #define szOID_CERT_STRONG_KEY_OS_PREFIX "1.3.6.1.4.1.311.72.2."
 2867 #define szOID_CERT_STRONG_KEY_OS_1 "1.3.6.1.4.1.311.72.2.1"
 2868 #define szOID_CERT_STRONG_KEY_OS_CURRENT szOID_CERT_STRONG_KEY_OS_1
 2869 #define CERT_STRONG_KEY_PARA_OS_1 (sizeof(CERT_STRONG_SIGN_PARA), CERT_STRONG_SIGN_OID_INFO_CHOICE, szOID_CERT_STRONG_KEY_OS_1)
 2870 #define CERT_STRONG_KEY_PARA_OS_CURRENT (sizeof(CERT_STRONG_SIGN_PARA), CERT_STRONG_SIGN_OID_INFO_CHOICE, szOID_CERT_STRONG_KEY_OS_CURRENT)
 2871 type HCRYPTMSG as any ptr
 2872 #define szOID_PKCS_7_DATA "1.2.840.113549.1.7.1"
 2873 #define szOID_PKCS_7_SIGNED "1.2.840.113549.1.7.2"
 2874 #define szOID_PKCS_7_ENVELOPED "1.2.840.113549.1.7.3"
 2875 #define szOID_PKCS_7_SIGNEDANDENVELOPED "1.2.840.113549.1.7.4"
 2876 #define szOID_PKCS_7_DIGESTED "1.2.840.113549.1.7.5"
 2877 #define szOID_PKCS_7_ENCRYPTED "1.2.840.113549.1.7.6"
 2878 #define szOID_PKCS_9_CONTENT_TYPE "1.2.840.113549.1.9.3"
 2879 #define szOID_PKCS_9_MESSAGE_DIGEST "1.2.840.113549.1.9.4"
 2880 const CMSG_DATA = 1
 2881 const CMSG_SIGNED = 2
 2882 const CMSG_ENVELOPED = 3
 2883 const CMSG_SIGNED_AND_ENVELOPED = 4
 2884 const CMSG_HASHED = 5
 2885 const CMSG_ENCRYPTED = 6
 2886 const CMSG_ALL_FLAGS = culng(not 0u)
 2887 const CMSG_DATA_FLAG = 1 shl CMSG_DATA
 2888 const CMSG_SIGNED_FLAG = 1 shl CMSG_SIGNED
 2889 const CMSG_ENVELOPED_FLAG = 1 shl CMSG_ENVELOPED
 2890 const CMSG_SIGNED_AND_ENVELOPED_FLAG = 1 shl CMSG_SIGNED_AND_ENVELOPED
 2891 const CMSG_HASHED_FLAG = 1 shl CMSG_HASHED
 2892 const CMSG_ENCRYPTED_FLAG = 1 shl CMSG_ENCRYPTED
 2893 
 2894 type _CERT_ISSUER_SERIAL_NUMBER
 2895     Issuer as CERT_NAME_BLOB
 2896     SerialNumber as CRYPT_INTEGER_BLOB
 2897 end type
 2898 
 2899 type CERT_ISSUER_SERIAL_NUMBER as _CERT_ISSUER_SERIAL_NUMBER
 2900 type PCERT_ISSUER_SERIAL_NUMBER as _CERT_ISSUER_SERIAL_NUMBER ptr
 2901 
 2902 type _CERT_ID
 2903     dwIdChoice as DWORD
 2904 
 2905     union
 2906         IssuerSerialNumber as CERT_ISSUER_SERIAL_NUMBER
 2907         KeyId as CRYPT_HASH_BLOB
 2908         HashId as CRYPT_HASH_BLOB
 2909     end union
 2910 end type
 2911 
 2912 type CERT_ID as _CERT_ID
 2913 type PCERT_ID as _CERT_ID ptr
 2914 const CERT_ID_ISSUER_SERIAL_NUMBER = 1
 2915 const CERT_ID_KEY_IDENTIFIER = 2
 2916 const CERT_ID_SHA1_HASH = 3
 2917 
 2918 type _CMSG_SIGNER_ENCODE_INFO
 2919     cbSize as DWORD
 2920     pCertInfo as PCERT_INFO
 2921 
 2922     union
 2923         hCryptProv as HCRYPTPROV
 2924         hNCryptKey as NCRYPT_KEY_HANDLE
 2925     end union
 2926 
 2927     dwKeySpec as DWORD
 2928     HashAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 2929     pvHashAuxInfo as any ptr
 2930     cAuthAttr as DWORD
 2931     rgAuthAttr as PCRYPT_ATTRIBUTE
 2932     cUnauthAttr as DWORD
 2933     rgUnauthAttr as PCRYPT_ATTRIBUTE
 2934 end type
 2935 
 2936 type CMSG_SIGNER_ENCODE_INFO as _CMSG_SIGNER_ENCODE_INFO
 2937 type PCMSG_SIGNER_ENCODE_INFO as _CMSG_SIGNER_ENCODE_INFO ptr
 2938 
 2939 type _CMSG_SIGNED_ENCODE_INFO
 2940     cbSize as DWORD
 2941     cSigners as DWORD
 2942     rgSigners as PCMSG_SIGNER_ENCODE_INFO
 2943     cCertEncoded as DWORD
 2944     rgCertEncoded as PCERT_BLOB
 2945     cCrlEncoded as DWORD
 2946     rgCrlEncoded as PCRL_BLOB
 2947 end type
 2948 
 2949 type CMSG_SIGNED_ENCODE_INFO as _CMSG_SIGNED_ENCODE_INFO
 2950 type PCMSG_SIGNED_ENCODE_INFO as _CMSG_SIGNED_ENCODE_INFO ptr
 2951 type CMSG_RECIPIENT_ENCODE_INFO as _CMSG_RECIPIENT_ENCODE_INFO
 2952 type PCMSG_RECIPIENT_ENCODE_INFO as _CMSG_RECIPIENT_ENCODE_INFO ptr
 2953 
 2954 type _CMSG_ENVELOPED_ENCODE_INFO
 2955     cbSize as DWORD
 2956     hCryptProv as HCRYPTPROV_LEGACY
 2957     ContentEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 2958     pvEncryptionAuxInfo as any ptr
 2959     cRecipients as DWORD
 2960     rgpRecipients as PCERT_INFO ptr
 2961 end type
 2962 
 2963 type CMSG_ENVELOPED_ENCODE_INFO as _CMSG_ENVELOPED_ENCODE_INFO
 2964 type PCMSG_ENVELOPED_ENCODE_INFO as _CMSG_ENVELOPED_ENCODE_INFO ptr
 2965 
 2966 type _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO
 2967     cbSize as DWORD
 2968     KeyEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 2969     pvKeyEncryptionAuxInfo as any ptr
 2970     hCryptProv as HCRYPTPROV_LEGACY
 2971     RecipientPublicKey as CRYPT_BIT_BLOB
 2972     RecipientId as CERT_ID
 2973 end type
 2974 
 2975 type CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO as _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO
 2976 type PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO as _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO ptr
 2977 
 2978 type _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO
 2979     cbSize as DWORD
 2980     RecipientPublicKey as CRYPT_BIT_BLOB
 2981     RecipientId as CERT_ID
 2982     Date as FILETIME
 2983     pOtherAttr as PCRYPT_ATTRIBUTE_TYPE_VALUE
 2984 end type
 2985 
 2986 type CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO as _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO
 2987 type PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO as _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO ptr
 2988 
 2989 type _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO
 2990     cbSize as DWORD
 2991     KeyEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 2992     pvKeyEncryptionAuxInfo as any ptr
 2993     KeyWrapAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 2994     pvKeyWrapAuxInfo as any ptr
 2995     hCryptProv as HCRYPTPROV_LEGACY
 2996     dwKeySpec as DWORD
 2997     dwKeyChoice as DWORD
 2998 
 2999     union
 3000         pEphemeralAlgorithm as PCRYPT_ALGORITHM_IDENTIFIER
 3001         pSenderId as PCERT_ID
 3002     end union
 3003 
 3004     UserKeyingMaterial as CRYPT_DATA_BLOB
 3005     cRecipientEncryptedKeys as DWORD
 3006     rgpRecipientEncryptedKeys as PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO ptr
 3007 end type
 3008 
 3009 type CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO as _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO
 3010 type PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO as _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO ptr
 3011 const CMSG_KEY_AGREE_EPHEMERAL_KEY_CHOICE = 1
 3012 const CMSG_KEY_AGREE_STATIC_KEY_CHOICE = 2
 3013 
 3014 type _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO
 3015     cbSize as DWORD
 3016     KeyEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3017     pvKeyEncryptionAuxInfo as any ptr
 3018     hCryptProv as HCRYPTPROV
 3019     dwKeyChoice as DWORD
 3020 
 3021     union
 3022         hKeyEncryptionKey as HCRYPTKEY
 3023         pvKeyEncryptionKey as any ptr
 3024     end union
 3025 
 3026     KeyId as CRYPT_DATA_BLOB
 3027     Date as FILETIME
 3028     pOtherAttr as PCRYPT_ATTRIBUTE_TYPE_VALUE
 3029 end type
 3030 
 3031 type CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO as _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO
 3032 type PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO as _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO ptr
 3033 const CMSG_MAIL_LIST_HANDLE_KEY_CHOICE = 1
 3034 const CMSG_KEY_TRANS_RECIPIENT = 1
 3035 const CMSG_KEY_AGREE_RECIPIENT = 2
 3036 const CMSG_MAIL_LIST_RECIPIENT = 3
 3037 const CMSG_RC4_NO_SALT_FLAG = &h40000000
 3038 const CMSG_SP3_COMPATIBLE_ENCRYPT_FLAG = &h80000000
 3039 
 3040 type _CMSG_RECIPIENT_ENCODE_INFO
 3041     dwRecipientChoice as DWORD
 3042 
 3043     union
 3044         pKeyTrans as PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO
 3045         pKeyAgree as PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO
 3046         pMailList as PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO
 3047     end union
 3048 end type
 3049 
 3050 type _CMSG_RC2_AUX_INFO
 3051     cbSize as DWORD
 3052     dwBitLen as DWORD
 3053 end type
 3054 
 3055 type CMSG_RC2_AUX_INFO as _CMSG_RC2_AUX_INFO
 3056 type PCMSG_RC2_AUX_INFO as _CMSG_RC2_AUX_INFO ptr
 3057 
 3058 type _CMSG_SP3_COMPATIBLE_AUX_INFO
 3059     cbSize as DWORD
 3060     dwFlags as DWORD
 3061 end type
 3062 
 3063 type CMSG_SP3_COMPATIBLE_AUX_INFO as _CMSG_SP3_COMPATIBLE_AUX_INFO
 3064 type PCMSG_SP3_COMPATIBLE_AUX_INFO as _CMSG_SP3_COMPATIBLE_AUX_INFO ptr
 3065 
 3066 type _CMSG_RC4_AUX_INFO
 3067     cbSize as DWORD
 3068     dwBitLen as DWORD
 3069 end type
 3070 
 3071 type CMSG_RC4_AUX_INFO as _CMSG_RC4_AUX_INFO
 3072 type PCMSG_RC4_AUX_INFO as _CMSG_RC4_AUX_INFO ptr
 3073 
 3074 type _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO
 3075     cbSize as DWORD
 3076     SignedInfo as CMSG_SIGNED_ENCODE_INFO
 3077     EnvelopedInfo as CMSG_ENVELOPED_ENCODE_INFO
 3078 end type
 3079 
 3080 type CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO as _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO
 3081 type PCMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO as _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO ptr
 3082 
 3083 type _CMSG_HASHED_ENCODE_INFO
 3084     cbSize as DWORD
 3085     hCryptProv as HCRYPTPROV_LEGACY
 3086     HashAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3087     pvHashAuxInfo as any ptr
 3088 end type
 3089 
 3090 type CMSG_HASHED_ENCODE_INFO as _CMSG_HASHED_ENCODE_INFO
 3091 type PCMSG_HASHED_ENCODE_INFO as _CMSG_HASHED_ENCODE_INFO ptr
 3092 
 3093 type _CMSG_ENCRYPTED_ENCODE_INFO
 3094     cbSize as DWORD
 3095     ContentEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3096     pvEncryptionAuxInfo as any ptr
 3097 end type
 3098 
 3099 type CMSG_ENCRYPTED_ENCODE_INFO as _CMSG_ENCRYPTED_ENCODE_INFO
 3100 type PCMSG_ENCRYPTED_ENCODE_INFO as _CMSG_ENCRYPTED_ENCODE_INFO ptr
 3101 type PFN_CMSG_STREAM_OUTPUT as function(byval pvArg as const any ptr, byval pbData as UBYTE ptr, byval cbData as DWORD, byval fFinal as WINBOOL) as WINBOOL
 3102 const CMSG_INDEFINITE_LENGTH = &hffffffff
 3103 
 3104 type _CMSG_STREAM_INFO
 3105     cbContent as DWORD
 3106     pfnStreamOutput as PFN_CMSG_STREAM_OUTPUT
 3107     pvArg as any ptr
 3108 end type
 3109 
 3110 type CMSG_STREAM_INFO as _CMSG_STREAM_INFO
 3111 type PCMSG_STREAM_INFO as _CMSG_STREAM_INFO ptr
 3112 const CMSG_BARE_CONTENT_FLAG = &h1
 3113 const CMSG_LENGTH_ONLY_FLAG = &h2
 3114 const CMSG_DETACHED_FLAG = &h4
 3115 const CMSG_AUTHENTICATED_ATTRIBUTES_FLAG = &h8
 3116 const CMSG_CONTENTS_OCTETS_FLAG = &h10
 3117 const CMSG_MAX_LENGTH_FLAG = &h20
 3118 const CMSG_CMS_ENCAPSULATED_CONTENT_FLAG = &h40
 3119 const CMSG_CRYPT_RELEASE_CONTEXT_FLAG = &h8000
 3120 
 3121 declare function CryptMsgOpenToEncode(byval dwMsgEncodingType as DWORD, byval dwFlags as DWORD, byval dwMsgType as DWORD, byval pvMsgEncodeInfo as const any ptr, byval pszInnerContentObjID as LPSTR, byval pStreamInfo as PCMSG_STREAM_INFO) as HCRYPTMSG
 3122 declare function CryptMsgCalculateEncodedLength(byval dwMsgEncodingType as DWORD, byval dwFlags as DWORD, byval dwMsgType as DWORD, byval pvMsgEncodeInfo as const any ptr, byval pszInnerContentObjID as LPSTR, byval cbData as DWORD) as DWORD
 3123 declare function CryptMsgOpenToDecode(byval dwMsgEncodingType as DWORD, byval dwFlags as DWORD, byval dwMsgType as DWORD, byval hCryptProv as HCRYPTPROV_LEGACY, byval pRecipientInfo as PCERT_INFO, byval pStreamInfo as PCMSG_STREAM_INFO) as HCRYPTMSG
 3124 declare function CryptMsgDuplicate(byval hCryptMsg as HCRYPTMSG) as HCRYPTMSG
 3125 declare function CryptMsgClose(byval hCryptMsg as HCRYPTMSG) as WINBOOL
 3126 declare function CryptMsgUpdate(byval hCryptMsg as HCRYPTMSG, byval pbData as const UBYTE ptr, byval cbData as DWORD, byval fFinal as WINBOOL) as WINBOOL
 3127 declare function CryptMsgGetParam(byval hCryptMsg as HCRYPTMSG, byval dwParamType as DWORD, byval dwIndex as DWORD, byval pvData as any ptr, byval pcbData as DWORD ptr) as WINBOOL
 3128 
 3129 const CMSG_TYPE_PARAM = 1
 3130 const CMSG_CONTENT_PARAM = 2
 3131 const CMSG_BARE_CONTENT_PARAM = 3
 3132 const CMSG_INNER_CONTENT_TYPE_PARAM = 4
 3133 const CMSG_SIGNER_COUNT_PARAM = 5
 3134 const CMSG_SIGNER_INFO_PARAM = 6
 3135 const CMSG_SIGNER_CERT_INFO_PARAM = 7
 3136 const CMSG_SIGNER_HASH_ALGORITHM_PARAM = 8
 3137 const CMSG_SIGNER_AUTH_ATTR_PARAM = 9
 3138 const CMSG_SIGNER_UNAUTH_ATTR_PARAM = 10
 3139 const CMSG_CERT_COUNT_PARAM = 11
 3140 const CMSG_CERT_PARAM = 12
 3141 const CMSG_CRL_COUNT_PARAM = 13
 3142 const CMSG_CRL_PARAM = 14
 3143 const CMSG_ENVELOPE_ALGORITHM_PARAM = 15
 3144 const CMSG_RECIPIENT_COUNT_PARAM = 17
 3145 const CMSG_RECIPIENT_INDEX_PARAM = 18
 3146 const CMSG_RECIPIENT_INFO_PARAM = 19
 3147 const CMSG_HASH_ALGORITHM_PARAM = 20
 3148 const CMSG_HASH_DATA_PARAM = 21
 3149 const CMSG_COMPUTED_HASH_PARAM = 22
 3150 const CMSG_ENCRYPT_PARAM = 26
 3151 const CMSG_ENCRYPTED_DIGEST = 27
 3152 const CMSG_ENCODED_SIGNER = 28
 3153 const CMSG_ENCODED_MESSAGE = 29
 3154 const CMSG_VERSION_PARAM = 30
 3155 const CMSG_ATTR_CERT_COUNT_PARAM = 31
 3156 const CMSG_ATTR_CERT_PARAM = 32
 3157 const CMSG_CMS_RECIPIENT_COUNT_PARAM = 33
 3158 const CMSG_CMS_RECIPIENT_INDEX_PARAM = 34
 3159 const CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM = 35
 3160 const CMSG_CMS_RECIPIENT_INFO_PARAM = 36
 3161 const CMSG_UNPROTECTED_ATTR_PARAM = 37
 3162 const CMSG_SIGNER_CERT_ID_PARAM = 38
 3163 const CMSG_CMS_SIGNER_INFO_PARAM = 39
 3164 
 3165 type _CMSG_SIGNER_INFO
 3166     dwVersion as DWORD
 3167     Issuer as CERT_NAME_BLOB
 3168     SerialNumber as CRYPT_INTEGER_BLOB
 3169     HashAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3170     HashEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3171     EncryptedHash as CRYPT_DATA_BLOB
 3172     AuthAttrs as CRYPT_ATTRIBUTES
 3173     UnauthAttrs as CRYPT_ATTRIBUTES
 3174 end type
 3175 
 3176 type CMSG_SIGNER_INFO as _CMSG_SIGNER_INFO
 3177 type PCMSG_SIGNER_INFO as _CMSG_SIGNER_INFO ptr
 3178 
 3179 type _CMSG_CMS_SIGNER_INFO
 3180     dwVersion as DWORD
 3181     SignerId as CERT_ID
 3182     HashAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3183     HashEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3184     EncryptedHash as CRYPT_DATA_BLOB
 3185     AuthAttrs as CRYPT_ATTRIBUTES
 3186     UnauthAttrs as CRYPT_ATTRIBUTES
 3187 end type
 3188 
 3189 type CMSG_CMS_SIGNER_INFO as _CMSG_CMS_SIGNER_INFO
 3190 type PCMSG_CMS_SIGNER_INFO as _CMSG_CMS_SIGNER_INFO ptr
 3191 type CMSG_ATTR as CRYPT_ATTRIBUTES
 3192 type PCMSG_ATTR as CRYPT_ATTRIBUTES ptr
 3193 
 3194 const CMSG_SIGNED_DATA_V1 = 1
 3195 const CMSG_SIGNED_DATA_V3 = 3
 3196 const CMSG_SIGNED_DATA_PKCS_1_5_VERSION = CMSG_SIGNED_DATA_V1
 3197 const CMSG_SIGNED_DATA_CMS_VERSION = CMSG_SIGNED_DATA_V3
 3198 const CMSG_SIGNER_INFO_V1 = 1
 3199 const CMSG_SIGNER_INFO_V3 = 3
 3200 const CMSG_SIGNER_INFO_PKCS_1_5_VERSION = CMSG_SIGNER_INFO_V1
 3201 const CMSG_SIGNER_INFO_CMS_VERSION = CMSG_SIGNER_INFO_V3
 3202 const CMSG_HASHED_DATA_V0 = 0
 3203 const CMSG_HASHED_DATA_V2 = 2
 3204 const CMSG_HASHED_DATA_PKCS_1_5_VERSION = CMSG_HASHED_DATA_V0
 3205 const CMSG_HASHED_DATA_CMS_VERSION = CMSG_HASHED_DATA_V2
 3206 const CMSG_ENVELOPED_DATA_V0 = 0
 3207 const CMSG_ENVELOPED_DATA_V2 = 2
 3208 const CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION = CMSG_ENVELOPED_DATA_V0
 3209 const CMSG_ENVELOPED_DATA_CMS_VERSION = CMSG_ENVELOPED_DATA_V2
 3210 
 3211 type _CMSG_KEY_TRANS_RECIPIENT_INFO
 3212     dwVersion as DWORD
 3213     RecipientId as CERT_ID
 3214     KeyEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3215     EncryptedKey as CRYPT_DATA_BLOB
 3216 end type
 3217 
 3218 type CMSG_KEY_TRANS_RECIPIENT_INFO as _CMSG_KEY_TRANS_RECIPIENT_INFO
 3219 type PCMSG_KEY_TRANS_RECIPIENT_INFO as _CMSG_KEY_TRANS_RECIPIENT_INFO ptr
 3220 
 3221 type _CMSG_RECIPIENT_ENCRYPTED_KEY_INFO
 3222     RecipientId as CERT_ID
 3223     EncryptedKey as CRYPT_DATA_BLOB
 3224     Date as FILETIME
 3225     pOtherAttr as PCRYPT_ATTRIBUTE_TYPE_VALUE
 3226 end type
 3227 
 3228 type CMSG_RECIPIENT_ENCRYPTED_KEY_INFO as _CMSG_RECIPIENT_ENCRYPTED_KEY_INFO
 3229 type PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO as _CMSG_RECIPIENT_ENCRYPTED_KEY_INFO ptr
 3230 
 3231 type _CMSG_KEY_AGREE_RECIPIENT_INFO
 3232     dwVersion as DWORD
 3233     dwOriginatorChoice as DWORD
 3234 
 3235     union
 3236         OriginatorCertId as CERT_ID
 3237         OriginatorPublicKeyInfo as CERT_PUBLIC_KEY_INFO
 3238     end union
 3239 
 3240     UserKeyingMaterial as CRYPT_DATA_BLOB
 3241     KeyEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3242     cRecipientEncryptedKeys as DWORD
 3243     rgpRecipientEncryptedKeys as PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO ptr
 3244 end type
 3245 
 3246 type CMSG_KEY_AGREE_RECIPIENT_INFO as _CMSG_KEY_AGREE_RECIPIENT_INFO
 3247 type PCMSG_KEY_AGREE_RECIPIENT_INFO as _CMSG_KEY_AGREE_RECIPIENT_INFO ptr
 3248 const CMSG_KEY_AGREE_ORIGINATOR_CERT = 1
 3249 const CMSG_KEY_AGREE_ORIGINATOR_PUBLIC_KEY = 2
 3250 
 3251 type _CMSG_MAIL_LIST_RECIPIENT_INFO
 3252     dwVersion as DWORD
 3253     KeyId as CRYPT_DATA_BLOB
 3254     KeyEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3255     EncryptedKey as CRYPT_DATA_BLOB
 3256     Date as FILETIME
 3257     pOtherAttr as PCRYPT_ATTRIBUTE_TYPE_VALUE
 3258 end type
 3259 
 3260 type CMSG_MAIL_LIST_RECIPIENT_INFO as _CMSG_MAIL_LIST_RECIPIENT_INFO
 3261 type PCMSG_MAIL_LIST_RECIPIENT_INFO as _CMSG_MAIL_LIST_RECIPIENT_INFO ptr
 3262 
 3263 type _CMSG_CMS_RECIPIENT_INFO
 3264     dwRecipientChoice as DWORD
 3265 
 3266     union
 3267         pKeyTrans as PCMSG_KEY_TRANS_RECIPIENT_INFO
 3268         pKeyAgree as PCMSG_KEY_AGREE_RECIPIENT_INFO
 3269         pMailList as PCMSG_MAIL_LIST_RECIPIENT_INFO
 3270     end union
 3271 end type
 3272 
 3273 type CMSG_CMS_RECIPIENT_INFO as _CMSG_CMS_RECIPIENT_INFO
 3274 type PCMSG_CMS_RECIPIENT_INFO as _CMSG_CMS_RECIPIENT_INFO ptr
 3275 const CMSG_ENVELOPED_RECIPIENT_V0 = 0
 3276 const CMSG_ENVELOPED_RECIPIENT_V2 = 2
 3277 const CMSG_ENVELOPED_RECIPIENT_V3 = 3
 3278 const CMSG_ENVELOPED_RECIPIENT_V4 = 4
 3279 const CMSG_KEY_TRANS_PKCS_1_5_VERSION = CMSG_ENVELOPED_RECIPIENT_V0
 3280 const CMSG_KEY_TRANS_CMS_VERSION = CMSG_ENVELOPED_RECIPIENT_V2
 3281 const CMSG_KEY_AGREE_VERSION = CMSG_ENVELOPED_RECIPIENT_V3
 3282 const CMSG_MAIL_LIST_VERSION = CMSG_ENVELOPED_RECIPIENT_V4
 3283 declare function CryptMsgControl(byval hCryptMsg as HCRYPTMSG, byval dwFlags as DWORD, byval dwCtrlType as DWORD, byval pvCtrlPara as const any ptr) as WINBOOL
 3284 const CMSG_CTRL_VERIFY_SIGNATURE = 1
 3285 const CMSG_CTRL_DECRYPT = 2
 3286 const CMSG_CTRL_VERIFY_HASH = 5
 3287 const CMSG_CTRL_ADD_SIGNER = 6
 3288 const CMSG_CTRL_DEL_SIGNER = 7
 3289 const CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR = 8
 3290 const CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR = 9
 3291 const CMSG_CTRL_ADD_CERT = 10
 3292 const CMSG_CTRL_DEL_CERT = 11
 3293 const CMSG_CTRL_ADD_CRL = 12
 3294 const CMSG_CTRL_DEL_CRL = 13
 3295 const CMSG_CTRL_ADD_ATTR_CERT = 14
 3296 const CMSG_CTRL_DEL_ATTR_CERT = 15
 3297 const CMSG_CTRL_KEY_TRANS_DECRYPT = 16
 3298 const CMSG_CTRL_KEY_AGREE_DECRYPT = 17
 3299 const CMSG_CTRL_MAIL_LIST_DECRYPT = 18
 3300 const CMSG_CTRL_VERIFY_SIGNATURE_EX = 19
 3301 const CMSG_CTRL_ADD_CMS_SIGNER_INFO = 20
 3302 const CMSG_CTRL_ENABLE_STRONG_SIGNATURE = 21
 3303 
 3304 type _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA
 3305     cbSize as DWORD
 3306     hCryptProv as HCRYPTPROV_LEGACY
 3307     dwSignerIndex as DWORD
 3308     dwSignerType as DWORD
 3309     pvSigner as any ptr
 3310 end type
 3311 
 3312 type CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA as _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA
 3313 type PCMSG_CTRL_VERIFY_SIGNATURE_EX_PARA as _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA ptr
 3314 const CMSG_VERIFY_SIGNER_PUBKEY = 1
 3315 const CMSG_VERIFY_SIGNER_CERT = 2
 3316 const CMSG_VERIFY_SIGNER_CHAIN = 3
 3317 const CMSG_VERIFY_SIGNER_NULL = 4
 3318 
 3319 type _CMSG_CTRL_DECRYPT_PARA
 3320     cbSize as DWORD
 3321 
 3322     union
 3323         hCryptProv as HCRYPTPROV
 3324         hNCryptKey as NCRYPT_KEY_HANDLE
 3325     end union
 3326 
 3327     dwKeySpec as DWORD
 3328     dwRecipientIndex as DWORD
 3329 end type
 3330 
 3331 type CMSG_CTRL_DECRYPT_PARA as _CMSG_CTRL_DECRYPT_PARA
 3332 type PCMSG_CTRL_DECRYPT_PARA as _CMSG_CTRL_DECRYPT_PARA ptr
 3333 
 3334 type _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA
 3335     cbSize as DWORD
 3336 
 3337     union
 3338         hCryptProv as HCRYPTPROV
 3339         hNCryptKey as NCRYPT_KEY_HANDLE
 3340     end union
 3341 
 3342     dwKeySpec as DWORD
 3343     pKeyTrans as PCMSG_KEY_TRANS_RECIPIENT_INFO
 3344     dwRecipientIndex as DWORD
 3345 end type
 3346 
 3347 type CMSG_CTRL_KEY_TRANS_DECRYPT_PARA as _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA
 3348 type PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA as _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA ptr
 3349 
 3350 type _CMSG_CTRL_KEY_AGREE_DECRYPT_PARA
 3351     cbSize as DWORD
 3352 
 3353     union
 3354         hCryptProv as HCRYPTPROV
 3355         hNCryptKey as NCRYPT_KEY_HANDLE
 3356     end union
 3357 
 3358     dwKeySpec as DWORD
 3359     pKeyAgree as PCMSG_KEY_AGREE_RECIPIENT_INFO
 3360     dwRecipientIndex as DWORD
 3361     dwRecipientEncryptedKeyIndex as DWORD
 3362     OriginatorPublicKey as CRYPT_BIT_BLOB
 3363 end type
 3364 
 3365 type CMSG_CTRL_KEY_AGREE_DECRYPT_PARA as _CMSG_CTRL_KEY_AGREE_DECRYPT_PARA
 3366 type PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA as _CMSG_CTRL_KEY_AGREE_DECRYPT_PARA ptr
 3367 
 3368 type _CMSG_CTRL_MAIL_LIST_DECRYPT_PARA
 3369     cbSize as DWORD
 3370     hCryptProv as HCRYPTPROV
 3371     pMailList as PCMSG_MAIL_LIST_RECIPIENT_INFO
 3372     dwRecipientIndex as DWORD
 3373     dwKeyChoice as DWORD
 3374 
 3375     union
 3376         hKeyEncryptionKey as HCRYPTKEY
 3377         pvKeyEncryptionKey as any ptr
 3378     end union
 3379 end type
 3380 
 3381 type CMSG_CTRL_MAIL_LIST_DECRYPT_PARA as _CMSG_CTRL_MAIL_LIST_DECRYPT_PARA
 3382 type PCMSG_CTRL_MAIL_LIST_DECRYPT_PARA as _CMSG_CTRL_MAIL_LIST_DECRYPT_PARA ptr
 3383 
 3384 type _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA
 3385     cbSize as DWORD
 3386     dwSignerIndex as DWORD
 3387     blob as CRYPT_DATA_BLOB
 3388 end type
 3389 
 3390 type CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA as _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA
 3391 type PCMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA as _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA ptr
 3392 
 3393 type _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA
 3394     cbSize as DWORD
 3395     dwSignerIndex as DWORD
 3396     dwUnauthAttrIndex as DWORD
 3397 end type
 3398 
 3399 type CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA as _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA
 3400 type PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA as _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA ptr
 3401 const CMSG_VERIFY_COUNTER_SIGN_ENABLE_STRONG_FLAG = &h1
 3402 declare function CryptMsgVerifyCountersignatureEncoded(byval hCryptProv as HCRYPTPROV_LEGACY, byval dwEncodingType as DWORD, byval pbSignerInfo as PBYTE, byval cbSignerInfo as DWORD, byval pbSignerInfoCountersignature as PBYTE, byval cbSignerInfoCountersignature as DWORD, byval pciCountersigner as PCERT_INFO) as WINBOOL
 3403 declare function CryptMsgVerifyCountersignatureEncodedEx(byval hCryptProv as HCRYPTPROV_LEGACY, byval dwEncodingType as DWORD, byval pbSignerInfo as PBYTE, byval cbSignerInfo as DWORD, byval pbSignerInfoCountersignature as PBYTE, byval cbSignerInfoCountersignature as DWORD, byval dwSignerType as DWORD, byval pvSigner as any ptr, byval dwFlags as DWORD, byval pvExtra as any ptr) as WINBOOL
 3404 declare function CryptMsgCountersign(byval hCryptMsg as HCRYPTMSG, byval dwIndex as DWORD, byval cCountersigners as DWORD, byval rgCountersigners as PCMSG_SIGNER_ENCODE_INFO) as WINBOOL
 3405 declare function CryptMsgCountersignEncoded(byval dwEncodingType as DWORD, byval pbSignerInfo as PBYTE, byval cbSignerInfo as DWORD, byval cCountersigners as DWORD, byval rgCountersigners as PCMSG_SIGNER_ENCODE_INFO, byval pbCountersignature as PBYTE, byval pcbCountersignature as PDWORD) as WINBOOL
 3406 type PFN_CMSG_ALLOC as function(byval cb as uinteger) as any ptr
 3407 type PFN_CMSG_FREE as sub(byval pv as any ptr)
 3408 
 3409 #define CMSG_OID_GEN_ENCRYPT_KEY_FUNC "CryptMsgDllGenEncryptKey"
 3410 #define CMSG_OID_EXPORT_ENCRYPT_KEY_FUNC "CryptMsgDllExportEncryptKey"
 3411 #define CMSG_OID_IMPORT_ENCRYPT_KEY_FUNC "CryptMsgDllImportEncryptKey"
 3412 
 3413 type PFN_CMSG_GEN_ENCRYPT_KEY as function(byval phCryptProv as HCRYPTPROV ptr, byval paiEncrypt as PCRYPT_ALGORITHM_IDENTIFIER, byval pvEncryptAuxInfo as PVOID, byval pPublicKeyInfo as PCERT_PUBLIC_KEY_INFO, byval pfnAlloc as PFN_CMSG_ALLOC, byval phEncryptKey as HCRYPTKEY ptr, byval ppbEncryptParameters as PBYTE ptr, byval pcbEncryptParameters as PDWORD) as WINBOOL
 3414 type PFN_CMSG_EXPORT_ENCRYPT_KEY as function(byval hCryptProv as HCRYPTPROV, byval hEncryptKey as HCRYPTKEY, byval pPublicKeyInfo as PCERT_PUBLIC_KEY_INFO, byval pbData as PBYTE, byval pcbData as PDWORD) as WINBOOL
 3415 type PFN_CMSG_IMPORT_ENCRYPT_KEY as function(byval hCryptProv as HCRYPTPROV, byval dwKeySpec as DWORD, byval paiEncrypt as PCRYPT_ALGORITHM_IDENTIFIER, byval paiPubKey as PCRYPT_ALGORITHM_IDENTIFIER, byval pbEncodedKey as PBYTE, byval cbEncodedKey as DWORD, byval phEncryptKey as HCRYPTKEY ptr) as WINBOOL
 3416 const CMSG_DEFAULT_INSTALLABLE_FUNC_OID = cast(LPCSTR, 1)
 3417 
 3418 type _CMSG_CONTENT_ENCRYPT_INFO
 3419     cbSize as DWORD
 3420     hCryptProv as HCRYPTPROV_LEGACY
 3421     ContentEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3422     pvEncryptionAuxInfo as any ptr
 3423     cRecipients as DWORD
 3424     rgCmsRecipients as PCMSG_RECIPIENT_ENCODE_INFO
 3425     pfnAlloc as PFN_CMSG_ALLOC
 3426     pfnFree as PFN_CMSG_FREE
 3427     dwEncryptFlags as DWORD
 3428 
 3429     union
 3430         hContentEncryptKey as HCRYPTKEY
 3431         hCNGContentEncryptKey as BCRYPT_KEY_HANDLE
 3432     end union
 3433 
 3434     dwFlags as DWORD
 3435     fCNG as WINBOOL
 3436     pbCNGContentEncryptKeyObject as UBYTE ptr
 3437     pbContentEncryptKey as UBYTE ptr
 3438     cbContentEncryptKey as DWORD
 3439 end type
 3440 
 3441 type CMSG_CONTENT_ENCRYPT_INFO as _CMSG_CONTENT_ENCRYPT_INFO
 3442 type PCMSG_CONTENT_ENCRYPT_INFO as _CMSG_CONTENT_ENCRYPT_INFO ptr
 3443 const CMSG_CONTENT_ENCRYPT_PAD_ENCODED_LEN_FLAG = &h1
 3444 const CMSG_CONTENT_ENCRYPT_FREE_PARA_FLAG = &h1
 3445 const CMSG_CONTENT_ENCRYPT_FREE_OBJID_FLAG = &h2
 3446 const CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG = &h8000
 3447 #define CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllGenContentEncryptKey"
 3448 #define CMSG_OID_CAPI1_GEN_CONTENT_ENCRYPT_KEY_FUNC CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC
 3449 #define CMSG_OID_CNG_GEN_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllCNGGenContentEncryptKey"
 3450 type PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY as function(byval pContentEncryptInfo as PCMSG_CONTENT_ENCRYPT_INFO, byval dwFlags as DWORD, byval pvReserved as any ptr) as WINBOOL
 3451 
 3452 type _CMSG_KEY_TRANS_ENCRYPT_INFO
 3453     cbSize as DWORD
 3454     dwRecipientIndex as DWORD
 3455     KeyEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3456     EncryptedKey as CRYPT_DATA_BLOB
 3457     dwFlags as DWORD
 3458 end type
 3459 
 3460 type CMSG_KEY_TRANS_ENCRYPT_INFO as _CMSG_KEY_TRANS_ENCRYPT_INFO
 3461 type PCMSG_KEY_TRANS_ENCRYPT_INFO as _CMSG_KEY_TRANS_ENCRYPT_INFO ptr
 3462 const CMSG_KEY_TRANS_ENCRYPT_FREE_PARA_FLAG = &h1
 3463 const CMSG_KEY_TRANS_ENCRYPT_FREE_OBJID_FLAG = &h2
 3464 #define CMSG_OID_EXPORT_KEY_TRANS_FUNC "CryptMsgDllExportKeyTrans"
 3465 #define CMSG_OID_CAPI1_EXPORT_KEY_TRANS_FUNC CMSG_OID_EXPORT_KEY_TRANS_FUNC
 3466 #define CMSG_OID_CNG_EXPORT_KEY_TRANS_FUNC "CryptMsgDllCNGExportKeyTrans"
 3467 type PFN_CMSG_EXPORT_KEY_TRANS as function(byval pContentEncryptInfo as PCMSG_CONTENT_ENCRYPT_INFO, byval pKeyTransEncodeInfo as PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO, byval pKeyTransEncryptInfo as PCMSG_KEY_TRANS_ENCRYPT_INFO, byval dwFlags as DWORD, byval pvReserved as any ptr) as WINBOOL
 3468 
 3469 type _CMSG_KEY_AGREE_KEY_ENCRYPT_INFO
 3470     cbSize as DWORD
 3471     EncryptedKey as CRYPT_DATA_BLOB
 3472 end type
 3473 
 3474 type CMSG_KEY_AGREE_KEY_ENCRYPT_INFO as _CMSG_KEY_AGREE_KEY_ENCRYPT_INFO
 3475 type PCMSG_KEY_AGREE_KEY_ENCRYPT_INFO as _CMSG_KEY_AGREE_KEY_ENCRYPT_INFO ptr
 3476 
 3477 type _CMSG_KEY_AGREE_ENCRYPT_INFO
 3478     cbSize as DWORD
 3479     dwRecipientIndex as DWORD
 3480     KeyEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3481     UserKeyingMaterial as CRYPT_DATA_BLOB
 3482     dwOriginatorChoice as DWORD
 3483 
 3484     union
 3485         OriginatorCertId as CERT_ID
 3486         OriginatorPublicKeyInfo as CERT_PUBLIC_KEY_INFO
 3487     end union
 3488 
 3489     cKeyAgreeKeyEncryptInfo as DWORD
 3490     rgpKeyAgreeKeyEncryptInfo as PCMSG_KEY_AGREE_KEY_ENCRYPT_INFO ptr
 3491     dwFlags as DWORD
 3492 end type
 3493 
 3494 type CMSG_KEY_AGREE_ENCRYPT_INFO as _CMSG_KEY_AGREE_ENCRYPT_INFO
 3495 type PCMSG_KEY_AGREE_ENCRYPT_INFO as _CMSG_KEY_AGREE_ENCRYPT_INFO ptr
 3496 const CMSG_KEY_AGREE_ENCRYPT_FREE_PARA_FLAG = &h1
 3497 const CMSG_KEY_AGREE_ENCRYPT_FREE_MATERIAL_FLAG = &h2
 3498 const CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_ALG_FLAG = &h4
 3499 const CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_PARA_FLAG = &h8
 3500 const CMSG_KEY_AGREE_ENCRYPT_FREE_PUBKEY_BITS_FLAG = &h10
 3501 const CMSG_KEY_AGREE_ENCRYPT_FREE_OBJID_FLAG = &h20
 3502 #define CMSG_OID_EXPORT_KEY_AGREE_FUNC "CryptMsgDllExportKeyAgree"
 3503 #define CMSG_OID_CAPI1_EXPORT_KEY_AGREE_FUNC CMSG_OID_EXPORT_KEY_AGREE_FUNC
 3504 #define CMSG_OID_CNG_EXPORT_KEY_AGREE_FUNC "CryptMsgDllCNGExportKeyAgree"
 3505 type PFN_CMSG_EXPORT_KEY_AGREE as function(byval pContentEncryptInfo as PCMSG_CONTENT_ENCRYPT_INFO, byval pKeyAgreeEncodeInfo as PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO, byval pKeyAgreeEncryptInfo as PCMSG_KEY_AGREE_ENCRYPT_INFO, byval dwFlags as DWORD, byval pvReserved as any ptr) as WINBOOL
 3506 
 3507 type _CMSG_MAIL_LIST_ENCRYPT_INFO
 3508     cbSize as DWORD
 3509     dwRecipientIndex as DWORD
 3510     KeyEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3511     EncryptedKey as CRYPT_DATA_BLOB
 3512     dwFlags as DWORD
 3513 end type
 3514 
 3515 type CMSG_MAIL_LIST_ENCRYPT_INFO as _CMSG_MAIL_LIST_ENCRYPT_INFO
 3516 type PCMSG_MAIL_LIST_ENCRYPT_INFO as _CMSG_MAIL_LIST_ENCRYPT_INFO ptr
 3517 const CMSG_MAIL_LIST_ENCRYPT_FREE_PARA_FLAG = &h1
 3518 const CMSG_MAIL_LIST_ENCRYPT_FREE_OBJID_FLAG = &h2
 3519 #define CMSG_OID_EXPORT_MAIL_LIST_FUNC "CryptMsgDllExportMailList"
 3520 #define CMSG_OID_CAPI1_EXPORT_MAIL_LIST_FUNC CMSG_OID_EXPORT_MAIL_LIST_FUNC
 3521 #define CMSG_OID_IMPORT_KEY_TRANS_FUNC "CryptMsgDllImportKeyTrans"
 3522 #define CMSG_OID_CAPI1_IMPORT_KEY_TRANS_FUNC CMSG_OID_IMPORT_KEY_TRANS_FUNC
 3523 #define CMSG_OID_IMPORT_KEY_AGREE_FUNC "CryptMsgDllImportKeyAgree"
 3524 #define CMSG_OID_CAPI1_IMPORT_KEY_AGREE_FUNC CMSG_OID_IMPORT_KEY_AGREE_FUNC
 3525 #define CMSG_OID_IMPORT_MAIL_LIST_FUNC "CryptMsgDllImportMailList"
 3526 #define CMSG_OID_CAPI1_IMPORT_MAIL_LIST_FUNC CMSG_OID_IMPORT_MAIL_LIST_FUNC
 3527 
 3528 type PFN_CMSG_EXPORT_MAIL_LIST as function(byval pContentEncryptInfo as PCMSG_CONTENT_ENCRYPT_INFO, byval pMailListEncodeInfo as PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO, byval pMailListEncryptInfo as PCMSG_MAIL_LIST_ENCRYPT_INFO, byval dwFlags as DWORD, byval pvReserved as any ptr) as WINBOOL
 3529 type PFN_CMSG_IMPORT_KEY_TRANS as function(byval pContentEncryptionAlgorithm as PCRYPT_ALGORITHM_IDENTIFIER, byval pKeyTransDecryptPara as PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA, byval dwFlags as DWORD, byval pvReserved as any ptr, byval phContentEncryptKey as HCRYPTKEY ptr) as WINBOOL
 3530 type PFN_CMSG_IMPORT_KEY_AGREE as function(byval pContentEncryptionAlgorithm as PCRYPT_ALGORITHM_IDENTIFIER, byval pKeyAgreeDecryptPara as PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA, byval dwFlags as DWORD, byval pvReserved as any ptr, byval phContentEncryptKey as HCRYPTKEY ptr) as WINBOOL
 3531 type PFN_CMSG_IMPORT_MAIL_LIST as function(byval pContentEncryptionAlgorithm as PCRYPT_ALGORITHM_IDENTIFIER, byval pMailListDecryptPara as PCMSG_CTRL_MAIL_LIST_DECRYPT_PARA, byval dwFlags as DWORD, byval pvReserved as any ptr, byval phContentEncryptKey as HCRYPTKEY ptr) as WINBOOL
 3532 
 3533 type _CMSG_CNG_CONTENT_DECRYPT_INFO
 3534     cbSize as DWORD
 3535     ContentEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 3536     pfnAlloc as PFN_CMSG_ALLOC
 3537     pfnFree as PFN_CMSG_FREE
 3538     hNCryptKey as NCRYPT_KEY_HANDLE
 3539     pbContentEncryptKey as UBYTE ptr
 3540     cbContentEncryptKey as DWORD
 3541     hCNGContentEncryptKey as BCRYPT_KEY_HANDLE
 3542     pbCNGContentEncryptKeyObject as UBYTE ptr
 3543 end type
 3544 
 3545 type CMSG_CNG_CONTENT_DECRYPT_INFO as _CMSG_CNG_CONTENT_DECRYPT_INFO
 3546 type PCMSG_CNG_CONTENT_DECRYPT_INFO as _CMSG_CNG_CONTENT_DECRYPT_INFO ptr
 3547 #define CMSG_OID_CNG_IMPORT_KEY_TRANS_FUNC "CryptMsgDllCNGImportKeyTrans"
 3548 #define CMSG_OID_CNG_IMPORT_KEY_AGREE_FUNC "CryptMsgDllCNGImportKeyAgree"
 3549 #define CMSG_OID_CNG_IMPORT_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllCNGImportContentEncryptKey"
 3550 
 3551 type PFN_CMSG_CNG_IMPORT_KEY_TRANS as function(byval pCNGContentDecryptInfo as PCMSG_CNG_CONTENT_DECRYPT_INFO, byval pKeyTransDecryptPara as PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA, byval dwFlags as DWORD, byval pvReserved as any ptr) as WINBOOL
 3552 type PFN_CMSG_CNG_IMPORT_KEY_AGREE as function(byval pCNGContentDecryptInfo as PCMSG_CNG_CONTENT_DECRYPT_INFO, byval pKeyAgreeDecryptPara as PCMSG_CTRL_KEY_AGREE_DECRYPT_PARA, byval dwFlags as DWORD, byval pvReserved as any ptr) as WINBOOL
 3553 type PFN_CMSG_CNG_IMPORT_CONTENT_ENCRYPT_KEY as function(byval pCNGContentDecryptInfo as PCMSG_CNG_CONTENT_DECRYPT_INFO, byval dwFlags as DWORD, byval pvReserved as any ptr) as WINBOOL
 3554 type HCERTSTORE as any ptr
 3555 
 3556 type _CERT_CONTEXT
 3557     dwCertEncodingType as DWORD
 3558     pbCertEncoded as UBYTE ptr
 3559     cbCertEncoded as DWORD
 3560     pCertInfo as PCERT_INFO
 3561     hCertStore as HCERTSTORE
 3562 end type
 3563 
 3564 type CERT_CONTEXT as _CERT_CONTEXT
 3565 type PCERT_CONTEXT as _CERT_CONTEXT ptr
 3566 type PCCERT_CONTEXT as const CERT_CONTEXT ptr
 3567 
 3568 type _CRL_CONTEXT
 3569     dwCertEncodingType as DWORD
 3570     pbCrlEncoded as UBYTE ptr
 3571     cbCrlEncoded as DWORD
 3572     pCrlInfo as PCRL_INFO
 3573     hCertStore as HCERTSTORE
 3574 end type
 3575 
 3576 type CRL_CONTEXT as _CRL_CONTEXT
 3577 type PCRL_CONTEXT as _CRL_CONTEXT ptr
 3578 type PCCRL_CONTEXT as const CRL_CONTEXT ptr
 3579 
 3580 type _CTL_CONTEXT
 3581     dwMsgAndCertEncodingType as DWORD
 3582     pbCtlEncoded as UBYTE ptr
 3583     cbCtlEncoded as DWORD
 3584     pCtlInfo as PCTL_INFO
 3585     hCertStore as HCERTSTORE
 3586     hCryptMsg as HCRYPTMSG
 3587     pbCtlContent as UBYTE ptr
 3588     cbCtlContent as DWORD
 3589 end type
 3590 
 3591 type CTL_CONTEXT as _CTL_CONTEXT
 3592 type PCTL_CONTEXT as _CTL_CONTEXT ptr
 3593 type PCCTL_CONTEXT as const CTL_CONTEXT ptr
 3594 
 3595 const CERT_KEY_PROV_HANDLE_PROP_ID = 1
 3596 const CERT_KEY_PROV_INFO_PROP_ID = 2
 3597 const CERT_SHA1_HASH_PROP_ID = 3
 3598 const CERT_MD5_HASH_PROP_ID = 4
 3599 const CERT_HASH_PROP_ID = CERT_SHA1_HASH_PROP_ID
 3600 const CERT_KEY_CONTEXT_PROP_ID = 5
 3601 const CERT_KEY_SPEC_PROP_ID = 6
 3602 const CERT_IE30_RESERVED_PROP_ID = 7
 3603 const CERT_PUBKEY_HASH_RESERVED_PROP_ID = 8
 3604 const CERT_ENHKEY_USAGE_PROP_ID = 9
 3605 const CERT_CTL_USAGE_PROP_ID = CERT_ENHKEY_USAGE_PROP_ID
 3606 const CERT_NEXT_UPDATE_LOCATION_PROP_ID = 10
 3607 const CERT_FRIENDLY_NAME_PROP_ID = 11
 3608 const CERT_PVK_FILE_PROP_ID = 12
 3609 const CERT_DESCRIPTION_PROP_ID = 13
 3610 const CERT_ACCESS_STATE_PROP_ID = 14
 3611 const CERT_SIGNATURE_HASH_PROP_ID = 15
 3612 const CERT_SMART_CARD_DATA_PROP_ID = 16
 3613 const CERT_EFS_PROP_ID = 17
 3614 const CERT_FORTEZZA_DATA_PROP_ID = 18
 3615 const CERT_ARCHIVED_PROP_ID = 19
 3616 const CERT_KEY_IDENTIFIER_PROP_ID = 20
 3617 const CERT_AUTO_ENROLL_PROP_ID = 21
 3618 const CERT_PUBKEY_ALG_PARA_PROP_ID = 22
 3619 const CERT_CROSS_CERT_DIST_POINTS_PROP_ID = 23
 3620 const CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID = 24
 3621 const CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID = 25
 3622 const CERT_ENROLLMENT_PROP_ID = 26
 3623 const CERT_DATE_STAMP_PROP_ID = 27
 3624 const CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID = 28
 3625 const CERT_SUBJECT_NAME_MD5_HASH_PROP_ID = 29
 3626 const CERT_EXTENDED_ERROR_INFO_PROP_ID = 30
 3627 const CERT_RENEWAL_PROP_ID = 64
 3628 const CERT_ARCHIVED_KEY_HASH_PROP_ID = 65
 3629 const CERT_AUTO_ENROLL_RETRY_PROP_ID = 66
 3630 const CERT_AIA_URL_RETRIEVED_PROP_ID = 67
 3631 const CERT_AUTHORITY_INFO_ACCESS_PROP_ID = 68
 3632 const CERT_BACKED_UP_PROP_ID = 69
 3633 const CERT_OCSP_RESPONSE_PROP_ID = 70
 3634 const CERT_REQUEST_ORIGINATOR_PROP_ID = 71
 3635 const CERT_SOURCE_LOCATION_PROP_ID = 72
 3636 const CERT_SOURCE_URL_PROP_ID = 73
 3637 const CERT_NEW_KEY_PROP_ID = 74
 3638 const CERT_OCSP_CACHE_PREFIX_PROP_ID = 75
 3639 const CERT_SMART_CARD_ROOT_INFO_PROP_ID = 76
 3640 const CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID = 77
 3641 const CERT_NCRYPT_KEY_HANDLE_PROP_ID = 78
 3642 const CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID = 79
 3643 const CERT_SUBJECT_INFO_ACCESS_PROP_ID = 80
 3644 const CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID = 81
 3645 const CERT_CA_DISABLE_CRL_PROP_ID = 82
 3646 const CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID = 83
 3647 const CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID = 84
 3648 const CERT_SUBJECT_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID = 85
 3649 const CERT_SUBJECT_DISABLE_CRL_PROP_ID = 86
 3650 const CERT_CEP_PROP_ID = 87
 3651 const CERT_SIGN_HASH_CNG_ALG_PROP_ID = 89
 3652 const CERT_SCARD_PIN_ID_PROP_ID = 90
 3653 const CERT_SCARD_PIN_INFO_PROP_ID = 91
 3654 const CERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_ID = 92
 3655 const CERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID = 93
 3656 const CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID = 94
 3657 const CERT_ISSUER_CHAIN_SIGN_HASH_CNG_ALG_PROP_ID = 95
 3658 const CERT_ISSUER_CHAIN_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID = 96
 3659 const CERT_NO_EXPIRE_NOTIFICATION_PROP_ID = 97
 3660 const CERT_AUTH_ROOT_SHA256_HASH_PROP_ID = 98
 3661 const CERT_NCRYPT_KEY_HANDLE_TRANSFER_PROP_ID = 99
 3662 const CERT_HCRYPTPROV_TRANSFER_PROP_ID = 100
 3663 const CERT_SMART_CARD_READER_PROP_ID = 101
 3664 const CERT_SEND_AS_TRUSTED_ISSUER_PROP_ID = 102
 3665 const CERT_KEY_REPAIR_ATTEMPTED_PROP_ID = 103
 3666 const CERT_DISALLOWED_FILETIME_PROP_ID = 104
 3667 const CERT_ROOT_PROGRAM_CHAIN_POLICIES_PROP_ID = 105
 3668 const CERT_SMART_CARD_READER_NON_REMOVABLE_PROP_ID = 106
 3669 const CERT_FIRST_RESERVED_PROP_ID = 107
 3670 const CERT_LAST_RESERVED_PROP_ID = &h00007fff
 3671 const CERT_FIRST_USER_PROP_ID = &h8000
 3672 const CERT_LAST_USER_PROP_ID = &h0000ffff
 3673 #define IS_CERT_HASH_PROP_ID(X) (((CERT_SHA1_HASH_PROP_ID = (X)) orelse (CERT_MD5_HASH_PROP_ID = (X))) orelse (CERT_SIGNATURE_HASH_PROP_ID = (X)))
 3674 #define IS_PUBKEY_HASH_PROP_ID(X) ((CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID = (X)) orelse (CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID = (X)))
 3675 #define IS_CHAIN_HASH_PROP_ID(X) ((((CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID = (X)) orelse (CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID = (X))) orelse (CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID = (X))) orelse (CERT_SUBJECT_NAME_MD5_HASH_PROP_ID = (X)))
 3676 #define IS_STRONG_SIGN_PROP_ID(X) (((CERT_SIGN_HASH_CNG_ALG_PROP_ID = (X)) orelse (CERT_SUBJECT_PUB_KEY_BIT_LENGTH_PROP_ID = (X))) orelse (CERT_PUB_KEY_CNG_ALG_BIT_LENGTH_PROP_ID = (X)))
 3677 #define szOID_CERT_PROP_ID_PREFIX "1.3.6.1.4.1.311.10.11."
 3678 #define _szPROP_ID(PropId) #PropId
 3679 #define szOID_CERT_PROP_ID(PropId) szOID_CERT_PROP_ID_PREFIX _szPROP_ID(PropId)
 3680 #define __CRYPT32WTEXT(quote) wstr(quote)
 3681 #define _CRYPT32WTEXT(quote) __CRYPT32WTEXT(quote)
 3682 #define wszOID_CERT_PROP_ID(PropId) (_CRYPT32WTEXT(szOID_CERT_PROP_ID_PREFIX) + _CRYPT32WTEXT(_szPROP_ID(PropId)))
 3683 #define szOID_CERT_KEY_IDENTIFIER_PROP_ID "1.3.6.1.4.1.311.10.11.20"
 3684 #define szOID_CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID "1.3.6.1.4.1.311.10.11.28"
 3685 #define szOID_CERT_SUBJECT_NAME_MD5_HASH_PROP_ID "1.3.6.1.4.1.311.10.11.29"
 3686 #define szOID_CERT_MD5_HASH_PROP_ID "1.3.6.1.4.1.311.10.11.4"
 3687 #define szOID_CERT_SIGNATURE_HASH_PROP_ID "1.3.6.1.4.1.311.10.11.15"
 3688 #define szOID_DISALLOWED_HASH szOID_CERT_SIGNATURE_HASH_PROP_ID
 3689 #define szOID_CERT_DISALLOWED_FILETIME_PROP_ID "1.3.6.1.4.1.311.10.11.104"
 3690 const CERT_ACCESS_STATE_WRITE_PERSIST_FLAG = &h1
 3691 const CERT_ACCESS_STATE_SYSTEM_STORE_FLAG = &h2
 3692 const CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG = &h4
 3693 const CERT_ACCESS_STATE_GP_SYSTEM_STORE_FLAG = &h8
 3694 const CERT_ACCESS_STATE_SHARED_USER_FLAG = &h10
 3695 #define szOID_ROOT_PROGRAM_AUTO_UPDATE_CA_REVOCATION "1.3.6.1.4.1.311.60.3.1"
 3696 #define szOID_ROOT_PROGRAM_AUTO_UPDATE_END_REVOCATION "1.3.6.1.4.1.311.60.3.2"
 3697 #define szOID_ROOT_PROGRAM_NO_OCSP_FAILOVER_TO_CRL "1.3.6.1.4.1.311.60.3.3"
 3698 
 3699 type _CRYPT_KEY_PROV_PARAM
 3700     dwParam as DWORD
 3701     pbData as UBYTE ptr
 3702     cbData as DWORD
 3703     dwFlags as DWORD
 3704 end type
 3705 
 3706 type CRYPT_KEY_PROV_PARAM as _CRYPT_KEY_PROV_PARAM
 3707 type PCRYPT_KEY_PROV_PARAM as _CRYPT_KEY_PROV_PARAM ptr
 3708 
 3709 type _CRYPT_KEY_PROV_INFO
 3710     pwszContainerName as LPWSTR
 3711     pwszProvName as LPWSTR
 3712     dwProvType as DWORD
 3713     dwFlags as DWORD
 3714     cProvParam as DWORD
 3715     rgProvParam as PCRYPT_KEY_PROV_PARAM
 3716     dwKeySpec as DWORD
 3717 end type
 3718 
 3719 type CRYPT_KEY_PROV_INFO as _CRYPT_KEY_PROV_INFO
 3720 type PCRYPT_KEY_PROV_INFO as _CRYPT_KEY_PROV_INFO ptr
 3721 const CERT_SET_KEY_PROV_HANDLE_PROP_ID = &h1
 3722 const CERT_SET_KEY_CONTEXT_PROP_ID = &h1
 3723 const CERT_NCRYPT_KEY_SPEC = &hffffffff
 3724 
 3725 type _CERT_KEY_CONTEXT
 3726     cbSize as DWORD
 3727 
 3728     union
 3729         hCryptProv as HCRYPTPROV
 3730         hNCryptKey as NCRYPT_KEY_HANDLE
 3731     end union
 3732 
 3733     dwKeySpec as DWORD
 3734 end type
 3735 
 3736 type CERT_KEY_CONTEXT as _CERT_KEY_CONTEXT
 3737 type PCERT_KEY_CONTEXT as _CERT_KEY_CONTEXT ptr
 3738 
 3739 type _ROOT_INFO_LUID
 3740     LowPart as DWORD
 3741     HighPart as LONG
 3742 end type
 3743 
 3744 type ROOT_INFO_LUID as _ROOT_INFO_LUID
 3745 type PROOT_INFO_LUID as _ROOT_INFO_LUID ptr
 3746 
 3747 type _CRYPT_SMART_CARD_ROOT_INFO
 3748     rgbCardID(0 to 15) as UBYTE
 3749     luid as ROOT_INFO_LUID
 3750 end type
 3751 
 3752 type CRYPT_SMART_CARD_ROOT_INFO as _CRYPT_SMART_CARD_ROOT_INFO
 3753 type PCRYPT_SMART_CARD_ROOT_INFO as _CRYPT_SMART_CARD_ROOT_INFO ptr
 3754 const CERT_STORE_PROV_MSG = cast(LPCSTR, 1)
 3755 const CERT_STORE_PROV_MEMORY = cast(LPCSTR, 2)
 3756 const CERT_STORE_PROV_FILE = cast(LPCSTR, 3)
 3757 const CERT_STORE_PROV_REG = cast(LPCSTR, 4)
 3758 const CERT_STORE_PROV_PKCS7 = cast(LPCSTR, 5)
 3759 const CERT_STORE_PROV_SERIALIZED = cast(LPCSTR, 6)
 3760 const CERT_STORE_PROV_FILENAME_A = cast(LPCSTR, 7)
 3761 const CERT_STORE_PROV_FILENAME_W = cast(LPCSTR, 8)
 3762 const CERT_STORE_PROV_FILENAME = CERT_STORE_PROV_FILENAME_W
 3763 const CERT_STORE_PROV_SYSTEM_A = cast(LPCSTR, 9)
 3764 const CERT_STORE_PROV_SYSTEM_W = cast(LPCSTR, 10)
 3765 const CERT_STORE_PROV_SYSTEM = CERT_STORE_PROV_SYSTEM_W
 3766 const CERT_STORE_PROV_COLLECTION = cast(LPCSTR, 11)
 3767 const CERT_STORE_PROV_SYSTEM_REGISTRY_A = cast(LPCSTR, 12)
 3768 const CERT_STORE_PROV_SYSTEM_REGISTRY_W = cast(LPCSTR, 13)
 3769 const CERT_STORE_PROV_SYSTEM_REGISTRY = CERT_STORE_PROV_SYSTEM_REGISTRY_W
 3770 const CERT_STORE_PROV_PHYSICAL_W = cast(LPCSTR, 14)
 3771 const CERT_STORE_PROV_PHYSICAL = CERT_STORE_PROV_PHYSICAL_W
 3772 const CERT_STORE_PROV_SMART_CARD_W = cast(LPCSTR, 15)
 3773 const CERT_STORE_PROV_SMART_CARD = CERT_STORE_PROV_SMART_CARD_W
 3774 const CERT_STORE_PROV_LDAP_W = cast(LPCSTR, 16)
 3775 const CERT_STORE_PROV_LDAP = CERT_STORE_PROV_LDAP_W
 3776 const CERT_STORE_PROV_PKCS12 = cast(LPCSTR, 17)
 3777 #define sz_CERT_STORE_PROV_MEMORY "Memory"
 3778 #define sz_CERT_STORE_PROV_FILENAME_W "File"
 3779 #define sz_CERT_STORE_PROV_FILENAME sz_CERT_STORE_PROV_FILENAME_W
 3780 #define sz_CERT_STORE_PROV_SYSTEM_W "System"
 3781 #define sz_CERT_STORE_PROV_SYSTEM sz_CERT_STORE_PROV_SYSTEM_W
 3782 #define sz_CERT_STORE_PROV_PKCS7 "PKCS7"
 3783 #define sz_CERT_STORE_PROV_PKCS12 "PKCS12"
 3784 #define sz_CERT_STORE_PROV_SERIALIZED "Serialized"
 3785 #define sz_CERT_STORE_PROV_COLLECTION "Collection"
 3786 #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W "SystemRegistry"
 3787 #define sz_CERT_STORE_PROV_SYSTEM_REGISTRY sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W
 3788 #define sz_CERT_STORE_PROV_PHYSICAL_W "Physical"
 3789 #define sz_CERT_STORE_PROV_PHYSICAL sz_CERT_STORE_PROV_PHYSICAL_W
 3790 #define sz_CERT_STORE_PROV_SMART_CARD_W "SmartCard"
 3791 #define sz_CERT_STORE_PROV_SMART_CARD sz_CERT_STORE_PROV_SMART_CARD_W
 3792 #define sz_CERT_STORE_PROV_LDAP_W "Ldap"
 3793 #define sz_CERT_STORE_PROV_LDAP sz_CERT_STORE_PROV_LDAP_W
 3794 const CERT_STORE_SIGNATURE_FLAG = &h1
 3795 const CERT_STORE_TIME_VALIDITY_FLAG = &h2
 3796 const CERT_STORE_REVOCATION_FLAG = &h4
 3797 const CERT_STORE_NO_CRL_FLAG = &h10000
 3798 const CERT_STORE_NO_ISSUER_FLAG = &h20000
 3799 const CERT_STORE_BASE_CRL_FLAG = &h100
 3800 const CERT_STORE_DELTA_CRL_FLAG = &h200
 3801 const CERT_STORE_NO_CRYPT_RELEASE_FLAG = &h1
 3802 const CERT_STORE_SET_LOCALIZED_NAME_FLAG = &h2
 3803 const CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = &h4
 3804 const CERT_STORE_DELETE_FLAG = &h10
 3805 const CERT_STORE_UNSAFE_PHYSICAL_FLAG = &h20
 3806 const CERT_STORE_SHARE_STORE_FLAG = &h40
 3807 const CERT_STORE_SHARE_CONTEXT_FLAG = &h80
 3808 const CERT_STORE_MANIFOLD_FLAG = &h100
 3809 const CERT_STORE_ENUM_ARCHIVED_FLAG = &h200
 3810 const CERT_STORE_UPDATE_KEYID_FLAG = &h400
 3811 const CERT_STORE_BACKUP_RESTORE_FLAG = &h800
 3812 const CERT_STORE_READONLY_FLAG = &h8000
 3813 const CERT_STORE_OPEN_EXISTING_FLAG = &h4000
 3814 const CERT_STORE_CREATE_NEW_FLAG = &h2000
 3815 const CERT_STORE_MAXIMUM_ALLOWED_FLAG = &h1000
 3816 const CERT_SYSTEM_STORE_MASK = &hffff0000
 3817 const CERT_SYSTEM_STORE_RELOCATE_FLAG = &h80000000
 3818 
 3819 type _CERT_SYSTEM_STORE_RELOCATE_PARA
 3820     union
 3821         hKeyBase as HKEY
 3822         pvBase as any ptr
 3823     end union
 3824 
 3825     union
 3826         pvSystemStore as any ptr
 3827         pszSystemStore as LPCSTR
 3828         pwszSystemStore as LPCWSTR
 3829     end union
 3830 end type
 3831 
 3832 type CERT_SYSTEM_STORE_RELOCATE_PARA as _CERT_SYSTEM_STORE_RELOCATE_PARA
 3833 type PCERT_SYSTEM_STORE_RELOCATE_PARA as _CERT_SYSTEM_STORE_RELOCATE_PARA ptr
 3834 const CERT_SYSTEM_STORE_DEFER_READ_FLAG = &h20000000
 3835 const CERT_SYSTEM_STORE_UNPROTECTED_FLAG = &h40000000
 3836 const CERT_SYSTEM_STORE_LOCATION_MASK = &h00ff0000
 3837 const CERT_SYSTEM_STORE_LOCATION_SHIFT = 16
 3838 const CERT_SYSTEM_STORE_CURRENT_USER_ID = 1
 3839 const CERT_SYSTEM_STORE_LOCAL_MACHINE_ID = 2
 3840 const CERT_SYSTEM_STORE_CURRENT_SERVICE_ID = 4
 3841 const CERT_SYSTEM_STORE_SERVICES_ID = 5
 3842 const CERT_SYSTEM_STORE_USERS_ID = 6
 3843 const CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID = 7
 3844 const CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID = 8
 3845 const CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID = 9
 3846 const CERT_SYSTEM_STORE_CURRENT_USER = CERT_SYSTEM_STORE_CURRENT_USER_ID shl CERT_SYSTEM_STORE_LOCATION_SHIFT
 3847 const CERT_SYSTEM_STORE_LOCAL_MACHINE = CERT_SYSTEM_STORE_LOCAL_MACHINE_ID shl CERT_SYSTEM_STORE_LOCATION_SHIFT
 3848 const CERT_SYSTEM_STORE_CURRENT_SERVICE = CERT_SYSTEM_STORE_CURRENT_SERVICE_ID shl CERT_SYSTEM_STORE_LOCATION_SHIFT
 3849 const CERT_SYSTEM_STORE_SERVICES = CERT_SYSTEM_STORE_SERVICES_ID shl CERT_SYSTEM_STORE_LOCATION_SHIFT
 3850 const CERT_SYSTEM_STORE_USERS = CERT_SYSTEM_STORE_USERS_ID shl CERT_SYSTEM_STORE_LOCATION_SHIFT
 3851 const CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY = CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID shl CERT_SYSTEM_STORE_LOCATION_SHIFT
 3852 const CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID shl CERT_SYSTEM_STORE_LOCATION_SHIFT
 3853 const CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID shl CERT_SYSTEM_STORE_LOCATION_SHIFT
 3854 #define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH wstr(!"Software\\Policies\\Microsoft\\SystemCertificates")
 3855 #define CERT_EFSBLOB_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH wstr(!"\\EFS")
 3856 #define CERT_EFSBLOB_VALUE_NAME wstr("EFSBlob")
 3857 #define CERT_PROT_ROOT_FLAGS_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH wstr(!"\\Root\\ProtectedRoots")
 3858 #define CERT_PROT_ROOT_FLAGS_VALUE_NAME wstr("Flags")
 3859 const CERT_PROT_ROOT_DISABLE_CURRENT_USER_FLAG = &h1
 3860 const CERT_PROT_ROOT_INHIBIT_ADD_AT_INIT_FLAG = &h2
 3861 const CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG = &h4
 3862 const CERT_PROT_ROOT_DISABLE_LM_AUTH_FLAG = &h8
 3863 const CERT_PROT_ROOT_ONLY_LM_GPT_FLAG = &h8
 3864 const CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG = &h10
 3865 const CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG = &h20
 3866 const CERT_PROT_ROOT_DISABLE_PEER_TRUST = &h10000
 3867 #define CERT_PROT_ROOT_PEER_USAGES_VALUE_NAME wstr("PeerUsages")
 3868 #define CERT_PROT_ROOT_PEER_USAGES_VALUE_NAME_A "PeerUsages"
 3869 #define CERT_PROT_ROOT_PEER_USAGES_DEFAULT_A szOID_PKIX_KP_CLIENT_AUTH !"\0" szOID_PKIX_KP_EMAIL_PROTECTION !"\0" szOID_KP_EFS !"\0"
 3870 #define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH wstr(!"\\TrustedPublisher\\Safer")
 3871 #define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH wstr(!"Software\\Microsoft\\SystemCertificates")
 3872 #define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH wstr(!"\\TrustedPublisher\\Safer")
 3873 #define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME wstr("AuthenticodeFlags")
 3874 const CERT_TRUST_PUB_ALLOW_TRUST_MASK = &h3
 3875 const CERT_TRUST_PUB_ALLOW_END_USER_TRUST = &h0
 3876 const CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST = &h1
 3877 const CERT_TRUST_PUB_ALLOW_ENTERPRISE_ADMIN_TRUST = &h2
 3878 const CERT_TRUST_PUB_CHECK_PUBLISHER_REV_FLAG = &h100
 3879 const CERT_TRUST_PUB_CHECK_TIMESTAMP_REV_FLAG = &h200
 3880 #define CERT_OCM_SUBCOMPONENTS_LOCAL_MACHINE_REGPATH wstr(!"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup\\OC Manager\\Subcomponents")
 3881 #define CERT_OCM_SUBCOMPONENTS_ROOT_AUTO_UPDATE_VALUE_NAME wstr("RootAutoUpdate")
 3882 #define CERT_DISABLE_ROOT_AUTO_UPDATE_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH wstr(!"\\AuthRoot")
 3883 #define CERT_DISABLE_ROOT_AUTO_UPDATE_VALUE_NAME wstr("DisableRootAutoUpdate")
 3884 #define CERT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH wstr(!"\\AuthRoot\\AutoUpdate")
 3885 #define CERT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME wstr("RootDirUrl")
 3886 #define CERT_AUTH_ROOT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH CERT_AUTO_UPDATE_LOCAL_MACHINE_REGPATH
 3887 #define CERT_AUTH_ROOT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME CERT_AUTO_UPDATE_ROOT_DIR_URL_VALUE_NAME
 3888 #define CERT_AUTH_ROOT_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME wstr("SyncDeltaTime")
 3889 #define CERT_AUTH_ROOT_AUTO_UPDATE_FLAGS_VALUE_NAME wstr("Flags")
 3890 const CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_UNTRUSTED_ROOT_LOGGING_FLAG = &h1
 3891 const CERT_AUTH_ROOT_AUTO_UPDATE_DISABLE_PARTIAL_CHAIN_LOGGING_FLAG = &h2
 3892 const CERT_AUTO_UPDATE_DISABLE_RANDOM_QUERY_STRING_FLAG = &h4
 3893 #define CERT_AUTH_ROOT_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME wstr("LastSyncTime")
 3894 #define CERT_AUTH_ROOT_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME wstr("EncodedCtl")
 3895 #define CERT_AUTH_ROOT_CTL_FILENAME wstr("authroot.stl")
 3896 #define CERT_AUTH_ROOT_CTL_FILENAME_A "authroot.stl"
 3897 #define CERT_AUTH_ROOT_CAB_FILENAME wstr("authrootstl.cab")
 3898 #define CERT_AUTH_ROOT_SEQ_FILENAME wstr("authrootseq.txt")
 3899 #define CERT_AUTH_ROOT_CERT_EXT wstr(".crt")
 3900 #define CERT_DISALLOWED_CERT_AUTO_UPDATE_SYNC_DELTA_TIME_VALUE_NAME wstr("DisallowedCertSyncDeltaTime")
 3901 #define CERT_DISALLOWED_CERT_AUTO_UPDATE_LAST_SYNC_TIME_VALUE_NAME wstr("DisallowedCertLastSyncTime")
 3902 #define CERT_DISALLOWED_CERT_AUTO_UPDATE_ENCODED_CTL_VALUE_NAME wstr("DisallowedCertEncodedCtl")
 3903 #define CERT_DISALLOWED_CERT_CTL_FILENAME wstr("disallowedcert.stl")
 3904 #define CERT_DISALLOWED_CERT_CTL_FILENAME_A "disallowedcert.stl"
 3905 #define CERT_DISALLOWED_CERT_CAB_FILENAME wstr("disallowedcertstl.cab")
 3906 #define CERT_DISALLOWED_CERT_AUTO_UPDATE_LIST_IDENTIFIER wstr("DisallowedCert_AutoUpdate_1")
 3907 const CERT_REGISTRY_STORE_REMOTE_FLAG = &h10000
 3908 const CERT_REGISTRY_STORE_SERIALIZED_FLAG = &h20000
 3909 const CERT_REGISTRY_STORE_CLIENT_GPT_FLAG = &h80000000
 3910 const CERT_REGISTRY_STORE_LM_GPT_FLAG = &h1000000
 3911 
 3912 type _CERT_REGISTRY_STORE_CLIENT_GPT_PARA
 3913     hKeyBase as HKEY
 3914     pwszRegPath as LPWSTR
 3915 end type
 3916 
 3917 type CERT_REGISTRY_STORE_CLIENT_GPT_PARA as _CERT_REGISTRY_STORE_CLIENT_GPT_PARA
 3918 type PCERT_REGISTRY_STORE_CLIENT_GPT_PARA as _CERT_REGISTRY_STORE_CLIENT_GPT_PARA ptr
 3919 const CERT_REGISTRY_STORE_ROAMING_FLAG = &h40000
 3920 
 3921 type _CERT_REGISTRY_STORE_ROAMING_PARA
 3922     hKey as HKEY
 3923     pwszStoreDirectory as LPWSTR
 3924 end type
 3925 
 3926 type CERT_REGISTRY_STORE_ROAMING_PARA as _CERT_REGISTRY_STORE_ROAMING_PARA
 3927 type PCERT_REGISTRY_STORE_ROAMING_PARA as _CERT_REGISTRY_STORE_ROAMING_PARA ptr
 3928 const CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG = &h80000
 3929 const CERT_REGISTRY_STORE_EXTERNAL_FLAG = &h100000
 3930 #define CERT_IE_DIRTY_FLAGS_REGPATH wstr(!"Software\\Microsoft\\Cryptography\\IEDirtyFlags")
 3931 const CERT_FILE_STORE_COMMIT_ENABLE_FLAG = &h10000
 3932 const CERT_LDAP_STORE_SIGN_FLAG = &h10000
 3933 const CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG = &h20000
 3934 const CERT_LDAP_STORE_OPENED_FLAG = &h40000
 3935 
 3936 type _CERT_LDAP_STORE_OPENED_PARA
 3937     pvLdapSessionHandle as any ptr
 3938     pwszLdapUrl as LPCWSTR
 3939 end type
 3940 
 3941 type CERT_LDAP_STORE_OPENED_PARA as _CERT_LDAP_STORE_OPENED_PARA
 3942 type PCERT_LDAP_STORE_OPENED_PARA as _CERT_LDAP_STORE_OPENED_PARA ptr
 3943 const CERT_LDAP_STORE_UNBIND_FLAG = &h80000
 3944 declare function CertOpenStore(byval lpszStoreProvider as LPCSTR, byval dwEncodingType as DWORD, byval hCryptProv as HCRYPTPROV_LEGACY, byval dwFlags as DWORD, byval pvPara as const any ptr) as HCERTSTORE
 3945 type HCERTSTOREPROV as any ptr
 3946 #define CRYPT_OID_OPEN_STORE_PROV_FUNC "CertDllOpenStoreProv"
 3947 
 3948 type _CERT_STORE_PROV_INFO
 3949     cbSize as DWORD
 3950     cStoreProvFunc as DWORD
 3951     rgpvStoreProvFunc as any ptr ptr
 3952     hStoreProv as HCERTSTOREPROV
 3953     dwStoreProvFlags as DWORD
 3954     hStoreProvFuncAddr2 as HCRYPTOIDFUNCADDR
 3955 end type
 3956 
 3957 type CERT_STORE_PROV_INFO as _CERT_STORE_PROV_INFO
 3958 type PCERT_STORE_PROV_INFO as _CERT_STORE_PROV_INFO ptr
 3959 type PFN_CERT_DLL_OPEN_STORE_PROV_FUNC as function(byval lpszStoreProvider as LPCSTR, byval dwEncodingType as DWORD, byval hCryptProv as HCRYPTPROV_LEGACY, byval dwFlags as DWORD, byval pvPara as const any ptr, byval hCertStore as HCERTSTORE, byval pStoreProvInfo as PCERT_STORE_PROV_INFO) as WINBOOL
 3960 
 3961 const CERT_STORE_PROV_EXTERNAL_FLAG = &h1
 3962 const CERT_STORE_PROV_DELETED_FLAG = &h2
 3963 const CERT_STORE_PROV_NO_PERSIST_FLAG = &h4
 3964 const CERT_STORE_PROV_SYSTEM_STORE_FLAG = &h8
 3965 const CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG = &h10
 3966 const CERT_STORE_PROV_GP_SYSTEM_STORE_FLAG = &h20
 3967 const CERT_STORE_PROV_SHARED_USER_FLAG = &h40
 3968 const CERT_STORE_PROV_CLOSE_FUNC = 0
 3969 const CERT_STORE_PROV_READ_CERT_FUNC = 1
 3970 const CERT_STORE_PROV_WRITE_CERT_FUNC = 2
 3971 const CERT_STORE_PROV_DELETE_CERT_FUNC = 3
 3972 const CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC = 4
 3973 const CERT_STORE_PROV_READ_CRL_FUNC = 5
 3974 const CERT_STORE_PROV_WRITE_CRL_FUNC = 6
 3975 const CERT_STORE_PROV_DELETE_CRL_FUNC = 7
 3976 const CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC = 8
 3977 const CERT_STORE_PROV_READ_CTL_FUNC = 9
 3978 const CERT_STORE_PROV_WRITE_CTL_FUNC = 10
 3979 const CERT_STORE_PROV_DELETE_CTL_FUNC = 11
 3980 const CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC = 12
 3981 const CERT_STORE_PROV_CONTROL_FUNC = 13
 3982 const CERT_STORE_PROV_FIND_CERT_FUNC = 14
 3983 const CERT_STORE_PROV_FREE_FIND_CERT_FUNC = 15
 3984 const CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC = 16
 3985 const CERT_STORE_PROV_FIND_CRL_FUNC = 17
 3986 const CERT_STORE_PROV_FREE_FIND_CRL_FUNC = 18
 3987 const CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC = 19
 3988 const CERT_STORE_PROV_FIND_CTL_FUNC = 20
 3989 const CERT_STORE_PROV_FREE_FIND_CTL_FUNC = 21
 3990 const CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC = 22
 3991 const CERT_STORE_PROV_WRITE_ADD_FLAG = &h1
 3992 
 3993 type PFN_CERT_STORE_PROV_CLOSE as sub(byval hStoreProv as HCERTSTOREPROV, byval dwFlags as DWORD)
 3994 type PFN_CERT_STORE_PROV_READ_CERT as function(byval hStoreProv as HCERTSTOREPROV, byval pStoreCertContext as PCCERT_CONTEXT, byval dwFlags as DWORD, byval ppProvCertContext as PCCERT_CONTEXT ptr) as WINBOOL
 3995 type PFN_CERT_STORE_PROV_WRITE_CERT as function(byval hStoreProv as HCERTSTOREPROV, byval pCertContext as PCCERT_CONTEXT, byval dwFlags as DWORD) as WINBOOL
 3996 type PFN_CERT_STORE_PROV_DELETE_CERT as function(byval hStoreProv as HCERTSTOREPROV, byval pCertContext as PCCERT_CONTEXT, byval dwFlags as DWORD) as WINBOOL
 3997 type PFN_CERT_STORE_PROV_SET_CERT_PROPERTY as function(byval hStoreProv as HCERTSTOREPROV, byval pCertContext as PCCERT_CONTEXT, byval dwPropId as DWORD, byval dwFlags as DWORD, byval pvData as const any ptr) as WINBOOL
 3998 type PFN_CERT_STORE_PROV_READ_CRL as function(byval hStoreProv as HCERTSTOREPROV, byval pStoreCrlContext as PCCRL_CONTEXT, byval dwFlags as DWORD, byval ppProvCrlContext as PCCRL_CONTEXT ptr) as WINBOOL
 3999 type PFN_CERT_STORE_PROV_WRITE_CRL as function(byval hStoreProv as HCERTSTOREPROV, byval pCrlContext as PCCRL_CONTEXT, byval dwFlags as DWORD) as WINBOOL
 4000 type PFN_CERT_STORE_PROV_DELETE_CRL as function(byval hStoreProv as HCERTSTOREPROV, byval pCrlContext as PCCRL_CONTEXT, byval dwFlags as DWORD) as WINBOOL
 4001 type PFN_CERT_STORE_PROV_SET_CRL_PROPERTY as function(byval hStoreProv as HCERTSTOREPROV, byval pCrlContext as PCCRL_CONTEXT, byval dwPropId as DWORD, byval dwFlags as DWORD, byval pvData as const any ptr) as WINBOOL
 4002 type PFN_CERT_STORE_PROV_READ_CTL as function(byval hStoreProv as HCERTSTOREPROV, byval pStoreCtlContext as PCCTL_CONTEXT, byval dwFlags as DWORD, byval ppProvCtlContext as PCCTL_CONTEXT ptr) as WINBOOL
 4003 type PFN_CERT_STORE_PROV_WRITE_CTL as function(byval hStoreProv as HCERTSTOREPROV, byval pCtlContext as PCCTL_CONTEXT, byval dwFlags as DWORD) as WINBOOL
 4004 type PFN_CERT_STORE_PROV_DELETE_CTL as function(byval hStoreProv as HCERTSTOREPROV, byval pCtlContext as PCCTL_CONTEXT, byval dwFlags as DWORD) as WINBOOL
 4005 type PFN_CERT_STORE_PROV_SET_CTL_PROPERTY as function(byval hStoreProv as HCERTSTOREPROV, byval pCtlContext as PCCTL_CONTEXT, byval dwPropId as DWORD, byval dwFlags as DWORD, byval pvData as const any ptr) as WINBOOL
 4006 type PFN_CERT_STORE_PROV_CONTROL as function(byval hStoreProv as HCERTSTOREPROV, byval dwFlags as DWORD, byval dwCtrlType as DWORD, byval pvCtrlPara as const any ptr) as WINBOOL
 4007 
 4008 type _CERT_STORE_PROV_FIND_INFO
 4009     cbSize as DWORD
 4010     dwMsgAndCertEncodingType as DWORD
 4011     dwFindFlags as DWORD
 4012     dwFindType as DWORD
 4013     pvFindPara as const any ptr
 4014 end type
 4015 
 4016 type CERT_STORE_PROV_FIND_INFO as _CERT_STORE_PROV_FIND_INFO
 4017 type PCERT_STORE_PROV_FIND_INFO as _CERT_STORE_PROV_FIND_INFO ptr
 4018 type CCERT_STORE_PROV_FIND_INFO as const CERT_STORE_PROV_FIND_INFO
 4019 type PCCERT_STORE_PROV_FIND_INFO as const CERT_STORE_PROV_FIND_INFO ptr
 4020 type PFN_CERT_STORE_PROV_FIND_CERT as function(byval hStoreProv as HCERTSTOREPROV, byval pFindInfo as PCCERT_STORE_PROV_FIND_INFO, byval pPrevCertContext as PCCERT_CONTEXT, byval dwFlags as DWORD, byval ppvStoreProvFindInfo as any ptr ptr, byval ppProvCertContext as PCCERT_CONTEXT ptr) as WINBOOL
 4021 type PFN_CERT_STORE_PROV_FREE_FIND_CERT as function(byval hStoreProv as HCERTSTOREPROV, byval pCertContext as PCCERT_CONTEXT, byval pvStoreProvFindInfo as any ptr, byval dwFlags as DWORD) as WINBOOL
 4022 type PFN_CERT_STORE_PROV_GET_CERT_PROPERTY as function(byval hStoreProv as HCERTSTOREPROV, byval pCertContext as PCCERT_CONTEXT, byval dwPropId as DWORD, byval dwFlags as DWORD, byval pvData as any ptr, byval pcbData as DWORD ptr) as WINBOOL
 4023 type PFN_CERT_STORE_PROV_FIND_CRL as function(byval hStoreProv as HCERTSTOREPROV, byval pFindInfo as PCCERT_STORE_PROV_FIND_INFO, byval pPrevCrlContext as PCCRL_CONTEXT, byval dwFlags as DWORD, byval ppvStoreProvFindInfo as any ptr ptr, byval ppProvCrlContext as PCCRL_CONTEXT ptr) as WINBOOL
 4024 type PFN_CERT_STORE_PROV_FREE_FIND_CRL as function(byval hStoreProv as HCERTSTOREPROV, byval pCrlContext as PCCRL_CONTEXT, byval pvStoreProvFindInfo as any ptr, byval dwFlags as DWORD) as WINBOOL
 4025 type PFN_CERT_STORE_PROV_GET_CRL_PROPERTY as function(byval hStoreProv as HCERTSTOREPROV, byval pCrlContext as PCCRL_CONTEXT, byval dwPropId as DWORD, byval dwFlags as DWORD, byval pvData as any ptr, byval pcbData as DWORD ptr) as WINBOOL
 4026 type PFN_CERT_STORE_PROV_FIND_CTL as function(byval hStoreProv as HCERTSTOREPROV, byval pFindInfo as PCCERT_STORE_PROV_FIND_INFO, byval pPrevCtlContext as PCCTL_CONTEXT, byval dwFlags as DWORD, byval ppvStoreProvFindInfo as any ptr ptr, byval ppProvCtlContext as PCCTL_CONTEXT ptr) as WINBOOL
 4027 type PFN_CERT_STORE_PROV_FREE_FIND_CTL as function(byval hStoreProv as HCERTSTOREPROV, byval pCtlContext as PCCTL_CONTEXT, byval pvStoreProvFindInfo as any ptr, byval dwFlags as DWORD) as WINBOOL
 4028 type PFN_CERT_STORE_PROV_GET_CTL_PROPERTY as function(byval hStoreProv as HCERTSTOREPROV, byval pCtlContext as PCCTL_CONTEXT, byval dwPropId as DWORD, byval dwFlags as DWORD, byval pvData as any ptr, byval pcbData as DWORD ptr) as WINBOOL
 4029 declare function CertDuplicateStore(byval hCertStore as HCERTSTORE) as HCERTSTORE
 4030 
 4031 const CERT_STORE_SAVE_AS_STORE = 1
 4032 const CERT_STORE_SAVE_AS_PKCS7 = 2
 4033 const CERT_STORE_SAVE_AS_PKCS12 = 3
 4034 const CERT_STORE_SAVE_TO_FILE = 1
 4035 const CERT_STORE_SAVE_TO_MEMORY = 2
 4036 const CERT_STORE_SAVE_TO_FILENAME_A = 3
 4037 const CERT_STORE_SAVE_TO_FILENAME_W = 4
 4038 const CERT_STORE_SAVE_TO_FILENAME = CERT_STORE_SAVE_TO_FILENAME_W
 4039 const CERT_CLOSE_STORE_FORCE_FLAG = &h1
 4040 const CERT_CLOSE_STORE_CHECK_FLAG = &h2
 4041 
 4042 declare function CertSaveStore(byval hCertStore as HCERTSTORE, byval dwEncodingType as DWORD, byval dwSaveAs as DWORD, byval dwSaveTo as DWORD, byval pvSaveToPara as any ptr, byval dwFlags as DWORD) as WINBOOL
 4043 declare function CertCloseStore(byval hCertStore as HCERTSTORE, byval dwFlags as DWORD) as WINBOOL
 4044 declare function CertGetSubjectCertificateFromStore(byval hCertStore as HCERTSTORE, byval dwCertEncodingType as DWORD, byval pCertId as PCERT_INFO) as PCCERT_CONTEXT
 4045 declare function CertEnumCertificatesInStore(byval hCertStore as HCERTSTORE, byval pPrevCertContext as PCCERT_CONTEXT) as PCCERT_CONTEXT
 4046 declare function CertFindCertificateInStore(byval hCertStore as HCERTSTORE, byval dwCertEncodingType as DWORD, byval dwFindFlags as DWORD, byval dwFindType as DWORD, byval pvFindPara as const any ptr, byval pPrevCertContext as PCCERT_CONTEXT) as PCCERT_CONTEXT
 4047 
 4048 const CERT_COMPARE_MASK = &hffff
 4049 const CERT_COMPARE_SHIFT = 16
 4050 const CERT_COMPARE_ANY = 0
 4051 const CERT_COMPARE_SHA1_HASH = 1
 4052 const CERT_COMPARE_NAME = 2
 4053 const CERT_COMPARE_ATTR = 3
 4054 const CERT_COMPARE_MD5_HASH = 4
 4055 const CERT_COMPARE_PROPERTY = 5
 4056 const CERT_COMPARE_PUBLIC_KEY = 6
 4057 const CERT_COMPARE_HASH = CERT_COMPARE_SHA1_HASH
 4058 const CERT_COMPARE_NAME_STR_A = 7
 4059 const CERT_COMPARE_NAME_STR_W = 8
 4060 const CERT_COMPARE_KEY_SPEC = 9
 4061 const CERT_COMPARE_ENHKEY_USAGE = 10
 4062 const CERT_COMPARE_CTL_USAGE = CERT_COMPARE_ENHKEY_USAGE
 4063 const CERT_COMPARE_SUBJECT_CERT = 11
 4064 const CERT_COMPARE_ISSUER_OF = 12
 4065 const CERT_COMPARE_EXISTING = 13
 4066 const CERT_COMPARE_SIGNATURE_HASH = 14
 4067 const CERT_COMPARE_KEY_IDENTIFIER = 15
 4068 const CERT_COMPARE_CERT_ID = 16
 4069 const CERT_COMPARE_CROSS_CERT_DIST_POINTS = 17
 4070 const CERT_COMPARE_PUBKEY_MD5_HASH = 18
 4071 const CERT_COMPARE_SUBJECT_INFO_ACCESS = 19
 4072 const CERT_COMPARE_HASH_STR = 20
 4073 const CERT_COMPARE_HAS_PRIVATE_KEY = 21
 4074 const CERT_FIND_ANY = CERT_COMPARE_ANY shl CERT_COMPARE_SHIFT
 4075 const CERT_FIND_SHA1_HASH = CERT_COMPARE_SHA1_HASH shl CERT_COMPARE_SHIFT
 4076 const CERT_FIND_MD5_HASH = CERT_COMPARE_MD5_HASH shl CERT_COMPARE_SHIFT
 4077 const CERT_FIND_SIGNATURE_HASH = CERT_COMPARE_SIGNATURE_HASH shl CERT_COMPARE_SHIFT
 4078 const CERT_FIND_KEY_IDENTIFIER = CERT_COMPARE_KEY_IDENTIFIER shl CERT_COMPARE_SHIFT
 4079 const CERT_FIND_HASH = CERT_FIND_SHA1_HASH
 4080 const CERT_FIND_PROPERTY = CERT_COMPARE_PROPERTY shl CERT_COMPARE_SHIFT
 4081 const CERT_FIND_PUBLIC_KEY = CERT_COMPARE_PUBLIC_KEY shl CERT_COMPARE_SHIFT
 4082 const CERT_FIND_SUBJECT_NAME = (CERT_COMPARE_NAME shl CERT_COMPARE_SHIFT) or CERT_INFO_SUBJECT_FLAG
 4083 const CERT_FIND_SUBJECT_ATTR = (CERT_COMPARE_ATTR shl CERT_COMPARE_SHIFT) or CERT_INFO_SUBJECT_FLAG
 4084 const CERT_FIND_ISSUER_NAME = (CERT_COMPARE_NAME shl CERT_COMPARE_SHIFT) or CERT_INFO_ISSUER_FLAG
 4085 const CERT_FIND_ISSUER_ATTR = (CERT_COMPARE_ATTR shl CERT_COMPARE_SHIFT) or CERT_INFO_ISSUER_FLAG
 4086 const CERT_FIND_SUBJECT_STR_A = (CERT_COMPARE_NAME_STR_A shl CERT_COMPARE_SHIFT) or CERT_INFO_SUBJECT_FLAG
 4087 const CERT_FIND_SUBJECT_STR_W = (CERT_COMPARE_NAME_STR_W shl CERT_COMPARE_SHIFT) or CERT_INFO_SUBJECT_FLAG
 4088 const CERT_FIND_SUBJECT_STR = CERT_FIND_SUBJECT_STR_W
 4089 const CERT_FIND_ISSUER_STR_A = (CERT_COMPARE_NAME_STR_A shl CERT_COMPARE_SHIFT) or CERT_INFO_ISSUER_FLAG
 4090 const CERT_FIND_ISSUER_STR_W = (CERT_COMPARE_NAME_STR_W shl CERT_COMPARE_SHIFT) or CERT_INFO_ISSUER_FLAG
 4091 const CERT_FIND_ISSUER_STR = CERT_FIND_ISSUER_STR_W
 4092 const CERT_FIND_KEY_SPEC = CERT_COMPARE_KEY_SPEC shl CERT_COMPARE_SHIFT
 4093 const CERT_FIND_ENHKEY_USAGE = CERT_COMPARE_ENHKEY_USAGE shl CERT_COMPARE_SHIFT
 4094 const CERT_FIND_CTL_USAGE = CERT_FIND_ENHKEY_USAGE
 4095 const CERT_FIND_SUBJECT_CERT = CERT_COMPARE_SUBJECT_CERT shl CERT_COMPARE_SHIFT
 4096 const CERT_FIND_ISSUER_OF = CERT_COMPARE_ISSUER_OF shl CERT_COMPARE_SHIFT
 4097 const CERT_FIND_EXISTING = CERT_COMPARE_EXISTING shl CERT_COMPARE_SHIFT
 4098 const CERT_FIND_CERT_ID = CERT_COMPARE_CERT_ID shl CERT_COMPARE_SHIFT
 4099 const CERT_FIND_CROSS_CERT_DIST_POINTS = CERT_COMPARE_CROSS_CERT_DIST_POINTS shl CERT_COMPARE_SHIFT
 4100 const CERT_FIND_PUBKEY_MD5_HASH = CERT_COMPARE_PUBKEY_MD5_HASH shl CERT_COMPARE_SHIFT
 4101 const CERT_FIND_SUBJECT_INFO_ACCESS = CERT_COMPARE_SUBJECT_INFO_ACCESS shl CERT_COMPARE_SHIFT
 4102 const CERT_FIND_HASH_STR = CERT_COMPARE_HASH_STR shl CERT_COMPARE_SHIFT
 4103 const CERT_FIND_HAS_PRIVATE_KEY = CERT_COMPARE_HAS_PRIVATE_KEY shl CERT_COMPARE_SHIFT
 4104 const CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG = &h1
 4105 const CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG = &h2
 4106 const CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG = &h4
 4107 const CERT_FIND_NO_ENHKEY_USAGE_FLAG = &h8
 4108 const CERT_FIND_OR_ENHKEY_USAGE_FLAG = &h10
 4109 const CERT_FIND_VALID_ENHKEY_USAGE_FLAG = &h20
 4110 const CERT_FIND_OPTIONAL_CTL_USAGE_FLAG = CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG
 4111 const CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG = CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG
 4112 const CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG = CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG
 4113 const CERT_FIND_NO_CTL_USAGE_FLAG = CERT_FIND_NO_ENHKEY_USAGE_FLAG
 4114 const CERT_FIND_OR_CTL_USAGE_FLAG = CERT_FIND_OR_ENHKEY_USAGE_FLAG
 4115 const CERT_FIND_VALID_CTL_USAGE_FLAG = CERT_FIND_VALID_ENHKEY_USAGE_FLAG
 4116 
 4117 declare function CertGetIssuerCertificateFromStore(byval hCertStore as HCERTSTORE, byval pSubjectContext as PCCERT_CONTEXT, byval pPrevIssuerContext as PCCERT_CONTEXT, byval pdwFlags as DWORD ptr) as PCCERT_CONTEXT
 4118 declare function CertVerifySubjectCertificateContext(byval pSubject as PCCERT_CONTEXT, byval pIssuer as PCCERT_CONTEXT, byval pdwFlags as DWORD ptr) as WINBOOL
 4119 declare function CertDuplicateCertificateContext(byval pCertContext as PCCERT_CONTEXT) as PCCERT_CONTEXT
 4120 declare function CertCreateCertificateContext(byval dwCertEncodingType as DWORD, byval pbCertEncoded as const UBYTE ptr, byval cbCertEncoded as DWORD) as PCCERT_CONTEXT
 4121 declare function CertFreeCertificateContext(byval pCertContext as PCCERT_CONTEXT) as WINBOOL
 4122 declare function CertSetCertificateContextProperty(byval pCertContext as PCCERT_CONTEXT, byval dwPropId as DWORD, byval dwFlags as DWORD, byval pvData as const any ptr) as WINBOOL
 4123 
 4124 type _CRL_FIND_ISSUED_FOR_PARA
 4125     pSubjectCert as PCCERT_CONTEXT
 4126     pIssuerCert as PCCERT_CONTEXT
 4127 end type
 4128 
 4129 type CRL_FIND_ISSUED_FOR_PARA as _CRL_FIND_ISSUED_FOR_PARA
 4130 type PCRL_FIND_ISSUED_FOR_PARA as _CRL_FIND_ISSUED_FOR_PARA ptr
 4131 
 4132 type _CTL_ANY_SUBJECT_INFO
 4133     SubjectAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 4134     SubjectIdentifier as CRYPT_DATA_BLOB
 4135 end type
 4136 
 4137 type CTL_ANY_SUBJECT_INFO as _CTL_ANY_SUBJECT_INFO
 4138 type PCTL_ANY_SUBJECT_INFO as _CTL_ANY_SUBJECT_INFO ptr
 4139 const CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG = &h40000000
 4140 const CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG = &h80000000
 4141 const CTL_ENTRY_FROM_PROP_CHAIN_FLAG = &h1
 4142 const CRL_FIND_ANY = 0
 4143 const CRL_FIND_ISSUED_BY = 1
 4144 const CRL_FIND_EXISTING = 2
 4145 const CRL_FIND_ISSUED_FOR = 3
 4146 const CRL_FIND_ISSUED_BY_AKI_FLAG = &h1
 4147 const CRL_FIND_ISSUED_BY_SIGNATURE_FLAG = &h2
 4148 const CRL_FIND_ISSUED_BY_DELTA_FLAG = &h4
 4149 const CRL_FIND_ISSUED_BY_BASE_FLAG = &h8
 4150 const CRL_FIND_ISSUED_FOR_SET_STRONG_PROPERTIES_FLAG = &h10
 4151 const CERT_STORE_ADD_NEW = 1
 4152 const CERT_STORE_ADD_USE_EXISTING = 2
 4153 const CERT_STORE_ADD_REPLACE_EXISTING = 3
 4154 const CERT_STORE_ADD_ALWAYS = 4
 4155 const CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = 5
 4156 const CERT_STORE_ADD_NEWER = 6
 4157 const CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES = 7
 4158 const CERT_STORE_CERTIFICATE_CONTEXT = 1
 4159 const CERT_STORE_CRL_CONTEXT = 2
 4160 const CERT_STORE_CTL_CONTEXT = 3
 4161 const CERT_STORE_ALL_CONTEXT_FLAG = culng(not 0u)
 4162 const CERT_STORE_CERTIFICATE_CONTEXT_FLAG = 1 shl CERT_STORE_CERTIFICATE_CONTEXT
 4163 const CERT_STORE_CRL_CONTEXT_FLAG = 1 shl CERT_STORE_CRL_CONTEXT
 4164 const CERT_STORE_CTL_CONTEXT_FLAG = 1 shl CERT_STORE_CTL_CONTEXT
 4165 const CTL_ANY_SUBJECT_TYPE = 1
 4166 const CTL_CERT_SUBJECT_TYPE = 2
 4167 
 4168 declare function CertGetCertificateContextProperty(byval pCertContext as PCCERT_CONTEXT, byval dwPropId as DWORD, byval pvData as any ptr, byval pcbData as DWORD ptr) as WINBOOL
 4169 declare function CertEnumCertificateContextProperties(byval pCertContext as PCCERT_CONTEXT, byval dwPropId as DWORD) as DWORD
 4170 declare function CertCreateCTLEntryFromCertificateContextProperties(byval pCertContext as PCCERT_CONTEXT, byval cOptAttr as DWORD, byval rgOptAttr as PCRYPT_ATTRIBUTE, byval dwFlags as DWORD, byval pvReserved as any ptr, byval pCtlEntry as PCTL_ENTRY, byval pcbCtlEntry as DWORD ptr) as WINBOOL
 4171 declare function CertSetCertificateContextPropertiesFromCTLEntry(byval pCertContext as PCCERT_CONTEXT, byval pCtlEntry as PCTL_ENTRY, byval dwFlags as DWORD) as WINBOOL
 4172 declare function CertGetCRLFromStore(byval hCertStore as HCERTSTORE, byval pIssuerContext as PCCERT_CONTEXT, byval pPrevCrlContext as PCCRL_CONTEXT, byval pdwFlags as DWORD ptr) as PCCRL_CONTEXT
 4173 declare function CertEnumCRLsInStore(byval hCertStore as HCERTSTORE, byval pPrevCrlContext as PCCRL_CONTEXT) as PCCRL_CONTEXT
 4174 declare function CertFindCRLInStore(byval hCertStore as HCERTSTORE, byval dwCertEncodingType as DWORD, byval dwFindFlags as DWORD, byval dwFindType as DWORD, byval pvFindPara as const any ptr, byval pPrevCrlContext as PCCRL_CONTEXT) as PCCRL_CONTEXT
 4175 declare function CertDuplicateCRLContext(byval pCrlContext as PCCRL_CONTEXT) as PCCRL_CONTEXT
 4176 declare function CertCreateCRLContext(byval dwCertEncodingType as DWORD, byval pbCrlEncoded as const UBYTE ptr, byval cbCrlEncoded as DWORD) as PCCRL_CONTEXT
 4177 declare function CertFreeCRLContext(byval pCrlContext as PCCRL_CONTEXT) as WINBOOL
 4178 declare function CertSetCRLContextProperty(byval pCrlContext as PCCRL_CONTEXT, byval dwPropId as DWORD, byval dwFlags as DWORD, byval pvData as const any ptr) as WINBOOL
 4179 declare function CertGetCRLContextProperty(byval pCrlContext as PCCRL_CONTEXT, byval dwPropId as DWORD, byval pvData as any ptr, byval pcbData as DWORD ptr) as WINBOOL
 4180 declare function CertEnumCRLContextProperties(byval pCrlContext as PCCRL_CONTEXT, byval dwPropId as DWORD) as DWORD
 4181 declare function CertFindCertificateInCRL(byval pCert as PCCERT_CONTEXT, byval pCrlContext as PCCRL_CONTEXT, byval dwFlags as DWORD, byval pvReserved as any ptr, byval ppCrlEntry as PCRL_ENTRY ptr) as WINBOOL
 4182 declare function CertIsValidCRLForCertificate(byval pCert as PCCERT_CONTEXT, byval pCrl as PCCRL_CONTEXT, byval dwFlags as DWORD, byval pvReserved as any ptr) as WINBOOL
 4183 declare function CertAddEncodedCertificateToStore(byval hCertStore as HCERTSTORE, byval dwCertEncodingType as DWORD, byval pbCertEncoded as const UBYTE ptr, byval cbCertEncoded as DWORD, byval dwAddDisposition as DWORD, byval ppCertContext as PCCERT_CONTEXT ptr) as WINBOOL
 4184 declare function CertAddCertificateContextToStore(byval hCertStore as HCERTSTORE, byval pCertContext as PCCERT_CONTEXT, byval dwAddDisposition as DWORD, byval ppStoreContext as PCCERT_CONTEXT ptr) as WINBOOL
 4185 declare function CertAddSerializedElementToStore(byval hCertStore as HCERTSTORE, byval pbElement as const UBYTE ptr, byval cbElement as DWORD, byval dwAddDisposition as DWORD, byval dwFlags as DWORD, byval dwContextTypeFlags as DWORD, byval pdwContextType as DWORD ptr, byval ppvContext as const any ptr ptr) as WINBOOL
 4186 declare function CertDeleteCertificateFromStore(byval pCertContext as PCCERT_CONTEXT) as WINBOOL
 4187 declare function CertAddEncodedCRLToStore(byval hCertStore as HCERTSTORE, byval dwCertEncodingType as DWORD, byval pbCrlEncoded as const UBYTE ptr, byval cbCrlEncoded as DWORD, byval dwAddDisposition as DWORD, byval ppCrlContext as PCCRL_CONTEXT ptr) as WINBOOL
 4188 declare function CertAddCRLContextToStore(byval hCertStore as HCERTSTORE, byval pCrlContext as PCCRL_CONTEXT, byval dwAddDisposition as DWORD, byval ppStoreContext as PCCRL_CONTEXT ptr) as WINBOOL
 4189 declare function CertDeleteCRLFromStore(byval pCrlContext as PCCRL_CONTEXT) as WINBOOL
 4190 declare function CertSerializeCertificateStoreElement(byval pCertContext as PCCERT_CONTEXT, byval dwFlags as DWORD, byval pbElement as UBYTE ptr, byval pcbElement as DWORD ptr) as WINBOOL
 4191 declare function CertSerializeCRLStoreElement(byval pCrlContext as PCCRL_CONTEXT, byval dwFlags as DWORD, byval pbElement as UBYTE ptr, byval pcbElement as DWORD ptr) as WINBOOL
 4192 declare function CertDuplicateCTLContext(byval pCtlContext as PCCTL_CONTEXT) as PCCTL_CONTEXT
 4193 declare function CertCreateCTLContext(byval dwMsgAndCertEncodingType as DWORD, byval pbCtlEncoded as const UBYTE ptr, byval cbCtlEncoded as DWORD) as PCCTL_CONTEXT
 4194 declare function CertFreeCTLContext(byval pCtlContext as PCCTL_CONTEXT) as WINBOOL
 4195 declare function CertSetCTLContextProperty(byval pCtlContext as PCCTL_CONTEXT, byval dwPropId as DWORD, byval dwFlags as DWORD, byval pvData as const any ptr) as WINBOOL
 4196 declare function CertGetCTLContextProperty(byval pCtlContext as PCCTL_CONTEXT, byval dwPropId as DWORD, byval pvData as any ptr, byval pcbData as DWORD ptr) as WINBOOL
 4197 declare function CertEnumCTLContextProperties(byval pCtlContext as PCCTL_CONTEXT, byval dwPropId as DWORD) as DWORD
 4198 declare function CertEnumCTLsInStore(byval hCertStore as HCERTSTORE, byval pPrevCtlContext as PCCTL_CONTEXT) as PCCTL_CONTEXT
 4199 declare function CertFindSubjectInCTL(byval dwEncodingType as DWORD, byval dwSubjectType as DWORD, byval pvSubject as any ptr, byval pCtlContext as PCCTL_CONTEXT, byval dwFlags as DWORD) as PCTL_ENTRY
 4200 declare function CertFindCTLInStore(byval hCertStore as HCERTSTORE, byval dwMsgAndCertEncodingType as DWORD, byval dwFindFlags as DWORD, byval dwFindType as DWORD, byval pvFindPara as const any ptr, byval pPrevCtlContext as PCCTL_CONTEXT) as PCCTL_CONTEXT
 4201 
 4202 const CTL_FIND_ANY = 0
 4203 const CTL_FIND_SHA1_HASH = 1
 4204 const CTL_FIND_MD5_HASH = 2
 4205 const CTL_FIND_USAGE = 3
 4206 const CTL_FIND_SUBJECT = 4
 4207 const CTL_FIND_EXISTING = 5
 4208 const CTL_FIND_SAME_USAGE_FLAG = &h1
 4209 const CTL_FIND_NO_LIST_ID_CBDATA = &hffffffff
 4210 const CTL_FIND_NO_SIGNER_PTR = cast(PCERT_INFO, -1)
 4211 const CERT_STORE_CTRL_RESYNC = 1
 4212 const CERT_STORE_CTRL_NOTIFY_CHANGE = 2
 4213 const CERT_STORE_CTRL_COMMIT = 3
 4214 const CERT_STORE_CTRL_AUTO_RESYNC = 4
 4215 const CERT_STORE_CTRL_CANCEL_NOTIFY = 5
 4216 const CERT_STORE_CTRL_INHIBIT_DUPLICATE_HANDLE_FLAG = &h1
 4217 const CERT_STORE_CTRL_COMMIT_FORCE_FLAG = &h1
 4218 const CERT_STORE_CTRL_COMMIT_CLEAR_FLAG = &h2
 4219 const CERT_STORE_LOCALIZED_NAME_PROP_ID = &h1000
 4220 const CERT_CREATE_CONTEXT_NOCOPY_FLAG = &h1
 4221 const CERT_CREATE_CONTEXT_SORTED_FLAG = &h2
 4222 const CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG = &h4
 4223 const CERT_CREATE_CONTEXT_NO_ENTRY_FLAG = &h8
 4224 const CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG = &h1
 4225 const CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG = &h2
 4226 const CERT_PHYSICAL_STORE_REMOTE_OPEN_DISABLE_FLAG = &h4
 4227 const CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG = &h8
 4228 
 4229 type _CTL_FIND_USAGE_PARA
 4230     cbSize as DWORD
 4231     SubjectUsage as CTL_USAGE
 4232     ListIdentifier as CRYPT_DATA_BLOB
 4233     pSigner as PCERT_INFO
 4234 end type
 4235 
 4236 type CTL_FIND_USAGE_PARA as _CTL_FIND_USAGE_PARA
 4237 type PCTL_FIND_USAGE_PARA as _CTL_FIND_USAGE_PARA ptr
 4238 
 4239 type _CTL_FIND_SUBJECT_PARA
 4240     cbSize as DWORD
 4241     pUsagePara as PCTL_FIND_USAGE_PARA
 4242     dwSubjectType as DWORD
 4243     pvSubject as any ptr
 4244 end type
 4245 
 4246 type CTL_FIND_SUBJECT_PARA as _CTL_FIND_SUBJECT_PARA
 4247 type PCTL_FIND_SUBJECT_PARA as _CTL_FIND_SUBJECT_PARA ptr
 4248 type PFN_CERT_CREATE_CONTEXT_SORT_FUNC as function(byval cbTotalEncoded as DWORD, byval cbRemainEncoded as DWORD, byval cEntry as DWORD, byval pvSort as any ptr) as WINBOOL
 4249 
 4250 type _CERT_CREATE_CONTEXT_PARA
 4251     cbSize as DWORD
 4252     pfnFree as PFN_CRYPT_FREE
 4253     pvFree as any ptr
 4254     pfnSort as PFN_CERT_CREATE_CONTEXT_SORT_FUNC
 4255     pvSort as any ptr
 4256 end type
 4257 
 4258 type CERT_CREATE_CONTEXT_PARA as _CERT_CREATE_CONTEXT_PARA
 4259 type PCERT_CREATE_CONTEXT_PARA as _CERT_CREATE_CONTEXT_PARA ptr
 4260 
 4261 type _CERT_SYSTEM_STORE_INFO
 4262     cbSize as DWORD
 4263 end type
 4264 
 4265 type CERT_SYSTEM_STORE_INFO as _CERT_SYSTEM_STORE_INFO
 4266 type PCERT_SYSTEM_STORE_INFO as _CERT_SYSTEM_STORE_INFO ptr
 4267 
 4268 type _CERT_PHYSICAL_STORE_INFO
 4269     cbSize as DWORD
 4270     pszOpenStoreProvider as LPSTR
 4271     dwOpenEncodingType as DWORD
 4272     dwOpenFlags as DWORD
 4273     OpenParameters as CRYPT_DATA_BLOB
 4274     dwFlags as DWORD
 4275     dwPriority as DWORD
 4276 end type
 4277 
 4278 type CERT_PHYSICAL_STORE_INFO as _CERT_PHYSICAL_STORE_INFO
 4279 type PCERT_PHYSICAL_STORE_INFO as _CERT_PHYSICAL_STORE_INFO ptr
 4280 declare function CertAddEncodedCTLToStore(byval hCertStore as HCERTSTORE, byval dwMsgAndCertEncodingType as DWORD, byval pbCtlEncoded as const UBYTE ptr, byval cbCtlEncoded as DWORD, byval dwAddDisposition as DWORD, byval ppCtlContext as PCCTL_CONTEXT ptr) as WINBOOL
 4281 declare function CertAddCTLContextToStore(byval hCertStore as HCERTSTORE, byval pCtlContext as PCCTL_CONTEXT, byval dwAddDisposition as DWORD, byval ppStoreContext as PCCTL_CONTEXT ptr) as WINBOOL
 4282 declare function CertSerializeCTLStoreElement(byval pCtlContext as PCCTL_CONTEXT, byval dwFlags as DWORD, byval pbElement as UBYTE ptr, byval pcbElement as DWORD ptr) as WINBOOL
 4283 declare function CertDeleteCTLFromStore(byval pCtlContext as PCCTL_CONTEXT) as WINBOOL
 4284 declare function CertAddCertificateLinkToStore(byval hCertStore as HCERTSTORE, byval pCertContext as PCCERT_CONTEXT, byval dwAddDisposition as DWORD, byval ppStoreContext as PCCERT_CONTEXT ptr) as WINBOOL
 4285 declare function CertAddCRLLinkToStore(byval hCertStore as HCERTSTORE, byval pCrlContext as PCCRL_CONTEXT, byval dwAddDisposition as DWORD, byval ppStoreContext as PCCRL_CONTEXT ptr) as WINBOOL
 4286 declare function CertAddCTLLinkToStore(byval hCertStore as HCERTSTORE, byval pCtlContext as PCCTL_CONTEXT, byval dwAddDisposition as DWORD, byval ppStoreContext as PCCTL_CONTEXT ptr) as WINBOOL
 4287 declare function CertAddStoreToCollection(byval hCollectionStore as HCERTSTORE, byval hSiblingStore as HCERTSTORE, byval dwUpdateFlags as DWORD, byval dwPriority as DWORD) as WINBOOL
 4288 declare sub CertRemoveStoreFromCollection(byval hCollectionStore as HCERTSTORE, byval hSiblingStore as HCERTSTORE)
 4289 declare function CertControlStore(byval hCertStore as HCERTSTORE, byval dwFlags as DWORD, byval dwCtrlType as DWORD, byval pvCtrlPara as const any ptr) as WINBOOL
 4290 declare function CertSetStoreProperty(byval hCertStore as HCERTSTORE, byval dwPropId as DWORD, byval dwFlags as DWORD, byval pvData as const any ptr) as WINBOOL
 4291 declare function CertGetStoreProperty(byval hCertStore as HCERTSTORE, byval dwPropId as DWORD, byval pvData as any ptr, byval pcbData as DWORD ptr) as WINBOOL
 4292 declare function CertCreateContext(byval dwContextType as DWORD, byval dwEncodingType as DWORD, byval pbEncoded as const UBYTE ptr, byval cbEncoded as DWORD, byval dwFlags as DWORD, byval pCreatePara as PCERT_CREATE_CONTEXT_PARA) as const any ptr
 4293 declare function CertRegisterSystemStore(byval pvSystemStore as const any ptr, byval dwFlags as DWORD, byval pStoreInfo as PCERT_SYSTEM_STORE_INFO, byval pvReserved as any ptr) as WINBOOL
 4294 declare function CertRegisterPhysicalStore(byval pvSystemStore as const any ptr, byval dwFlags as DWORD, byval pwszStoreName as LPCWSTR, byval pStoreInfo as PCERT_PHYSICAL_STORE_INFO, byval pvReserved as any ptr) as WINBOOL
 4295 declare function CertUnregisterSystemStore(byval pvSystemStore as const any ptr, byval dwFlags as DWORD) as WINBOOL
 4296 declare function CertUnregisterPhysicalStore(byval pvSystemStore as const any ptr, byval dwFlags as DWORD, byval pwszStoreName as LPCWSTR) as WINBOOL
 4297 
 4298 type PFN_CERT_ENUM_SYSTEM_STORE_LOCATION as function(byval pwszStoreLocation as LPCWSTR, byval dwFlags as DWORD, byval pvReserved as any ptr, byval pvArg as any ptr) as WINBOOL
 4299 type PFN_CERT_ENUM_SYSTEM_STORE as function(byval pvSystemStore as const any ptr, byval dwFlags as DWORD, byval pStoreInfo as PCERT_SYSTEM_STORE_INFO, byval pvReserved as any ptr, byval pvArg as any ptr) as WINBOOL
 4300 type PFN_CERT_ENUM_PHYSICAL_STORE as function(byval pvSystemStore as const any ptr, byval dwFlags as DWORD, byval pwszStoreName as LPCWSTR, byval pStoreInfo as PCERT_PHYSICAL_STORE_INFO, byval pvReserved as any ptr, byval pvArg as any ptr) as WINBOOL
 4301 
 4302 const CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG = &h1
 4303 #define CERT_PHYSICAL_STORE_DEFAULT_NAME wstr(".Default")
 4304 #define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME wstr(".GroupPolicy")
 4305 #define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME wstr(".LocalMachine")
 4306 #define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME wstr(".UserCertificate")
 4307 #define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME wstr(".LocalMachineGroupPolicy")
 4308 #define CERT_PHYSICAL_STORE_ENTERPRISE_NAME wstr(".Enterprise")
 4309 #define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME wstr(".AuthRoot")
 4310 #define CERT_PHYSICAL_STORE_SMART_CARD_NAME wstr(".SmartCard")
 4311 
 4312 declare function CertEnumSystemStoreLocation(byval dwFlags as DWORD, byval pvArg as any ptr, byval pfnEnum as PFN_CERT_ENUM_SYSTEM_STORE_LOCATION) as WINBOOL
 4313 declare function CertEnumSystemStore(byval dwFlags as DWORD, byval pvSystemStoreLocationPara as any ptr, byval pvArg as any ptr, byval pfnEnum as PFN_CERT_ENUM_SYSTEM_STORE) as WINBOOL
 4314 declare function CertEnumPhysicalStore(byval pvSystemStore as const any ptr, byval dwFlags as DWORD, byval pvArg as any ptr, byval pfnEnum as PFN_CERT_ENUM_PHYSICAL_STORE) as WINBOOL
 4315 
 4316 #define CRYPT_OID_OPEN_SYSTEM_STORE_PROV_FUNC "CertDllOpenSystemStoreProv"
 4317 #define CRYPT_OID_REGISTER_SYSTEM_STORE_FUNC "CertDllRegisterSystemStore"
 4318 #define CRYPT_OID_UNREGISTER_SYSTEM_STORE_FUNC "CertDllUnregisterSystemStore"
 4319 #define CRYPT_OID_ENUM_SYSTEM_STORE_FUNC "CertDllEnumSystemStore"
 4320 #define CRYPT_OID_REGISTER_PHYSICAL_STORE_FUNC "CertDllRegisterPhysicalStore"
 4321 #define CRYPT_OID_UNREGISTER_PHYSICAL_STORE_FUNC "CertDllUnregisterPhysicalStore"
 4322 #define CRYPT_OID_ENUM_PHYSICAL_STORE_FUNC "CertDllEnumPhysicalStore"
 4323 #define CRYPT_OID_SYSTEM_STORE_LOCATION_VALUE_NAME wstr("SystemStoreLocation")
 4324 const CMSG_TRUSTED_SIGNER_FLAG = &h1
 4325 const CMSG_SIGNER_ONLY_FLAG = &h2
 4326 const CMSG_USE_SIGNER_INDEX_FLAG = &h4
 4327 const CMSG_CMS_ENCAPSULATED_CTL_FLAG = &h8000
 4328 const CMSG_ENCODE_SORTED_CTL_FLAG = &h1
 4329 const CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG = &h2
 4330 
 4331 declare function CertGetEnhancedKeyUsage(byval pCertContext as PCCERT_CONTEXT, byval dwFlags as DWORD, byval pUsage as PCERT_ENHKEY_USAGE, byval pcbUsage as DWORD ptr) as WINBOOL
 4332 declare function CertSetEnhancedKeyUsage(byval pCertContext as PCCERT_CONTEXT, byval pUsage as PCERT_ENHKEY_USAGE) as WINBOOL
 4333 declare function CertAddEnhancedKeyUsageIdentifier(byval pCertContext as PCCERT_CONTEXT, byval pszUsageIdentifier as LPCSTR) as WINBOOL
 4334 declare function CertRemoveEnhancedKeyUsageIdentifier(byval pCertContext as PCCERT_CONTEXT, byval pszUsageIdentifier as LPCSTR) as WINBOOL
 4335 declare function CertGetValidUsages(byval cCerts as DWORD, byval rghCerts as PCCERT_CONTEXT ptr, byval cNumOIDs as long ptr, byval rghOIDs as LPSTR ptr, byval pcbOIDs as DWORD ptr) as WINBOOL
 4336 declare function CryptMsgGetAndVerifySigner(byval hCryptMsg as HCRYPTMSG, byval cSignerStore as DWORD, byval rghSignerStore as HCERTSTORE ptr, byval dwFlags as DWORD, byval ppSigner as PCCERT_CONTEXT ptr, byval pdwSignerIndex as DWORD ptr) as WINBOOL
 4337 declare function CryptMsgSignCTL(byval dwMsgEncodingType as DWORD, byval pbCtlContent as UBYTE ptr, byval cbCtlContent as DWORD, byval pSignInfo as PCMSG_SIGNED_ENCODE_INFO, byval dwFlags as DWORD, byval pbEncoded as UBYTE ptr, byval pcbEncoded as DWORD ptr) as WINBOOL
 4338 declare function CryptMsgEncodeAndSignCTL(byval dwMsgEncodingType as DWORD, byval pCtlInfo as PCTL_INFO, byval pSignInfo as PCMSG_SIGNED_ENCODE_INFO, byval dwFlags as DWORD, byval pbEncoded as UBYTE ptr, byval pcbEncoded as DWORD ptr) as WINBOOL
 4339 declare function CertFindSubjectInSortedCTL(byval pSubjectIdentifier as PCRYPT_DATA_BLOB, byval pCtlContext as PCCTL_CONTEXT, byval dwFlags as DWORD, byval pvReserved as any ptr, byval pEncodedAttributes as PCRYPT_DER_BLOB) as WINBOOL
 4340 declare function CertEnumSubjectInSortedCTL(byval pCtlContext as PCCTL_CONTEXT, byval ppvNextSubject as any ptr ptr, byval pSubjectIdentifier as PCRYPT_DER_BLOB, byval pEncodedAttributes as PCRYPT_DER_BLOB) as WINBOOL
 4341 
 4342 type _CTL_VERIFY_USAGE_PARA
 4343     cbSize as DWORD
 4344     ListIdentifier as CRYPT_DATA_BLOB
 4345     cCtlStore as DWORD
 4346     rghCtlStore as HCERTSTORE ptr
 4347     cSignerStore as DWORD
 4348     rghSignerStore as HCERTSTORE ptr
 4349 end type
 4350 
 4351 type CTL_VERIFY_USAGE_PARA as _CTL_VERIFY_USAGE_PARA
 4352 type PCTL_VERIFY_USAGE_PARA as _CTL_VERIFY_USAGE_PARA ptr
 4353 
 4354 type _CTL_VERIFY_USAGE_STATUS
 4355     cbSize as DWORD
 4356     dwError as DWORD
 4357     dwFlags as DWORD
 4358     ppCtl as PCCTL_CONTEXT ptr
 4359     dwCtlEntryIndex as DWORD
 4360     ppSigner as PCCERT_CONTEXT ptr
 4361     dwSignerIndex as DWORD
 4362 end type
 4363 
 4364 type CTL_VERIFY_USAGE_STATUS as _CTL_VERIFY_USAGE_STATUS
 4365 type PCTL_VERIFY_USAGE_STATUS as _CTL_VERIFY_USAGE_STATUS ptr
 4366 const CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG = &h1
 4367 const CERT_VERIFY_TRUSTED_SIGNERS_FLAG = &h2
 4368 const CERT_VERIFY_NO_TIME_CHECK_FLAG = &h4
 4369 const CERT_VERIFY_ALLOW_MORE_USAGE_FLAG = &h8
 4370 const CERT_VERIFY_UPDATED_CTL_FLAG = &h1
 4371 declare function CertVerifyCTLUsage(byval dwEncodingType as DWORD, byval dwSubjectType as DWORD, byval pvSubject as any ptr, byval pSubjectUsage as PCTL_USAGE, byval dwFlags as DWORD, byval pVerifyUsagePara as PCTL_VERIFY_USAGE_PARA, byval pVerifyUsageStatus as PCTL_VERIFY_USAGE_STATUS) as WINBOOL
 4372 
 4373 type _CERT_REVOCATION_CRL_INFO
 4374     cbSize as DWORD
 4375     pBaseCrlContext as PCCRL_CONTEXT
 4376     pDeltaCrlContext as PCCRL_CONTEXT
 4377     pCrlEntry as PCRL_ENTRY
 4378     fDeltaCrlEntry as WINBOOL
 4379 end type
 4380 
 4381 type CERT_REVOCATION_CRL_INFO as _CERT_REVOCATION_CRL_INFO
 4382 type PCERT_REVOCATION_CRL_INFO as _CERT_REVOCATION_CRL_INFO ptr
 4383 type CERT_REVOCATION_CHAIN_PARA as _CERT_REVOCATION_CHAIN_PARA
 4384 type PCERT_REVOCATION_CHAIN_PARA as _CERT_REVOCATION_CHAIN_PARA ptr
 4385 
 4386 type _CERT_REVOCATION_PARA
 4387     cbSize as DWORD
 4388     pIssuerCert as PCCERT_CONTEXT
 4389     cCertStore as DWORD
 4390     rgCertStore as HCERTSTORE ptr
 4391     hCrlStore as HCERTSTORE
 4392     pftTimeToUse as LPFILETIME
 4393 end type
 4394 
 4395 type CERT_REVOCATION_PARA as _CERT_REVOCATION_PARA
 4396 type PCERT_REVOCATION_PARA as _CERT_REVOCATION_PARA ptr
 4397 
 4398 type _CERT_REVOCATION_STATUS
 4399     cbSize as DWORD
 4400     dwIndex as DWORD
 4401     dwError as DWORD
 4402     dwReason as DWORD
 4403     fHasFreshnessTime as WINBOOL
 4404     dwFreshnessTime as DWORD
 4405 end type
 4406 
 4407 type CERT_REVOCATION_STATUS as _CERT_REVOCATION_STATUS
 4408 type PCERT_REVOCATION_STATUS as _CERT_REVOCATION_STATUS ptr
 4409 const CERT_CONTEXT_REVOCATION_TYPE = 1
 4410 const CERT_VERIFY_REV_CHAIN_FLAG = &h1
 4411 const CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION = &h2
 4412 const CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG = &h4
 4413 const CERT_VERIFY_REV_SERVER_OCSP_FLAG = &h8
 4414 const CERT_VERIFY_REV_NO_OCSP_FAILOVER_TO_CRL_FLAG = &h10
 4415 const CERT_UNICODE_IS_RDN_ATTRS_FLAG = &h1
 4416 const CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG = &h2
 4417 const CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB = 1
 4418 const CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT = 2
 4419 const CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL = 3
 4420 const CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE = 4
 4421 const CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY = 1
 4422 const CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT = 2
 4423 const CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN = 3
 4424 const CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL = 4
 4425 const CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG = &h1
 4426 const CRYPT_VERIFY_CERT_SIGN_SET_STRONG_PROPERTIES_FLAG = &h2
 4427 const CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG = &h4
 4428 #define CRYPT_OID_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC "CryptDllExtractEncodedSignatureParameters"
 4429 #define CRYPT_OID_SIGN_AND_ENCODE_HASH_FUNC "CryptDllSignAndEncodeHash"
 4430 #define CRYPT_OID_VERIFY_ENCODED_SIGNATURE_FUNC "CryptDllVerifyEncodedSignature"
 4431 const CRYPT_DEFAULT_CONTEXT_AUTO_RELEASE_FLAG = &h1
 4432 const CRYPT_DEFAULT_CONTEXT_PROCESS_FLAG = &h2
 4433 const CRYPT_DEFAULT_CONTEXT_CERT_SIGN_OID = 1
 4434 const CRYPT_DEFAULT_CONTEXT_MULTI_CERT_SIGN_OID = 2
 4435 
 4436 type _CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO
 4437     CertSignHashCNGAlgPropData as CRYPT_DATA_BLOB
 4438     CertIssuerPubKeyBitLengthPropData as CRYPT_DATA_BLOB
 4439 end type
 4440 
 4441 type CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO as _CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO
 4442 type PCRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO as _CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO ptr
 4443 type PFN_CRYPT_EXTRACT_ENCODED_SIGNATURE_PARAMETERS_FUNC as function(byval dwCertEncodingType as DWORD, byval pSignatureAlgorithm as PCRYPT_ALGORITHM_IDENTIFIER, byval ppvDecodedSignPara as any ptr ptr, byval ppwszCNGHashAlgid as LPWSTR ptr) as WINBOOL
 4444 type PFN_CRYPT_SIGN_AND_ENCODE_HASH_FUNC as function(byval hKey as NCRYPT_KEY_HANDLE, byval dwCertEncodingType as DWORD, byval pSignatureAlgorithm as PCRYPT_ALGORITHM_IDENTIFIER, byval pvDecodedSignPara as any ptr, byval pwszCNGPubKeyAlgid as LPCWSTR, byval pwszCNGHashAlgid as LPCWSTR, byval pbComputedHash as UBYTE ptr, byval cbComputedHash as DWORD, byval pbSignature as UBYTE ptr, byval pcbSignature as DWORD ptr) as WINBOOL
 4445 type PFN_CRYPT_VERIFY_ENCODED_SIGNATURE_FUNC as function(byval dwCertEncodingType as DWORD, byval pPubKeyInfo as PCERT_PUBLIC_KEY_INFO, byval pSignatureAlgorithm as PCRYPT_ALGORITHM_IDENTIFIER, byval pvDecodedSignPara as any ptr, byval pwszCNGPubKeyAlgid as LPCWSTR, byval pwszCNGHashAlgid as LPCWSTR, byval pbComputedHash as UBYTE ptr, byval cbComputedHash as DWORD, byval pbSignature as UBYTE ptr, byval cbSignature as DWORD) as WINBOOL
 4446 type HCRYPTDEFAULTCONTEXT as any ptr
 4447 
 4448 type _CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA
 4449     cOID as DWORD
 4450     rgpszOID as LPSTR ptr
 4451 end type
 4452 
 4453 type CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA as _CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA
 4454 type PCRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA as _CRYPT_DEFAULT_CONTEXT_MULTI_OID_PARA ptr
 4455 declare function CertVerifyRevocation(byval dwEncodingType as DWORD, byval dwRevType as DWORD, byval cContext as DWORD, byval rgpvContext as PVOID ptr, byval dwFlags as DWORD, byval pRevPara as PCERT_REVOCATION_PARA, byval pRevStatus as PCERT_REVOCATION_STATUS) as WINBOOL
 4456 declare function CertCompareIntegerBlob(byval pInt1 as PCRYPT_INTEGER_BLOB, byval pInt2 as PCRYPT_INTEGER_BLOB) as WINBOOL
 4457 declare function CertCompareCertificate(byval dwCertEncodingType as DWORD, byval pCertId1 as PCERT_INFO, byval pCertId2 as PCERT_INFO) as WINBOOL
 4458 declare function CertCompareCertificateName(byval dwCertEncodingType as DWORD, byval pCertName1 as PCERT_NAME_BLOB, byval pCertName2 as PCERT_NAME_BLOB) as WINBOOL
 4459 declare function CertIsRDNAttrsInCertificateName(byval dwCertEncodingType as DWORD, byval dwFlags as DWORD, byval pCertName as PCERT_NAME_BLOB, byval pRDN as PCERT_RDN) as WINBOOL
 4460 declare function CertComparePublicKeyInfo(byval dwCertEncodingType as DWORD, byval pPublicKey1 as PCERT_PUBLIC_KEY_INFO, byval pPublicKey2 as PCERT_PUBLIC_KEY_INFO) as WINBOOL
 4461 declare function CertGetPublicKeyLength(byval dwCertEncodingType as DWORD, byval pPublicKey as PCERT_PUBLIC_KEY_INFO) as DWORD
 4462 declare function CryptVerifyCertificateSignature(byval hCryptProv as HCRYPTPROV_LEGACY, byval dwCertEncodingType as DWORD, byval pbEncoded as const UBYTE ptr, byval cbEncoded as DWORD, byval pPublicKey as PCERT_PUBLIC_KEY_INFO) as WINBOOL
 4463 declare function CryptVerifyCertificateSignatureEx(byval hCryptProv as HCRYPTPROV_LEGACY, byval dwCertEncodingType as DWORD, byval dwSubjectType as DWORD, byval pvSubject as any ptr, byval dwIssuerType as DWORD, byval pvIssuer as any ptr, byval dwFlags as DWORD, byval pvExtra as any ptr) as WINBOOL
 4464 declare function CertIsStrongHashToSign(byval pStrongSignPara as PCCERT_STRONG_SIGN_PARA, byval pwszCNGHashAlgid as LPCWSTR, byval pSigningCert as PCCERT_CONTEXT) as WINBOOL
 4465 declare function CryptHashToBeSigned(byval hCryptProv as HCRYPTPROV_LEGACY, byval dwCertEncodingType as DWORD, byval pbEncoded as const UBYTE ptr, byval cbEncoded as DWORD, byval pbComputedHash as UBYTE ptr, byval pcbComputedHash as DWORD ptr) as WINBOOL
 4466 declare function CryptHashCertificate(byval hCryptProv as HCRYPTPROV_LEGACY, byval Algid as ALG_ID, byval dwFlags as DWORD, byval pbEncoded as const UBYTE ptr, byval cbEncoded as DWORD, byval pbComputedHash as UBYTE ptr, byval pcbComputedHash as DWORD ptr) as WINBOOL
 4467 
 4468 #if _WIN32_WINNT >= &h0600
 4469     declare function CryptHashCertificate2(byval pwszCNGHashAlgid as LPCWSTR, byval dwFlags as DWORD, byval pvReserved as any ptr, byval pbEncoded as const UBYTE ptr, byval cbEncoded as DWORD, byval pbComputedHash as UBYTE ptr, byval pcbComputedHash as DWORD ptr) as WINBOOL
 4470 #endif
 4471 
 4472 declare function CryptSignCertificate(byval hCryptProvOrNCryptKey as HCRYPTPROV_OR_NCRYPT_KEY_HANDLE, byval dwKeySpec as DWORD, byval dwCertEncodingType as DWORD, byval pbEncodedToBeSigned as const UBYTE ptr, byval cbEncodedToBeSigned as DWORD, byval pSignatureAlgorithm as PCRYPT_ALGORITHM_IDENTIFIER, byval pvHashAuxInfo as const any ptr, byval pbSignature as UBYTE ptr, byval pcbSignature as DWORD ptr) as WINBOOL
 4473 declare function CryptSignAndEncodeCertificate(byval hCryptProvOrNCryptKey as HCRYPTPROV_OR_NCRYPT_KEY_HANDLE, byval dwKeySpec as DWORD, byval dwCertEncodingType as DWORD, byval lpszStructType as LPCSTR, byval pvStructInfo as const any ptr, byval pSignatureAlgorithm as PCRYPT_ALGORITHM_IDENTIFIER, byval pvHashAuxInfo as const any ptr, byval pbEncoded as UBYTE ptr, byval pcbEncoded as DWORD ptr) as WINBOOL
 4474 declare function CertVerifyTimeValidity(byval pTimeToVerify as LPFILETIME, byval pCertInfo as PCERT_INFO) as LONG
 4475 declare function CertVerifyCRLTimeValidity(byval pTimeToVerify as LPFILETIME, byval pCrlInfo as PCRL_INFO) as LONG
 4476 declare function CertVerifyValidityNesting(byval pSubjectInfo as PCERT_INFO, byval pIssuerInfo as PCERT_INFO) as WINBOOL
 4477 declare function CertVerifyCRLRevocation(byval dwCertEncodingType as DWORD, byval pCertId as PCERT_INFO, byval cCrlInfo as DWORD, byval rgpCrlInfo as PCRL_INFO ptr) as WINBOOL
 4478 declare function CertAlgIdToOID(byval dwAlgId as DWORD) as LPCSTR
 4479 declare function CertOIDToAlgId(byval pszObjId as LPCSTR) as DWORD
 4480 declare function CertFindExtension(byval pszObjId as LPCSTR, byval cExtensions as DWORD, byval rgExtensions as CERT_EXTENSION ptr) as PCERT_EXTENSION
 4481 declare function CertFindAttribute(byval pszObjId as LPCSTR, byval cAttr as DWORD, byval rgAttr as CRYPT_ATTRIBUTE ptr) as PCRYPT_ATTRIBUTE
 4482 declare function CertFindRDNAttr(byval pszObjId as LPCSTR, byval pName as PCERT_NAME_INFO) as PCERT_RDN_ATTR
 4483 declare function CertGetIntendedKeyUsage(byval dwCertEncodingType as DWORD, byval pCertInfo as PCERT_INFO, byval pbKeyUsage as UBYTE ptr, byval cbKeyUsage as DWORD) as WINBOOL
 4484 declare function CryptInstallDefaultContext(byval hCryptProv as HCRYPTPROV, byval dwDefaultType as DWORD, byval pvDefaultPara as const any ptr, byval dwFlags as DWORD, byval pvReserved as any ptr, byval phDefaultContext as HCRYPTDEFAULTCONTEXT ptr) as WINBOOL
 4485 declare function CryptUninstallDefaultContext(byval hDefaultContext as HCRYPTDEFAULTCONTEXT, byval dwFlags as DWORD, byval pvReserved as any ptr) as WINBOOL
 4486 declare function CryptExportPublicKeyInfo(byval hCryptProvOrNCryptKey as HCRYPTPROV_OR_NCRYPT_KEY_HANDLE, byval dwKeySpec as DWORD, byval dwCertEncodingType as DWORD, byval pInfo as PCERT_PUBLIC_KEY_INFO, byval pcbInfo as DWORD ptr) as WINBOOL
 4487 declare function CryptExportPublicKeyInfoEx(byval hCryptProvOrNCryptKey as HCRYPTPROV_OR_NCRYPT_KEY_HANDLE, byval dwKeySpec as DWORD, byval dwCertEncodingType as DWORD, byval pszPublicKeyObjId as LPSTR, byval dwFlags as DWORD, byval pvAuxInfo as any ptr, byval pInfo as PCERT_PUBLIC_KEY_INFO, byval pcbInfo as DWORD ptr) as WINBOOL
 4488 #define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC "CryptDllExportPublicKeyInfoEx"
 4489 #define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC "CryptDllExportPublicKeyInfoEx2"
 4490 type PFN_CRYPT_EXPORT_PUBLIC_KEY_INFO_EX2_FUNC as function(byval hNCryptKey as NCRYPT_KEY_HANDLE, byval dwCertEncodingType as DWORD, byval pszPublicKeyObjId as LPSTR, byval dwFlags as DWORD, byval pvAuxInfo as any ptr, byval pInfo as PCERT_PUBLIC_KEY_INFO, byval pcbInfo as DWORD ptr) as WINBOOL
 4491 
 4492 #if _WIN32_WINNT >= &h0601
 4493     #define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FROM_BCRYPT_HANDLE_FUNC "CryptDllExportPublicKeyInfoFromBCryptKeyHandle"
 4494     type PFN_CRYPT_EXPORT_PUBLIC_KEY_INFO_FROM_BCRYPT_HANDLE_FUNC as function(byval hBCryptKey as BCRYPT_KEY_HANDLE, byval dwCertEncodingType as DWORD, byval pszPublicKeyObjId as LPSTR, byval dwFlags as DWORD, byval pvAuxInfo as any ptr, byval pInfo as PCERT_PUBLIC_KEY_INFO, byval pcbInfo as DWORD ptr) as WINBOOL
 4495     declare function CryptExportPublicKeyInfoFromBCryptKeyHandle(byval hBCryptKey as BCRYPT_KEY_HANDLE, byval dwCertEncodingType as DWORD, byval pszPublicKeyObjId as LPSTR, byval dwFlags as DWORD, byval pvAuxInfo as any ptr, byval pInfo as PCERT_PUBLIC_KEY_INFO, byval pcbInfo as DWORD ptr) as WINBOOL
 4496 #endif
 4497 
 4498 #define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC "CryptDllImportPublicKeyInfoEx"
 4499 #define CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC "CryptDllImportPrivateKeyInfoEx"
 4500 #define CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC "CryptDllExportPrivateKeyInfoEx"
 4501 const CRYPT_ACQUIRE_CACHE_FLAG = &h1
 4502 const CRYPT_ACQUIRE_USE_PROV_INFO_FLAG = &h2
 4503 const CRYPT_ACQUIRE_COMPARE_KEY_FLAG = &h4
 4504 const CRYPT_ACQUIRE_NO_HEALING = &h8
 4505 const CRYPT_ACQUIRE_SILENT_FLAG = &h40
 4506 const CRYPT_ACQUIRE_WINDOW_HANDLE_FLAG = &h80
 4507 const CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK = &h70000
 4508 const CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG = &h10000
 4509 const CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG = &h20000
 4510 const CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG = &h40000
 4511 const CRYPT_FIND_USER_KEYSET_FLAG = &h1
 4512 const CRYPT_FIND_MACHINE_KEYSET_FLAG = &h2
 4513 const CRYPT_FIND_SILENT_KEYSET_FLAG = &h40
 4514 const CRYPT_DELETE_KEYSET = CRYPT_DELETEKEYSET
 4515 type PFN_IMPORT_PRIV_KEY_FUNC as function(byval hCryptProv as HCRYPTPROV, byval pPrivateKeyInfo as CRYPT_PRIVATE_KEY_INFO ptr, byval dwFlags as DWORD, byval pvAuxInfo as any ptr) as WINBOOL
 4516 type PFN_EXPORT_PRIV_KEY_FUNC as function(byval hCryptProv as HCRYPTPROV, byval dwKeySpec as DWORD, byval pszPrivateKeyObjId as LPSTR, byval dwFlags as DWORD, byval pvAuxInfo as any ptr, byval pPrivateKeyInfo as CRYPT_PRIVATE_KEY_INFO ptr, byval pcbPrivateKeyInfo as DWORD ptr) as WINBOOL
 4517 declare function CryptImportPublicKeyInfo(byval hCryptProv as HCRYPTPROV, byval dwCertEncodingType as DWORD, byval pInfo as PCERT_PUBLIC_KEY_INFO, byval phKey as HCRYPTKEY ptr) as WINBOOL
 4518 declare function CryptImportPublicKeyInfoEx(byval hCryptProv as HCRYPTPROV, byval dwCertEncodingType as DWORD, byval pInfo as PCERT_PUBLIC_KEY_INFO, byval aiKeyAlg as ALG_ID, byval dwFlags as DWORD, byval pvAuxInfo as any ptr, byval phKey as HCRYPTKEY ptr) as WINBOOL
 4519 
 4520 #if _WIN32_WINNT >= &h0600
 4521     #define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC "CryptDllImportPublicKeyInfoEx2"
 4522     type PFN_IMPORT_PUBLIC_KEY_INFO_EX2_FUNC as function(byval dwCertEncodingType as DWORD, byval pInfo as PCERT_PUBLIC_KEY_INFO, byval dwFlags as DWORD, byval pvAuxInfo as any ptr, byval phKey as BCRYPT_KEY_HANDLE ptr) as WINBOOL
 4523     declare function CryptImportPublicKeyInfoEx2(byval dwCertEncodingType as DWORD, byval pInfo as PCERT_PUBLIC_KEY_INFO, byval dwFlags as DWORD, byval pvAuxInfo as any ptr, byval phKey as BCRYPT_KEY_HANDLE ptr) as WINBOOL
 4524 #endif
 4525 
 4526 declare function CryptAcquireCertificatePrivateKey(byval pCert as PCCERT_CONTEXT, byval dwFlags as DWORD, byval pvParameters as any ptr, byval phCryptProvOrNCryptKey as HCRYPTPROV_OR_NCRYPT_KEY_HANDLE ptr, byval pdwKeySpec as DWORD ptr, byval pfCallerFreeProvOrNCryptKey as WINBOOL ptr) as WINBOOL
 4527 declare function CryptFindCertificateKeyProvInfo(byval pCert as PCCERT_CONTEXT, byval dwFlags as DWORD, byval pvReserved as any ptr) as WINBOOL
 4528 declare function CryptImportPKCS8(byval sPrivateKeyAndParams as CRYPT_PKCS8_IMPORT_PARAMS, byval dwFlags as DWORD, byval phCryptProv as HCRYPTPROV ptr, byval pvAuxInfo as any ptr) as WINBOOL
 4529 declare function CryptExportPKCS8(byval hCryptProv as HCRYPTPROV, byval dwKeySpec as DWORD, byval pszPrivateKeyObjId as LPSTR, byval dwFlags as DWORD, byval pvAuxInfo as any ptr, byval pbPrivateKeyBlob as UBYTE ptr, byval pcbPrivateKeyBlob as DWORD ptr) as WINBOOL
 4530 declare function CryptExportPKCS8Ex(byval psExportParams as CRYPT_PKCS8_EXPORT_PARAMS ptr, byval dwFlags as DWORD, byval pvAuxInfo as any ptr, byval pbPrivateKeyBlob as UBYTE ptr, byval pcbPrivateKeyBlob as DWORD ptr) as WINBOOL
 4531 declare function CryptHashPublicKeyInfo(byval hCryptProv as HCRYPTPROV_LEGACY, byval Algid as ALG_ID, byval dwFlags as DWORD, byval dwCertEncodingType as DWORD, byval pInfo as PCERT_PUBLIC_KEY_INFO, byval pbComputedHash as UBYTE ptr, byval pcbComputedHash as DWORD ptr) as WINBOOL
 4532 declare function CertRDNValueToStrA(byval dwValueType as DWORD, byval pValue as PCERT_RDN_VALUE_BLOB, byval psz as LPSTR, byval csz as DWORD) as DWORD
 4533 
 4534 #ifndef UNICODE
 4535     declare function CertRDNValueToStr alias "CertRDNValueToStrA"(byval dwValueType as DWORD, byval pValue as PCERT_RDN_VALUE_BLOB, byval psz as LPSTR, byval csz as DWORD) as DWORD
 4536 #endif
 4537 
 4538 declare function CertRDNValueToStrW(byval dwValueType as DWORD, byval pValue as PCERT_RDN_VALUE_BLOB, byval psz as LPWSTR, byval csz as DWORD) as DWORD
 4539 
 4540 #ifdef UNICODE
 4541     declare function CertRDNValueToStr alias "CertRDNValueToStrW"(byval dwValueType as DWORD, byval pValue as PCERT_RDN_VALUE_BLOB, byval psz as LPWSTR, byval csz as DWORD) as DWORD
 4542 #endif
 4543 
 4544 declare function CertNameToStrA(byval dwCertEncodingType as DWORD, byval pName as PCERT_NAME_BLOB, byval dwStrType as DWORD, byval psz as LPSTR, byval csz as DWORD) as DWORD
 4545 
 4546 #ifndef UNICODE
 4547     declare function CertNameToStr alias "CertNameToStrA"(byval dwCertEncodingType as DWORD, byval pName as PCERT_NAME_BLOB, byval dwStrType as DWORD, byval psz as LPSTR, byval csz as DWORD) as DWORD
 4548 #endif
 4549 
 4550 declare function CertNameToStrW(byval dwCertEncodingType as DWORD, byval pName as PCERT_NAME_BLOB, byval dwStrType as DWORD, byval psz as LPWSTR, byval csz as DWORD) as DWORD
 4551 
 4552 #ifdef UNICODE
 4553     declare function CertNameToStr alias "CertNameToStrW"(byval dwCertEncodingType as DWORD, byval pName as PCERT_NAME_BLOB, byval dwStrType as DWORD, byval psz as LPWSTR, byval csz as DWORD) as DWORD
 4554 #endif
 4555 
 4556 const CERT_SIMPLE_NAME_STR = 1
 4557 const CERT_OID_NAME_STR = 2
 4558 const CERT_X500_NAME_STR = 3
 4559 const CERT_XML_NAME_STR = 4
 4560 const CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG = &h10000
 4561 const CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG = &h20000
 4562 const CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG = &h40000
 4563 const CERT_NAME_STR_FORCE_UTF8_DIR_STR_FLAG = &h80000
 4564 const CERT_NAME_STR_FORWARD_FLAG = &h1000000
 4565 const CERT_NAME_STR_REVERSE_FLAG = &h2000000
 4566 const CERT_NAME_STR_COMMA_FLAG = &h4000000
 4567 const CERT_NAME_STR_CRLF_FLAG = &h8000000
 4568 const CERT_NAME_STR_NO_QUOTING_FLAG = &h10000000
 4569 const CERT_NAME_STR_NO_PLUS_FLAG = &h20000000
 4570 const CERT_NAME_STR_SEMICOLON_FLAG = &h40000000
 4571 const CERT_NAME_STR_DISABLE_UTF8_DIR_STR_FLAG = &h100000
 4572 const CERT_NAME_STR_ENABLE_PUNYCODE_FLAG = &h200000
 4573 declare function CertStrToNameA(byval dwCertEncodingType as DWORD, byval pszX500 as LPCSTR, byval dwStrType as DWORD, byval pvReserved as any ptr, byval pbEncoded as UBYTE ptr, byval pcbEncoded as DWORD ptr, byval ppszError as LPCSTR ptr) as WINBOOL
 4574 
 4575 #ifndef UNICODE
 4576     declare function CertStrToName alias "CertStrToNameA"(byval dwCertEncodingType as DWORD, byval pszX500 as LPCSTR, byval dwStrType as DWORD, byval pvReserved as any ptr, byval pbEncoded as UBYTE ptr, byval pcbEncoded as DWORD ptr, byval ppszError as LPCSTR ptr) as WINBOOL
 4577 #endif
 4578 
 4579 declare function CertStrToNameW(byval dwCertEncodingType as DWORD, byval pszX500 as LPCWSTR, byval dwStrType as DWORD, byval pvReserved as any ptr, byval pbEncoded as UBYTE ptr, byval pcbEncoded as DWORD ptr, byval ppszError as LPCWSTR ptr) as WINBOOL
 4580 
 4581 #ifdef UNICODE
 4582     declare function CertStrToName alias "CertStrToNameW"(byval dwCertEncodingType as DWORD, byval pszX500 as LPCWSTR, byval dwStrType as DWORD, byval pvReserved as any ptr, byval pbEncoded as UBYTE ptr, byval pcbEncoded as DWORD ptr, byval ppszError as LPCWSTR ptr) as WINBOOL
 4583 #endif
 4584 
 4585 declare function CertGetNameStringA(byval pCertContext as PCCERT_CONTEXT, byval dwType as DWORD, byval dwFlags as DWORD, byval pvTypePara as any ptr, byval pszNameString as LPSTR, byval cchNameString as DWORD) as DWORD
 4586 
 4587 #ifndef UNICODE
 4588     declare function CertGetNameString alias "CertGetNameStringA"(byval pCertContext as PCCERT_CONTEXT, byval dwType as DWORD, byval dwFlags as DWORD, byval pvTypePara as any ptr, byval pszNameString as LPSTR, byval cchNameString as DWORD) as DWORD
 4589 #endif
 4590 
 4591 declare function CertGetNameStringW(byval pCertContext as PCCERT_CONTEXT, byval dwType as DWORD, byval dwFlags as DWORD, byval pvTypePara as any ptr, byval pszNameString as LPWSTR, byval cchNameString as DWORD) as DWORD
 4592 
 4593 #ifdef UNICODE
 4594     declare function CertGetNameString alias "CertGetNameStringW"(byval pCertContext as PCCERT_CONTEXT, byval dwType as DWORD, byval dwFlags as DWORD, byval pvTypePara as any ptr, byval pszNameString as LPWSTR, byval cchNameString as DWORD) as DWORD
 4595 #endif
 4596 
 4597 const CERT_NAME_EMAIL_TYPE = 1
 4598 const CERT_NAME_RDN_TYPE = 2
 4599 const CERT_NAME_ATTR_TYPE = 3
 4600 const CERT_NAME_SIMPLE_DISPLAY_TYPE = 4
 4601 const CERT_NAME_FRIENDLY_DISPLAY_TYPE = 5
 4602 const CERT_NAME_DNS_TYPE = 6
 4603 const CERT_NAME_URL_TYPE = 7
 4604 const CERT_NAME_UPN_TYPE = 8
 4605 const CERT_NAME_ISSUER_FLAG = &h1
 4606 const CERT_NAME_DISABLE_IE4_UTF8_FLAG = &h10000
 4607 const CERT_NAME_SEARCH_ALL_NAMES_FLAG = &h2
 4608 type PFN_CRYPT_GET_SIGNER_CERTIFICATE as function(byval pvGetArg as any ptr, byval dwCertEncodingType as DWORD, byval pSignerId as PCERT_INFO, byval hMsgCertStore as HCERTSTORE) as PCCERT_CONTEXT
 4609 
 4610 type _CRYPT_SIGN_MESSAGE_PARA
 4611     cbSize as DWORD
 4612     dwMsgEncodingType as DWORD
 4613     pSigningCert as PCCERT_CONTEXT
 4614     HashAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 4615     pvHashAuxInfo as any ptr
 4616     cMsgCert as DWORD
 4617     rgpMsgCert as PCCERT_CONTEXT ptr
 4618     cMsgCrl as DWORD
 4619     rgpMsgCrl as PCCRL_CONTEXT ptr
 4620     cAuthAttr as DWORD
 4621     rgAuthAttr as PCRYPT_ATTRIBUTE
 4622     cUnauthAttr as DWORD
 4623     rgUnauthAttr as PCRYPT_ATTRIBUTE
 4624     dwFlags as DWORD
 4625     dwInnerContentType as DWORD
 4626 end type
 4627 
 4628 type CRYPT_SIGN_MESSAGE_PARA as _CRYPT_SIGN_MESSAGE_PARA
 4629 type PCRYPT_SIGN_MESSAGE_PARA as _CRYPT_SIGN_MESSAGE_PARA ptr
 4630 const CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG = &h1
 4631 const CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG = &h2
 4632 const CRYPT_MESSAGE_KEYID_SIGNER_FLAG = &h4
 4633 const CRYPT_MESSAGE_SILENT_KEYSET_FLAG = &h40
 4634 
 4635 type _CRYPT_VERIFY_MESSAGE_PARA
 4636     cbSize as DWORD
 4637     dwMsgAndCertEncodingType as DWORD
 4638     hCryptProv as HCRYPTPROV_LEGACY
 4639     pfnGetSignerCertificate as PFN_CRYPT_GET_SIGNER_CERTIFICATE
 4640     pvGetArg as any ptr
 4641 end type
 4642 
 4643 type CRYPT_VERIFY_MESSAGE_PARA as _CRYPT_VERIFY_MESSAGE_PARA
 4644 type PCRYPT_VERIFY_MESSAGE_PARA as _CRYPT_VERIFY_MESSAGE_PARA ptr
 4645 
 4646 type _CRYPT_ENCRYPT_MESSAGE_PARA
 4647     cbSize as DWORD
 4648     dwMsgEncodingType as DWORD
 4649     hCryptProv as HCRYPTPROV_LEGACY
 4650     ContentEncryptionAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 4651     pvEncryptionAuxInfo as any ptr
 4652     dwFlags as DWORD
 4653     dwInnerContentType as DWORD
 4654 end type
 4655 
 4656 type CRYPT_ENCRYPT_MESSAGE_PARA as _CRYPT_ENCRYPT_MESSAGE_PARA
 4657 type PCRYPT_ENCRYPT_MESSAGE_PARA as _CRYPT_ENCRYPT_MESSAGE_PARA ptr
 4658 const CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG = &h4
 4659 
 4660 type _CRYPT_DECRYPT_MESSAGE_PARA
 4661     cbSize as DWORD
 4662     dwMsgAndCertEncodingType as DWORD
 4663     cCertStore as DWORD
 4664     rghCertStore as HCERTSTORE ptr
 4665 end type
 4666 
 4667 type CRYPT_DECRYPT_MESSAGE_PARA as _CRYPT_DECRYPT_MESSAGE_PARA
 4668 type PCRYPT_DECRYPT_MESSAGE_PARA as _CRYPT_DECRYPT_MESSAGE_PARA ptr
 4669 
 4670 type _CRYPT_HASH_MESSAGE_PARA
 4671     cbSize as DWORD
 4672     dwMsgEncodingType as DWORD
 4673     hCryptProv as HCRYPTPROV_LEGACY
 4674     HashAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 4675     pvHashAuxInfo as any ptr
 4676 end type
 4677 
 4678 type CRYPT_HASH_MESSAGE_PARA as _CRYPT_HASH_MESSAGE_PARA
 4679 type PCRYPT_HASH_MESSAGE_PARA as _CRYPT_HASH_MESSAGE_PARA ptr
 4680 
 4681 type _CRYPT_KEY_SIGN_MESSAGE_PARA
 4682     cbSize as DWORD
 4683     dwMsgAndCertEncodingType as DWORD
 4684 
 4685     union
 4686         hCryptProv as HCRYPTPROV
 4687         hNCryptKey as NCRYPT_KEY_HANDLE
 4688     end union
 4689 
 4690     dwKeySpec as DWORD
 4691     HashAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 4692     pvHashAuxInfo as any ptr
 4693     PubKeyAlgorithm as CRYPT_ALGORITHM_IDENTIFIER
 4694 end type
 4695 
 4696 type CRYPT_KEY_SIGN_MESSAGE_PARA as _CRYPT_KEY_SIGN_MESSAGE_PARA
 4697 type PCRYPT_KEY_SIGN_MESSAGE_PARA as _CRYPT_KEY_SIGN_MESSAGE_PARA ptr
 4698 
 4699 type _CRYPT_KEY_VERIFY_MESSAGE_PARA
 4700     cbSize as DWORD
 4701     dwMsgEncodingType as DWORD
 4702     hCryptProv as HCRYPTPROV_LEGACY
 4703 end type
 4704 
 4705 type CRYPT_KEY_VERIFY_MESSAGE_PARA as _CRYPT_KEY_VERIFY_MESSAGE_PARA
 4706 type PCRYPT_KEY_VERIFY_MESSAGE_PARA as _CRYPT_KEY_VERIFY_MESSAGE_PARA ptr
 4707 
 4708 type _CERT_CHAIN
 4709     cCerts as DWORD
 4710     certs as PCERT_BLOB
 4711     keyLocatorInfo as CRYPT_KEY_PROV_INFO
 4712 end type
 4713 
 4714 type CERT_CHAIN as _CERT_CHAIN
 4715 type PCERT_CHAIN as _CERT_CHAIN ptr
 4716 declare function CryptSignMessage(byval pSignPara as PCRYPT_SIGN_MESSAGE_PARA, byval fDetachedSignature as WINBOOL, byval cToBeSigned as DWORD, byval rgpbToBeSigned as const UBYTE ptr ptr, byval rgcbToBeSigned as DWORD ptr, byval pbSignedBlob as UBYTE ptr, byval pcbSignedBlob as DWORD ptr) as WINBOOL
 4717 declare function CryptVerifyMessageSignature(byval pVerifyPara as PCRYPT_VERIFY_MESSAGE_PARA, byval dwSignerIndex as DWORD, byval pbSignedBlob as const UBYTE ptr, byval cbSignedBlob as DWORD, byval pbDecoded as UBYTE ptr, byval pcbDecoded as DWORD ptr, byval ppSignerCert as PCCERT_CONTEXT ptr) as WINBOOL
 4718 declare function CryptGetMessageSignerCount(byval dwMsgEncodingType as DWORD, byval pbSignedBlob as const UBYTE ptr, byval cbSignedBlob as DWORD) as LONG
 4719 declare function CryptGetMessageCertificates(byval dwMsgAndCertEncodingType as DWORD, byval hCryptProv as HCRYPTPROV_LEGACY, byval dwFlags as DWORD, byval pbSignedBlob as const UBYTE ptr, byval cbSignedBlob as DWORD) as HCERTSTORE
 4720 declare function CryptVerifyDetachedMessageSignature(byval pVerifyPara as PCRYPT_VERIFY_MESSAGE_PARA, byval dwSignerIndex as DWORD, byval pbDetachedSignBlob as const UBYTE ptr, byval cbDetachedSignBlob as DWORD, byval cToBeSigned as DWORD, byval rgpbToBeSigned as const UBYTE ptr ptr, byval rgcbToBeSigned as DWORD ptr, byval ppSignerCert as PCCERT_CONTEXT ptr) as WINBOOL
 4721 declare function CryptEncryptMessage(byval pEncryptPara as PCRYPT_ENCRYPT_MESSAGE_PARA, byval cRecipientCert as DWORD, byval rgpRecipientCert as PCCERT_CONTEXT ptr, byval pbToBeEncrypted as const UBYTE ptr, byval cbToBeEncrypted as DWORD, byval pbEncryptedBlob as UBYTE ptr, byval pcbEncryptedBlob as DWORD ptr) as WINBOOL
 4722 declare function CryptDecryptMessage(byval pDecryptPara as PCRYPT_DECRYPT_MESSAGE_PARA, byval pbEncryptedBlob as const UBYTE ptr, byval cbEncryptedBlob as DWORD, byval pbDecrypted as UBYTE ptr, byval pcbDecrypted as DWORD ptr, byval ppXchgCert as PCCERT_CONTEXT ptr) as WINBOOL
 4723 declare function CryptSignAndEncryptMessage(byval pSignPara as PCRYPT_SIGN_MESSAGE_PARA, byval pEncryptPara as PCRYPT_ENCRYPT_MESSAGE_PARA, byval cRecipientCert as DWORD, byval rgpRecipientCert as PCCERT_CONTEXT ptr, byval pbToBeSignedAndEncrypted as const UBYTE ptr, byval cbToBeSignedAndEncrypted as DWORD, byval pbSignedAndEncryptedBlob as UBYTE ptr, byval pcbSignedAndEncryptedBlob as DWORD ptr) as WINBOOL
 4724 declare function CryptDecryptAndVerifyMessageSignature(byval pDecryptPara as PCRYPT_DECRYPT_MESSAGE_PARA, byval pVerifyPara as PCRYPT_VERIFY_MESSAGE_PARA, byval dwSignerIndex as DWORD, byval pbEncryptedBlob as const UBYTE ptr, byval cbEncryptedBlob as DWORD, byval pbDecrypted as UBYTE ptr, byval pcbDecrypted as DWORD ptr, byval ppXchgCert as PCCERT_CONTEXT ptr, byval ppSignerCert as PCCERT_CONTEXT ptr) as WINBOOL
 4725 declare function CryptDecodeMessage(byval dwMsgTypeFlags as DWORD, byval pDecryptPara as PCRYPT_DECRYPT_MESSAGE_PARA, byval pVerifyPara as PCRYPT_VERIFY_MESSAGE_PARA, byval dwSignerIndex as DWORD, byval pbEncodedBlob as const UBYTE ptr, byval cbEncodedBlob as DWORD, byval dwPrevInnerContentType as DWORD, byval pdwMsgType as DWORD ptr, byval pdwInnerContentType as DWORD ptr, byval pbDecoded as UBYTE ptr, byval pcbDecoded as DWORD ptr, byval ppXchgCert as PCCERT_CONTEXT ptr, byval ppSignerCert as PCCERT_CONTEXT ptr) as WINBOOL
 4726 declare function CryptHashMessage(byval pHashPara as PCRYPT_HASH_MESSAGE_PARA, byval fDetachedHash as WINBOOL, byval cToBeHashed as DWORD, byval rgpbToBeHashed as const UBYTE ptr ptr, byval rgcbToBeHashed as DWORD ptr, byval pbHashedBlob as UBYTE ptr, byval pcbHashedBlob as DWORD ptr, byval pbComputedHash as UBYTE ptr, byval pcbComputedHash as DWORD ptr) as WINBOOL
 4727 declare function CryptVerifyMessageHash(byval pHashPara as PCRYPT_HASH_MESSAGE_PARA, byval pbHashedBlob as UBYTE ptr, byval cbHashedBlob as DWORD, byval pbToBeHashed as UBYTE ptr, byval pcbToBeHashed as DWORD ptr, byval pbComputedHash as UBYTE ptr, byval pcbComputedHash as DWORD ptr) as WINBOOL
 4728 declare function CryptVerifyDetachedMessageHash(byval pHashPara as PCRYPT_HASH_MESSAGE_PARA, byval pbDetachedHashBlob as UBYTE ptr, byval cbDetachedHashBlob as DWORD, byval cToBeHashed as DWORD, byval rgpbToBeHashed as const UBYTE ptr ptr, byval rgcbToBeHashed as DWORD ptr, byval pbComputedHash as UBYTE ptr, byval pcbComputedHash as DWORD ptr) as WINBOOL
 4729 declare function CryptSignMessageWithKey(byval pSignPara as PCRYPT_KEY_SIGN_MESSAGE_PARA, byval pbToBeSigned as const UBYTE ptr, byval cbToBeSigned as DWORD, byval pbSignedBlob as UBYTE ptr, byval pcbSignedBlob as DWORD ptr) as WINBOOL
 4730 declare function CryptVerifyMessageSignatureWithKey(byval pVerifyPara as PCRYPT_KEY_VERIFY_MESSAGE_PARA, byval pPublicKeyInfo as PCERT_PUBLIC_KEY_INFO, byval pbSignedBlob as const UBYTE ptr, byval cbSignedBlob as DWORD, byval pbDecoded as UBYTE ptr, byval pcbDecoded as DWORD ptr) as WINBOOL
 4731 declare function CertOpenSystemStoreA(byval hProv as HCRYPTPROV_LEGACY, byval szSubsystemProtocol as LPCSTR) as HCERTSTORE
 4732 
 4733 #ifndef UNICODE
 4734     declare function CertOpenSystemStore alias "CertOpenSystemStoreA"(byval hProv as HCRYPTPROV_LEGACY, byval szSubsystemProtocol as LPCSTR) as HCERTSTORE
 4735 #endif
 4736 
 4737 declare function CertOpenSystemStoreW(byval hProv as HCRYPTPROV_LEGACY, byval szSubsystemProtocol as LPCWSTR) as HCERTSTORE
 4738 
 4739 #ifdef UNICODE
 4740     declare function CertOpenSystemStore alias "CertOpenSystemStoreW"(byval hProv as HCRYPTPROV_LEGACY, byval szSubsystemProtocol as LPCWSTR) as HCERTSTORE
 4741 #endif
 4742 
 4743 declare function CertAddEncodedCertificateToSystemStoreA(byval szCertStoreName as LPCSTR, byval pbCertEncoded as const UBYTE ptr, byval cbCertEncoded as DWORD) as WINBOOL
 4744 
 4745 #ifndef UNICODE
 4746     declare function CertAddEncodedCertificateToSystemStore alias "CertAddEncodedCertificateToSystemStoreA"(byval szCertStoreName as LPCSTR, byval pbCertEncoded as const UBYTE ptr, byval cbCertEncoded as DWORD) as WINBOOL
 4747 #endif
 4748 
 4749 declare function CertAddEncodedCertificateToSystemStoreW(byval szCertStoreName as LPCWSTR, byval pbCertEncoded as const UBYTE ptr, byval cbCertEncoded as DWORD) as WINBOOL
 4750 
 4751 #ifdef UNICODE
 4752     declare function CertAddEncodedCertificateToSystemStore alias "CertAddEncodedCertificateToSystemStoreW"(byval szCertStoreName as LPCWSTR, byval pbCertEncoded as const UBYTE ptr, byval cbCertEncoded as DWORD) as WINBOOL
 4753 #endif
 4754 
 4755 declare function FindCertsByIssuer(byval pCertChains as PCERT_CHAIN, byval pcbCertChains as DWORD ptr, byval pcCertChains as DWORD ptr, byval pbEncodedIssuerName as UBYTE ptr, byval cbEncodedIssuerName as DWORD, byval pwszPurpose as LPCWSTR, byval dwKeySpec as DWORD) as HRESULT
 4756 declare function CryptQueryObject(byval dwObjectType as DWORD, byval pvObject as const any ptr, byval dwExpectedContentTypeFlags as DWORD, byval dwExpectedFormatTypeFlags as DWORD, byval dwFlags as DWORD, byval pdwMsgAndCertEncodingType as DWORD ptr, byval pdwContentType as DWORD ptr, byval pdwFormatType as DWORD ptr, byval phCertStore as HCERTSTORE ptr, byval phMsg as HCRYPTMSG ptr, byval ppvContext as const any ptr ptr) as WINBOOL
 4757 const CERT_QUERY_OBJECT_FILE = &h1
 4758 const CERT_QUERY_OBJECT_BLOB = &h2
 4759 const CERT_QUERY_CONTENT_CERT = 1
 4760 const CERT_QUERY_CONTENT_CTL = 2
 4761 const CERT_QUERY_CONTENT_CRL = 3
 4762 const CERT_QUERY_CONTENT_SERIALIZED_STORE = 4
 4763 const CERT_QUERY_CONTENT_SERIALIZED_CERT = 5
 4764 const CERT_QUERY_CONTENT_SERIALIZED_CTL = 6
 4765 const CERT_QUERY_CONTENT_SERIALIZED_CRL = 7
 4766 const CERT_QUERY_CONTENT_PKCS7_SIGNED = 8
 4767 const CERT_QUERY_CONTENT_PKCS7_UNSIGNED = 9
 4768 const CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED = 10
 4769 const CERT_QUERY_CONTENT_PKCS10 = 11
 4770 const CERT_QUERY_CONTENT_PFX = 12
 4771 const CERT_QUERY_CONTENT_CERT_PAIR = 13
 4772 const CERT_QUERY_CONTENT_PFX_AND_LOAD = 14
 4773 const CERT_QUERY_CONTENT_FLAG_CERT = 1 shl CERT_QUERY_CONTENT_CERT
 4774 const CERT_QUERY_CONTENT_FLAG_CTL = 1 shl CERT_QUERY_CONTENT_CTL
 4775 const CERT_QUERY_CONTENT_FLAG_CRL = 1 shl CERT_QUERY_CONTENT_CRL
 4776 const CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE = 1 shl CERT_QUERY_CONTENT_SERIALIZED_STORE
 4777 const CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT = 1 shl CERT_QUERY_CONTENT_SERIALIZED_CERT
 4778 const CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL = 1 shl CERT_QUERY_CONTENT_SERIALIZED_CTL
 4779 const CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL = 1 shl CERT_QUERY_CONTENT_SERIALIZED_CRL
 4780 const CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED = 1 shl CERT_QUERY_CONTENT_PKCS7_SIGNED
 4781 const CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED = 1 shl CERT_QUERY_CONTENT_PKCS7_UNSIGNED
 4782 const CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED = 1 shl CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED
 4783 const CERT_QUERY_CONTENT_FLAG_PKCS10 = 1 shl CERT_QUERY_CONTENT_PKCS10
 4784 const CERT_QUERY_CONTENT_FLAG_PFX = 1 shl CERT_QUERY_CONTENT_PFX
 4785 const CERT_QUERY_CONTENT_FLAG_CERT_PAIR = 1 shl CERT_QUERY_CONTENT_CERT_PAIR
 4786 const CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD = 1 shl CERT_QUERY_CONTENT_PFX_AND_LOAD
 4787 const CERT_QUERY_CONTENT_FLAG_ALL = (((((((((((CERT_QUERY_CONTENT_FLAG_CERT or CERT_QUERY_CONTENT_FLAG_CTL) or CERT_QUERY_CONTENT_FLAG_CRL) or CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE) or CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT) or CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL) or CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL) or CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED) or CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED) or CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED) or CERT_QUERY_CONTENT_FLAG_PKCS10) or CERT_QUERY_CONTENT_FLAG_PFX) or CERT_QUERY_CONTENT_FLAG_CERT_PAIR
 4788 const CERT_QUERY_CONTENT_FLAG_ALL_ISSUER_CERT = (((CERT_QUERY_CONTENT_FLAG_CERT or CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE) or CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT) or CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED) or CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED
 4789 const CERT_QUERY_FORMAT_BINARY = 1
 4790 const CERT_QUERY_FORMAT_BASE64_ENCODED = 2
 4791 const CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED = 3
 4792 const CERT_QUERY_FORMAT_FLAG_BINARY = 1 shl CERT_QUERY_FORMAT_BINARY
 4793 const CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED = 1 shl CERT_QUERY_FORMAT_BASE64_ENCODED
 4794 const CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED = 1 shl CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED
 4795 const CERT_QUERY_FORMAT_FLAG_ALL = (CERT_QUERY_FORMAT_FLAG_BINARY or CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED) or CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED
 4796 
 4797 type HCRYPTASYNC as HANDLE
 4798 type PHCRYPTASYNC as HANDLE ptr
 4799 type PFN_CRYPT_ASYNC_PARAM_FREE_FUNC as sub(byval pszParamOid as LPSTR, byval pvParam as LPVOID)
 4800 
 4801 declare function CryptMemAlloc(byval cbSize as ULONG) as LPVOID
 4802 declare function CryptMemRealloc(byval pv as LPVOID, byval cbSize as ULONG) as LPVOID
 4803 declare sub CryptMemFree(byval pv as LPVOID)
 4804 declare function CryptCreateAsyncHandle(byval dwFlags as DWORD, byval phAsync as PHCRYPTASYNC) as WINBOOL
 4805 declare function CryptSetAsyncParam(byval hAsync as HCRYPTASYNC, byval pszParamOid as LPSTR, byval pvParam as LPVOID, byval pfnFree as PFN_CRYPT_ASYNC_PARAM_FREE_FUNC) as WINBOOL
 4806 declare function CryptGetAsyncParam(byval hAsync as HCRYPTASYNC, byval pszParamOid as LPSTR, byval ppvParam as LPVOID ptr, byval ppfnFree as PFN_CRYPT_ASYNC_PARAM_FREE_FUNC ptr) as WINBOOL
 4807 declare function CryptCloseAsyncHandle(byval hAsync as HCRYPTASYNC) as WINBOOL
 4808 
 4809 type _CRYPT_BLOB_ARRAY
 4810     cBlob as DWORD
 4811     rgBlob as PCRYPT_DATA_BLOB
 4812 end type
 4813 
 4814 type CRYPT_BLOB_ARRAY as _CRYPT_BLOB_ARRAY
 4815 type PCRYPT_BLOB_ARRAY as _CRYPT_BLOB_ARRAY ptr
 4816 
 4817 type _CRYPT_CREDENTIALS
 4818     cbSize as DWORD
 4819     pszCredentialsOid as LPCSTR
 4820     pvCredentials as LPVOID
 4821 end type
 4822 
 4823 type CRYPT_CREDENTIALS as _CRYPT_CREDENTIALS
 4824 type PCRYPT_CREDENTIALS as _CRYPT_CREDENTIALS ptr
 4825 const CREDENTIAL_OID_PASSWORD_CREDENTIALS_A = cast(LPCSTR, 1)
 4826 const CREDENTIAL_OID_PASSWORD_CREDENTIALS_W = cast(LPCSTR, 2)
 4827 
 4828 #ifdef UNICODE
 4829     const CREDENTIAL_OID_PASSWORD_CREDENTIALS = CREDENTIAL_OID_PASSWORD_CREDENTIALS_W
 4830 #else
 4831     const CREDENTIAL_OID_PASSWORD_CREDENTIALS = CREDENTIAL_OID_PASSWORD_CREDENTIALS_A
 4832 #endif
 4833 
 4834 type _CRYPT_PASSWORD_CREDENTIALSA
 4835     cbSize as DWORD
 4836     pszUsername as LPSTR
 4837     pszPassword as LPSTR
 4838 end type
 4839 
 4840 type CRYPT_PASSWORD_CREDENTIALSA as _CRYPT_PASSWORD_CREDENTIALSA
 4841 type PCRYPT_PASSWORD_CREDENTIALSA as _CRYPT_PASSWORD_CREDENTIALSA ptr
 4842 
 4843 type _CRYPT_PASSWORD_CREDENTIALSW
 4844     cbSize as DWORD
 4845     pszUsername as LPWSTR
 4846     pszPassword as LPWSTR
 4847 end type
 4848 
 4849 type CRYPT_PASSWORD_CREDENTIALSW as _CRYPT_PASSWORD_CREDENTIALSW
 4850 type PCRYPT_PASSWORD_CREDENTIALSW as _CRYPT_PASSWORD_CREDENTIALSW ptr
 4851 
 4852 #ifdef UNICODE
 4853     type CRYPT_PASSWORD_CREDENTIALS as CRYPT_PASSWORD_CREDENTIALSW
 4854     type PCRYPT_PASSWORD_CREDENTIALS as PCRYPT_PASSWORD_CREDENTIALSW
 4855 #else
 4856     type CRYPT_PASSWORD_CREDENTIALS as CRYPT_PASSWORD_CREDENTIALSA
 4857     type PCRYPT_PASSWORD_CREDENTIALS as PCRYPT_PASSWORD_CREDENTIALSA
 4858 #endif
 4859 
 4860 #define SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC "SchemeDllRetrieveEncodedObject"
 4861 #define SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC "SchemeDllRetrieveEncodedObjectW"
 4862 #define CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC "ContextDllCreateObjectContext"
 4863 type PFN_FREE_ENCODED_OBJECT_FUNC as sub(byval pszObjectOid as LPCSTR, byval pObject as PCRYPT_BLOB_ARRAY, byval pvFreeContext as LPVOID)
 4864 const CONTEXT_OID_CERTIFICATE = cast(LPCSTR, 1)
 4865 const CONTEXT_OID_CRL = cast(LPCSTR, 2)
 4866 const CONTEXT_OID_CTL = cast(LPCSTR, 3)
 4867 const CONTEXT_OID_PKCS7 = cast(LPCSTR, 4)
 4868 const CONTEXT_OID_CAPI2_ANY = cast(LPCSTR, 5)
 4869 const CONTEXT_OID_OCSP_RESP = cast(LPCSTR, 6)
 4870 const CRYPT_RETRIEVE_MULTIPLE_OBJECTS = &h1
 4871 const CRYPT_CACHE_ONLY_RETRIEVAL = &h2
 4872 const CRYPT_WIRE_ONLY_RETRIEVAL = &h4
 4873 const CRYPT_DONT_CACHE_RESULT = &h8
 4874 const CRYPT_ASYNC_RETRIEVAL = &h10
 4875 const CRYPT_VERIFY_CONTEXT_SIGNATURE = &h20
 4876 const CRYPT_VERIFY_DATA_HASH = &h40
 4877 const CRYPT_KEEP_TIME_VALID = &h80
 4878 const CRYPT_DONT_VERIFY_SIGNATURE = &h100
 4879 const CRYPT_DONT_CHECK_TIME_VALIDITY = &h200
 4880 const CRYPT_CHECK_FRESHNESS_TIME_VALIDITY = &h400
 4881 const CRYPT_ACCUMULATIVE_TIMEOUT = &h800
 4882 const CRYPT_STICKY_CACHE_RETRIEVAL = &h1000
 4883 const CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL = &h2000
 4884 const CRYPT_OFFLINE_CHECK_RETRIEVAL = &h4000
 4885 const CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE = &h8000
 4886 const CRYPT_LDAP_SIGN_RETRIEVAL = &h10000
 4887 const CRYPT_NO_AUTH_RETRIEVAL = &h20000
 4888 const CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL = &h40000
 4889 const CRYPT_AIA_RETRIEVAL = &h80000
 4890 const CRYPT_HTTP_POST_RETRIEVAL = &h100000
 4891 const CRYPT_PROXY_CACHE_RETRIEVAL = &h200000
 4892 const CRYPT_NOT_MODIFIED_RETRIEVAL = &h400000
 4893 const CRYPT_ENABLE_SSL_REVOCATION_RETRIEVAL = &h800000
 4894 const CRYPT_OCSP_ONLY_RETRIEVAL = &h1000000
 4895 const CRYPT_NO_OCSP_FAILOVER_TO_CRL_RETRIEVAL = &h2000000
 4896 const CRYPT_RANDOM_QUERY_STRING_RETRIEVAL = &h4000000
 4897 
 4898 type _CRYPTNET_URL_CACHE_PRE_FETCH_INFO
 4899     cbSize as DWORD
 4900     dwObjectType as DWORD
 4901     dwError as DWORD
 4902     dwReserved as DWORD
 4903     ThisUpdateTime as FILETIME
 4904     NextUpdateTime as FILETIME
 4905     PublishTime as FILETIME
 4906 end type
 4907 
 4908 type CRYPTNET_URL_CACHE_PRE_FETCH_INFO as _CRYPTNET_URL_CACHE_PRE_FETCH_INFO
 4909 type PCRYPTNET_URL_CACHE_PRE_FETCH_INFO as _CRYPTNET_URL_CACHE_PRE_FETCH_INFO ptr
 4910 const CRYPTNET_URL_CACHE_PRE_FETCH_NONE = 0
 4911 const CRYPTNET_URL_CACHE_PRE_FETCH_BLOB = 1
 4912 const CRYPTNET_URL_CACHE_PRE_FETCH_CRL = 2
 4913 const CRYPTNET_URL_CACHE_PRE_FETCH_OCSP = 3
 4914 const CRYPTNET_URL_CACHE_PRE_FETCH_AUTOROOT_CAB = 5
 4915 const CRYPTNET_URL_CACHE_PRE_FETCH_DISALLOWED_CERT_CAB = 6
 4916 
 4917 type _CRYPTNET_URL_CACHE_FLUSH_INFO
 4918     cbSize as DWORD
 4919     dwExemptSeconds as DWORD
 4920     ExpireTime as FILETIME
 4921 end type
 4922 
 4923 type CRYPTNET_URL_CACHE_FLUSH_INFO as _CRYPTNET_URL_CACHE_FLUSH_INFO
 4924 type PCRYPTNET_URL_CACHE_FLUSH_INFO as _CRYPTNET_URL_CACHE_FLUSH_INFO ptr
 4925 const CRYPTNET_URL_CACHE_DEFAULT_FLUSH = 0
 4926 const CRYPTNET_URL_CACHE_DISABLE_FLUSH = &hffffffff
 4927 
 4928 type _CRYPTNET_URL_CACHE_RESPONSE_INFO
 4929     cbSize as DWORD
 4930     wResponseType as WORD
 4931     wResponseFlags as WORD
 4932     LastModifiedTime as FILETIME
 4933     dwMaxAge as DWORD
 4934     pwszETag as LPCWSTR
 4935     dwProxyId as DWORD
 4936 end type
 4937 
 4938 type CRYPTNET_URL_CACHE_RESPONSE_INFO as _CRYPTNET_URL_CACHE_RESPONSE_INFO
 4939 type PCRYPTNET_URL_CACHE_RESPONSE_INFO as _CRYPTNET_URL_CACHE_RESPONSE_INFO ptr
 4940 const CRYPTNET_URL_CACHE_RESPONSE_NONE = 0
 4941 const CRYPTNET_URL_CACHE_RESPONSE_HTTP = 1
 4942 const CRYPTNET_URL_CACHE_RESPONSE_VALIDATED = &h8000
 4943 
 4944 type _CRYPT_RETRIEVE_AUX_INFO
 4945     cbSize as DWORD
 4946     pLastSyncTime as FILETIME ptr
 4947     dwMaxUrlRetrievalByteCount as DWORD
 4948     pPreFetchInfo as PCRYPTNET_URL_CACHE_PRE_FETCH_INFO
 4949     pFlushInfo as PCRYPTNET_URL_CACHE_FLUSH_INFO
 4950     ppResponseInfo as PCRYPTNET_URL_CACHE_RESPONSE_INFO ptr
 4951     pwszCacheFileNamePrefix as LPWSTR
 4952     pftCacheResync as LPFILETIME
 4953     fProxyCacheRetrieval as WINBOOL
 4954     dwHttpStatusCode as DWORD
 4955 end type
 4956 
 4957 type CRYPT_RETRIEVE_AUX_INFO as _CRYPT_RETRIEVE_AUX_INFO
 4958 type PCRYPT_RETRIEVE_AUX_INFO as _CRYPT_RETRIEVE_AUX_INFO ptr
 4959 declare function CryptRetrieveObjectByUrlA(byval pszUrl as LPCSTR, byval pszObjectOid as LPCSTR, byval dwRetrievalFlags as DWORD, byval dwTimeout as DWORD, byval ppvObject as LPVOID ptr, byval hAsyncRetrieve as HCRYPTASYNC, byval pCredentials as PCRYPT_CREDENTIALS, byval pvVerify as LPVOID, byval pAuxInfo as PCRYPT_RETRIEVE_AUX_INFO) as WINBOOL
 4960 declare function CryptRetrieveObjectByUrlW(byval pszUrl as LPCWSTR, byval pszObjectOid as LPCSTR, byval dwRetrievalFlags as DWORD, byval dwTimeout as DWORD, byval ppvObject as LPVOID ptr, byval hAsyncRetrieve as HCRYPTASYNC, byval pCredentials as PCRYPT_CREDENTIALS, byval pvVerify as LPVOID, byval pAuxInfo as PCRYPT_RETRIEVE_AUX_INFO) as WINBOOL
 4961 
 4962 #ifdef UNICODE
 4963     declare function CryptRetrieveObjectByUrl alias "CryptRetrieveObjectByUrlW"(byval pszUrl as LPCWSTR, byval pszObjectOid as LPCSTR, byval dwRetrievalFlags as DWORD, byval dwTimeout as DWORD, byval ppvObject as LPVOID ptr, byval hAsyncRetrieve as HCRYPTASYNC, byval pCredentials as PCRYPT_CREDENTIALS, byval pvVerify as LPVOID, byval pAuxInfo as PCRYPT_RETRIEVE_AUX_INFO) as WINBOOL
 4964 #else
 4965     declare function CryptRetrieveObjectByUrl alias "CryptRetrieveObjectByUrlA"(byval pszUrl as LPCSTR, byval pszObjectOid as LPCSTR, byval dwRetrievalFlags as DWORD, byval dwTimeout as DWORD, byval ppvObject as LPVOID ptr, byval hAsyncRetrieve as HCRYPTASYNC, byval pCredentials as PCRYPT_CREDENTIALS, byval pvVerify as LPVOID, byval pAuxInfo as PCRYPT_RETRIEVE_AUX_INFO) as WINBOOL
 4966 #endif
 4967 
 4968 type PFN_CRYPT_CANCEL_RETRIEVAL as function(byval dwFlags as DWORD, byval pvArg as any ptr) as WINBOOL
 4969 declare function CryptInstallCancelRetrieval(byval pfnCancel as PFN_CRYPT_CANCEL_RETRIEVAL, byval pvArg as const any ptr, byval dwFlags as DWORD, byval pvReserved as any ptr) as WINBOOL
 4970 declare function CryptUninstallCancelRetrieval(byval dwFlags as DWORD, byval pvReserved as any ptr) as WINBOOL
 4971 declare function CryptCancelAsyncRetrieval(byval hAsyncRetrieval as HCRYPTASYNC) as WINBOOL
 4972 const CRYPT_PARAM_ASYNC_RETRIEVAL_COMPLETION = cast(LPCSTR, 1)
 4973 type PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC as sub(byval pvCompletion as LPVOID, byval dwCompletionCode as DWORD, byval pszUrl as LPCSTR, byval pszObjectOid as LPSTR, byval pvObject as LPVOID)
 4974 
 4975 type _CRYPT_ASYNC_RETRIEVAL_COMPLETION
 4976     pfnCompletion as PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC
 4977     pvCompletion as LPVOID
 4978 end type
 4979 
 4980 type CRYPT_ASYNC_RETRIEVAL_COMPLETION as _CRYPT_ASYNC_RETRIEVAL_COMPLETION
 4981 type PCRYPT_ASYNC_RETRIEVAL_COMPLETION as _CRYPT_ASYNC_RETRIEVAL_COMPLETION ptr
 4982 const CRYPT_PARAM_CANCEL_ASYNC_RETRIEVAL = cast(LPCSTR, 2)
 4983 type PFN_CANCEL_ASYNC_RETRIEVAL_FUNC as function(byval hAsyncRetrieve as HCRYPTASYNC) as WINBOOL
 4984 const CRYPT_GET_URL_FROM_PROPERTY = &h1
 4985 const CRYPT_GET_URL_FROM_EXTENSION = &h2
 4986 const CRYPT_GET_URL_FROM_UNAUTH_ATTRIBUTE = &h4
 4987 const CRYPT_GET_URL_FROM_AUTH_ATTRIBUTE = &h8
 4988 
 4989 type _CRYPT_URL_ARRAY
 4990     cUrl as DWORD
 4991     rgwszUrl as LPWSTR ptr
 4992 end type
 4993 
 4994 type CRYPT_URL_ARRAY as _CRYPT_URL_ARRAY
 4995 type PCRYPT_URL_ARRAY as _CRYPT_URL_ARRAY ptr
 4996 
 4997 type _CRYPT_URL_INFO
 4998     cbSize as DWORD
 4999     dwSyncDeltaTime as DWORD
 5000     cGroup as DWORD
 5001     rgcGroupEntry as DWORD ptr
 5002 end type
 5003 
 5004 type CRYPT_URL_INFO as _CRYPT_URL_INFO
 5005 type PCRYPT_URL_INFO as _CRYPT_URL_INFO ptr
 5006 declare function CryptGetObjectUrl(byval pszUrlOid as LPCSTR, byval pvPara as LPVOID, byval dwFlags as DWORD, byval pUrlArray as PCRYPT_URL_ARRAY, byval pcbUrlArray as DWORD ptr, byval pUrlInfo as PCRYPT_URL_INFO, byval pcbUrlInfo as DWORD ptr, byval pvReserved as LPVOID) as WINBOOL
 5007 #define URL_OID_GET_OBJECT_URL_FUNC "UrlDllGetObjectUrl"
 5008 const URL_OID_CERTIFICATE_ISSUER = cast(LPCSTR, 1)
 5009 const URL_OID_CERTIFICATE_CRL_DIST_POINT = cast(LPCSTR, 2)
 5010 const URL_OID_CTL_ISSUER = cast(LPCSTR, 3)
 5011 const URL_OID_CTL_NEXT_UPDATE = cast(LPCSTR, 4)
 5012 const URL_OID_CRL_ISSUER = cast(LPCSTR, 5)
 5013 const URL_OID_CERTIFICATE_FRESHEST_CRL = cast(LPCSTR, 6)
 5014 const URL_OID_CRL_FRESHEST_CRL = cast(LPCSTR, 7)
 5015 const URL_OID_CROSS_CERT_DIST_POINT = cast(LPCSTR, 8)
 5016 const URL_OID_CERTIFICATE_OCSP = cast(LPCSTR, 9)
 5017 const URL_OID_CERTIFICATE_OCSP_AND_CRL_DIST_POINT = cast(LPCSTR, 10)
 5018 const URL_OID_CERTIFICATE_CRL_DIST_POINT_AND_OCSP = cast(LPCSTR, 11)
 5019 const URL_OID_CROSS_CERT_SUBJECT_INFO_ACCESS = cast(LPCSTR, 12)
 5020 const URL_OID_CERTIFICATE_ONLY_OCSP = cast(LPCSTR, 13)
 5021 
 5022 type _CERT_CRL_CONTEXT_PAIR
 5023     pCertContext as PCCERT_CONTEXT
 5024     pCrlContext as PCCRL_CONTEXT
 5025 end type
 5026 
 5027 type CERT_CRL_CONTEXT_PAIR as _CERT_CRL_CONTEXT_PAIR
 5028 type PCERT_CRL_CONTEXT_PAIR as _CERT_CRL_CONTEXT_PAIR ptr
 5029 type PCCERT_CRL_CONTEXT_PAIR as const CERT_CRL_CONTEXT_PAIR ptr
 5030 
 5031 type _CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO
 5032     cbSize as DWORD
 5033     iDeltaCrlIndicator as long
 5034     pftCacheResync as LPFILETIME
 5035     pLastSyncTime as LPFILETIME
 5036     pMaxAgeTime as LPFILETIME
 5037     pChainPara as PCERT_REVOCATION_CHAIN_PARA
 5038     pDeltaCrlIndicator as PCRYPT_INTEGER_BLOB
 5039 end type
 5040 
 5041 type CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO as _CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO
 5042 type PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO as _CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO ptr
 5043 type PFN_CRYPT_ENUM_KEYID_PROP as function(byval pKeyIdentifier as const CRYPT_HASH_BLOB ptr, byval dwFlags as DWORD, byval pvReserved as any ptr, byval pvArg as any ptr, byval cProp as DWORD, byval rgdwPropId as DWORD ptr, byval rgpvData as any ptr ptr, byval rgcbData as DWORD ptr) as WINBOOL
 5044 
 5045 #define TIME_VALID_OID_GET_OBJECT_FUNC "TimeValidDllGetObject"
 5046 #define CERT_CHAIN_CONFIG_REGPATH wstr(!"Software\\Microsoft\\Cryptography\\OID\\EncodingType 0\\CertDllCreateCertificateChainEngine\\Config")
 5047 const TIME_VALID_OID_GET_CTL = cast(LPCSTR, 1)
 5048 const TIME_VALID_OID_GET_CRL = cast(LPCSTR, 2)
 5049 const TIME_VALID_OID_GET_CRL_FROM_CERT = cast(LPCSTR, 3)
 5050 const TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT = cast(LPCSTR, 4)
 5051 const TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL = cast(LPCSTR, 5)
 5052 #define TIME_VALID_OID_FLUSH_OBJECT_FUNC "TimeValidDllFlushObject"
 5053 const TIME_VALID_OID_FLUSH_CTL = cast(LPCSTR, 1)
 5054 const TIME_VALID_OID_FLUSH_CRL = cast(LPCSTR, 2)
 5055 const TIME_VALID_OID_FLUSH_CRL_FROM_CERT = cast(LPCSTR, 3)
 5056 const TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CERT = cast(LPCSTR, 4)
 5057 const TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CRL = cast(LPCSTR, 5)
 5058 const CERT_CREATE_SELFSIGN_NO_SIGN = 1
 5059 const CERT_CREATE_SELFSIGN_NO_KEY_INFO = 2
 5060 const CRYPT_KEYID_DELETE_FLAG = &h10
 5061 const CRYPT_KEYID_MACHINE_FLAG = &h20
 5062 const CRYPT_KEYID_SET_NEW_FLAG = &h2000
 5063 const CRYPT_KEYID_ALLOC_FLAG = &h8000
 5064 
 5065 declare function CryptGetTimeValidObject(byval pszTimeValidOid as LPCSTR, byval pvPara as LPVOID, byval pIssuer as PCCERT_CONTEXT, byval pftValidFor as LPFILETIME, byval dwFlags as DWORD, byval dwTimeout as DWORD, byval ppvObject as LPVOID ptr, byval pCredentials as PCRYPT_CREDENTIALS, byval pExtraInfo as PCRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO) as WINBOOL
 5066 declare function CryptFlushTimeValidObject(byval pszFlushTimeValidOid as LPCSTR, byval pvPara as LPVOID, byval pIssuer as PCCERT_CONTEXT, byval dwFlags as DWORD, byval pvReserved as LPVOID) as WINBOOL
 5067 declare function CertCreateSelfSignCertificate(byval hCryptProvOrNCryptKey as HCRYPTPROV_OR_NCRYPT_KEY_HANDLE, byval pSubjectIssuerBlob as PCERT_NAME_BLOB, byval dwFlags as DWORD, byval pKeyProvInfo as PCRYPT_KEY_PROV_INFO, byval pSignatureAlgorithm as PCRYPT_ALGORITHM_IDENTIFIER, byval pStartTime as PSYSTEMTIME, byval pEndTime as PSYSTEMTIME, byval pExtensions as PCERT_EXTENSIONS) as PCCERT_CONTEXT
 5068 declare function CryptGetKeyIdentifierProperty(byval pKeyIdentifier as const CRYPT_HASH_BLOB ptr, byval dwPropId as DWORD, byval dwFlags as DWORD, byval pwszComputerName as LPCWSTR, byval pvReserved as any ptr, byval pvData as any ptr, byval pcbData as DWORD ptr) as WINBOOL
 5069 declare function CryptSetKeyIdentifierProperty(byval pKeyIdentifier as const CRYPT_HASH_BLOB ptr, byval dwPropId as DWORD, byval dwFlags as DWORD, byval pwszComputerName as LPCWSTR, byval pvReserved as any ptr, byval pvData as const any ptr) as WINBOOL
 5070 declare function CryptEnumKeyIdentifierProperties(byval pKeyIdentifier as const CRYPT_HASH_BLOB ptr, byval dwPropId as DWORD, byval dwFlags as DWORD, byval pwszComputerName as LPCWSTR, byval pvReserved as any ptr, byval pvArg as any ptr, byval pfnEnum as PFN_CRYPT_ENUM_KEYID_PROP) as WINBOOL
 5071 declare function CryptCreateKeyIdentifierFromCSP(byval dwCertEncodingType as DWORD, byval pszPubKeyOID as LPCSTR, byval pPubKeyStruc as const PUBLICKEYSTRUC ptr, byval cbPubKeyStruc as DWORD, byval dwFlags as DWORD, byval pvReserved as any ptr, byval pbHash as UBYTE ptr, byval pcbHash as DWORD ptr) as WINBOOL
 5072 
 5073 #define CERT_CHAIN_MAX_URL_RETRIEVAL_BYTE_COUNT_VALUE_NAME wstr("MaxUrlRetrievalByteCount")
 5074 const CERT_CHAIN_MAX_URL_RETRIEVAL_BYTE_COUNT_DEFAULT = (100 * 1024) * 1024
 5075 #define CERT_CHAIN_CACHE_RESYNC_FILETIME_VALUE_NAME wstr("ChainCacheResyncFiletime")
 5076 #define CERT_CHAIN_DISABLE_MANDATORY_BASIC_CONSTRAINTS_VALUE_NAME wstr("DisableMandatoryBasicConstraints")
 5077 #define CERT_CHAIN_DISABLE_CA_NAME_CONSTRAINTS_VALUE_NAME wstr("DisableCANameConstraints")
 5078 #define CERT_CHAIN_DISABLE_UNSUPPORTED_CRITICAL_EXTENSIONS_VALUE_NAME wstr("DisableUnsupportedCriticalExtensions")
 5079 #define CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_VALUE_NAME wstr("MaxAIAUrlCountInCert")
 5080 const CERT_CHAIN_MAX_AIA_URL_COUNT_IN_CERT_DEFAULT = 5
 5081 #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_VALUE_NAME wstr("MaxAIAUrlRetrievalCountPerChain")
 5082 const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_COUNT_PER_CHAIN_DEFAULT = 3
 5083 #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_VALUE_NAME wstr("MaxAIAUrlRetrievalByteCount")
 5084 const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_BYTE_COUNT_DEFAULT = 100000
 5085 #define CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_VALUE_NAME wstr("MaxAIAUrlRetrievalCertCount")
 5086 const CERT_CHAIN_MAX_AIA_URL_RETRIEVAL_CERT_COUNT_DEFAULT = 10
 5087 #define CERT_CHAIN_OCSP_VALIDITY_SECONDS_VALUE_NAME wstr("OcspValiditySeconds")
 5088 const CERT_CHAIN_OCSP_VALIDITY_SECONDS_DEFAULT = (12 * 60) * 60
 5089 #define CERT_CHAIN_ENABLE_WEAK_SIGNATURE_FLAGS_VALUE_NAME wstr("EnableWeakSignatureFlags")
 5090 const CERT_CHAIN_ENABLE_MD2_MD4_FLAG = &h1
 5091 const CERT_CHAIN_ENABLE_WEAK_RSA_ROOT_FLAG = &h2
 5092 const CERT_CHAIN_ENABLE_WEAK_LOGGING_FLAG = &h4
 5093 const CERT_CHAIN_ENABLE_ONLY_WEAK_LOGGING_FLAG = &h8
 5094 #define CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_VALUE_NAME wstr("MinRsaPubKeyBitLength")
 5095 const CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_DEFAULT = 1023
 5096 const CERT_CHAIN_MIN_RSA_PUB_KEY_BIT_LENGTH_DISABLE = &hffffffff
 5097 #define CERT_CHAIN_WEAK_RSA_PUB_KEY_TIME_VALUE_NAME wstr("WeakRsaPubKeyTime")
 5098 const CERT_CHAIN_WEAK_RSA_PUB_KEY_TIME_DEFAULT = &h01ca8a755c6e0000ull
 5099 #define CERT_CHAIN_WEAK_SIGNATURE_LOG_DIR_VALUE_NAME wstr("WeakSignatureLogDir")
 5100 #define CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_VALUE_NAME wstr("SrvOcspRespMinValiditySeconds")
 5101 const CERT_SRV_OCSP_RESP_MIN_VALIDITY_SECONDS_DEFAULT = 10 * 60
 5102 #define CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME wstr("SrvOcspRespUrlRetrievalTimeoutMilliseconds")
 5103 const CERT_SRV_OCSP_RESP_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT = 15 * 1000
 5104 #define CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME wstr("SrvOcspRespMaxBeforeNextUpdateSeconds")
 5105 const CERT_SRV_OCSP_RESP_MAX_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT = (4 * 60) * 60
 5106 #define CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_VALUE_NAME wstr("SrvOcspRespMinBeforeNextUpdateSeconds")
 5107 const CERT_SRV_OCSP_RESP_MIN_BEFORE_NEXT_UPDATE_SECONDS_DEFAULT = 2 * 60
 5108 #define CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_VALUE_NAME wstr("SrvOcspRespMinAfterNextUpdateSeconds")
 5109 const CERT_SRV_OCSP_RESP_MIN_AFTER_NEXT_UPDATE_SECONDS_DEFAULT = 1 * 60
 5110 #define CRYPTNET_MAX_CACHED_OCSP_PER_CRL_COUNT_VALUE_NAME wstr("CryptnetMaxCachedOcspPerCrlCount")
 5111 const CRYPTNET_MAX_CACHED_OCSP_PER_CRL_COUNT_DEFAULT = 500
 5112 const CRYPTNET_OCSP_AFTER_CRL_DISABLE = &hffffffff
 5113 #define CRYPTNET_URL_CACHE_DEFAULT_FLUSH_EXEMPT_SECONDS_VALUE_NAME wstr("CryptnetDefaultFlushExemptSeconds")
 5114 const CRYPTNET_URL_CACHE_DEFAULT_FLUSH_EXEMPT_SECONDS_DEFAULT = ((28 * 24) * 60) * 60
 5115 #define CRYPTNET_PRE_FETCH_MIN_MAX_AGE_SECONDS_VALUE_NAME wstr("CryptnetPreFetchMinMaxAgeSeconds")
 5116 const CRYPTNET_PRE_FETCH_MIN_MAX_AGE_SECONDS_DEFAULT = (1 * 60) * 60
 5117 #define CRYPTNET_PRE_FETCH_MAX_MAX_AGE_SECONDS_VALUE_NAME wstr("CryptnetPreFetchMaxMaxAgeSeconds")
 5118 const CRYPTNET_PRE_FETCH_MAX_MAX_AGE_SECONDS_DEFAULT = ((14 * 24) * 60) * 60
 5119 #define CRYPTNET_PRE_FETCH_MIN_OCSP_VALIDITY_PERIOD_SECONDS_VALUE_NAME wstr("CryptnetPreFetchMinOcspValidityPeriodSeconds")
 5120 const CRYPTNET_PRE_FETCH_MIN_OCSP_VALIDITY_PERIOD_SECONDS_DEFAULT = ((14 * 24) * 60) * 60
 5121 #define CRYPTNET_PRE_FETCH_AFTER_PUBLISH_PRE_FETCH_DIVISOR_VALUE_NAME wstr("CryptnetPreFetchAfterPublishPreFetchDivisor")
 5122 const CRYPTNET_PRE_FETCH_AFTER_PUBLISH_PRE_FETCH_DIVISOR_DEFAULT = 10
 5123 #define CRYPTNET_PRE_FETCH_BEFORE_NEXT_UPDATE_PRE_FETCH_DIVISOR_VALUE_NAME wstr("CryptnetPreFetchBeforeNextUpdatePreFetchDivisor")
 5124 const CRYPTNET_PRE_FETCH_BEFORE_NEXT_UPDATE_PRE_FETCH_DIVISOR_DEFAULT = 20
 5125 #define CRYPTNET_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME wstr("CryptnetPreFetchMinBeforeNextUpdatePreFetchSeconds")
 5126 const CRYPTNET_PRE_FETCH_MIN_BEFORE_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT = (1 * 60) * 60
 5127 #define CRYPTNET_PRE_FETCH_VALIDITY_PERIOD_AFTER_NEXT_UPDATE_PRE_FETCH_DIVISOR_VALUE_NAME wstr("CryptnetPreFetchValidityPeriodAfterNextUpdatePreFetchDivisor")
 5128 const CRYPTNET_PRE_FETCH_VALIDITY_PERIOD_AFTER_NEXT_UPDATE_PRE_FETCH_DIVISOR_DEFAULT = 10
 5129 #define CRYPTNET_PRE_FETCH_MAX_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME wstr("CryptnetPreFetchMaxAfterNextUpdatePreFetchPeriodSeconds")
 5130 const CRYPTNET_PRE_FETCH_MAX_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT = (4 * 60) * 60
 5131 #define CRYPTNET_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME wstr("CryptnetPreFetchMinAfterNextUpdatePreFetchPeriodSeconds")
 5132 const CRYPTNET_PRE_FETCH_MIN_AFTER_NEXT_UPDATE_PRE_FETCH_PERIOD_SECONDS_DEFAULT = 30 * 60
 5133 #define CRYPTNET_PRE_FETCH_AFTER_CURRENT_TIME_PRE_FETCH_PERIOD_SECONDS_VALUE_NAME wstr("CryptnetPreFetchAfterCurrentTimePreFetchPeriodSeconds")
 5134 const CRYPTNET_PRE_FETCH_AFTER_CURRENT_TIME_PRE_FETCH_PERIOD_SECONDS_DEFAULT = 30 * 60
 5135 #define CRYPTNET_PRE_FETCH_TRIGGER_PERIOD_SECONDS_VALUE_NAME wstr("CryptnetPreFetchTriggerPeriodSeconds")
 5136 const CRYPTNET_PRE_FETCH_TRIGGER_PERIOD_SECONDS_DEFAULT = 10 * 60
 5137 const CRYPTNET_PRE_FETCH_TRIGGER_DISABLE = &hffffffff
 5138 #define CRYPTNET_PRE_FETCH_SCAN_AFTER_TRIGGER_DELAY_SECONDS_VALUE_NAME wstr("CryptnetPreFetchScanAfterTriggerDelaySeconds")
 5139 const CRYPTNET_PRE_FETCH_SCAN_AFTER_TRIGGER_DELAY_SECONDS_DEFAULT = 30
 5140 #define CRYPTNET_PRE_FETCH_RETRIEVAL_TIMEOUT_SECONDS_VALUE_NAME wstr("CryptnetPreFetchRetrievalTimeoutSeconds")
 5141 const CRYPTNET_PRE_FETCH_RETRIEVAL_TIMEOUT_SECONDS_DEFAULT = 5 * 60
 5142 #define CERT_GROUP_POLICY_CHAIN_CONFIG_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH wstr(!"\\ChainEngine\\Config")
 5143 #define CERT_CHAIN_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME wstr("ChainUrlRetrievalTimeoutMilliseconds")
 5144 const CERT_CHAIN_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT = 15 * 1000
 5145 #define CERT_CHAIN_REV_ACCUMULATIVE_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_VALUE_NAME wstr("ChainRevAccumulativeUrlRetrievalTimeoutMilliseconds")
 5146 const CERT_CHAIN_REV_ACCUMULATIVE_URL_RETRIEVAL_TIMEOUT_MILLISECONDS_DEFAULT = 20 * 1000
 5147 #define CERT_RETR_BEHAVIOR_INET_AUTH_VALUE_NAME wstr("EnableInetUnknownAuth")
 5148 #define CERT_RETR_BEHAVIOR_INET_STATUS_VALUE_NAME wstr("EnableInetLocal")
 5149 #define CERT_RETR_BEHAVIOR_FILE_VALUE_NAME wstr("AllowFileUrlScheme")
 5150 #define CERT_RETR_BEHAVIOR_LDAP_VALUE_NAME wstr("DisableLDAPSignAndEncrypt")
 5151 #define CRYPTNET_CACHED_OCSP_SWITCH_TO_CRL_COUNT_VALUE_NAME wstr("CryptnetCachedOcspSwitchToCrlCount")
 5152 const CRYPTNET_CACHED_OCSP_SWITCH_TO_CRL_COUNT_DEFAULT = 50
 5153 const CRYPTNET_CRL_BEFORE_OCSP_ENABLE = &hffffffff
 5154 #define CERT_CHAIN_DISABLE_AIA_URL_RETRIEVAL_VALUE_NAME wstr("DisableAIAUrlRetrieval")
 5155 #define CERT_CHAIN_OPTIONS_VALUE_NAME wstr("Options")
 5156 const CERT_CHAIN_OPTION_DISABLE_AIA_URL_RETRIEVAL = &h2
 5157 const CERT_CHAIN_OPTION_ENABLE_SIA_URL_RETRIEVAL = &h4
 5158 #define CERT_CHAIN_CROSS_CERT_DOWNLOAD_INTERVAL_HOURS_VALUE_NAME wstr("CrossCertDownloadIntervalHours")
 5159 const CERT_CHAIN_CROSS_CERT_DOWNLOAD_INTERVAL_HOURS_DEFAULT = 24 * 7
 5160 #define CERT_CHAIN_CRL_VALIDITY_EXT_PERIOD_HOURS_VALUE_NAME wstr("CRLValidityExtensionPeriod")
 5161 const CERT_CHAIN_CRL_VALIDITY_EXT_PERIOD_HOURS_DEFAULT = 12
 5162 #define HCCE_CURRENT_USER cast(HCERTCHAINENGINE, NULL)
 5163 #define HCCE_LOCAL_MACHINE cast(HCERTCHAINENGINE, &h1)
 5164 const CERT_CHAIN_CACHE_END_CERT = &h1
 5165 const CERT_CHAIN_THREAD_STORE_SYNC = &h2
 5166 const CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL = &h4
 5167 const CERT_CHAIN_USE_LOCAL_MACHINE_STORE = &h8
 5168 const CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE = &h10
 5169 const CERT_CHAIN_ENABLE_SHARE_STORE = &h20
 5170 type HCERTCHAINENGINE as HANDLE
 5171 
 5172 type _CERT_CHAIN_ENGINE_CONFIG
 5173     cbSize as DWORD
 5174     hRestrictedRoot as HCERTSTORE
 5175     hRestrictedTrust as HCERTSTORE
 5176     hRestrictedOther as HCERTSTORE
 5177     cAdditionalStore as DWORD
 5178     rghAdditionalStore as HCERTSTORE ptr
 5179     dwFlags as DWORD
 5180     dwUrlRetrievalTimeout as DWORD
 5181     MaximumCachedCertificates as DWORD
 5182     CycleDetectionModulus as DWORD
 5183 
 5184     #if _WIN32_WINNT >= &h0601
 5185         hExclusiveRoot as HCERTSTORE
 5186         hExclusiveTrustedPeople as HCERTSTORE
 5187     #endif
 5188 
 5189     #if _WIN32_WINNT = &h0602
 5190         dwExclusiveFlags as DWORD
 5191     #endif
 5192 end type
 5193 
 5194 type CERT_CHAIN_ENGINE_CONFIG as _CERT_CHAIN_ENGINE_CONFIG
 5195 type PCERT_CHAIN_ENGINE_CONFIG as _CERT_CHAIN_ENGINE_CONFIG ptr
 5196 
 5197 #if _WIN32_WINNT = &h0602
 5198     const CERT_CHAIN_EXCLUSIVE_ENABLE_CA_FLAG = &h1
 5199 #endif
 5200 
 5201 declare function CertCreateCertificateChainEngine(byval pConfig as PCERT_CHAIN_ENGINE_CONFIG, byval phChainEngine as HCERTCHAINENGINE ptr) as WINBOOL
 5202 declare sub CertFreeCertificateChainEngine(byval hChainEngine as HCERTCHAINENGINE)
 5203 declare function CertResyncCertificateChainEngine(byval hChainEngine as HCERTCHAINENGINE) as WINBOOL
 5204 
 5205 type _CERT_TRUST_STATUS
 5206     dwErrorStatus as DWORD
 5207 <