1 /* { dg-do compile } */
2 /* { dg-options "-fpermissive -O -w -fdump-tree-dse1-vops" } */
4 __extension__
typedef __SIZE_TYPE__
size_t;
5 typedef struct _IO_FILE
FILE;
15 typedef int (*__gconv_trans_fct
) (struct __gconv_step
*,
17 typedef int (*__gconv_trans_context_fct
) (void *, __const
unsigned char *,
19 struct __gconv_trans_data
22 struct __gconv_step_data
25 typedef struct __gconv_info
34 typedef __builtin_va_list __gnuc_va_list
;
41 vprintf (__const
char *__restrict __fmt
, __gnuc_va_list __arg
)
47 fputc_unlocked (int __c
, FILE *__stream
)
50 putc_unlocked (int __c
, FILE *__stream
)
53 __attribute__ ((__nothrow__
)) ferror_unlocked (FILE *__stream
)
56 extern int __sprintf_chk (char *__restrict __s
, int __flag
, size_t __slen
,
61 extern char *__fgets_chk (char *__restrict __s
, size_t __size
, int __n
,
62 FILE *__restrict __stream
) __attribute__ ((__warn_unused_result__
));
63 fgets (char *__restrict __s
, int __n
, FILE *__restrict __stream
)
67 typedef int BOOL
, *PBOOL
, *LPBOOL
;
68 typedef unsigned char BYTE
, *PBYTE
, *LPBYTE
;
69 typedef unsigned short WORD
, *PWORD
, *LPWORD
;
70 typedef unsigned int DWORD
, *PDWORD
, *LPDWORD
;
76 _ISupper
= ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)),
78 extern char *__strtok_r (char *__restrict __s
,
79 __const
char *__restrict __delim
,
80 char **__restrict __save_ptr
)
81 __attribute__ ((__nothrow__
)) __attribute__ ((__nonnull__ (2, 3)));
82 __strcspn_c3 (__const
char *__s
, int __reject1
, int __reject2
,
86 extern __inline
size_t __strspn_c3 (__const
char *__s
, int __accept1
,
87 int __accept2
, int __accept3
);
88 extern __inline
size_t
89 __strspn_c3 (__const
char *__s
, int __accept1
, int __accept2
, int __accept3
)
92 extern __inline
char *__strpbrk_c2 (__const
char *__s
, int __accept1
,
94 extern __inline
char *
95 __strpbrk_c2 (__const
char *__s
, int __accept1
, int __accept2
)
98 extern __inline
char *__strpbrk_c3 (__const
char *__s
, int __accept1
,
102 __strtok_r_1c (char *__s
, char __sep
, char **__nextp
)
109 __strsep_1c (char **__s
, char __reject
)
112 __strsep_2c (char **__s
, char __reject1
, char __reject2
)
119 extern __inline
char *__strsep_3c (char **__s
, char __reject1
, char __reject2
,
121 extern __inline
char *
122 __strsep_3c (char **__s
, char __reject1
, char __reject2
, char __reject3
)
131 __attribute__ ((__nothrow__
)) __memcpy_ichk (void *__restrict __dest
, __const
void *__restrict __src
, size_t __len
)
134 __attribute__ ((__nothrow__
)) __memmove_ichk (void *__dest
, __const
void *__src
, size_t __len
)
137 __attribute__ ((__nothrow__
)) __strncpy_ichk (char *__restrict __dest
, __const
char *__restrict __src
, size_t __len
)
140 __attribute__ ((__nothrow__
)) stpncpy (char *__dest
, __const
char *__src
, size_t __n
)
142 if (__builtin_object_size (__dest
, 2 > 1) != (size_t) -1
143 && (!__builtin_constant_p (__n
) || __n
<= __builtin_object_size (__dest
, 2 > 1)))
144 return __stpncpy_chk (__dest
, __src
, __n
, __builtin_object_size (__dest
, 2 > 1));
146 __attribute__ ((__nothrow__
)) __strncat_ichk (char *__restrict __dest
, __const
char *__restrict __src
, size_t __len
)
150 typedef char CHAR
, *PCHAR
;
151 typedef int LONG
, *PLONG
;
152 typedef unsigned short WCHAR
, *PWCHAR
;
153 typedef CHAR
*PSTR
, *LPSTR
, *NPSTR
;
154 typedef const CHAR
*PCSTR
, *LPCSTR
;
155 typedef WCHAR
*PWSTR
, *LPWSTR
, *NWPSTR
;
156 typedef LONG HRESULT
;
157 typedef struct _MEMORY_BASIC_INFORMATION
159 } SINGLE_LIST_ENTRY
, *PSINGLE_LIST_ENTRY
;
160 typedef enum _HEAP_INFORMATION_CLASS
{
161 HeapCompatibilityInformation
,
162 } HEAP_INFORMATION_CLASS
;
163 typedef struct _FLOATING_SAVE_AREA
166 typedef struct _LDT_ENTRY
{
171 } LDT_ENTRY
, *PLDT_ENTRY
;
172 typedef struct _EXCEPTION_RECORD
174 } EXCEPTION_RECORD
, *PEXCEPTION_RECORD
;
175 typedef struct _EXCEPTION_POINTERS
177 } EXCEPTION_POINTERS
, *PEXCEPTION_POINTERS
;
178 typedef struct _NT_TIB
183 extern inline struct _TEB
* __attribute__((__stdcall__
)) NtCurrentTeb(void)
185 } IMAGE_SECTION_HEADER
, *PIMAGE_SECTION_HEADER
;
186 typedef struct _IMAGE_SYMBOL
{
192 typedef struct _IMAGE_EXPORT_DIRECTORY
{
195 } IMAGE_BOUND_FORWARDER_REF
, *PIMAGE_BOUND_FORWARDER_REF
;
196 typedef struct _IMAGE_BASE_RELOCATION
198 } IMAGE_BASE_RELOCATION
,*PIMAGE_BASE_RELOCATION
;
199 typedef struct _IMAGE_RELOCATION
203 } IMAGE_RELOCATION
, *PIMAGE_RELOCATION
;
204 typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER
206 } IMAGE_RESOURCE_DIRECTORY
,*PIMAGE_RESOURCE_DIRECTORY
;
207 typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY
{
214 } IMAGE_DEBUG_DIRECTORY
, *PIMAGE_DEBUG_DIRECTORY
;
215 typedef enum ReplacesCorHdrNumericDefines
217 MAX_PACKAGE_NAME
= 1024,
218 } ReplacesCorHdrNumericDefines
;
219 typedef struct IMAGE_COR20_HEADER
221 } MESSAGE_RESOURCE_DATA
,*PMESSAGE_RESOURCE_DATA
;
222 typedef PVOID PSECURITY_DESCRIPTOR
;
223 typedef enum _TOKEN_INFORMATION_CLASS
{
225 } TOKEN_INFORMATION_CLASS
;
226 typedef struct _GENERIC_MAPPING
{
228 typedef struct _ACL_SIZE_INFORMATION
230 } ACL_SIZE_INFORMATION
, *PACL_SIZE_INFORMATION
;
231 typedef WORD SECURITY_DESCRIPTOR_CONTROL
, *PSECURITY_DESCRIPTOR_CONTROL
;
233 } SID_AND_ATTRIBUTES
;
235 WinBuiltinTerminalServerLicenseServersSid
= 60
236 } WELL_KNOWN_SID_TYPE
;
237 typedef struct _TOKEN_USER
{
238 } TOKEN_GROUPS
, *PTOKEN_GROUPS
;
239 typedef union _LARGE_INTEGER
{
242 } LARGE_INTEGER
, *PLARGE_INTEGER
;
243 typedef union _ULARGE_INTEGER
{
247 typedef struct _LUID_AND_ATTRIBUTES
{
248 } LUID_AND_ATTRIBUTES
, *PLUID_AND_ATTRIBUTES
;
249 typedef enum tagTOKEN_TYPE
{
251 } SECURITY_IMPERSONATION_LEVEL
, *PSECURITY_IMPERSONATION_LEVEL
;
252 typedef struct _SECURITY_QUALITY_OF_SERVICE
{
253 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
254 typedef enum _LATENCY_TIME
{
255 VerifyProcessorPowerPolicyDc
,
256 } POWER_INFORMATION_LEVEL
;
257 typedef struct _ADMINISTRATOR_POWER_POLICY
{
258 } RTL_CRITICAL_SECTION_DEBUG
, *PRTL_CRITICAL_SECTION_DEBUG
, RTL_RESOURCE_DEBUG
, *PRTL_RESOURCE_DEBUG
;
259 typedef struct _RTL_CRITICAL_SECTION
{
260 } RTL_CRITICAL_SECTION
, *PRTL_CRITICAL_SECTION
;
261 typedef struct _IO_COUNTERS
{
262 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
264 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
266 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
268 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
269 typedef struct tagSIZE
271 } POINT
, *PPOINT
, *LPPOINT
;
272 typedef struct _POINTL
274 } FILETIME
, *PFILETIME
, *LPFILETIME
;
275 typedef struct tagRECT
278 extern double strtod (__const
char *__restrict __nptr
,
279 char **__restrict __endptr
)
280 __attribute__ ((__nothrow__
)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__
));
281 extern long int strtol (__const
char *__restrict __nptr
,
282 char **__restrict __endptr
, int __base
)
283 __attribute__ ((__nothrow__
)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__
));
284 extern long int __strtol_internal (__const
char *__restrict __nptr
,
285 int __base
, int __group
)
286 __attribute__ ((__nothrow__
)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__
));
287 extern unsigned long int __strtoul_internal (__const
char *__restrict __nptr
,
288 int __base
, int __group
)
289 __attribute__ ((__nothrow__
)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__
));
290 extern __inline
double
291 __attribute__ ((__nothrow__
)) strtod (__const
char *__restrict __nptr
, char **__restrict __endptr
)
294 extern __inline
long int
295 __attribute__ ((__nothrow__
)) strtol (__const
char *__restrict __nptr
, char **__restrict __endptr
, int __base
)
298 __attribute__ ((__nothrow__
)) strtoll (__const
char *__restrict __nptr
, char **__restrict __endptr
, int __base
)
301 __attribute__ ((__nothrow__
)) atoi (__const
char *__nptr
)
304 typedef int int32_t __attribute__ ((__mode__ (__SI__
)));
308 extern int random_r (struct random_data
*__restrict __buf
,
309 int32_t *__restrict __result
) __attribute__ ((__nothrow__
)) __attribute__ ((__nonnull__ (1, 2)));
313 extern int drand48_r (struct drand48_data
*__restrict __buffer
,
314 long int *__restrict __result
)
315 __attribute__ ((__nothrow__
)) __attribute__ ((__nonnull__ (1, 2)));
316 extern int mrand48_r (struct drand48_data
*__restrict __buffer
,
317 long int *__restrict __result
)
318 __attribute__ ((__nothrow__
)) __attribute__ ((__nonnull__ (1, 2)));
319 extern int jrand48_r (unsigned short int __xsubi
[3],
320 long int *__restrict __result
)
321 __attribute__ ((__nothrow__
)) __attribute__ ((__nonnull__ (2)));
322 extern int seed48_r (unsigned short int __seed16v
[3],
323 struct drand48_data
*__buffer
) __attribute__ ((__nothrow__
)) __attribute__ ((__nonnull__ (1, 2)));
324 extern char *qfcvt (long double __value
, int __ndigit
,
325 size_t __resolvedlen
) __attribute__ ((__nothrow__
)) __attribute__ ((__warn_unused_result__
));
326 __attribute__ ((__nothrow__
)) realpath (__const
char *__restrict __name
, char *__restrict __resolved
)
329 __attribute__ ((__nothrow__
)) ptsname_r (int __fd
, char *__buf
, size_t __buflen
)
332 typedef struct _EXCEPTION_DEBUG_INFO
{
333 } EXCEPTION_DEBUG_INFO
;
334 typedef struct _CREATE_THREAD_DEBUG_INFO
{
335 } CREATE_THREAD_DEBUG_INFO
;
336 typedef struct _CREATE_PROCESS_DEBUG_INFO
{
337 } CREATE_PROCESS_DEBUG_INFO
;
338 typedef struct _EXIT_THREAD_DEBUG_INFO
{
339 } LOAD_DLL_DEBUG_INFO
;
340 typedef struct _UNLOAD_DLL_DEBUG_INFO
{
342 typedef struct _DEBUG_EVENT
{
345 } DEBUG_EVENT
, *LPDEBUG_EVENT
;
346 typedef struct _OFSTRUCT
348 } WIN32_FIND_DATAA
, *PWIN32_FIND_DATAA
, *LPWIN32_FIND_DATAA
;
349 typedef struct _WIN32_FIND_DATAW
351 } WIN32_FIND_DATAW
, *PWIN32_FIND_DATAW
, *LPWIN32_FIND_DATAW
;
352 typedef enum _FINDEX_SEARCH_OPS
354 FindExSearchNameMatch
,
356 typedef struct _PROCESS_HEAP_ENTRY
364 } PROCESS_HEAP_ENTRY
, *PPROCESS_HEAP_ENTRY
, *LPPROCESS_HEAP_ENTRY
;
365 typedef struct tagMEMORYSTATUS
367 } MEMORYSTATUSEX
, *LPMEMORYSTATUSEX
;
368 typedef struct _SYSTEMTIME
{
370 } SYSTEMTIME
, *PSYSTEMTIME
, *LPSYSTEMTIME
;
371 typedef struct _OVERLAPPED
{
376 } PROCESS_INFORMATION
, *PPROCESS_INFORMATION
, *LPPROCESS_INFORMATION
;
377 typedef struct _TIME_ZONE_INFORMATION
{
378 } TIME_ZONE_INFORMATION
, *PTIME_ZONE_INFORMATION
, *LPTIME_ZONE_INFORMATION
;
379 typedef struct _BY_HANDLE_FILE_INFORMATION
381 } ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA
, *PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA
;
382 typedef struct tagACTCTX_SECTION_KEYED_DATA
{
383 } COMMTIMEOUTS
,*LPCOMMTIMEOUTS
;
384 typedef enum _COMPUTER_NAME_FORMAT
387 } COMPUTER_NAME_FORMAT
;
388 typedef struct tagHW_PROFILE_INFOA
{
389 } HW_PROFILE_INFOA
, *LPHW_PROFILE_INFOA
;
390 typedef struct tagHW_PROFILE_INFOW
{
391 } HW_PROFILE_INFOW
, *LPHW_PROFILE_INFOW
;
392 BOOL
__attribute__((__stdcall__
)) SetSecurityDescriptorControl(PSECURITY_DESCRIPTOR
,SECURITY_DESCRIPTOR_CONTROL
,
393 SECURITY_DESCRIPTOR_CONTROL
);
394 typedef struct tagSYSLEVEL
397 static inline PVOID
__attribute__((__stdcall__
)) InterlockedCompareExchangePointer( PVOID
volatile *dest
, PVOID xchg
, PVOID compare
)
400 static inline PVOID
__attribute__((__stdcall__
)) InterlockedExchangePointer( PVOID
volatile *dest
, PVOID val
)
403 typedef unsigned long HCRYPTPROV
;
404 typedef unsigned long HCRYPTKEY
;
405 typedef void *HCERTSTOREPROV
;
406 typedef struct _PROV_ENUMALGS
{
408 typedef struct _HMAC_INFO
{
409 } HMAC_INFO
, *PHMAC_INFO
;
410 typedef struct _CRYPTOAPI_BLOB
{
413 } CRYPT_INTEGER_BLOB
, *PCRYPT_INTEGER_BLOB
,
414 CRYPT_OBJID_BLOB
, *PCRYPT_OBJID_BLOB
,
415 CERT_NAME_BLOB
, *PCERT_NAME_BLOB
,
416 CERT_RDN_VALUE_BLOB
, *PCERT_RDN_VALUE_BLOB
,
417 CRYPT_DER_BLOB
, *PCRYPT_DER_BLOB
,
418 CRYPT_ATTR_BLOB
, *PCRYPT_ATTR_BLOB
;
419 typedef struct _CRYPTPROTECT_PROMPTSTRUCT
{
420 } CRYPTPROTECT_PROMPTSTRUCT
, *PCRYPTPROTECT_PROMPTSTRUCT
;
421 typedef struct _CRYPT_ALGORITHM_IDENTIFIER
{
423 CRYPT_OBJID_BLOB Parameters
;
424 } CRYPT_ALGORITHM_IDENTIFIER
, *PCRYPT_ALGORITHM_IDENTIFIER
;
425 typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE
{
426 } CRYPT_ATTRIBUTE_TYPE_VALUE
, *PCRYPT_ATTRIBUTE_TYPE_VALUE
;
427 typedef struct _PUBLICKEYSTRUC
{
428 } BLOBHEADER
, PUBLICKEYSTRUC
;
429 typedef struct _RSAPUBKEY
{
433 typedef struct _CRYPT_BIT_BLOB
{
437 } CRYPT_BIT_BLOB
, *PCRYPT_BIT_BLOB
;
438 typedef struct _CRYPT_KEY_PROV_PARAM
{
439 } CRYPT_KEY_PROV_PARAM
, *PCRYPT_KEY_PROV_PARAM
;
440 typedef struct _CRYPT_KEY_PROV_INFO
{
441 CRYPT_ALGORITHM_IDENTIFIER Algorithm
;
442 CRYPT_BIT_BLOB PublicKey
;
443 } CERT_PUBLIC_KEY_INFO
, *PCERT_PUBLIC_KEY_INFO
;
444 typedef struct _CERT_EXTENSION
{
446 CRYPT_OBJID_BLOB Value
;
447 } CERT_EXTENSION
, *PCERT_EXTENSION
;
448 typedef struct _CERT_EXTENSIONS
{
450 PCERT_EXTENSION rgExtension
;
451 } CERT_EXTENSIONS
, *PCERT_EXTENSIONS
;
452 typedef struct _CERT_INFO
{
453 CRYPT_INTEGER_BLOB SerialNumber
;
454 CERT_NAME_BLOB Subject
;
455 CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo
;
456 } CERT_INFO
, *PCERT_INFO
;
457 typedef struct _CERT_RDN_ATTR
{
459 CERT_RDN_VALUE_BLOB Value
;
460 } CERT_RDN_ATTR
, *PCERT_RDN_ATTR
;
461 typedef struct _CERT_RDN
{
462 } CERT_RDN
, *PCERT_RDN
;
463 typedef struct _CERT_NAME_INFO
{
465 } CERT_NAME_INFO
, *PCERT_NAME_INFO
;
466 typedef struct _CERT_NAME_VALUE
{
468 CERT_RDN_VALUE_BLOB Value
;
469 } CERT_NAME_VALUE
, *PCERT_NAME_VALUE
;
470 typedef struct _CERT_ENCRYPTED_PRIVATE_KEY_INFO
{
471 CERT_NAME_BLOB CertIssuer
;
472 } CERT_AUTHORITY_KEY_ID_INFO
, *PCERT_AUTHORITY_KEY_ID_INFO
;
473 typedef struct _CERT_PRIVATE_KEY_VALIDITY
{
474 } CERT_OTHER_NAME
, *PCERT_OTHER_NAME
;
475 typedef struct _CERT_ALT_NAME_ENTRY
{
476 DWORD dwAltNameChoice
;
480 } CERT_ALT_NAME_ENTRY
, *PCERT_ALT_NAME_ENTRY
;
481 typedef struct _CERT_ALT_NAME_INFO
{
483 PCERT_ALT_NAME_ENTRY rgAltEntry
;
484 } CERT_ALT_NAME_INFO
, *PCERT_ALT_NAME_INFO
;
485 typedef struct _CERT_BASIC_CONSTRAINTS_INFO
{
486 CERT_NAME_BLOB
*rgSubtreesConstraint
;
487 } CERT_BASIC_CONSTRAINTS_INFO
, *PCERT_BASIC_CONSTRAINTS_INFO
;
488 typedef struct _CERT_BASIC_CONSTRAINTS2_INFO
{
489 } CERT_BASIC_CONSTRAINTS2_INFO
, *PCERT_BASIC_CONSTRAINTS2_INFO
;
490 typedef struct _CERT_POLICY_QUALIFIER_INFO
{
491 } CERT_POLICY_QUALIFIER_INFO
, *PCERT_POLICY_QUALIFIER_INFO
;
492 typedef struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE
{
493 } CERT_POLICY_QUALIFIER_NOTICE_REFERENCE
,
494 *PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE
;
495 typedef struct _CERT_POLICY_QUALIFIER_USER_NOTICE
{
497 PCRYPT_DER_BLOB rgValue
;
498 } CRYPT_SEQUENCE_OF_ANY
, *PCRYPT_SEQUENCE_OF_ANY
;
499 typedef struct _CERT_AUTHORITY_KEY_ID2_INFO
{
500 PCERT_INFO pCertInfo
;
501 } CERT_CONTEXT
, *PCERT_CONTEXT
;
502 typedef const CERT_CONTEXT
*PCCERT_CONTEXT
;
503 typedef struct _CRL_ENTRY
{
504 } CRL_ENTRY
, *PCRL_ENTRY
;
505 typedef struct _CRL_INFO
{
508 } CRL_INFO
, *PCRL_INFO
;
509 typedef struct _CRL_DIST_POINT_NAME
{
510 DWORD dwDistPointNameChoice
;
513 } CRL_DIST_POINT_NAME
, *PCRL_DIST_POINT_NAME
;
514 typedef struct _CRL_DIST_POINT
{
515 CRL_DIST_POINT_NAME DistPointName
;
516 CRYPT_BIT_BLOB ReasonFlags
;
517 CERT_ALT_NAME_INFO CRLIssuer
;
518 } CRL_DIST_POINT
, *PCRL_DIST_POINT
;
519 typedef struct _CRL_DIST_POINTS_INFO
{
521 PCRL_DIST_POINT rgDistPoint
;
522 } CRL_DIST_POINTS_INFO
, *PCRL_DIST_POINTS_INFO
;
523 typedef struct _CRL_ISSUING_DIST_POINT
{
524 BOOL fOnlyContainsUserCerts
;
525 } CRL_ISSUING_DIST_POINT
, *PCRL_ISSUING_DIST_POINT
;
526 typedef struct _CERT_GENERAL_SUBTREE
{
527 } CRYPT_ATTRIBUTE
, *PCRYPT_ATTRIBUTE
;
528 typedef struct _CRYPT_ATTRIBUTES
{
529 } CRYPT_ATTRIBUTES
, *PCRYPT_ATTRIBUTES
;
530 typedef struct _CERT_REQUEST_INFO
{
532 CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm
;
533 CRYPT_BIT_BLOB Signature
;
534 } CERT_SIGNED_CONTENT_INFO
, *PCERT_SIGNED_CONTENT_INFO
;
535 typedef struct _CRL_CONTEXT
{
536 } CRL_CONTEXT
, *PCRL_CONTEXT
;
537 typedef struct _VTableProvStruc
{
538 } CTL_CONTEXT
, *PCTL_CONTEXT
;
539 typedef struct _CRYPT_TIME_STAMP_REQUEST_INFO
{
540 } CERT_REVOCATION_STATUS
, *PCERT_REVOCATION_STATUS
;
541 typedef struct _CERT_TRUST_STATUS
{
542 } CERT_SYSTEM_STORE_RELOCATE_PARA
, *PCERT_SYSTEM_STORE_RELOCATE_PARA
;
543 typedef BOOL (__attribute__((__stdcall__
)) *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION
)(
545 typedef struct _CRYPT_ENCODE_PARA
{
546 } CERT_STORE_PROV_INFO
, *PCERT_STORE_PROV_INFO
;
547 typedef BOOL (__attribute__((__stdcall__
)) *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC
)(
548 DWORD dwFlags
, DWORD dwCtrlType
, void const *pvCtrlPara
);
549 typedef struct _CERT_STORE_PROV_FIND_INFO
{
550 } CERT_STORE_PROV_FIND_INFO
, *PCERT_STORE_PROV_FIND_INFO
;
551 typedef BOOL (__attribute__((__stdcall__
)) *PFN_CERT_STORE_PROV_FIND_CERT
)(HCERTSTOREPROV hStoreProv
,
552 DWORD dwFlags
, void **ppvStoreProvFindInfo
, PCCERT_CONTEXT
*ppProvCertContext
);
553 typedef BOOL (__attribute__((__stdcall__
)) *PFN_CERT_STORE_PROV_FREE_FIND_CERT
)(
554 DWORD dwFlags
, void *pvData
, DWORD
*pcbData
);
555 typedef BOOL (__attribute__((__stdcall__
)) *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY
)(
556 DWORD dwFlags
, void *pvData
);
557 typedef struct _CERT_CREATE_CONTEXT_PARA
{
558 } CRYPT_OID_FUNC_ENTRY
, *PCRYPT_OID_FUNC_ENTRY
;
559 typedef BOOL (__attribute__((__stdcall__
)) *PFN_CRYPT_ENUM_OID_FUNC
)(DWORD dwEncodingType
,
560 const DWORD rgcbValueData
[], void *pvArg
);
561 typedef struct _CRYPT_OID_INFO
{
564 } CRYPT_OID_INFO
, *PCRYPT_OID_INFO
;
565 typedef const CRYPT_OID_INFO CCRYPT_OID_INFO
, *PCCRYPT_OID_INFO
;
566 typedef BOOL (__attribute__((__stdcall__
)) *PFN_CRYPT_ENUM_OID_INFO
)(PCCRYPT_OID_INFO pInfo
,
568 typedef struct _CRYPT_SIGN_MESSAGE_PARA
{
569 } CRYPT_HASH_MESSAGE_PARA
, *PCRYPT_HASH_MESSAGE_PARA
;
570 typedef struct _CRYPT_KEY_SIGN_MESSAGE_PARA
{
571 } CRYPT_URL_INFO
, *PCRYPT_URL_INFO
;
572 typedef void (__attribute__((__stdcall__
)) *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC
)(LPSTR pszParamOid
,
574 typedef struct _CRYPT_CREDENTIALS
{
575 } CRYPT_CREDENTIALS
, *PCRYPT_CREDENTIALS
;
576 typedef struct _CRYPT_PASSWORD_CREDENTIALSA
{
577 } CRYPT_PASSWORD_CREDENTIALSW
, *PCRYPT_PASSWORD_CREDENTIALSW
;
578 typedef struct _CRYPT_RETRIEVE_AUX_INFO
{
579 } CRYPT_RETRIEVE_AUX_INFO
, *PCRYPT_RETRIEVE_AUX_INFO
;
580 typedef struct _CERT_CHAIN_ENGINE_CONFIG
582 } CERT_CHAIN_ENGINE_CONFIG
, *PCERT_CHAIN_ENGINE_CONFIG
;
583 BOOL
__attribute__((__stdcall__
)) CryptExportPublicKeyInfoEx(HCRYPTPROV hCryptProv
, DWORD dwKeySpec
,
584 DWORD dwCertEncodingType
, LPSTR pszPublicKeyObjId
, DWORD dwFlags
,
585 void *pvAuxInfo
, PCERT_PUBLIC_KEY_INFO pInfo
, DWORD
*pcbInfo
);
586 BOOL
__attribute__((__stdcall__
)) CryptImportPublicKeyInfo(HCRYPTPROV hCryptProv
,
587 PCRYPT_RETRIEVE_AUX_INFO pAuxInfo
);
593 static const struct encodedInt ints
[] = {
600 static const struct encodedBigInt bigInts
[] = {
602 static const struct encodedBigInt bigUInts
[] = {
604 static void test_encodeInt(DWORD dwEncoding
)
609 CRYPT_INTEGER_BLOB blob
;
610 BYTE
*buf
= ((void *)0);
611 ret
= CryptEncodeObjectEx(0, ((LPCSTR
)27), &ints
[0].val
, 0, ((void *)0), ((void *)0),
612 "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
614 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)27), &ints
[i
].val
,
615 0x08000, ((void *)0), &buf
, &bufSize
);
617 (winetest_set_location("encode.c", 119), 0) ? 0 : winetest_ok(buf
[0] == 2, "Got unexpected type %d for integer (expected 2)\n",
618 buf
[1], ints
[i
].encoded
[1]);
620 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)28), &blob
,
621 0, ((void *)0), ((void *)0), &bufSize
);
624 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)38), &blob
,
625 0x08000, ((void *)0), &buf
, &bufSize
);
627 (winetest_set_location("encode.c", 187), 0) ? 0 : winetest_ok(buf
[1] == bigUInts
[i
].encoded
[1], "Got length %d, expected %d\n",
628 buf
[1], bigUInts
[i
].encoded
[1]);
629 (winetest_set_location("encode.c", 189), 0) ? 0 : winetest_ok(!memcmp(buf
+ 1, bigUInts
[i
].encoded
+ 1,
630 bigUInts
[i
].encoded
[1] + 1),
631 "Encoded value didn't match expected\n");
635 static void test_decodeInt(DWORD dwEncoding
)
637 static const BYTE longForm
[] = { 2, 0x81, 0x01, 0x01 };
638 BYTE
*buf
= ((void *)0);
642 ret
= CryptDecodeObjectEx(3, ((LPCSTR
)27), (BYTE
*)&ints
[0].encoded
,
643 ints
[0].encoded
[1] + 2, 0, ((void *)0), ((void *)0), &bufSize
);
644 (winetest_set_location("encode.c", 225), 0) ? 0 : winetest_ok(!ret
&& GetLastError() == ((HRESULT
)0x80093104L
),
645 "Expected CRYPT_E_ASN1_BADTAG, got %d\n", GetLastError());
648 (winetest_set_location("encode.c", 249), 0) ? 0 : winetest_ok(!memcmp(buf
, &ints
[i
].val
, bufSize
), "Expected %d, got %d\n",
649 ints
[i
].val
, *(int *)buf
);
653 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)28),
656 CRYPT_INTEGER_BLOB
*blob
= (CRYPT_INTEGER_BLOB
*)buf
;
657 (winetest_set_location("encode.c", 296), 0) ? 0 : winetest_ok(blob
->cbData
== strlen((const char*)bigUInts
[i
].val
),
658 "Unexpected value\n");
661 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)28), longForm
,
662 sizeof(longForm
), 0x08000, ((void *)0), (BYTE
*)&buf
, &bufSize
);
666 static const struct encodedInt enums
[] = {
668 static const LPCSTR enumeratedTypes
[] = { ((LPCSTR
)29),
670 static void test_encodeEnumerated(DWORD dwEncoding
)
677 ret
= CryptEncodeObjectEx(dwEncoding
, enumeratedTypes
[i
],
684 static void test_decodeEnumerated(DWORD dwEncoding
)
690 DWORD bufSize
= sizeof(int);
692 ret
= CryptDecodeObjectEx(dwEncoding
, enumeratedTypes
[i
],
693 (BYTE
*)&val
, &bufSize
);
694 (winetest_set_location("encode.c", 403), 0) ? 0 : winetest_ok(val
== enums
[j
].val
, "Unexpected value %d, expected %d\n",
699 struct encodedFiletime
702 const BYTE
*encodedTime
;
704 static void testTimeEncoding(DWORD dwEncoding
, LPCSTR structType
,
705 const struct encodedFiletime
*time
)
708 static void testTimeDecoding(DWORD dwEncoding
, LPCSTR structType
,
709 const struct encodedFiletime
*time
)
712 if (structType
== ((LPCSTR
)30) ||
713 (time
->sysTime
.wYear
>= 1950 && time
->sysTime
.wYear
<= 2050))
716 (winetest_set_location("encode.c", 476), 0) ? 0 : winetest_ok(!ret
&& GetLastError() == ((HRESULT
)0x8009310BL
),
717 "Expected CRYPT_E_ASN1_BADTAG, got 0x%08x\n", GetLastError());
719 static const BYTE bin22
[] = {
720 0x18,0x0f,'2','1','4','5','0','6','0','6','1','6','1','0','0','0','Z'};
721 static const struct encodedFiletime times
[] = {
723 static void test_encodeFiletime(DWORD dwEncoding
)
728 static const BYTE bin23
[] = {
729 0x18,0x13,'1','9','4','5','0','6','0','6','1','6','1','0','0','0','.','0','0','0','Z'};
730 static const BYTE bin24
[] = {
731 0x18,0x13,'1','9','4','5','0','6','0','6','1','6','1','0','0','0','.','9','9','9','Z'};
732 static const BYTE bin26
[] = {
733 0x17,0x0b,'4','5','0','6','0','6','1','6','1','0','Z'};
734 static const BYTE bin33
[] = {
735 0x17,0x0f,'4','5','0','6','0','6','1','6','1','0','-','0','1','0','0'};
736 static const BYTE bin35
[] = {
737 0x17,0x08, '4','5','0','6','0','6','1','6'};
738 static const BYTE bin38
[] = {
739 0x18,0x08, '2','1','4','5','0','6','0','6'};
740 static void test_decodeFiletime(DWORD dwEncoding
)
742 static const struct encodedFiletime otherTimes
[] = {
744 static const unsigned char *bogusTimes
[] = {
749 static const char commonName
[] = "Juan Lang";
750 static const char surName
[] = "Lang";
751 static const BYTE emptySequence
[] = { 0x30, 0 };
752 static const BYTE emptyRDNs
[] = { 0x30, 0x02, 0x31, 0 };
753 static const BYTE twoRDNs
[] = {
754 0x13,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0};
755 static const BYTE encodedTwoRDNs
[] = {
757 static const BYTE us
[] = { 0x55, 0x53 };
758 static const BYTE minnesota
[] = { 0x4d, 0x69, 0x6e, 0x6e, 0x65, 0x73, 0x6f,
759 0x6f, 0x6c, 0x69, 0x73 };
760 static const BYTE codeweavers
[] = { 0x43, 0x6f, 0x64, 0x65, 0x57, 0x65, 0x61,
761 0x76, 0x65, 0x72, 0x73 };
762 static const BYTE wine
[] = { 0x57, 0x69, 0x6e, 0x65, 0x20, 0x44, 0x65, 0x76,
763 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74 };
764 static const BYTE aric
[] = { 0x61, 0x72, 0x69, 0x63, 0x40, 0x63, 0x6f, 0x64,
765 0x65, 0x77, 0x65, 0x61, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x63, 0x6f, 0x6d };
766 static CHAR oid_us
[] = "2.5.4.6",
767 oid_aric
[] = "1.2.840.113549.1.9.1";
768 static CERT_RDN_ATTR rdnAttrs
[] = { { oid_us
, 4, { sizeof(us
), (LPBYTE
)us
} },
769 { oid_aric
, 7, { sizeof(aric
), (LPBYTE
)aric
} } };
770 static const BYTE encodedRDNAttrs
[] = {
772 static void test_encodeName(DWORD dwEncoding
)
775 static CHAR oid_common_name
[] = "2.5.4.3",
776 oid_sur_name
[] = "2.5.4.4";
778 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)7), ((void *)0),
779 "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
782 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)7), &info
,
783 "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
788 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)7), &info
,
789 "Expected E_INVALIDARG, got %08x\n", GetLastError());
793 static WCHAR commonNameW
[] = { 'J','u','a','n',' ','L','a','n','g',0 };
794 static const BYTE twoRDNsNoNull
[] = {
795 0x20,0x4c,0x61,0x6e,0x67 };
796 static const BYTE anyType
[] = {
797 0x61,0x4c,0x67,0x6e };
798 static void test_encodeUnicodeName(DWORD dwEncoding
)
801 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)20), ((void *)0),
802 "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
806 static void compareNameValues(const CERT_NAME_VALUE
*expected
,
807 const CERT_NAME_VALUE
*got
)
809 (winetest_set_location("encode.c", 913), 0) ? 0 : winetest_ok(got
->dwValueType
== expected
->dwValueType
,
810 expected
->dwValueType
, got
->Value
.cbData
, expected
->Value
.cbData
);
811 (winetest_set_location("encode.c", 920), 0) ? 0 : winetest_ok(!memcmp(got
->Value
.pbData
, expected
->Value
.pbData
,
812 (((got
->Value
.cbData
) < (expected
->Value
.cbData
)) ? (got
->Value
.cbData
) : (expected
->Value
.cbData
))),
813 "String type %d: unexpected value\n", expected
->dwValueType
);
815 static void compareRDNAttrs(const CERT_RDN_ATTR
*expected
,
816 const CERT_RDN_ATTR
*got
)
820 (winetest_set_location("encode.c", 934), 0) ? 0 : winetest_ok(!__extension__ ({ size_t __s1_len
, __s2_len
; (__builtin_constant_p (got
->pszObjId
) && __builtin_constant_p (expected
->pszObjId
) && (__s1_len
= strlen (got
->pszObjId
), __s2_len
= strlen (expected
->pszObjId
), (!((size_t)(const void *)((got
->pszObjId
) + 1) - (size_t)(const void *)(got
->pszObjId
) == 1) || __s1_len
>= 4) && (!((size_t)(const void *)((expected
->pszObjId
) + 1) - (size_t)(const void *)(expected
->pszObjId
) == 1) || __s2_len
>= 4)) ? __builtin_strcmp (got
->pszObjId
, expected
->pszObjId
) : (__builtin_constant_p (got
->pszObjId
) && ((size_t)(const void *)((got
->pszObjId
) + 1) - (size_t)(const void *)(got
->pszObjId
) == 1) && (__s1_len
= strlen (got
->pszObjId
), __s1_len
< 4) ? (__builtin_constant_p (expected
->pszObjId
) && ((size_t)(const void *)((expected
->pszObjId
) + 1) - (size_t)(const void *)(expected
->pszObjId
) == 1) ? __builtin_strcmp (got
->pszObjId
, expected
->pszObjId
) : (__extension__ ({ __const
unsigned char *__s2
= (__const
unsigned char *) (__const
char *) (expected
->pszObjId
); register int __result
= (((__const
unsigned char *) (__const
char *) (got
->pszObjId
))[0] - __s2
[0]); if (__s1_len
> 0 && __result
== 0) { __result
= (((__const
unsigned char *) (__const
char *) (got
->pszObjId
))[1] - __s2
[1]); if (__s1_len
> 1 && __result
== 0) { __result
= (((__const
unsigned char *) (__const
char *) (got
->pszObjId
))[2] - __s2
[2]); if (__s1_len
> 2 && __result
== 0) __result
= (((__const
unsigned char *) (__const
char *) (got
->pszObjId
))[3] - __s2
[3]); } } __result
; }))) : (__builtin_constant_p (expected
->pszObjId
) && ((size_t)(const void *)((expected
->pszObjId
) + 1) - (size_t)(const void *)(expected
->pszObjId
) == 1) && (__s2_len
= strlen (expected
->pszObjId
), __s2_len
< 4) ? (__builtin_constant_p (got
->pszObjId
) && ((size_t)(const void *)((got
->pszObjId
) + 1) - (size_t)(const void *)(got
->pszObjId
) == 1) ? __builtin_strcmp (got
->pszObjId
, expected
->pszObjId
) : (__extension__ ({ __const
unsigned char *__s1
= (__const
unsigned char *) (__const
char *) (got
->pszObjId
); register int __result
= __s1
[0] - ((__const
unsigned char *) (__const
char *) (expected
->pszObjId
))[0]; if (__s2_len
> 0 && __result
== 0) { __result
= (__s1
[1] - ((__const
unsigned char *) (__const
char *) (expected
->pszObjId
))[1]); if (__s2_len
> 1 && __result
== 0) { __result
= (__s1
[2] - ((__const
unsigned char *) (__const
char *) (expected
->pszObjId
))[2]); if (__s2_len
> 2 && __result
== 0) __result
= (__s1
[3] - ((__const
unsigned char *) (__const
char *) (expected
->pszObjId
))[3]); } } __result
; }))) : __builtin_strcmp (got
->pszObjId
, expected
->pszObjId
)))); }),
825 static void compareRDNs(const CERT_RDN
*expected
, const CERT_RDN
*got
)
830 static void compareNames(const CERT_NAME_INFO
*expected
,
831 const CERT_NAME_INFO
*got
)
833 (winetest_set_location("encode.c", 959), 0) ? 0 : winetest_ok(got
->cRDN
== expected
->cRDN
, "Expected %d RDNs, got %d\n",
834 expected
->cRDN
, got
->cRDN
);
838 static void test_decodeName(DWORD dwEncoding
)
840 BYTE
*buf
= ((void *)0);
843 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)7), emptySequence
,
844 (BYTE
*)&buf
, &bufSize
);
846 static CHAR oid_sur_name
[] = "2.5.4.4",
847 oid_common_name
[] = "2.5.4.3";
848 CERT_RDN_ATTR attrs
[] = {
849 { oid_sur_name
, 4, { sizeof(surName
),
850 (BYTE
*)commonName
} },
856 static void test_decodeUnicodeName(DWORD dwEncoding
)
858 BYTE
*buf
= ((void *)0);
861 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)20), emptySequence
,
862 (BYTE
*)&buf
, &bufSize
);
865 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)20), emptyRDNs
,
866 (BYTE
*)&buf
, &bufSize
);
869 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)20), twoRDNsNoNull
,
870 (BYTE
*)&buf
, &bufSize
);
872 static CHAR oid_sur_name
[] = "2.5.4.4",
873 oid_common_name
[] = "2.5.4.3";
874 CERT_RDN_ATTR attrs
[] = {
876 { lstrlenW(commonNameW
) * sizeof(WCHAR
), (BYTE
*)commonNameW
} },
880 struct EncodedNameValue
882 CERT_NAME_VALUE value
;
884 static const char bogusPrintable
[] = "~";
885 static const BYTE bin42
[] = { 0x16,0x02,0x80,0x00 };
886 static const BYTE bin43
[] = { 0x13,0x02,0x7e,0x00 };
887 static BYTE octetCommonNameValue
[] = {
888 0x12,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00 };
889 static BYTE printableCommonNameValue
[] = {
890 0x13,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00 };
891 static BYTE t61CommonNameValue
[] = {
892 0x14,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00 };
893 static BYTE graphicCommonNameValue
[] = {
894 0x61,0x00,0x6e,0x00,0x67,0x00,0x00 };
895 static BYTE utf8CommonNameValue
[] = {
896 0x0c,0x0a,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00 };
897 static struct EncodedNameValue nameValues
[] = {
898 { { 5, { sizeof(commonName
), (BYTE
*)commonName
} },
900 { { 4, { sizeof(bogusPrintable
),
901 (BYTE
*)bogusPrintable
} }, bin43
, sizeof(bin43
) },
903 static void test_encodeNameValue(DWORD dwEncoding
)
907 CERT_NAME_VALUE value
= { 0, { 0, ((void *)0) } };
908 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)6), &value
,
909 "Expected CRYPT_E_ASN1_CHOICE, got %08x\n", GetLastError());
911 (winetest_set_location("encode.c", 1209), 0) ? 0 : winetest_ok(size
== sizeof(printableCommonNameValue
), "Unexpected size %d\n",
912 "Unexpected encoding\n");
913 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)6),
914 nameValues
[i
].value
.dwValueType
, GetLastError());
919 static void test_decodeNameValue(DWORD dwEncoding
)
922 BYTE
*buf
= ((void *)0);
926 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)6),
927 (BYTE
*)&buf
, &bufSize
);
929 compareNameValues(&nameValues
[i
].value
,
930 (const CERT_NAME_VALUE
*)buf
);
934 static const BYTE emptyURL
[] = { 0x30, 0x02, 0x86, 0x00 };
935 static const WCHAR url
[] = { 'h','t','t','p',':','/','/','w','i','n','e',
937 static const BYTE encodedIPAddr
[] = { 0x30, 0x06, 0x87, 0x04, 0x7f, 0x00, 0x00,
939 static void test_encodeAltName(DWORD dwEncoding
)
941 CERT_ALT_NAME_INFO info
= { 0 };
942 BYTE
*buf
= ((void *)0);
945 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)12), &info
,
946 0x08000, ((void *)0), (BYTE
*)&buf
, &size
);
952 static void test_decodeAltName(DWORD dwEncoding
)
956 CERT_ALT_NAME_INFO
*info
;
957 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)12),
960 (winetest_set_location("encode.c", 1392), 0) ? 0 : winetest_ok(info
->cAltEntry
== 0, "Expected 0 entries, got %d\n",
963 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)12), emptyURL
,
973 static const struct encodedBits bits
[] = {
975 static void test_encodeBits(DWORD dwEncoding
)
981 (winetest_set_location("encode.c", 1802), 0) ? 0 : winetest_ok(bufSize
== bits
[i
].encoded
[1] + 2,
982 bits
[i
].encoded
[1] + 2);
986 static void test_decodeBits(DWORD dwEncoding
)
991 CRYPT_BIT_BLOB
*blob
;
992 (winetest_set_location("encode.c", 1835), 0) ? 0 : winetest_ok(blob
->cbData
== bits
[i
].cbDecoded
,
993 "Unexpected value\n");
1001 CERT_BASIC_CONSTRAINTS2_INFO info
;
1003 static const struct Constraints2 constraints2
[] = {
1005 static const BYTE encodedDomainName
[] = { 0x30, 0x2b, 0x31, 0x29, 0x30, 0x11,
1006 0x16, 0x06, 0x77, 0x69, 0x6e, 0x65, 0x68, 0x71 };
1007 static void test_encodeBasicConstraints(DWORD dwEncoding
)
1009 CERT_NAME_BLOB nameBlob
= { sizeof(encodedDomainName
),
1010 (LPBYTE
)encodedDomainName
};
1018 static const unsigned char encodedCommonName
[] = {
1019 0x30,0x15,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,'J','u','a','n',' ','L','a','n','g',0};
1020 static void test_decodeBasicConstraints(DWORD dwEncoding
)
1022 static const BYTE inverted
[] = { 0x30, 0x06, 0x02, 0x01, 0x01, 0x01, 0x01,
1026 BYTE
*buf
= ((void *)0);
1029 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)15),
1030 0x08000, ((void *)0), (BYTE
*)&buf
, &bufSize
);
1032 CERT_BASIC_CONSTRAINTS2_INFO
*info
=
1033 (winetest_set_location("encode.c", 1984), 0) ? 0 : winetest_ok(!memcmp(info
, &constraints2
[i
].info
, sizeof(*info
)),
1034 "Unexpected value for item %d\n", i
);
1037 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)15),
1038 (BYTE
*)&buf
, &bufSize
);
1040 CERT_BASIC_CONSTRAINTS_INFO
*info
= (CERT_BASIC_CONSTRAINTS_INFO
*)buf
;
1042 (winetest_set_location("encode.c", 2043), 0) ? 0 : winetest_ok(info
->rgSubtreesConstraint
[0].cbData
==
1043 info
->rgSubtreesConstraint
[0].cbData
);
1044 (winetest_set_location("encode.c", 2046), 0) ? 0 : winetest_ok(!memcmp(info
->rgSubtreesConstraint
[0].pbData
, encodedDomainName
,
1045 sizeof(encodedDomainName
)), "Unexpected value\n");
1049 static const BYTE modulus1
[] = { 0,0,0,1,1,1,1,1 };
1050 struct EncodedRSAPubKey
1052 const BYTE
*modulus
;
1053 size_t decodedModulusLen
;
1055 struct EncodedRSAPubKey rsaPubKeys
[] = {
1057 static void test_encodeRsaPublicKey(DWORD dwEncoding
)
1059 BYTE toEncode
[sizeof(BLOBHEADER
) + sizeof(RSAPUBKEY
) + sizeof(modulus1
)];
1060 RSAPUBKEY
*rsaPubKey
= (RSAPUBKEY
*)(toEncode
+ sizeof(BLOBHEADER
));
1062 BYTE
*buf
= ((void *)0);
1063 DWORD bufSize
= 0, i
;
1064 ret
= CryptDecodeObjectEx(dwEncoding
, "1.2.840.113549.1.1.1",
1065 "Expected ERROR_FILE_NOT_FOUND, got %08x\n", GetLastError());
1068 (winetest_set_location("encode.c", 2210), 0) ? 0 : winetest_ok(bufSize
>= sizeof(BLOBHEADER
) + sizeof(RSAPUBKEY
) +
1069 "Wrong size %d\n", bufSize
);
1070 (winetest_set_location("encode.c", 2223), 0) ? 0 : winetest_ok(rsaPubKey
->magic
== 0x31415352,
1072 (winetest_set_location("encode.c", 2229), 0) ? 0 : winetest_ok(!memcmp(buf
+ sizeof(BLOBHEADER
) + sizeof(RSAPUBKEY
),
1073 rsaPubKeys
[i
].modulus
, rsaPubKeys
[i
].decodedModulusLen
),
1074 "Unexpected modulus\n");
1078 static const BYTE intSequence
[] = { 0x30, 0x1b, 0x02, 0x01, 0x01, 0x02, 0x01,
1079 0x02, 0xff, 0x7f, 0x02, 0x04, 0xba, 0xdd, 0xf0, 0x0d };
1080 static const BYTE mixedSequence
[] = { 0x30, 0x27, 0x17, 0x0d, 0x30, 0x35, 0x30,
1081 0xff, 0x7f, 0x02, 0x04, 0xba, 0xdd, 0xf0, 0x0d };
1082 static void test_encodeSequenceOfAny(DWORD dwEncoding
)
1084 BYTE
*buf
= ((void *)0);
1088 (winetest_set_location("encode.c", 2284), 0) ? 0 : winetest_ok(!memcmp(buf
, mixedSequence
, mixedSequence
[1] + 2),
1089 "Unexpected value\n");
1092 static void test_decodeSequenceOfAny(DWORD dwEncoding
)
1095 BYTE
*buf
= ((void *)0);
1101 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)34), mixedSequence
,
1104 CRYPT_SEQUENCE_OF_ANY
*seq
= (CRYPT_SEQUENCE_OF_ANY
*)buf
;
1105 (winetest_set_location("encode.c", 2324), 0) ? 0 : winetest_ok(seq
->cValue
== sizeof(ints
) / sizeof(ints
[0]),
1106 seq
->rgValue
[0].cbData
);
1107 (winetest_set_location("encode.c", 2330), 0) ? 0 : winetest_ok(!memcmp(seq
->rgValue
[0].pbData
, times
[0].encodedTime
,
1108 times
[0].encodedTime
[1] + 2), "Unexpected value\n");
1111 struct encodedExtensions
1113 CERT_EXTENSIONS exts
;
1115 static BYTE noncrit_ext_data
[] = { 0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01 };
1116 static CHAR oid_basic_constraints2
[] = "2.5.29.19";
1117 static CERT_EXTENSION nonCriticalExt
=
1118 { oid_basic_constraints2
, 0, { 8, noncrit_ext_data
} };
1119 static const struct encodedExtensions exts
[] = {
1121 static void test_encodeExtensions(DWORD dwEncoding
)
1130 BYTE
*buf
= ((void *)0);
1132 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)5),
1133 ((void *)0), (BYTE
*)&buf
, &bufSize
);
1135 CERT_EXTENSIONS
*ext
= (CERT_EXTENSIONS
*)buf
;
1137 (winetest_set_location("encode.c", 2405), 0) ? 0 : winetest_ok(ext
->cExtension
== exts
[i
].exts
.cExtension
,
1140 (winetest_set_location("encode.c", 2410), 0) ? 0 : winetest_ok(!__extension__ ({ size_t __s1_len
, __s2_len
; (__builtin_constant_p (ext
->rgExtension
[j
].pszObjId
) && __builtin_constant_p (exts
[i
].exts
.rgExtension
[j
].pszObjId
) && (__s1_len
= strlen (ext
->rgExtension
[j
].pszObjId
), __s2_len
= strlen (exts
[i
].exts
.rgExtension
[j
].pszObjId
), (!((size_t)(const void *)((ext
->rgExtension
[j
].pszObjId
) + 1) - (size_t)(const void *)(ext
->rgExtension
[j
].pszObjId
) == 1) || __s1_len
>= 4) && (!((size_t)(const void *)((exts
[i
].exts
.rgExtension
[j
].pszObjId
) + 1) - (size_t)(const void *)(exts
[i
].exts
.rgExtension
[j
].pszObjId
) == 1) || __s2_len
>= 4)) ? __builtin_strcmp (ext
->rgExtension
[j
].pszObjId
, exts
[i
].exts
.rgExtension
[j
].pszObjId
) : (__builtin_constant_p (ext
->rgExtension
[j
].pszObjId
) && ((size_t)(const void *)((ext
->rgExtension
[j
].pszObjId
) + 1) - (size_t)(const void *)(ext
->rgExtension
[j
].pszObjId
) == 1) && (__s1_len
= strlen (ext
->rgExtension
[j
].pszObjId
), __s1_len
< 4) ? (__builtin_constant_p (exts
[i
].exts
.rgExtension
[j
].pszObjId
) && ((size_t)(const void *)((exts
[i
].exts
.rgExtension
[j
].pszObjId
) + 1) - (size_t)(const void *)(exts
[i
].exts
.rgExtension
[j
].pszObjId
) == 1) ? __builtin_strcmp (ext
->rgExtension
[j
].pszObjId
, exts
[i
].exts
.rgExtension
[j
].pszObjId
) : (__extension__ ({ __const
unsigned char *__s2
= (__const
unsigned char *) (__const
char *) (exts
[i
].exts
.rgExtension
[j
].pszObjId
); register int __result
= (((__const
unsigned char *) (__const
char *) (ext
->rgExtension
[j
].pszObjId
))[0] - __s2
[0]); if (__s1_len
> 0 && __result
== 0) { __result
= (((__const
unsigned char *) (__const
char *) (ext
->rgExtension
[j
].pszObjId
))[1] - __s2
[1]); if (__s1_len
> 1 && __result
== 0) { __result
= (((__const
unsigned char *) (__const
char *) (ext
->rgExtension
[j
].pszObjId
))[2] - __s2
[2]); if (__s1_len
> 2 && __result
== 0) __result
= (((__const
unsigned char *) (__const
char *) (ext
->rgExtension
[j
].pszObjId
))[3] - __s2
[3]); } } __result
; }))) : (__builtin_constant_p (exts
[i
].exts
.rgExtension
[j
].pszObjId
) && ((size_t)(const void *)((exts
[i
].exts
.rgExtension
[j
].pszObjId
) + 1) - (size_t)(const void *)(exts
[i
].exts
.rgExtension
[j
].pszObjId
) == 1) && (__s2_len
= strlen (exts
[i
].exts
.rgExtension
[j
].pszObjId
), __s2_len
< 4) ? (__builtin_constant_p (ext
->rgExtension
[j
].pszObjId
) && ((size_t)(const void *)((ext
->rgExtension
[j
].pszObjId
) + 1) - (size_t)(const void *)(ext
->rgExtension
[j
].pszObjId
) == 1) ? __builtin_strcmp (ext
->rgExtension
[j
].pszObjId
, exts
[i
].exts
.rgExtension
[j
].pszObjId
) : (__extension__ ({ __const
unsigned char *__s1
= (__const
unsigned char *) (__const
char *) (ext
->rgExtension
[j
].pszObjId
); register int __result
= __s1
[0] - ((__const
unsigned char *) (__const
char *) (exts
[i
].exts
.rgExtension
[j
].pszObjId
))[0]; if (__s2_len
> 0 && __result
== 0) { __result
= (__s1
[1] - ((__const
unsigned char *) (__const
char *) (exts
[i
].exts
.rgExtension
[j
].pszObjId
))[1]); if (__s2_len
> 1 && __result
== 0) { __result
= (__s1
[2] - ((__const
unsigned char *) (__const
char *) (exts
[i
].exts
.rgExtension
[j
].pszObjId
))[2]); if (__s2_len
> 2 && __result
== 0) __result
= (__s1
[3] - ((__const
unsigned char *) (__const
char *) (exts
[i
].exts
.rgExtension
[j
].pszObjId
))[3]); } } __result
; }))) : __builtin_strcmp (ext
->rgExtension
[j
].pszObjId
, exts
[i
].exts
.rgExtension
[j
].pszObjId
)))); }),
1141 ext
->rgExtension
[j
].pszObjId
);
1142 (winetest_set_location("encode.c", 2415), 0) ? 0 : winetest_ok(!memcmp(ext
->rgExtension
[j
].Value
.pbData
,
1143 exts
[i
].exts
.rgExtension
[j
].Value
.cbData
),
1144 "Unexpected value\n");
1149 struct encodedPublicKey
1151 const BYTE
*encoded
;
1152 const BYTE
*encodedNoNull
;
1154 static const BYTE aKey
[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xa, 0xb, 0xc, 0xd,
1156 static const BYTE params
[] = { 0x02, 0x01, 0x01 };
1157 static const unsigned char bin66
[] = {
1158 0x30,0x0f,0x30,0x0a,0x06,0x06,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x05,0x00,0x03,0x01,0x00};
1159 static const unsigned char bin67
[] = {
1160 0x30,0x0d,0x30,0x08,0x06,0x06,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x03,0x01,0x00};
1161 static const unsigned char bin69
[] = {
1163 static unsigned char bin72
[] = { 0x05,0x00};
1164 static CHAR oid_bogus
[] = "1.2.3",
1165 oid_rsa
[] = "1.2.840.113549";
1166 static const struct encodedPublicKey pubKeys
[] = {
1167 { { { oid_rsa
, { 0, ((void *)0) } }, { 0, ((void *)0), 0} },
1168 { { oid_rsa
, { 2, bin72
} }, { sizeof(aKey
), (BYTE
*)aKey
, 0} } },
1169 { { { oid_rsa
, { sizeof(params
), (BYTE
*)params
} }, { sizeof(aKey
),
1170 (BYTE
*)aKey
, 0 } } },
1172 static void test_encodePublicKeyInfo(DWORD dwEncoding
)
1177 BYTE
*buf
= ((void *)0);
1179 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)8),
1182 (winetest_set_location("encode.c", 2505), 0) ? 0 : winetest_ok(bufSize
== pubKeys
[i
].encoded
[1] + 2 ||
1183 pubKeys
[i
].encodedNoNull
[1] + 2, bufSize
);
1184 (winetest_set_location("encode.c", 2510), 0) ? 0 : winetest_ok(!memcmp(buf
, pubKeys
[i
].encoded
, pubKeys
[i
].encoded
[1] + 2),
1185 "Unexpected value\n");
1186 (winetest_set_location("encode.c", 2513), 0) ? 0 : winetest_ok(!memcmp(buf
, pubKeys
[i
].encodedNoNull
,
1187 pubKeys
[i
].encodedNoNull
[1] + 2), "Unexpected value\n");
1191 static void comparePublicKeyInfo(const CERT_PUBLIC_KEY_INFO
*expected
,
1192 const CERT_PUBLIC_KEY_INFO
*got
)
1194 (winetest_set_location("encode.c", 2523), 0) ? 0 : winetest_ok(!__extension__ ({ size_t __s1_len
, __s2_len
; (__builtin_constant_p (expected
->Algorithm
.pszObjId
) && __builtin_constant_p (got
->Algorithm
.pszObjId
) && (__s1_len
= strlen (expected
->Algorithm
.pszObjId
), __s2_len
= strlen (got
->Algorithm
.pszObjId
), (!((size_t)(const void *)((expected
->Algorithm
.pszObjId
) + 1) - (size_t)(const void *)(expected
->Algorithm
.pszObjId
) == 1) || __s1_len
>= 4) && (!((size_t)(const void *)((got
->Algorithm
.pszObjId
) + 1) - (size_t)(const void *)(got
->Algorithm
.pszObjId
) == 1) || __s2_len
>= 4)) ? __builtin_strcmp (expected
->Algorithm
.pszObjId
, got
->Algorithm
.pszObjId
) : (__builtin_constant_p (expected
->Algorithm
.pszObjId
) && ((size_t)(const void *)((expected
->Algorithm
.pszObjId
) + 1) - (size_t)(const void *)(expected
->Algorithm
.pszObjId
) == 1) && (__s1_len
= strlen (expected
->Algorithm
.pszObjId
), __s1_len
< 4) ? (__builtin_constant_p (got
->Algorithm
.pszObjId
) && ((size_t)(const void *)((got
->Algorithm
.pszObjId
) + 1) - (size_t)(const void *)(got
->Algorithm
.pszObjId
) == 1) ? __builtin_strcmp (expected
->Algorithm
.pszObjId
, got
->Algorithm
.pszObjId
) : (__extension__ ({ __const
unsigned char *__s2
= (__const
unsigned char *) (__const
char *) (got
->Algorithm
.pszObjId
); register int __result
= (((__const
unsigned char *) (__const
char *) (expected
->Algorithm
.pszObjId
))[0] - __s2
[0]); if (__s1_len
> 0 && __result
== 0) { __result
= (((__const
unsigned char *) (__const
char *) (expected
->Algorithm
.pszObjId
))[1] - __s2
[1]); if (__s1_len
> 1 && __result
== 0) { __result
= (((__const
unsigned char *) (__const
char *) (expected
->Algorithm
.pszObjId
))[2] - __s2
[2]); if (__s1_len
> 2 && __result
== 0) __result
= (((__const
unsigned char *) (__const
char *) (expected
->Algorithm
.pszObjId
))[3] - __s2
[3]); } } __result
; }))) : (__builtin_constant_p (got
->Algorithm
.pszObjId
) && ((size_t)(const void *)((got
->Algorithm
.pszObjId
) + 1) - (size_t)(const void *)(got
->Algorithm
.pszObjId
) == 1) && (__s2_len
= strlen (got
->Algorithm
.pszObjId
), __s2_len
< 4) ? (__builtin_constant_p (expected
->Algorithm
.pszObjId
) && ((size_t)(const void *)((expected
->Algorithm
.pszObjId
) + 1) - (size_t)(const void *)(expected
->Algorithm
.pszObjId
) == 1) ? __builtin_strcmp (expected
->Algorithm
.pszObjId
, got
->Algorithm
.pszObjId
) : (__extension__ ({ __const
unsigned char *__s1
= (__const
unsigned char *) (__const
char *) (expected
->Algorithm
.pszObjId
); register int __result
= __s1
[0] - ((__const
unsigned char *) (__const
char *) (got
->Algorithm
.pszObjId
))[0]; if (__s2_len
> 0 && __result
== 0) { __result
= (__s1
[1] - ((__const
unsigned char *) (__const
char *) (got
->Algorithm
.pszObjId
))[1]); if (__s2_len
> 1 && __result
== 0) { __result
= (__s1
[2] - ((__const
unsigned char *) (__const
char *) (got
->Algorithm
.pszObjId
))[2]); if (__s2_len
> 2 && __result
== 0) __result
= (__s1
[3] - ((__const
unsigned char *) (__const
char *) (got
->Algorithm
.pszObjId
))[3]); } } __result
; }))) : __builtin_strcmp (expected
->Algorithm
.pszObjId
, got
->Algorithm
.pszObjId
)))); }),
1195 expected
->PublicKey
.cbData
, got
->PublicKey
.cbData
);
1196 (winetest_set_location("encode.c", 2538), 0) ? 0 : winetest_ok(!memcmp(expected
->PublicKey
.pbData
, got
->PublicKey
.pbData
,
1197 got
->PublicKey
.cbData
), "Unexpected public key value\n");
1199 static void test_decodePublicKeyInfo(DWORD dwEncoding
)
1201 static const BYTE bogusPubKeyInfo
[] = { 0x30, 0x22, 0x30, 0x0d, 0x06, 0x06,
1202 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
1204 BYTE
*buf
= ((void *)0);
1207 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)8),
1208 0x08000, ((void *)0), (BYTE
*)&buf
, &bufSize
);
1212 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)8),
1213 "Expected CRYPT_E_ASN1_CORRUPT, got %08x\n", GetLastError());
1215 static const BYTE v1Cert
[] = { 0x30, 0x33, 0x02, 0x00, 0x30, 0x02, 0x06, 0x00,
1216 0x02, 0x06, 0x00, 0x03, 0x01, 0x00 };
1217 static const BYTE v2Cert
[] = { 0x30, 0x38, 0xa0, 0x03, 0x02, 0x01, 0x01, 0x02,
1218 0x30, 0x5a, 0x30, 0x07, 0x30, 0x02, 0x06, 0x00, 0x03, 0x01, 0x00 };
1219 static const BYTE v3Cert
[] = { 0x30, 0x38, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02,
1220 0x30, 0x5a, 0x30, 0x07, 0x30, 0x02, 0x06, 0x00, 0x03, 0x01, 0x00 };
1221 static const BYTE v1CertWithConstraints
[] = { 0x30, 0x4b, 0x02, 0x00, 0x30,
1222 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x01 };
1223 static const BYTE v1CertWithSerial
[] = { 0x30, 0x4c, 0x02, 0x01, 0x01, 0x30,
1224 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x01 };
1225 static const BYTE bigCert
[] = { 0x30, 0x7a, 0x02, 0x01, 0x01, 0x30, 0x02, 0x06,
1226 0x01, 0xff, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x01 };
1227 static void test_encodeCertToBeSigned(DWORD dwEncoding
)
1230 BYTE
*buf
= ((void *)0);
1232 CERT_INFO info
= { 0 };
1233 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)2), ((void *)0),
1234 0x08000, ((void *)0), (BYTE
*)&buf
, &size
);
1239 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)2), &info
,
1240 0x08000, ((void *)0), (BYTE
*)&buf
, &size
);
1246 static void test_decodeCertToBeSigned(DWORD dwEncoding
)
1248 static const BYTE
*corruptCerts
[] = { v1Cert
, v2Cert
, v3Cert
,
1249 v1CertWithConstraints
, v1CertWithSerial
};
1251 (winetest_set_location("encode.c", 2727), 0) ? 0 : winetest_ok(!ret
&& GetLastError() == ((HRESULT
)0x80093102L
),
1252 "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
1254 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)2),
1255 "Expected CRYPT_E_ASN1_CORRUPT, got %08x\n", GetLastError());
1260 static const BYTE hash
[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xa, 0xb, 0xc, 0xd,
1262 static const BYTE signedBigCert
[] = {
1263 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
1264 static void test_encodeCert(DWORD dwEncoding
)
1266 CERT_SIGNED_CONTENT_INFO info
= { { sizeof(bigCert
), (BYTE
*)bigCert
},
1267 { ((void *)0), { 0, ((void *)0) } }, { sizeof(hash
), (BYTE
*)hash
, 0 } };
1269 BYTE
*buf
= ((void *)0);
1271 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)1), &info
,
1272 0x08000, ((void *)0), (BYTE
*)&buf
, &bufSize
);
1276 static void test_decodeCert(DWORD dwEncoding
)
1279 BYTE
*buf
= ((void *)0);
1283 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)2), signedBigCert
,
1284 sizeof(signedBigCert
), 0x08000, ((void *)0), (BYTE
*)&buf
, &size
);
1286 CERT_INFO
*info
= (CERT_INFO
*)buf
;
1287 (winetest_set_location("encode.c", 2843), 0) ? 0 : winetest_ok(info
->SerialNumber
.cbData
== 1,
1288 *info
->SerialNumber
.pbData
);
1289 (winetest_set_location("encode.c", 2852), 0) ? 0 : winetest_ok(info
->Subject
.cbData
== sizeof(encodedCommonName
),
1290 "Wrong size %d\n", info
->Subject
.cbData
);
1291 (winetest_set_location("encode.c", 2854), 0) ? 0 : winetest_ok(!memcmp(info
->Subject
.pbData
, encodedCommonName
,
1292 info
->Subject
.cbData
), "Unexpected subject\n");
1295 static const BYTE distPointWithUrl
[] = { 0x30, 0x19, 0x30, 0x17, 0xa0, 0x15,
1296 0x6e, 0x65, 0x68, 0x71, 0x2e, 0x6f, 0x72, 0x67 };
1297 static const BYTE distPointWithIssuer
[] = { 0x30, 0x17, 0x30, 0x15, 0xa2, 0x13,
1298 0x2e, 0x6f, 0x72, 0x67 };
1299 static const BYTE crlReason
= 1 |
1301 static void test_encodeCRLDistPoints(DWORD dwEncoding
)
1303 CRL_DIST_POINTS_INFO xxxinfo
= { 0 };
1304 CRL_DIST_POINT point
= { { 0 } };
1306 BYTE
*buf
= ((void *)0);
1308 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)35), &xxxinfo
,
1309 "Expected E_INVALIDARG, got %08x\n", GetLastError());
1310 xxxinfo
.cDistPoint
= 1;
1311 xxxinfo
.rgDistPoint
= &point
;
1312 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)35), &xxxinfo
,
1313 0x08000, ((void *)0), (BYTE
*)&buf
, &size
);
1314 point
.ReasonFlags
.cbData
= sizeof(crlReason
);
1318 static void test_decodeCRLDistPoints(DWORD dwEncoding
)
1321 BYTE
*buf
= ((void *)0);
1323 PCERT_ALT_NAME_ENTRY entry
;
1324 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)35),
1325 (BYTE
*)&buf
, &size
);
1327 (winetest_set_location("encode.c", 3065), 0) ? 0 : winetest_ok(entry
->dwAltNameChoice
== 7,
1328 "Expected CERT_ALT_NAME_URL, got %d\n", entry
->dwAltNameChoice
);
1331 static const BYTE urlIDP
[] = { 0x30,0x17,0xa0,0x15,0xa0,0x13,0x86,0x11,0x68,
1333 static void test_encodeCRLIssuingDistPoint(DWORD dwEncoding
)
1336 BYTE
*buf
= ((void *)0);
1338 CRL_ISSUING_DIST_POINT point
= { { 0 } };
1339 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)54), ((void *)0),
1340 "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
1343 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)54), &point
,
1344 0x08000, ((void *)0), (BYTE
*)&buf
, &size
);
1350 static void compareAltNameEntry(const CERT_ALT_NAME_ENTRY
*expected
,
1351 const CERT_ALT_NAME_ENTRY
*got
)
1353 (winetest_set_location("encode.c", 3149), 0) ? 0 : winetest_ok(expected
->dwAltNameChoice
== got
->dwAltNameChoice
,
1354 got
->dwAltNameChoice
);
1357 (winetest_set_location("encode.c", 3161), 0) ? 0 : winetest_ok((!(*expected
).pwszURL
&& !(*got
).pwszURL
) ||
1358 !lstrcmpW((*expected
).pwszURL
, (*got
).pwszURL
), "Unexpected name\n");
1362 static void compareAltNameInfo(const CERT_ALT_NAME_INFO
*expected
,
1363 const CERT_ALT_NAME_INFO
*got
)
1366 static const BYTE v1CRL
[] = { 0x30, 0x15, 0x30, 0x02, 0x06, 0x00, 0x18, 0x0f,
1368 static const BYTE v2CRL
[] = { 0x30, 0x18, 0x02, 0x01, 0x01, 0x30, 0x02, 0x06,
1369 0x30, 0x30, 0x30, 0x30, 0x5a };
1370 static const BYTE v1CRLWithIssuer
[] = { 0x30, 0x2c, 0x30, 0x02, 0x06, 0x00,
1372 static const BYTE v1CRLWithIssuerAndEmptyEntry
[] = { 0x30, 0x43, 0x30, 0x02,
1373 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a };
1374 static const BYTE v1CRLWithIssuerAndEntry
[] = { 0x30, 0x44, 0x30, 0x02, 0x06,
1375 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a };
1376 static const BYTE v1CRLWithEntryExt
[] = { 0x30,0x5a,0x30,0x02,0x06,0x00,0x30,
1377 0x04,0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01 };
1378 static const BYTE v1CRLWithExt
[] = { 0x30,0x5c,0x30,0x02,0x06,0x00,0x30,0x15,
1379 0xff,0x04,0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01 };
1380 static const BYTE v2CRLWithExt
[] = { 0x30,0x5c,0x02,0x01,0x01,0x30,0x02,0x06,
1381 0x13,0x04,0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01 };
1382 static const BYTE v2CRLWithIssuingDistPoint
[] = { 0x30,0x5c,0x02,0x01,0x01,
1383 0x03,0x55,0x1d,0x13,0x04,0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01 };
1384 static void test_encodeCRLToBeSigned(DWORD dwEncoding
)
1387 BYTE
*buf
= ((void *)0);
1389 CRL_INFO info
= { 0 };
1391 (winetest_set_location("encode.c", 3386), 0) ? 0 : winetest_ok(size
== sizeof(v1CRLWithIssuerAndEntry
),
1392 "Wrong size %d\n", size
);
1396 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)3), &info
,
1397 0x08000, ((void *)0), (BYTE
*)&buf
, &size
);
1403 static const BYTE verisignCRL
[] = { 0x30, 0x82, 0x01, 0xb1, 0x30, 0x82, 0x01,
1404 0x61,0xc0,0x99,0x16,0x71,0x05,0xb6,0x25,0x14,0x64,0x4f,0x30 };
1405 static void test_decodeCRLToBeSigned(DWORD dwEncoding
)
1408 BYTE
*buf
= ((void *)0);
1412 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)3),
1413 (BYTE
*)&buf
, &size
);
1415 CRL_INFO
*info
= (CRL_INFO
*)buf
;
1416 (winetest_set_location("encode.c", 4016), 0) ? 0 : winetest_ok(info
->cCRLEntry
== 0, "Expected 0 CRL entries, got %d\n",
1417 "Unexpected issuer\n");
1419 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)3),
1420 0x08000, ((void *)0), (BYTE
*)&buf
, &size
);
1422 CRL_INFO
*info
= (CRL_INFO
*)buf
;
1423 (winetest_set_location("encode.c", 4041), 0) ? 0 : winetest_ok(info
->cCRLEntry
== 1, "Expected 1 CRL entries, got %d\n",
1424 "Unexpected issuer\n");
1426 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)3),
1427 0x08000, ((void *)0), (BYTE
*)&buf
, &size
);
1429 CRL_INFO
*info
= (CRL_INFO
*)buf
;
1430 (winetest_set_location("encode.c", 4085), 0) ? 0 : winetest_ok(info
->cCRLEntry
== 209, "Expected 209 CRL entries, got %d\n",
1433 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)3),
1434 ((void *)0), (BYTE
*)&buf
, &size
);
1438 static const BYTE authorityKeyIdWithIssuer
[] = { 0x30,0x19,0xa1,0x17,0x30,0x15,
1439 0x20,0x4c,0x61,0x6e,0x67,0x00 };
1440 static const BYTE authorityKeyIdWithSerial
[] = { 0x30,0x03,0x82,0x01,0x01 };
1441 static void test_encodeAuthorityKeyId(DWORD dwEncoding
)
1443 CERT_AUTHORITY_KEY_ID_INFO info
= { { 0 } };
1445 BYTE
*buf
= ((void *)0);
1451 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)9), &info
,
1452 0x08000, ((void *)0), (BYTE
*)&buf
, &size
);
1455 ret
= CryptEncodeObjectEx(dwEncoding
, ((LPCSTR
)9), &info
,
1456 0x08000, ((void *)0), (BYTE
*)&buf
, &size
);
1458 (winetest_set_location("encode.c", 4284), 0) ? 0 : winetest_ok(size
== sizeof(authorityKeyIdWithSerial
), "Unexpected size %d\n",
1462 static void test_decodeAuthorityKeyId(DWORD dwEncoding
)
1465 LPBYTE buf
= ((void *)0);
1467 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)9),
1468 (BYTE
*)&buf
, &size
);
1471 ret
= CryptDecodeObjectEx(dwEncoding
, ((LPCSTR
)9),
1472 0x08000, ((void *)0), (BYTE
*)&buf
, &size
);
1474 (winetest_set_location("encode.c", 4355), 0) ? 0 : winetest_ok(size
>= sizeof(CERT_AUTHORITY_KEY_ID_INFO
), "Unexpected size %d\n",
1475 "Unexpected serial number\n");
1478 static void testExportPublicKey(HCRYPTPROV csp
, PCERT_PUBLIC_KEY_INFO
*pInfo
)
1483 ret
= CryptExportPublicKeyInfoEx(csp
, 2, 0x00000001,
1484 ((void *)0), 0, ((void *)0), ((void *)0), &size
);
1487 (winetest_set_location("encode.c", 4416), 0) ? 0 : winetest_ok(!__extension__ ({ size_t __s1_len
, __s2_len
; (__builtin_constant_p ((*pInfo
)->Algorithm
.pszObjId
) && __builtin_constant_p ("1.2.840.113549.1.1.1") && (__s1_len
= strlen ((*pInfo
)->Algorithm
.pszObjId
), __s2_len
= strlen ("1.2.840.113549.1.1.1"), (!((size_t)(const void *)(((*pInfo
)->Algorithm
.pszObjId
) + 1) - (size_t)(const void *)((*pInfo
)->Algorithm
.pszObjId
) == 1) || __s1_len
>= 4) && (!((size_t)(const void *)(("1.2.840.113549.1.1.1") + 1) - (size_t)(const void *)("1.2.840.113549.1.1.1") == 1) || __s2_len
>= 4)) ? __builtin_strcmp ((*pInfo
)->Algorithm
.pszObjId
, "1.2.840.113549.1.1.1") : (__builtin_constant_p ((*pInfo
)->Algorithm
.pszObjId
) && ((size_t)(const void *)(((*pInfo
)->Algorithm
.pszObjId
) + 1) - (size_t)(const void *)((*pInfo
)->Algorithm
.pszObjId
) == 1) && (__s1_len
= strlen ((*pInfo
)->Algorithm
.pszObjId
), __s1_len
< 4) ? (__builtin_constant_p ("1.2.840.113549.1.1.1") && ((size_t)(const void *)(("1.2.840.113549.1.1.1") + 1) - (size_t)(const void *)("1.2.840.113549.1.1.1") == 1) ? __builtin_strcmp ((*pInfo
)->Algorithm
.pszObjId
, "1.2.840.113549.1.1.1") : (__extension__ ({ __const
unsigned char *__s2
= (__const
unsigned char *) (__const
char *) ("1.2.840.113549.1.1.1"); register int __result
= (((__const
unsigned char *) (__const
char *) ((*pInfo
)->Algorithm
.pszObjId
))[0] - __s2
[0]); if (__s1_len
> 0 && __result
== 0) { __result
= (((__const
unsigned char *) (__const
char *) ((*pInfo
)->Algorithm
.pszObjId
))[1] - __s2
[1]); if (__s1_len
> 1 && __result
== 0) { __result
= (((__const
unsigned char *) (__const
char *) ((*pInfo
)->Algorithm
.pszObjId
))[2] - __s2
[2]); if (__s1_len
> 2 && __result
== 0) __result
= (((__const
unsigned char *) (__const
char *) ((*pInfo
)->Algorithm
.pszObjId
))[3] - __s2
[3]); } } __result
; }))) : (__builtin_constant_p ("1.2.840.113549.1.1.1") && ((size_t)(const void *)(("1.2.840.113549.1.1.1") + 1) - (size_t)(const void *)("1.2.840.113549.1.1.1") == 1) && (__s2_len
= strlen ("1.2.840.113549.1.1.1"), __s2_len
< 4) ? (__builtin_constant_p ((*pInfo
)->Algorithm
.pszObjId
) && ((size_t)(const void *)(((*pInfo
)->Algorithm
.pszObjId
) + 1) - (size_t)(const void *)((*pInfo
)->Algorithm
.pszObjId
) == 1) ? __builtin_strcmp ((*pInfo
)->Algorithm
.pszObjId
, "1.2.840.113549.1.1.1") : (__extension__ ({ __const
unsigned char *__s1
= (__const
unsigned char *) (__const
char *) ((*pInfo
)->Algorithm
.pszObjId
); register int __result
= __s1
[0] - ((__const
unsigned char *) (__const
char *) ("1.2.840.113549.1.1.1"))[0]; if (__s2_len
> 0 && __result
== 0) { __result
= (__s1
[1] - ((__const
unsigned char *) (__const
char *) ("1.2.840.113549.1.1.1"))[1]); if (__s2_len
> 1 && __result
== 0) { __result
= (__s1
[2] - ((__const
unsigned char *) (__const
char *) ("1.2.840.113549.1.1.1"))[2]); if (__s2_len
> 2 && __result
== 0) __result
= (__s1
[3] - ((__const
unsigned char *) (__const
char *) ("1.2.840.113549.1.1.1"))[3]); } } __result
; }))) : __builtin_strcmp ((*pInfo
)->Algorithm
.pszObjId
, "1.2.840.113549.1.1.1")))); }),
1488 (*pInfo
)->Algorithm
.pszObjId
);
1493 static const BYTE expiredCert
[] = { 0x30, 0x82, 0x01, 0x33, 0x30, 0x81, 0xe2,
1494 0x49, 0xe5, 0xf9, 0x65, 0xf3 };
1495 static void testImportPublicKey(HCRYPTPROV csp
, PCERT_PUBLIC_KEY_INFO info
)
1499 PCCERT_CONTEXT context
;
1500 (winetest_set_location("encode.c", 4464), 0) ? 0 : winetest_ok(!ret
&& GetLastError() == 2,
1503 (winetest_set_location("encode.c", 4485), 0) ? 0 : winetest_ok(!__extension__ ({ size_t __s1_len
, __s2_len
; (__builtin_constant_p ("1.2.840.113549.1.1.1") && __builtin_constant_p (context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
) && (__s1_len
= strlen ("1.2.840.113549.1.1.1"), __s2_len
= strlen (context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
), (!((size_t)(const void *)(("1.2.840.113549.1.1.1") + 1) - (size_t)(const void *)("1.2.840.113549.1.1.1") == 1) || __s1_len
>= 4) && (!((size_t)(const void *)((context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
) + 1) - (size_t)(const void *)(context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
) == 1) || __s2_len
>= 4)) ? __builtin_strcmp ("1.2.840.113549.1.1.1", context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
) : (__builtin_constant_p ("1.2.840.113549.1.1.1") && ((size_t)(const void *)(("1.2.840.113549.1.1.1") + 1) - (size_t)(const void *)("1.2.840.113549.1.1.1") == 1) && (__s1_len
= strlen ("1.2.840.113549.1.1.1"), __s1_len
< 4) ? (__builtin_constant_p (context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
) && ((size_t)(const void *)((context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
) + 1) - (size_t)(const void *)(context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
) == 1) ? __builtin_strcmp ("1.2.840.113549.1.1.1", context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
) : (__extension__ ({ __const
unsigned char *__s2
= (__const
unsigned char *) (__const
char *) (context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
); register int __result
= (((__const
unsigned char *) (__const
char *) ("1.2.840.113549.1.1.1"))[0] - __s2
[0]); if (__s1_len
> 0 && __result
== 0) { __result
= (((__const
unsigned char *) (__const
char *) ("1.2.840.113549.1.1.1"))[1] - __s2
[1]); if (__s1_len
> 1 && __result
== 0) { __result
= (((__const
unsigned char *) (__const
char *) ("1.2.840.113549.1.1.1"))[2] - __s2
[2]); if (__s1_len
> 2 && __result
== 0) __result
= (((__const
unsigned char *) (__const
char *) ("1.2.840.113549.1.1.1"))[3] - __s2
[3]); } } __result
; }))) : (__builtin_constant_p (context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
) && ((size_t)(const void *)((context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
) + 1) - (size_t)(const void *)(context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
) == 1) && (__s2_len
= strlen (context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
), __s2_len
< 4) ? (__builtin_constant_p ("1.2.840.113549.1.1.1") && ((size_t)(const void *)(("1.2.840.113549.1.1.1") + 1) - (size_t)(const void *)("1.2.840.113549.1.1.1") == 1) ? __builtin_strcmp ("1.2.840.113549.1.1.1", context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
) : (__extension__ ({ __const
unsigned char *__s1
= (__const
unsigned char *) (__const
char *) ("1.2.840.113549.1.1.1"); register int __result
= __s1
[0] - ((__const
unsigned char *) (__const
char *) (context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
))[0]; if (__s2_len
> 0 && __result
== 0) { __result
= (__s1
[1] - ((__const
unsigned char *) (__const
char *) (context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
))[1]); if (__s2_len
> 1 && __result
== 0) { __result
= (__s1
[2] - ((__const
unsigned char *) (__const
char *) (context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
))[2]); if (__s2_len
> 2 && __result
== 0) __result
= (__s1
[3] - ((__const
unsigned char *) (__const
char *) (context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
))[3]); } } __result
; }))) : __builtin_strcmp ("1.2.840.113549.1.1.1", context
->pCertInfo
->SubjectPublicKeyInfo
.Algorithm
.pszObjId
)))); }),
1504 &context
->pCertInfo
->SubjectPublicKeyInfo
, 0, 0, ((void *)0), &key
);
1507 static const char cspName
[] = "WineCryptTemp";
1508 static void testPortPublicKeyInfo(void)
1512 CryptAcquireContextA(&csp
, cspName
, "Microsoft Base Cryptographic Provider v1.0", 1,
1514 ret
= CryptAcquireContextA(&csp
, cspName
, "Microsoft Base Cryptographic Provider v1.0", 1,
1517 void func_encode(void)
1519 test_encodeCRLDistPoints(0x00000001);
1522 /* { dg-final { scan-tree-dump-times " xxxinfo = {}" 1 "dse1"} } */