widl: Import Wine version 10.9 Signed-off-by: Jacek Caban <jacek@codeweavers.com>
diff --git a/mingw-w64-tools/widl/Makefile.am b/mingw-w64-tools/widl/Makefile.am index 5148e1f..75558b0 100644 --- a/mingw-w64-tools/widl/Makefile.am +++ b/mingw-w64-tools/widl/Makefile.am
@@ -17,6 +17,7 @@ src/expr.c \ src/hash.c \ src/header.c \ + src/metadata.c \ src/parser.tab.c \ src/parser.yy.c \ src/port/getopt.c \
diff --git a/mingw-w64-tools/widl/Makefile.in b/mingw-w64-tools/widl/Makefile.in index 7c9eae6..1233ca7 100644 --- a/mingw-w64-tools/widl/Makefile.in +++ b/mingw-w64-tools/widl/Makefile.in
@@ -109,15 +109,15 @@ am_widl_OBJECTS = src/widl-attribute.$(OBJEXT) \ src/widl-client.$(OBJEXT) src/widl-expr.$(OBJEXT) \ src/widl-hash.$(OBJEXT) src/widl-header.$(OBJEXT) \ - src/widl-parser.tab.$(OBJEXT) src/widl-parser.yy.$(OBJEXT) \ - src/port/widl-getopt.$(OBJEXT) src/port/widl-port.$(OBJEXT) \ - src/widl-ppl.yy.$(OBJEXT) src/widl-ppy.tab.$(OBJEXT) \ - src/widl-proxy.$(OBJEXT) src/widl-register.$(OBJEXT) \ - src/widl-server.$(OBJEXT) src/widl-typegen.$(OBJEXT) \ - src/widl-typelib.$(OBJEXT) src/widl-typetree.$(OBJEXT) \ - src/widl-utils.$(OBJEXT) src/widl-widl.$(OBJEXT) \ - src/widl-wpp.$(OBJEXT) src/widl-write_sltg.$(OBJEXT) \ - src/widl-write_msft.$(OBJEXT) + src/widl-metadata.$(OBJEXT) src/widl-parser.tab.$(OBJEXT) \ + src/widl-parser.yy.$(OBJEXT) src/port/widl-getopt.$(OBJEXT) \ + src/port/widl-port.$(OBJEXT) src/widl-ppl.yy.$(OBJEXT) \ + src/widl-ppy.tab.$(OBJEXT) src/widl-proxy.$(OBJEXT) \ + src/widl-register.$(OBJEXT) src/widl-server.$(OBJEXT) \ + src/widl-typegen.$(OBJEXT) src/widl-typelib.$(OBJEXT) \ + src/widl-typetree.$(OBJEXT) src/widl-utils.$(OBJEXT) \ + src/widl-widl.$(OBJEXT) src/widl-wpp.$(OBJEXT) \ + src/widl-write_sltg.$(OBJEXT) src/widl-write_msft.$(OBJEXT) widl_OBJECTS = $(am_widl_OBJECTS) widl_LDADD = $(LDADD) widl_LINK = $(CCLD) $(widl_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ @@ -140,6 +140,7 @@ am__depfiles_remade = src/$(DEPDIR)/widl-attribute.Po \ src/$(DEPDIR)/widl-client.Po src/$(DEPDIR)/widl-expr.Po \ src/$(DEPDIR)/widl-hash.Po src/$(DEPDIR)/widl-header.Po \ + src/$(DEPDIR)/widl-metadata.Po \ src/$(DEPDIR)/widl-parser.tab.Po \ src/$(DEPDIR)/widl-parser.yy.Po src/$(DEPDIR)/widl-ppl.yy.Po \ src/$(DEPDIR)/widl-ppy.tab.Po src/$(DEPDIR)/widl-proxy.Po \ @@ -341,6 +342,7 @@ src/expr.c \ src/hash.c \ src/header.c \ + src/metadata.c \ src/parser.tab.c \ src/parser.yy.c \ src/port/getopt.c \ @@ -492,6 +494,8 @@ src/$(DEPDIR)/$(am__dirstamp) src/widl-header.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) +src/widl-metadata.$(OBJEXT): src/$(am__dirstamp) \ + src/$(DEPDIR)/$(am__dirstamp) src/widl-parser.tab.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/widl-parser.yy.$(OBJEXT): src/$(am__dirstamp) \ @@ -550,6 +554,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-expr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-hash.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-header.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-metadata.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-parser.tab.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-parser.yy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/widl-ppl.yy.Po@am__quote@ # am--include-marker @@ -660,6 +665,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/widl-header.obj `if test -f 'src/header.c'; then $(CYGPATH_W) 'src/header.c'; else $(CYGPATH_W) '$(srcdir)/src/header.c'; fi` +src/widl-metadata.o: src/metadata.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/widl-metadata.o -MD -MP -MF src/$(DEPDIR)/widl-metadata.Tpo -c -o src/widl-metadata.o `test -f 'src/metadata.c' || echo '$(srcdir)/'`src/metadata.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/widl-metadata.Tpo src/$(DEPDIR)/widl-metadata.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/metadata.c' object='src/widl-metadata.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/widl-metadata.o `test -f 'src/metadata.c' || echo '$(srcdir)/'`src/metadata.c + +src/widl-metadata.obj: src/metadata.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/widl-metadata.obj -MD -MP -MF src/$(DEPDIR)/widl-metadata.Tpo -c -o src/widl-metadata.obj `if test -f 'src/metadata.c'; then $(CYGPATH_W) 'src/metadata.c'; else $(CYGPATH_W) '$(srcdir)/src/metadata.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/widl-metadata.Tpo src/$(DEPDIR)/widl-metadata.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/metadata.c' object='src/widl-metadata.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -c -o src/widl-metadata.obj `if test -f 'src/metadata.c'; then $(CYGPATH_W) 'src/metadata.c'; else $(CYGPATH_W) '$(srcdir)/src/metadata.c'; fi` + src/widl-parser.tab.o: src/parser.tab.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(widl_CPPFLAGS) $(CPPFLAGS) $(widl_CFLAGS) $(CFLAGS) -MT src/widl-parser.tab.o -MD -MP -MF src/$(DEPDIR)/widl-parser.tab.Tpo -c -o src/widl-parser.tab.o `test -f 'src/parser.tab.c' || echo '$(srcdir)/'`src/parser.tab.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/widl-parser.tab.Tpo src/$(DEPDIR)/widl-parser.tab.Po @@ -1180,6 +1199,7 @@ -rm -f src/$(DEPDIR)/widl-expr.Po -rm -f src/$(DEPDIR)/widl-hash.Po -rm -f src/$(DEPDIR)/widl-header.Po + -rm -f src/$(DEPDIR)/widl-metadata.Po -rm -f src/$(DEPDIR)/widl-parser.tab.Po -rm -f src/$(DEPDIR)/widl-parser.yy.Po -rm -f src/$(DEPDIR)/widl-ppl.yy.Po @@ -1249,6 +1269,7 @@ -rm -f src/$(DEPDIR)/widl-expr.Po -rm -f src/$(DEPDIR)/widl-hash.Po -rm -f src/$(DEPDIR)/widl-header.Po + -rm -f src/$(DEPDIR)/widl-metadata.Po -rm -f src/$(DEPDIR)/widl-parser.tab.Po -rm -f src/$(DEPDIR)/widl-parser.yy.Po -rm -f src/$(DEPDIR)/widl-ppl.yy.Po
diff --git a/mingw-w64-tools/widl/VERSION b/mingw-w64-tools/widl/VERSION index c8b6a6e..eaecc03 100644 --- a/mingw-w64-tools/widl/VERSION +++ b/mingw-w64-tools/widl/VERSION
@@ -1 +1 @@ -WIDL version 10.8 +WIDL version 10.9
diff --git a/mingw-w64-tools/widl/configure b/mingw-w64-tools/widl/configure index d6d92f2..8a670b8 100755 --- a/mingw-w64-tools/widl/configure +++ b/mingw-w64-tools/widl/configure
@@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for widl 10.8. +# Generated by GNU Autoconf 2.72 for widl 10.9. # # Report bugs to <mingw-w64-public@lists.sourceforge.net>. # @@ -603,8 +603,8 @@ # Identity of this package. PACKAGE_NAME='widl' PACKAGE_TARNAME='widl' -PACKAGE_VERSION='10.8' -PACKAGE_STRING='widl 10.8' +PACKAGE_VERSION='10.9' +PACKAGE_STRING='widl 10.9' PACKAGE_BUGREPORT='mingw-w64-public@lists.sourceforge.net' PACKAGE_URL='' @@ -1311,7 +1311,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures widl 10.8 to adapt to many kinds of systems. +'configure' configures widl 10.9 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1383,7 +1383,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of widl 10.8:";; + short | recursive ) echo "Configuration of widl 10.9:";; esac cat <<\_ACEOF @@ -1485,7 +1485,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -widl configure 10.8 +widl configure 10.9 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. @@ -1910,7 +1910,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by widl $as_me 10.8, which was +It was created by widl $as_me 10.9, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -3327,7 +3327,7 @@ # Define the identity of the package. PACKAGE='widl' - VERSION='10.8' + VERSION='10.9' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -5797,7 +5797,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by widl $as_me 10.8, which was +This file was extended by widl $as_me 10.9, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -5865,7 +5865,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -widl config.status 10.8 +widl config.status 10.9 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\"
diff --git a/mingw-w64-tools/widl/include/bcrypt.h b/mingw-w64-tools/widl/include/bcrypt.h new file mode 100644 index 0000000..b7d6c16 --- /dev/null +++ b/mingw-w64-tools/widl/include/bcrypt.h
@@ -0,0 +1,580 @@ +/* + * Copyright (C) 2007 Francois Gouget + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __WINE_BCRYPT_H +#define __WINE_BCRYPT_H + +#ifndef WINAPI +#define WINAPI __stdcall +#endif + +#ifndef IN +#define IN +#endif + +#ifndef OUT +#define OUT +#endif + +#ifndef OPTIONAL +#define OPTIONAL +#endif + +#ifndef WINE_NTSTATUS_DECLARED +#define WINE_NTSTATUS_DECLARED +typedef LONG NTSTATUS; +#endif + +#if defined(_MSC_VER) || defined(__MINGW32__) +#define BCRYPT_ALGORITHM_NAME L"AlgorithmName" +#define BCRYPT_AUTH_TAG_LENGTH L"AuthTagLength" +#define BCRYPT_BLOCK_LENGTH L"BlockLength" +#define BCRYPT_BLOCK_SIZE_LIST L"BlockSizeList" +#define BCRYPT_CHAINING_MODE L"ChainingMode" +#define BCRYPT_EFFECTIVE_KEY_LENGTH L"EffectiveKeyLength" +#define BCRYPT_HASH_BLOCK_LENGTH L"HashBlockLength" +#define BCRYPT_HASH_LENGTH L"HashDigestLength" +#define BCRYPT_HASH_OID_LIST L"HashOIDList" +#define BCRYPT_KEY_LENGTH L"KeyLength" +#define BCRYPT_KEY_LENGTHS L"KeyLengths" +#define BCRYPT_KEY_OBJECT_LENGTH L"KeyObjectLength" +#define BCRYPT_KEY_STRENGTH L"KeyStrength" +#define BCRYPT_OBJECT_LENGTH L"ObjectLength" +#define BCRYPT_PADDING_SCHEMES L"PaddingSchemes" +#define BCRYPT_PROVIDER_HANDLE L"ProviderHandle" +#define BCRYPT_SIGNATURE_LENGTH L"SignatureLength" +#define BCRYPT_PUBLIC_KEY_LENGTH L"PublicKeyLength" + +#define BCRYPT_OPAQUE_KEY_BLOB L"OpaqueKeyBlob" +#define BCRYPT_KEY_DATA_BLOB L"KeyDataBlob" +#define BCRYPT_AES_WRAP_KEY_BLOB L"Rfc3565KeyWrapBlob" +#define BCRYPT_ECCPUBLIC_BLOB L"ECCPUBLICBLOB" +#define BCRYPT_ECCPRIVATE_BLOB L"ECCPRIVATEBLOB" +#define BCRYPT_RSAPUBLIC_BLOB L"RSAPUBLICBLOB" +#define BCRYPT_RSAPRIVATE_BLOB L"RSAPRIVATEBLOB" +#define BCRYPT_RSAFULLPRIVATE_BLOB L"RSAFULLPRIVATEBLOB" +#define BCRYPT_DSA_PUBLIC_BLOB L"DSAPUBLICBLOB" +#define BCRYPT_DSA_PRIVATE_BLOB L"DSAPRIVATEBLOB" +#define BCRYPT_PUBLIC_KEY_BLOB L"PUBLICBLOB" +#define BCRYPT_PRIVATE_KEY_BLOB L"PRIVATEBLOB" +#define BCRYPT_DH_PUBLIC_BLOB L"DHPUBLICBLOB" +#define BCRYPT_DH_PRIVATE_BLOB L"DHPRIVATEBLOB" +#define LEGACY_DSA_PUBLIC_BLOB L"CAPIDSAPUBLICBLOB" +#define LEGACY_DSA_PRIVATE_BLOB L"CAPIDSAPRIVATEBLOB" +#define LEGACY_DSA_V2_PUBLIC_BLOB L"V2CAPIDSAPUBLICBLOB" +#define LEGACY_DSA_V2_PRIVATE_BLOB L"V2CAPIDSAPRIVATEBLOB" +#define LEGACY_RSAPUBLIC_BLOB L"CAPIPUBLICBLOB" +#define LEGACY_RSAPRIVATE_BLOB L"CAPIPRIVATEBLOB" + +#define MS_PRIMITIVE_PROVIDER L"Microsoft Primitive Provider" +#define MS_PLATFORM_CRYPTO_PROVIDER L"Microsoft Platform Crypto Provider" + +#define BCRYPT_3DES_ALGORITHM L"3DES" +#define BCRYPT_AES_ALGORITHM L"AES" +#define BCRYPT_DES_ALGORITHM L"DES" +#define BCRYPT_DH_ALGORITHM L"DH" +#define BCRYPT_DSA_ALGORITHM L"DSA" +#define BCRYPT_ECDH_P256_ALGORITHM L"ECDH_P256" +#define BCRYPT_ECDH_P384_ALGORITHM L"ECDH_P384" +#define BCRYPT_ECDSA_P256_ALGORITHM L"ECDSA_P256" +#define BCRYPT_ECDSA_P384_ALGORITHM L"ECDSA_P384" +#define BCRYPT_ECDSA_P521_ALGORITHM L"ECDSA_P521" +#define BCRYPT_MD2_ALGORITHM L"MD2" +#define BCRYPT_MD4_ALGORITHM L"MD4" +#define BCRYPT_MD5_ALGORITHM L"MD5" +#define BCRYPT_RC2_ALGORITHM L"RC2" +#define BCRYPT_RC4_ALGORITHM L"RC4" +#define BCRYPT_RNG_ALGORITHM L"RNG" +#define BCRYPT_RSA_ALGORITHM L"RSA" +#define BCRYPT_RSA_SIGN_ALGORITHM L"RSA_SIGN" +#define BCRYPT_SHA1_ALGORITHM L"SHA1" +#define BCRYPT_SHA256_ALGORITHM L"SHA256" +#define BCRYPT_SHA384_ALGORITHM L"SHA384" +#define BCRYPT_SHA512_ALGORITHM L"SHA512" +#define BCRYPT_PBKDF2_ALGORITHM L"PBKDF2" + +#define BCRYPT_CHAIN_MODE_NA L"ChainingModeN/A" +#define BCRYPT_CHAIN_MODE_CBC L"ChainingModeCBC" +#define BCRYPT_CHAIN_MODE_ECB L"ChainingModeECB" +#define BCRYPT_CHAIN_MODE_CFB L"ChainingModeCFB" +#define BCRYPT_CHAIN_MODE_CCM L"ChainingModeCCM" +#define BCRYPT_CHAIN_MODE_GCM L"ChainingModeGCM" + +#define BCRYPT_KDF_HASH L"HASH" +#define BCRYPT_KDF_HMAC L"HMAC" +#define BCRYPT_KDF_TLS_PRF L"TLS_PRF" +#define BCRYPT_KDF_SP80056A_CONCAT L"SP800_56A_CONCAT" +#define BCRYPT_KDF_RAW_SECRET L"TRUNCATE" + +#define BCRYPT_DH_PARAMETERS L"DHParameters" +#else +static const WCHAR BCRYPT_ALGORITHM_NAME[] = {'A','l','g','o','r','i','t','h','m','N','a','m','e',0}; +static const WCHAR BCRYPT_AUTH_TAG_LENGTH[] = {'A','u','t','h','T','a','g','L','e','n','g','t','h',0}; +static const WCHAR BCRYPT_BLOCK_LENGTH[] = {'B','l','o','c','k','L','e','n','g','t','h',0}; +static const WCHAR BCRYPT_BLOCK_SIZE_LIST[] = {'B','l','o','c','k','S','i','z','e','L','i','s','t',0}; +static const WCHAR BCRYPT_CHAINING_MODE[] = {'C','h','a','i','n','i','n','g','M','o','d','e',0}; +static const WCHAR BCRYPT_EFFECTIVE_KEY_LENGTH[] = {'E','f','f','e','c','t','i','v','e','K','e','y','L','e','n','g','t','h',0}; +static const WCHAR BCRYPT_HASH_BLOCK_LENGTH[] = {'H','a','s','h','B','l','o','c','k','L','e','n','g','t','h',0}; +static const WCHAR BCRYPT_HASH_LENGTH[] = {'H','a','s','h','D','i','g','e','s','t','L','e','n','g','t','h',0}; +static const WCHAR BCRYPT_HASH_OID_LIST[] = {'H','a','s','h','O','I','D','L','i','s','t',0}; +static const WCHAR BCRYPT_KEY_LENGTH[] = {'K','e','y','L','e','n','g','t','h',0}; +static const WCHAR BCRYPT_KEY_LENGTHS[] = {'K','e','y','L','e','n','g','t','h','s',0}; +static const WCHAR BCRYPT_KEY_OBJECT_LENGTH[] = {'K','e','y','O','b','j','e','c','t','L','e','n','g','t','h',0}; +static const WCHAR BCRYPT_KEY_STRENGTH[] = {'K','e','y','S','t','r','e','n','g','t','h',0}; +static const WCHAR BCRYPT_OBJECT_LENGTH[] = {'O','b','j','e','c','t','L','e','n','g','t','h',0}; +static const WCHAR BCRYPT_PADDING_SCHEMES[] = {'P','a','d','d','i','n','g','S','c','h','e','m','e','s',0}; +static const WCHAR BCRYPT_PROVIDER_HANDLE[] = {'P','r','o','v','i','d','e','r','H','a','n','d','l','e',0}; +static const WCHAR BCRYPT_SIGNATURE_LENGTH[] = {'S','i','g','n','a','t','u','r','e','L','e','n','g','t','h',0}; +static const WCHAR BCRYPT_PUBLIC_KEY_LENGTH[] = {'P','u','b','l','i','c','K','e','y','L','e','n','g','t','h',0}; + +static const WCHAR BCRYPT_OPAQUE_KEY_BLOB[] = {'O','p','a','q','u','e','K','e','y','B','l','o','b',0}; +static const WCHAR BCRYPT_KEY_DATA_BLOB[] = {'K','e','y','D','a','t','a','B','l','o','b',0}; +static const WCHAR BCRYPT_AES_WRAP_KEY_BLOB[] = {'R','f','c','3','5','6','5','K','e','y','W','r','a','p','B','l','o','b',0}; +static const WCHAR BCRYPT_ECCPUBLIC_BLOB[] = {'E','C','C','P','U','B','L','I','C','B','L','O','B',0}; +static const WCHAR BCRYPT_ECCPRIVATE_BLOB[] = {'E','C','C','P','R','I','V','A','T','E','B','L','O','B',0}; +static const WCHAR BCRYPT_RSAPUBLIC_BLOB[] = {'R','S','A','P','U','B','L','I','C','B','L','O','B',0}; +static const WCHAR BCRYPT_RSAPRIVATE_BLOB[] = {'R','S','A','P','R','I','V','A','T','E','B','L','O','B',0}; +static const WCHAR BCRYPT_RSAFULLPRIVATE_BLOB[] = {'R','S','A','F','U','L','L','P','R','I','V','A','T','E','B','L','O','B',0}; +static const WCHAR BCRYPT_DSA_PUBLIC_BLOB[] = {'D','S','A','P','U','B','L','I','C','B','L','O','B',0}; +static const WCHAR BCRYPT_DSA_PRIVATE_BLOB[] = {'D','S','A','P','R','I','V','A','T','E','B','L','O','B',0}; +static const WCHAR BCRYPT_PUBLIC_KEY_BLOB[] = {'P','U','B','L','I','C','B','L','O','B',0}; +static const WCHAR BCRYPT_PRIVATE_KEY_BLOB[] = {'P','R','I','V','A','T','E','B','L','O','B',0}; +static const WCHAR BCRYPT_DH_PUBLIC_BLOB[] = {'D','H','P','U','B','L','I','C','B','L','O','B',0}; +static const WCHAR BCRYPT_DH_PRIVATE_BLOB[] = {'D','H','P','R','I','V','A','T','E','B','L','O','B',0}; +static const WCHAR LEGACY_DSA_PUBLIC_BLOB[] = {'C','A','P','I','D','S','A','P','U','B','L','I','C','B','L','O','B',0}; +static const WCHAR LEGACY_DSA_PRIVATE_BLOB[] = {'C','A','P','I','D','S','A','P','R','I','V','A','T','E','B','L','O','B',0}; +static const WCHAR LEGACY_DSA_V2_PUBLIC_BLOB[] = {'V','2','C','A','P','I','D','S','A','P','U','B','L','I','C','B','L','O','B',0}; +static const WCHAR LEGACY_DSA_V2_PRIVATE_BLOB[] = {'V','2','C','A','P','I','D','S','A','P','R','I','V','A','T','E','B','L','O','B',0}; +static const WCHAR LEGACY_RSAPUBLIC_BLOB[] = {'C','A','P','I','P','U','B','L','I','C','B','L','O','B',0}; +static const WCHAR LEGACY_RSAPRIVATE_BLOB[] = {'C','A','P','I','P','R','I','V','A','T','E','B','L','O','B',0}; + +static const WCHAR MS_PRIMITIVE_PROVIDER[] = \ +{'M','i','c','r','o','s','o','f','t',' ','P','r','i','m','i','t','i','v','e',' ','P','r','o','v','i','d','e','r',0}; +static const WCHAR MS_PLATFORM_CRYPTO_PROVIDER[] = \ +{'M','i','c','r','o','s','o','f','t',' ','P','l','a','t','f','o','r','m',' ','C','r','y','p','t','o',' ','P','r','o','v','i','d','e','r',0}; + +static const WCHAR BCRYPT_3DES_ALGORITHM[] = {'3','D','E','S',0}; +static const WCHAR BCRYPT_AES_ALGORITHM[] = {'A','E','S',0}; +static const WCHAR BCRYPT_DES_ALGORITHM[] = {'D','E','S',0}; +static const WCHAR BCRYPT_DH_ALGORITHM[] = {'D','H',0}; +static const WCHAR BCRYPT_DSA_ALGORITHM[] = {'D','S','A',0}; +static const WCHAR BCRYPT_ECDH_P256_ALGORITHM[] = {'E','C','D','H','_','P','2','5','6',0}; +static const WCHAR BCRYPT_ECDH_P384_ALGORITHM[] = {'E','C','D','H','_','P','3','8','4',0}; +static const WCHAR BCRYPT_ECDSA_P256_ALGORITHM[] = {'E','C','D','S','A','_','P','2','5','6',0}; +static const WCHAR BCRYPT_ECDSA_P384_ALGORITHM[] = {'E','C','D','S','A','_','P','3','8','4',0}; +static const WCHAR BCRYPT_ECDSA_P521_ALGORITHM[] = {'E','C','D','S','A','_','P','5','2','1',0}; +static const WCHAR BCRYPT_MD2_ALGORITHM[] = {'M','D','2',0}; +static const WCHAR BCRYPT_MD4_ALGORITHM[] = {'M','D','4',0}; +static const WCHAR BCRYPT_MD5_ALGORITHM[] = {'M','D','5',0}; +static const WCHAR BCRYPT_RC2_ALGORITHM[] = {'R','C','2',0}; +static const WCHAR BCRYPT_RC4_ALGORITHM[] = {'R','C','4',0}; +static const WCHAR BCRYPT_RNG_ALGORITHM[] = {'R','N','G',0}; +static const WCHAR BCRYPT_RSA_ALGORITHM[] = {'R','S','A',0}; +static const WCHAR BCRYPT_RSA_SIGN_ALGORITHM[] = {'R','S','A','_','S','I','G','N',0}; +static const WCHAR BCRYPT_SHA1_ALGORITHM[] = {'S','H','A','1',0}; +static const WCHAR BCRYPT_SHA256_ALGORITHM[] = {'S','H','A','2','5','6',0}; +static const WCHAR BCRYPT_SHA384_ALGORITHM[] = {'S','H','A','3','8','4',0}; +static const WCHAR BCRYPT_SHA512_ALGORITHM[] = {'S','H','A','5','1','2',0}; +static const WCHAR BCRYPT_PBKDF2_ALGORITHM[] = {'P','B','K','D','F','2',0}; + +static const WCHAR BCRYPT_CHAIN_MODE_NA[] = {'C','h','a','i','n','i','n','g','M','o','d','e','N','/','A',0}; +static const WCHAR BCRYPT_CHAIN_MODE_CBC[] = {'C','h','a','i','n','i','n','g','M','o','d','e','C','B','C',0}; +static const WCHAR BCRYPT_CHAIN_MODE_ECB[] = {'C','h','a','i','n','i','n','g','M','o','d','e','E','C','B',0}; +static const WCHAR BCRYPT_CHAIN_MODE_CFB[] = {'C','h','a','i','n','i','n','g','M','o','d','e','C','F','B',0}; +static const WCHAR BCRYPT_CHAIN_MODE_CCM[] = {'C','h','a','i','n','i','n','g','M','o','d','e','C','C','M',0}; +static const WCHAR BCRYPT_CHAIN_MODE_GCM[] = {'C','h','a','i','n','i','n','g','M','o','d','e','G','C','M',0}; + +static const WCHAR BCRYPT_KDF_HASH[] = {'H','A','S','H',0}; +static const WCHAR BCRYPT_KDF_HMAC[] = {'H','M','A','C',0}; +static const WCHAR BCRYPT_KDF_TLS_PRF[] = {'T','L','S','_','P','R','F',0}; +static const WCHAR BCRYPT_KDF_SP80056A_CONCAT[] = {'S','P','8','0','0','_','5','6','A','_','C','O','N','C','A','T',0}; +static const WCHAR BCRYPT_KDF_RAW_SECRET[] = {'T','R','U','N','C','A','T','E',0}; + +static const WCHAR BCRYPT_DH_PARAMETERS[] = {'D','H','P','a','r','a','m','e','t','e','r','s',0}; +#endif + +#define BCRYPT_ECDSA_PUBLIC_P256_MAGIC 0x31534345 +#define BCRYPT_ECDSA_PRIVATE_P256_MAGIC 0x32534345 +#define BCRYPT_ECDSA_PUBLIC_P384_MAGIC 0x33534345 +#define BCRYPT_ECDSA_PRIVATE_P384_MAGIC 0x34534345 +#define BCRYPT_ECDSA_PUBLIC_P521_MAGIC 0x35534345 +#define BCRYPT_ECDSA_PRIVATE_P521_MAGIC 0x36534345 + +#define BCRYPT_ECDH_PUBLIC_P256_MAGIC 0x314b4345 +#define BCRYPT_ECDH_PRIVATE_P256_MAGIC 0x324b4345 +#define BCRYPT_ECDH_PUBLIC_P384_MAGIC 0x334b4345 +#define BCRYPT_ECDH_PRIVATE_P384_MAGIC 0x344b4345 +#define BCRYPT_ECDH_PUBLIC_P521_MAGIC 0x354b4345 +#define BCRYPT_ECDH_PRIVATE_P521_MAGIC 0x364b4345 + +#define BCRYPT_CIPHER_OPERATION 0x00000001 +#define BCRYPT_HASH_OPERATION 0x00000002 +#define BCRYPT_ASYMMETRIC_ENCRYPTION_OPERATION 0x00000004 +#define BCRYPT_SECRET_AGREEMENT_OPERATION 0x00000008 +#define BCRYPT_SIGNATURE_OPERATION 0x00000010 +#define BCRYPT_RNG_OPERATION 0x00000020 +#define BCRYPT_KEY_DERIVATION_OPERATION 0x00000040 + +#define BCRYPT_CIPHER_INTERFACE 0x00000001 +#define BCRYPT_HASH_INTERFACE 0x00000002 +#define BCRYPT_ASYMMETRIC_ENCRYPTION_INTERFACE 0x00000003 +#define BCRYPT_SECRET_AGREEMENT_INTERFACE 0x00000004 +#define BCRYPT_SIGNATURE_INTERFACE 0x00000005 +#define BCRYPT_RNG_INTERFACE 0x00000006 +#define BCRYPT_KEY_DERIVATION_INTERFACE 0x00000007 + +#define BCRYPT_SUPPORTED_PAD_ROUTER 0x00000001 +#define BCRYPT_SUPPORTED_PAD_PKCS1_ENC 0x00000002 +#define BCRYPT_SUPPORTED_PAD_PKCS1_SIG 0x00000004 +#define BCRYPT_SUPPORTED_PAD_OAEP 0x00000008 +#define BCRYPT_SUPPORTED_PAD_PSS 0x00000010 + +typedef struct _BCRYPT_ALGORITHM_IDENTIFIER +{ + LPWSTR pszName; + ULONG dwClass; + ULONG dwFlags; +} BCRYPT_ALGORITHM_IDENTIFIER; + +typedef struct __BCRYPT_KEY_LENGTHS_STRUCT +{ + ULONG dwMinLength; + ULONG dwMaxLength; + ULONG dwIncrement; +} BCRYPT_KEY_LENGTHS_STRUCT, BCRYPT_AUTH_TAG_LENGTHS_STRUCT; + +typedef struct _BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO +{ + ULONG cbSize; + ULONG dwInfoVersion; + UCHAR *pbNonce; + ULONG cbNonce; + UCHAR *pbAuthData; + ULONG cbAuthData; + UCHAR *pbTag; + ULONG cbTag; + UCHAR *pbMacContext; + ULONG cbMacContext; + ULONG cbAAD; + ULONGLONG cbData; + ULONG dwFlags; +} BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO, *PBCRYPT_AUTHENTICATED_CIPHER_MODE_INFO; + +typedef struct _BCRYPT_KEY_BLOB +{ + ULONG Magic; +} BCRYPT_KEY_BLOB; + +typedef struct _BCRYPT_ECCKEY_BLOB +{ + ULONG dwMagic; + ULONG cbKey; +} BCRYPT_ECCKEY_BLOB, *PBCRYPT_ECCKEY_BLOB; + +#define BCRYPT_RSAPUBLIC_MAGIC 0x31415352 +#define BCRYPT_RSAPRIVATE_MAGIC 0x32415352 +#define BCRYPT_RSAFULLPRIVATE_MAGIC 0x33415352 + +typedef struct _BCRYPT_RSAKEY_BLOB +{ + ULONG Magic; + ULONG BitLength; + ULONG cbPublicExp; + ULONG cbModulus; + ULONG cbPrime1; + ULONG cbPrime2; +} BCRYPT_RSAKEY_BLOB; + +typedef struct _BCRYPT_PKCS1_PADDING_INFO +{ + LPCWSTR pszAlgId; +} BCRYPT_PKCS1_PADDING_INFO; + +typedef struct _BCRYPT_PSS_PADDING_INFO +{ + LPCWSTR pszAlgId; + ULONG cbSalt; +} BCRYPT_PSS_PADDING_INFO; + +typedef struct _BCRYPT_OAEP_PADDING_INFO +{ + LPCWSTR pszAlgId; + PUCHAR pbLabel; + ULONG cbLabel; +} BCRYPT_OAEP_PADDING_INFO; + +#define BCRYPT_PAD_NONE 0x00000001 +#define BCRYPT_PAD_PKCS1 0x00000002 +#define BCRYPT_PAD_OAEP 0x00000004 +#define BCRYPT_PAD_PSS 0x00000008 +#define BCRYPT_PAD_PKCS1_OPTIONAL_HASH_OID 0x00000010 + +#define BCRYPT_DSA_PUBLIC_MAGIC 0x42505344 +#define BCRYPT_DSA_PRIVATE_MAGIC 0x56505344 + +typedef struct _BCRYPT_DSA_KEY_BLOB +{ + ULONG dwMagic; + ULONG cbKey; + UCHAR Count[4]; + UCHAR Seed[20]; + UCHAR q[20]; +} BCRYPT_DSA_KEY_BLOB, *PBCRYPT_DSA_KEY_BLOB; + +#define BCRYPT_DSA_PUBLIC_MAGIC_V2 0x32425044 +#define BCRYPT_DSA_PRIVATE_MAGIC_V2 0x32565044 + +typedef enum +{ + DSA_HASH_ALGORITHM_SHA1, + DSA_HASH_ALGORITHM_SHA256, + DSA_HASH_ALGORITHM_SHA512 +} HASHALGORITHM_ENUM; + +typedef enum +{ + DSA_FIPS186_2, + DSA_FIPS186_3 +} DSAFIPSVERSION_ENUM; + +typedef struct _BCRYPT_DSA_KEY_BLOB_V2 +{ + ULONG dwMagic; + ULONG cbKey; + HASHALGORITHM_ENUM hashAlgorithm; + DSAFIPSVERSION_ENUM standardVersion; + ULONG cbSeedLength; + ULONG cbGroupSize; + UCHAR Count[4]; +} BCRYPT_DSA_KEY_BLOB_V2, *PBCRYPT_DSA_KEY_BLOB_V2; + +#define BCRYPT_DH_PUBLIC_MAGIC 0x42504844 +#define BCRYPT_DH_PRIVATE_MAGIC 0x56504844 + +typedef struct _BCRYPT_DH_KEY_BLOB +{ + ULONG dwMagic; + ULONG cbKey; +} BCRYPT_DH_KEY_BLOB, *PBCRYPT_DH_KEY_BLOB; + +#define BCRYPT_DH_PARAMETERS_MAGIC 0x4d504844 + +typedef struct _BCRYPT_DH_PARAMETER_HEADER +{ + ULONG cbLength; + ULONG dwMagic; + ULONG cbKeyLength; +} BCRYPT_DH_PARAMETER_HEADER; + +#define BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO_VERSION 1 + +#define BCRYPT_AUTH_MODE_CHAIN_CALLS_FLAG 0x00000001 +#define BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG 0x00000002 + +typedef struct _CRYPT_INTERFACE_REG +{ + ULONG dwInterface; + ULONG dwFlags; + ULONG cFunctions; + PWSTR *rgpszFunctions; +} CRYPT_INTERFACE_REG, *PCRYPT_INTERFACE_REG; + +typedef struct _CRYPT_IMAGE_REG +{ + PWSTR pszImage; + ULONG cInterfaces; + PCRYPT_INTERFACE_REG *rgpInterfaces; +} CRYPT_IMAGE_REG, *PCRYPT_IMAGE_REG; + +typedef struct _CRYPT_PROVIDER_REG +{ + ULONG cAliases; + PWSTR *rgpszAliases; + PCRYPT_IMAGE_REG pUM; + PCRYPT_IMAGE_REG pKM; +} CRYPT_PROVIDER_REG, *PCRYPT_PROVIDER_REG; + +typedef struct _BCRYPT_KEY_DATA_BLOB_HEADER +{ + ULONG dwMagic; + ULONG dwVersion; + ULONG cbKeyData; +} BCRYPT_KEY_DATA_BLOB_HEADER, *PBCRYPT_KEY_DATA_BLOB_HEADER; + +#define KDF_HASH_ALGORITHM 0x00 +#define KDF_SECRET_PREPEND 0x01 +#define KDF_SECRET_APPEND 0x02 +#define KDF_HMAC_KEY 0x03 +#define KDF_TLS_PRF_LABEL 0x04 +#define KDF_TLS_PRF_SEED 0x05 +#define KDF_SECRET_HANDLE 0x06 +#define KDF_TLS_PRF_PROTOCOL 0x07 +#define KDF_ALGORITHMID 0x08 +#define KDF_PARTYUINFO 0x09 +#define KDF_PARTYVINFO 0x0a +#define KDF_SUPPPUBINFO 0x0b +#define KDF_SUPPPRIVINFO 0x0c +#define KDF_LABEL 0x0d +#define KDF_CONTEXT 0x0e +#define KDF_SALT 0x0f +#define KDF_ITERATION_COUNT 0x10 + +typedef struct _BCryptBuffer +{ + ULONG cbBuffer; + ULONG BufferType; + void *pvBuffer; +} BCryptBuffer, *PBCryptBuffer; + +#define BCRYPTBUFFER_VERSION 0 + +typedef struct _BCryptBufferDesc +{ + ULONG ulVersion; + ULONG cBuffers; + PBCryptBuffer pBuffers; +} BCryptBufferDesc, *PBCryptBufferDesc; + +#define BCRYPT_KEY_DATA_BLOB_MAGIC 0x4d42444b +#define BCRYPT_KEY_DATA_BLOB_VERSION1 1 + +typedef PVOID BCRYPT_ALG_HANDLE; +typedef PVOID BCRYPT_KEY_HANDLE; +typedef PVOID BCRYPT_HANDLE; +typedef PVOID BCRYPT_HASH_HANDLE; +typedef PVOID BCRYPT_SECRET_HANDLE; + +/* Pseudo handles */ +#define BCRYPT_MD2_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000001) +#define BCRYPT_MD4_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000011) +#define BCRYPT_MD5_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000021) +#define BCRYPT_SHA1_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000031) +#define BCRYPT_SHA256_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000041) +#define BCRYPT_SHA384_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000051) +#define BCRYPT_SHA512_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000061) +#define BCRYPT_RC4_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000071) +#define BCRYPT_RNG_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000081) +#define BCRYPT_HMAC_MD5_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000091) +#define BCRYPT_HMAC_SHA1_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000000a1) +#define BCRYPT_HMAC_SHA256_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000000b1) +#define BCRYPT_HMAC_SHA384_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000000c1) +#define BCRYPT_HMAC_SHA512_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000000d1) +#define BCRYPT_RSA_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000000e1) +#define BCRYPT_ECDSA_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000000f1) +#define BCRYPT_AES_CMAC_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000101) +#define BCRYPT_AES_GMAC_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000111) +#define BCRYPT_HMAC_MD2_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000121) +#define BCRYPT_HMAC_MD4_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000131) +#define BCRYPT_3DES_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000141) +#define BCRYPT_3DES_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000151) +#define BCRYPT_3DES_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000161) +#define BCRYPT_3DES_112_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000171) +#define BCRYPT_3DES_112_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000181) +#define BCRYPT_3DES_112_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000191) +#define BCRYPT_AES_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000001a1) +#define BCRYPT_AES_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000001b1) +#define BCRYPT_AES_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000001c1) +#define BCRYPT_AES_CCM_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000001d1) +#define BCRYPT_AES_GCM_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000001e1) +#define BCRYPT_DES_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000001f1) +#define BCRYPT_DES_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000201) +#define BCRYPT_DES_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000211) +#define BCRYPT_DESX_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000221) +#define BCRYPT_DESX_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000231) +#define BCRYPT_DESX_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000241) +#define BCRYPT_RC2_CBC_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000251) +#define BCRYPT_RC2_ECB_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000261) +#define BCRYPT_RC2_CFB_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000271) +#define BCRYPT_DH_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000281) +#define BCRYPT_ECDH_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000291) +#define BCRYPT_ECDH_P256_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000002a1) +#define BCRYPT_ECDH_P384_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000002b1) +#define BCRYPT_ECDH_P521_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000002c1) +#define BCRYPT_DSA_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000002d1) +#define BCRYPT_ECDSA_P256_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000002e1) +#define BCRYPT_ECDSA_P384_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x000002f1) +#define BCRYPT_ECDSA_P521_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000301) +#define BCRYPT_RSA_SIGN_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000311) +#define BCRYPT_CAPI_KDF_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000321) +#define BCRYPT_PBKDF2_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000331) +#define BCRYPT_SP800108_CTR_HMAC_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000341) +#define BCRYPT_SP80056A_CONCAT_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000351) +#define BCRYPT_TLS1_1_KDF_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000361) +#define BCRYPT_TLS1_2_KDF_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000371) +#define BCRYPT_XTS_AES_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000381) +#define BCRYPT_HKDF_ALG_HANDLE ((BCRYPT_ALG_HANDLE)0x00000391) + +/* Flags for BCryptGenRandom */ +#define BCRYPT_RNG_USE_ENTROPY_IN_BUFFER 0x00000001 +#define BCRYPT_USE_SYSTEM_PREFERRED_RNG 0x00000002 + +/* Flags for BCryptOpenAlgorithmProvider */ +#define BCRYPT_ALG_HANDLE_HMAC_FLAG 0x00000008 + +/* Flags for BCryptEncrypt/BCryptDecrypt */ +#define BCRYPT_BLOCK_PADDING 0x00000001 + +/* Flags for BCryptCreateHash */ +#define BCRYPT_HASH_REUSABLE_FLAG 0x00000020 + +#define CRYPT_LOCAL 0x00000001 +#define CRYPT_DOMAIN 0x00000002 + +typedef struct _CRYPT_CONTEXT_FUNCTIONS +{ + ULONG cFunctions; + WCHAR **rgpszFunctions; +} CRYPT_CONTEXT_FUNCTIONS, *PCRYPT_CONTEXT_FUNCTIONS; + +NTSTATUS WINAPI BCryptAddContextFunction(ULONG, LPCWSTR, ULONG, LPCWSTR, ULONG); +NTSTATUS WINAPI BCryptCloseAlgorithmProvider(BCRYPT_ALG_HANDLE, ULONG); +NTSTATUS WINAPI BCryptCreateHash(BCRYPT_ALG_HANDLE, BCRYPT_HASH_HANDLE *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG); +NTSTATUS WINAPI BCryptDecrypt(BCRYPT_KEY_HANDLE, PUCHAR, ULONG, VOID *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG *, ULONG); +NTSTATUS WINAPI BCryptDeriveKey(BCRYPT_SECRET_HANDLE, LPCWSTR, BCryptBufferDesc*, PUCHAR, ULONG, ULONG *, ULONG); +NTSTATUS WINAPI BCryptDeriveKeyCapi(BCRYPT_HASH_HANDLE, BCRYPT_ALG_HANDLE, PUCHAR, ULONG, ULONG); +NTSTATUS WINAPI BCryptDeriveKeyPBKDF2(BCRYPT_ALG_HANDLE, PUCHAR, ULONG, PUCHAR, ULONG, ULONGLONG, PUCHAR, ULONG, ULONG); +NTSTATUS WINAPI BCryptDestroyHash(BCRYPT_HASH_HANDLE); +NTSTATUS WINAPI BCryptDestroyKey(BCRYPT_KEY_HANDLE); +NTSTATUS WINAPI BCryptDestroySecret(BCRYPT_SECRET_HANDLE); +NTSTATUS WINAPI BCryptDuplicateHash(BCRYPT_HASH_HANDLE, BCRYPT_HASH_HANDLE *, UCHAR *, ULONG, ULONG); +NTSTATUS WINAPI BCryptDuplicateKey(BCRYPT_KEY_HANDLE, BCRYPT_KEY_HANDLE *, PUCHAR, ULONG, ULONG); +NTSTATUS WINAPI BCryptEncrypt(BCRYPT_KEY_HANDLE, PUCHAR, ULONG, VOID *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG *, ULONG); +NTSTATUS WINAPI BCryptEnumAlgorithms(ULONG, ULONG *, BCRYPT_ALGORITHM_IDENTIFIER **, ULONG); +NTSTATUS WINAPI BCryptEnumContextFunctions(ULONG, const WCHAR *, ULONG, ULONG *, CRYPT_CONTEXT_FUNCTIONS **); +NTSTATUS WINAPI BCryptExportKey(BCRYPT_KEY_HANDLE, BCRYPT_KEY_HANDLE, LPCWSTR, PUCHAR, ULONG, ULONG *, ULONG); +NTSTATUS WINAPI BCryptFinalizeKeyPair(BCRYPT_KEY_HANDLE, ULONG); +NTSTATUS WINAPI BCryptFinishHash(BCRYPT_HASH_HANDLE, PUCHAR, ULONG, ULONG); +void WINAPI BCryptFreeBuffer(void *); +NTSTATUS WINAPI BCryptGenRandom(BCRYPT_ALG_HANDLE, PUCHAR, ULONG, ULONG); +NTSTATUS WINAPI BCryptGenerateKeyPair(BCRYPT_ALG_HANDLE, BCRYPT_KEY_HANDLE *, ULONG, ULONG); +NTSTATUS WINAPI BCryptGenerateSymmetricKey(BCRYPT_ALG_HANDLE, BCRYPT_KEY_HANDLE *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG); +NTSTATUS WINAPI BCryptGetFipsAlgorithmMode(BOOLEAN *); +NTSTATUS WINAPI BCryptGetProperty(BCRYPT_HANDLE, LPCWSTR, PUCHAR, ULONG, ULONG *, ULONG); +NTSTATUS WINAPI BCryptHash(BCRYPT_ALG_HANDLE, PUCHAR, ULONG, PUCHAR, ULONG, PUCHAR, ULONG); +NTSTATUS WINAPI BCryptHashData(BCRYPT_HASH_HANDLE, PUCHAR, ULONG, ULONG); +NTSTATUS WINAPI BCryptImportKey(BCRYPT_ALG_HANDLE, BCRYPT_KEY_HANDLE, LPCWSTR, BCRYPT_KEY_HANDLE *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG); +NTSTATUS WINAPI BCryptImportKeyPair(BCRYPT_ALG_HANDLE, BCRYPT_KEY_HANDLE, LPCWSTR, BCRYPT_KEY_HANDLE *, UCHAR *, ULONG, ULONG); +NTSTATUS WINAPI BCryptKeyDerivation(BCRYPT_KEY_HANDLE, BCryptBufferDesc *, UCHAR *, ULONG, ULONG *, ULONG); +NTSTATUS WINAPI BCryptOpenAlgorithmProvider(BCRYPT_ALG_HANDLE *, LPCWSTR, LPCWSTR, ULONG); +NTSTATUS WINAPI BCryptRemoveContextFunction(ULONG, LPCWSTR, ULONG, LPCWSTR); +NTSTATUS WINAPI BCryptSecretAgreement(BCRYPT_KEY_HANDLE, BCRYPT_KEY_HANDLE, BCRYPT_SECRET_HANDLE *, ULONG); +NTSTATUS WINAPI BCryptSetProperty(BCRYPT_HANDLE, LPCWSTR, PUCHAR, ULONG, ULONG); +NTSTATUS WINAPI BCryptSignHash(BCRYPT_KEY_HANDLE, void *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG *, ULONG); +NTSTATUS WINAPI BCryptVerifySignature(BCRYPT_KEY_HANDLE, void *, UCHAR *, ULONG, UCHAR *, ULONG, ULONG); + +#endif /* __WINE_BCRYPT_H */
diff --git a/mingw-w64-tools/widl/include/excpt.h b/mingw-w64-tools/widl/include/excpt.h index 3369f3b..17c7409 100644 --- a/mingw-w64-tools/widl/include/excpt.h +++ b/mingw-w64-tools/widl/include/excpt.h
@@ -38,7 +38,11 @@ #define EXCEPTION_CONTINUE_EXECUTION -1 -#if defined(_MSC_VER) && defined(USE_COMPILER_EXCEPTIONS) +#if !defined(USE_COMPILER_EXCEPTIONS) && defined(_MSC_VER) && !defined(__i386__) && !defined(__arm__) && (!defined(__clang_major__) || __clang_major__ >= 19) +#define USE_COMPILER_EXCEPTIONS +#endif + +#ifdef USE_COMPILER_EXCEPTIONS #define GetExceptionCode _exception_code #define GetExceptionInformation (struct _EXCEPTION_POINTERS *)_exception_info #define AbnormalTermination _abnormal_termination @@ -46,6 +50,6 @@ unsigned long __cdecl _exception_code(void); void * __cdecl _exception_info(void); int __cdecl _abnormal_termination(void); -#endif /* defined(_MSC_VER) && defined(USE_COMPILER_EXCEPTIONS) */ +#endif /* USE_COMPILER_EXCEPTIONS */ #endif /* __WINE_EXCPT_H */
diff --git a/mingw-w64-tools/widl/include/ncrypt.h b/mingw-w64-tools/widl/include/ncrypt.h new file mode 100644 index 0000000..7a1769c --- /dev/null +++ b/mingw-w64-tools/widl/include/ncrypt.h
@@ -0,0 +1,161 @@ +/* + * Copyright (c) 2016 Austin English + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __NCRYPT_H__ +#define __NCRYPT_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef WINAPI +#define WINAPI __stdcall +#endif + +#ifndef __SECSTATUS_DEFINED__ +typedef LONG SECURITY_STATUS; +#define __SECSTATUS_DEFINED__ +#endif + +typedef struct _NCryptAlgorithmName { + LPWSTR pszName; + DWORD dwClass; + DWORD dwAlgOperations; + DWORD dwFlags; +} NCryptAlgorithmName; + +typedef struct _NCryptBuffer { + ULONG cbBuffer; + ULONG BufferType; + PVOID pvBuffer; +} NCryptBuffer, *PNCryptBuffer; + +typedef struct _NCryptBufferDesc { + ULONG ulVersion; + ULONG cBuffers; + PNCryptBuffer pBuffers; +} NCryptBufferDesc, *PNCryptBufferDesc; + +typedef struct NCryptKeyName { + LPWSTR pszName; + LPWSTR pszAlgid; + DWORD dwLegacyKeySpec; + DWORD dwFlags; +} NCryptKeyName; + +typedef struct __NCRYPT_SUPPORTED_LENGTHS { + DWORD dwMinLength; + DWORD dwMaxLength; + DWORD dwIncrement; + DWORD dwDefaultLength; +} NCRYPT_SUPPORTED_LENGTHS; + +typedef struct __NCRYPT_UI_POLICY { + DWORD dwVersion; + DWORD dwFlags; + LPCWSTR pszCreationTitle; + LPCWSTR pszFriendlyName; + LPCWSTR pszDescription; +} NCRYPT_UI_POLICY; + +typedef ULONG_PTR NCRYPT_HANDLE; +typedef ULONG_PTR NCRYPT_PROV_HANDLE; +typedef ULONG_PTR NCRYPT_KEY_HANDLE; +typedef ULONG_PTR NCRYPT_HASH_HANDLE; +typedef ULONG_PTR NCRYPT_SECRET_HANDLE; + +#define NCRYPT_KEY_STORAGE_INTERFACE 0x00010001 +#define NCRYPT_SCHANNEL_INTERFACE 0x00010002 +#define NCRYPT_SCHANNEL_SIGNATURE_INTERFACE 0x00010003 +#define NCRYPT_KEY_PROTECTION_INTERFACE 0x00010004 + +#define NCRYPT_SILENT_FLAG 0x00000040 + +#define NCRYPT_NO_PADDING_FLAG 0x00000001 +#define NCRYPT_PAD_PKCS1_FLAG 0x00000002 +#define NCRYPT_PAD_OAEP_FLAG 0x00000004 +#define NCRYPT_PAD_PSS_FLAG 0x00000008 + +#define NCRYPT_ALLOW_DECRYPT_FLAG 0x00000001 +#define NCRYPT_ALLOW_SIGNING_FLAG 0x00000002 +#define NCRYPT_ALLOW_KEY_AGREEMENT_FLAG 0x00000004 +#define NCRYPT_ALLOW_KEY_IMPORT_FLAG 0x00000008 +#define NCRYPT_ALLOW_ALL_USAGES 0x00ffffff + +#define NCRYPT_ALLOW_EXPORT_FLAG 0x00000001 +#define NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG 0x00000002 +#define NCRYPT_ALLOW_ARCHIVING_FLAG 0x00000004 +#define NCRYPT_ALLOW_PLAINTEXT_ARCHIVING_FLAG 0x00000008 + +#define NCRYPT_NAME_PROPERTY L"Name" +#define NCRYPT_UNIQUE_NAME_PROPERTY L"Unique Name" +#define NCRYPT_ALGORITHM_PROPERTY L"Algorithm Name" +#define NCRYPT_LENGTH_PROPERTY L"Length" +#define NCRYPT_LENGTHS_PROPERTY L"Lengths" +#define NCRYPT_BLOCK_LENGTH_PROPERTY L"Block Length" +#define NCRYPT_UI_POLICY_PROPERTY L"UI Policy" +#define NCRYPT_EXPORT_POLICY_PROPERTY L"Export Policy" +#define NCRYPT_WINDOW_HANDLE_PROPERTY L"HWND Handle" +#define NCRYPT_USE_CONTEXT_PROPERTY L"Use Context" +#define NCRYPT_IMPL_TYPE_PROPERTY L"Impl Type" +#define NCRYPT_KEY_USAGE_PROPERTY L"Key Usage" +#define NCRYPT_KEY_TYPE_PROPERTY L"Key Type" +#define NCRYPT_VERSION_PROPERTY L"Version" +#define NCRYPT_SECURITY_DESCR_SUPPORT_PROPERTY L"Security Descr Support" +#define NCRYPT_SECURITY_DESCR_PROPERTY L"Security Descr" +#define NCRYPT_USE_COUNT_ENABLED_PROPERTY L"Enabled Use Count" +#define NCRYPT_USE_COUNT_PROPERTY L"Use Count" +#define NCRYPT_LAST_MODIFIED_PROPERTY L"Modified" +#define NCRYPT_MAX_NAME_LENGTH_PROPERTY L"Max Name Length" +#define NCRYPT_ALGORITHM_GROUP_PROPERTY L"Algorithm Group" +#define NCRYPT_PROVIDER_HANDLE_PROPERTY L"Provider Handle" +#define NCRYPT_PIN_PROPERTY L"SmartCardPin" +#define NCRYPT_READER_PROPERTY L"SmartCardReader" +#define NCRYPT_SMARTCARD_GUID_PROPERTY L"SmartCardGuid" +#define NCRYPT_CERTIFICATE_PROPERTY L"SmartCardKeyCertificate" +#define NCRYPT_PIN_PROMPT_PROPERTY L"SmartCardPinPrompt" +#define NCRYPT_USER_CERTSTORE_PROPERTY L"SmartCardUserCertStore" +#define NCRYPT_ROOT_CERTSTORE_PROPERTY L"SmartcardRootCertStore" +#define NCRYPT_SECURE_PIN_PROPERTY L"SmartCardSecurePin" +#define NCRYPT_ASSOCIATED_ECDH_KEY L"SmartCardAssociatedECDHKey" +#define NCRYPT_SCARD_PIN_ID L"SmartCardPinId" +#define NCRYPT_SCARD_PIN_INFO L"SmartCardPinInfo" + +SECURITY_STATUS WINAPI NCryptCreatePersistedKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE *, const WCHAR *, const WCHAR *, + DWORD, DWORD); +SECURITY_STATUS WINAPI NCryptDecrypt(NCRYPT_KEY_HANDLE, BYTE *, DWORD, void *, BYTE *, DWORD, DWORD *, DWORD); +SECURITY_STATUS WINAPI NCryptEncrypt(NCRYPT_KEY_HANDLE, BYTE *, DWORD, void *, BYTE *, DWORD, DWORD *, DWORD); +SECURITY_STATUS WINAPI NCryptExportKey(NCRYPT_KEY_HANDLE, NCRYPT_KEY_HANDLE, const WCHAR *, NCryptBufferDesc *, BYTE *, + DWORD, DWORD *, DWORD); +SECURITY_STATUS WINAPI NCryptFinalizeKey(NCRYPT_KEY_HANDLE, DWORD); +SECURITY_STATUS WINAPI NCryptFreeObject(NCRYPT_HANDLE); +SECURITY_STATUS WINAPI NCryptGetProperty(NCRYPT_HANDLE, const WCHAR *, BYTE *, DWORD, DWORD *, DWORD); +SECURITY_STATUS WINAPI NCryptImportKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE, const WCHAR *, NCryptBufferDesc *, + NCRYPT_KEY_HANDLE *, BYTE *, DWORD, DWORD); +SECURITY_STATUS WINAPI NCryptIsAlgSupported(NCRYPT_PROV_HANDLE, const WCHAR *, DWORD); +SECURITY_STATUS WINAPI NCryptOpenKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE *, const WCHAR *, DWORD, DWORD); +SECURITY_STATUS WINAPI NCryptOpenStorageProvider(NCRYPT_PROV_HANDLE *, const WCHAR *, DWORD); +SECURITY_STATUS WINAPI NCryptSetProperty(NCRYPT_HANDLE, const WCHAR *, BYTE *, DWORD, DWORD); +SECURITY_STATUS WINAPI NCryptSignHash(NCRYPT_KEY_HANDLE, void *, BYTE *, DWORD, BYTE *, DWORD, DWORD *, DWORD); +SECURITY_STATUS WINAPI NCryptVerifySignature(NCRYPT_KEY_HANDLE, void *, BYTE *, DWORD, BYTE *, DWORD, DWORD); + +#ifdef __cplusplus +} +#endif + +#endif /* __NCRYPT_H__ */
diff --git a/mingw-w64-tools/widl/include/wincrypt.h b/mingw-w64-tools/widl/include/wincrypt.h new file mode 100644 index 0000000..e3a7ad0 --- /dev/null +++ b/mingw-w64-tools/widl/include/wincrypt.h
@@ -0,0 +1,4712 @@ +/* + * Copyright (C) 2002 Travis Michielsen + * Copyright (C) 2004-2005 Juan Lang + * Copyright (C) 2007 Vijay Kiran Kamuju + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __WINE_WINCRYPT_H +#define __WINE_WINCRYPT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <bcrypt.h> +#include <ncrypt.h> + +#ifndef WINADVAPI +#ifdef _ADVAPI32_ +# define WINADVAPI +#else +# define WINADVAPI DECLSPEC_IMPORT +#endif +#endif + +#ifndef WINCRYPT32API +#ifdef _CRYPT32_ +# define WINCRYPT32API +#else +# define WINCRYPT32API DECLSPEC_IMPORT +#endif +#endif + +/* some typedefs for function parameters */ +typedef unsigned int ALG_ID; +typedef ULONG_PTR HCRYPTPROV; +typedef ULONG_PTR HCRYPTPROV_OR_NCRYPT_KEY_HANDLE; +typedef ULONG_PTR HCRYPTPROV_LEGACY; +typedef ULONG_PTR HCRYPTKEY; +typedef ULONG_PTR HCRYPTHASH; +typedef void *HCERTSTORE; +typedef void *HCRYPTMSG; +typedef void *HCERTSTOREPROV; +typedef void *HCRYPTOIDFUNCSET; +typedef void *HCRYPTOIDFUNCADDR; +typedef void *HCRYPTDEFAULTCONTEXT; + +/* CSP Structs */ + +typedef struct _PROV_ENUMALGS { + ALG_ID aiAlgid; + DWORD dwBitLen; + DWORD dwNameLen; + CHAR szName[20]; +} PROV_ENUMALGS; + +typedef struct _PROV_ENUMALGS_EX { + ALG_ID aiAlgid; + DWORD dwDefaultLen; + DWORD dwMinLen; + DWORD dwMaxLen; + DWORD dwProtocols; + DWORD dwNameLen; + CHAR szName[20]; + DWORD dwLongNameLen; + CHAR szLongName[40]; +} PROV_ENUMALGS_EX; + +#define SCHANNEL_MAC_KEY 0 +#define SCHANNEL_ENC_KEY 1 + +typedef struct _SCHANNEL_ALG { + DWORD dwUse; + ALG_ID Algid; + DWORD cBits; + DWORD dwFlags; + DWORD dwReserved; +} SCHANNEL_ALG, *PSCHANNEL_ALG; + + +#define CRYPT_IPSEC_HMAC_KEY 0x0100 + +typedef struct _HMAC_INFO { + ALG_ID HashAlgid; + BYTE* pbInnerString; + DWORD cbInnerString; + BYTE* pbOuterString; + DWORD cbOuterString; +} HMAC_INFO, *PHMAC_INFO; + +typedef struct _CRYPTOAPI_BLOB { + DWORD cbData; + BYTE* pbData; +} CRYPT_INTEGER_BLOB, *PCRYPT_INTEGER_BLOB, + CRYPT_UINT_BLOB, *PCRYPT_UINT_BLOB, + CRYPT_OBJID_BLOB, *PCRYPT_OBJID_BLOB, + CERT_NAME_BLOB, *PCERT_NAME_BLOB, + CERT_RDN_VALUE_BLOB, *PCERT_RDN_VALUE_BLOB, + CERT_BLOB, *PCERT_BLOB, + CRL_BLOB, *PCRL_BLOB, + DATA_BLOB, *PDATA_BLOB, + CRYPT_DATA_BLOB, *PCRYPT_DATA_BLOB, + CRYPT_HASH_BLOB, *PCRYPT_HASH_BLOB, + CRYPT_DIGEST_BLOB, *PCRYPT_DIGEST_BLOB, + CRYPT_DER_BLOB, *PCRYPT_DER_BLOB, + CRYPT_ATTR_BLOB, *PCRYPT_ATTR_BLOB; + +typedef struct _CRYPTPROTECT_PROMPTSTRUCT{ + DWORD cbSize; + DWORD dwPromptFlags; + HWND hwndApp; + LPCWSTR szPrompt; +} CRYPTPROTECT_PROMPTSTRUCT, *PCRYPTPROTECT_PROMPTSTRUCT; + +typedef struct _CRYPT_ALGORITHM_IDENTIFIER { + LPSTR pszObjId; + CRYPT_OBJID_BLOB Parameters; +} CRYPT_ALGORITHM_IDENTIFIER, *PCRYPT_ALGORITHM_IDENTIFIER; + +typedef struct _CRYPT_ATTRIBUTE_TYPE_VALUE { + LPSTR pszObjId; + CRYPT_OBJID_BLOB Value; +} CRYPT_ATTRIBUTE_TYPE_VALUE, *PCRYPT_ATTRIBUTE_TYPE_VALUE; + +typedef struct _PUBLICKEYSTRUC { + BYTE bType; + BYTE bVersion; + WORD reserved; + ALG_ID aiKeyAlg; +} BLOBHEADER, PUBLICKEYSTRUC; + +typedef struct _RSAPUBKEY { + DWORD magic; + DWORD bitlen; + DWORD pubexp; +} RSAPUBKEY; + +typedef struct _PUBKEY { + DWORD magic; + DWORD bitlen; +} DHPUBKEY, DSSPUBKEY, KEAPUBKEY, TEKPUBKEY; + +typedef struct _DSSSEED { + DWORD counter; + BYTE seed[20]; +} DSSSEED; + +typedef struct _PUBKEYVER3 { + DWORD magic; + DWORD bitlenP; + DWORD bitlenQ; + DWORD bitlenJ; + DSSSEED DSSSeed; +} DHPUBKEY_VER3, DSSPUBKEY_VER3; + +typedef struct _PRIVKEYVER3 { + DWORD magic; + DWORD bitlenP; + DWORD bitlenQ; + DWORD bitlenJ; + DWORD bitlenX; + DSSSEED DSSSeed; +} DHPRIVKEY_VER3, DSSPRIVKEY_VER3; + +typedef struct _KEY_TYPE_SUBTYPE { + DWORD dwKeySpec; + GUID Type; + GUID SubType; +} KEY_TYPE_SUBTYPE, *PKEY_TYPE_SUBTYPE; + +typedef struct _CERT_FORTEZZA_DATA_PROP { + unsigned char SerialNumber[8]; + int CertIndex; + unsigned char CertLabel[36]; +} CERT_FORTEZZA_DATA_PROP; + +typedef struct _CMS_DH_KEY_INFO { + DWORD dwVersion; + ALG_ID Algid; + LPSTR pszContentEncObjId; + CRYPT_DATA_BLOB PubInfo; + void *pReserved; +} CMS_DH_KEY_INFO, *PCMS_DH_KEY_INFO; + +typedef struct _CRYPT_BIT_BLOB { + DWORD cbData; + BYTE *pbData; + DWORD cUnusedBits; +} CRYPT_BIT_BLOB, *PCRYPT_BIT_BLOB; + +typedef struct _CRYPT_KEY_PROV_PARAM { + DWORD dwParam; + BYTE *pbData; + DWORD cbData; + DWORD dwFlags; +} CRYPT_KEY_PROV_PARAM, *PCRYPT_KEY_PROV_PARAM; + +typedef struct _CRYPT_KEY_PROV_INFO { + LPWSTR pwszContainerName; + LPWSTR pwszProvName; + DWORD dwProvType; + DWORD dwFlags; + DWORD cProvParam; + PCRYPT_KEY_PROV_PARAM rgProvParam; + DWORD dwKeySpec; +} CRYPT_KEY_PROV_INFO, *PCRYPT_KEY_PROV_INFO; + +typedef struct _CERT_KEY_CONTEXT { + DWORD cbSize; + HCRYPTPROV hCryptProv; + DWORD dwKeySpec; +} CERT_KEY_CONTEXT, *PCERT_KEY_CONTEXT; + +typedef struct _CERT_PUBLIC_KEY_INFO { + CRYPT_ALGORITHM_IDENTIFIER Algorithm; + CRYPT_BIT_BLOB PublicKey; +} CERT_PUBLIC_KEY_INFO, *PCERT_PUBLIC_KEY_INFO; + +typedef struct _CERT_EXTENSION { + LPSTR pszObjId; + BOOL fCritical; + CRYPT_OBJID_BLOB Value; +} CERT_EXTENSION, *PCERT_EXTENSION; + +typedef struct _CERT_EXTENSIONS { + DWORD cExtension; + PCERT_EXTENSION rgExtension; +} CERT_EXTENSIONS, *PCERT_EXTENSIONS; + +typedef struct _CERT_INFO { + DWORD dwVersion; + CRYPT_INTEGER_BLOB SerialNumber; + CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm; + CERT_NAME_BLOB Issuer; + FILETIME NotBefore; + FILETIME NotAfter; + CERT_NAME_BLOB Subject; + CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo; + CRYPT_BIT_BLOB IssuerUniqueId; + CRYPT_BIT_BLOB SubjectUniqueId; + DWORD cExtension; + PCERT_EXTENSION rgExtension; +} CERT_INFO, *PCERT_INFO; + +typedef struct _CERT_RDN_ATTR { + LPSTR pszObjId; + DWORD dwValueType; + CERT_RDN_VALUE_BLOB Value; +} CERT_RDN_ATTR, *PCERT_RDN_ATTR; + +typedef struct _CERT_RDN { + DWORD cRDNAttr; + PCERT_RDN_ATTR rgRDNAttr; +} CERT_RDN, *PCERT_RDN; + +typedef struct _CERT_NAME_INFO { + DWORD cRDN; + PCERT_RDN rgRDN; +} CERT_NAME_INFO, *PCERT_NAME_INFO; + +typedef struct _CERT_NAME_VALUE { + DWORD dwValueType; + CERT_RDN_VALUE_BLOB Value; +} CERT_NAME_VALUE, *PCERT_NAME_VALUE; + +typedef struct _CERT_ENCRYPTED_PRIVATE_KEY_INFO { + CRYPT_ALGORITHM_IDENTIFIER EncryptionAlgorithm; + CRYPT_DATA_BLOB EncryptedPrivateKey; +} CERT_ENCRYPTED_PRIVATE_KEY_INFO, *PCERT_ENCRYPTED_PRIVATE_KEY_INFO; + +typedef struct _CERT_AUTHORITY_KEY_ID_INFO { + CRYPT_DATA_BLOB KeyId; + CERT_NAME_BLOB CertIssuer; + CRYPT_INTEGER_BLOB CertSerialNumber; +} CERT_AUTHORITY_KEY_ID_INFO, *PCERT_AUTHORITY_KEY_ID_INFO; + +typedef struct _CERT_PRIVATE_KEY_VALIDITY { + FILETIME NotBefore; + FILETIME NotAfter; +} CERT_PRIVATE_KEY_VALIDITY, *PCERT_PRIVATE_KEY_VALIDITY; + +typedef struct _CERT_KEY_ATTRIBUTES_INFO { + CRYPT_DATA_BLOB KeyId; + CRYPT_BIT_BLOB IntendedKeyUsage; + PCERT_PRIVATE_KEY_VALIDITY pPrivateKeyUsagePeriod; +} CERT_KEY_ATTRIBUTES_INFO, *PCERT_KEY_ATTRIBUTES_INFO; + +typedef struct _CERT_ECC_SIGNATURE { + CRYPT_UINT_BLOB r; + CRYPT_UINT_BLOB s; +} CERT_ECC_SIGNATURE, *PCERT_ECC_SIGNATURE; + +/* byte 0 */ +#define CERT_DIGITAL_SIGNATURE_KEY_USAGE 0x80 +#define CERT_NON_REPUDIATION_KEY_USAGE 0x40 +#define CERT_KEY_ENCIPHERMENT_KEY_USAGE 0x20 +#define CERT_DATA_ENCIPHERMENT_KEY_USAGE 0x10 +#define CERT_KEY_AGREEMENT_KEY_USAGE 0x08 +#define CERT_KEY_CERT_SIGN_KEY_USAGE 0x04 +#define CERT_OFFLINE_CRL_SIGN_KEY_USAGE 0x02 +#define CERT_CRL_SIGN_KEY_USAGE 0x02 +#define CERT_ENCIPHER_ONLY_KEY_USAGE 0x01 +/* byte 1 */ +#define CERT_DECIPHER_ONLY_KEY_USAGE 0x80 + +typedef struct _CERT_POLICY_ID { + DWORD cCertPolicyElementId; + LPSTR *rgbszCertPolicyElementId; +} CERT_POLICY_ID, *PCERT_POLICY_ID; + +typedef struct _CERT_KEY_USAGE_RESTRICTION_INFO { + DWORD cCertPolicyId; + PCERT_POLICY_ID rgCertPolicyId; + CRYPT_BIT_BLOB RestrictedKeyUsage; +} CERT_KEY_USAGE_RESTRICTION_INFO, *PCERT_KEY_USAGE_RESTRICTION_INFO; + +typedef struct _CERT_OTHER_NAME { + LPSTR pszObjId; + CRYPT_OBJID_BLOB Value; +} CERT_OTHER_NAME, *PCERT_OTHER_NAME; + +typedef struct _CERT_ALT_NAME_ENTRY { + DWORD dwAltNameChoice; + union { + PCERT_OTHER_NAME pOtherName; + LPWSTR pwszRfc822Name; + LPWSTR pwszDNSName; + CERT_NAME_BLOB DirectoryName; + LPWSTR pwszURL; + CRYPT_DATA_BLOB IPAddress; + LPSTR pszRegisteredID; + } DUMMYUNIONNAME; +} CERT_ALT_NAME_ENTRY, *PCERT_ALT_NAME_ENTRY; + +#define CERT_ALT_NAME_OTHER_NAME 1 +#define CERT_ALT_NAME_RFC822_NAME 2 +#define CERT_ALT_NAME_DNS_NAME 3 +#define CERT_ALT_NAME_X400_ADDRESS 4 +#define CERT_ALT_NAME_DIRECTORY_NAME 5 +#define CERT_ALT_NAME_EDI_PARTY_NAME 6 +#define CERT_ALT_NAME_URL 7 +#define CERT_ALT_NAME_IP_ADDRESS 8 +#define CERT_ALT_NAME_REGISTERED_ID 9 + +typedef struct _CERT_ALT_NAME_INFO { + DWORD cAltEntry; + PCERT_ALT_NAME_ENTRY rgAltEntry; +} CERT_ALT_NAME_INFO, *PCERT_ALT_NAME_INFO; + +#define CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK 0xff +#define CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT 16 +#define CERT_ALT_NAME_VALUE_ERR_INDEX_MASK 0x0000ffff +#define CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT 0 +#define GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(x) \ + (((x) >> CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) & \ + CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK) +#define GET_CERT_ALT_NAME_VALUE_ERR_INDEX(x) \ + ((x) & CERT_ALT_NAME_VALUE_ERR_INDEX_MASK) + +typedef struct _CERT_BASIC_CONSTRAINTS_INFO { + CRYPT_BIT_BLOB SubjectType; + BOOL fPathLenConstraint; + DWORD dwPathLenConstraint; + DWORD cSubtreesConstraint; + CERT_NAME_BLOB *rgSubtreesConstraint; +} CERT_BASIC_CONSTRAINTS_INFO, *PCERT_BASIC_CONSTRAINTS_INFO; + +#define CERT_CA_SUBJECT_FLAG 0x80 +#define CERT_END_ENTITY_SUBJECT_FLAG 0x40 + +typedef struct _CERT_BASIC_CONSTRAINTS2_INFO { + BOOL fCA; + BOOL fPathLenConstraint; + DWORD dwPathLenConstraint; +} CERT_BASIC_CONSTRAINTS2_INFO, *PCERT_BASIC_CONSTRAINTS2_INFO; + +typedef struct _CERT_POLICY_QUALIFIER_INFO { + LPSTR pszPolicyQualifierId; + CRYPT_OBJID_BLOB Qualifier; +} CERT_POLICY_QUALIFIER_INFO, *PCERT_POLICY_QUALIFIER_INFO; + +typedef struct _CERT_POLICY_INFO { + LPSTR pszPolicyIdentifier; + DWORD cPolicyQualifier; + CERT_POLICY_QUALIFIER_INFO *rgPolicyQualifier; +} CERT_POLICY_INFO, *PCERT_POLICY_INFO; + +typedef struct _CERT_POLICIES_INFO { + DWORD cPolicyInfo; + CERT_POLICY_INFO *rgPolicyInfo; +} CERT_POLICIES_INFO, *PCERT_POLICIES_INFO; + +typedef struct _CERT_POLICY_QUALIFIER_NOTICE_REFERENCE { + LPSTR pszOrganization; + DWORD cNoticeNumbers; + int *rgNoticeNumbers; +} CERT_POLICY_QUALIFIER_NOTICE_REFERENCE, + *PCERT_POLICY_QUALIFIER_NOTICE_REFERENCE; + +typedef struct _CERT_POLICY_QUALIFIER_USER_NOTICE { + CERT_POLICY_QUALIFIER_NOTICE_REFERENCE *pNoticeReference; + LPWSTR pszDisplayText; +} CERT_POLICY_QUALIFIER_USER_NOTICE, *PCERT_POLICY_QUALIFIER_USER_NOTICE; + +typedef struct _CPS_URLS { + LPWSTR pszURL; + CRYPT_ALGORITHM_IDENTIFIER *pAlgorithm; + CRYPT_DATA_BLOB *pDigest; +} CPS_URLS, *PCPS_URLS; + +typedef struct _CERT_POLICY95_QUALIFIER1 { + LPWSTR pszPracticesReference; + LPSTR pszNoticeIdentifier; + LPSTR pszNSINoticeIdentifier; + DWORD cCPSURLs; + CPS_URLS *rgCPSURLs; +} CERT_POLICY95_QUALIFIER1, *PCERT_POLICY95_QUALIFIER1; + +typedef struct _CERT_POLICY_MAPPING { + LPSTR pszIssuerDomainPolicy; + LPSTR pszSubjectDomainPolicy; +} CERT_POLICY_MAPPING, *PCERT_POLICY_MAPPING; + +typedef struct _CERT_POLICY_MAPPINGS_INFO { + DWORD cPolicyMapping; + PCERT_POLICY_MAPPING rgPolicyMapping; +} CERT_POLICY_MAPPINGS_INFO, *PCERT_POLICY_MAPPINGS_INFO; + +typedef struct _CERT_POLICY_CONSTRAINTS_INFO { + BOOL fRequireExplicitPolicy; + DWORD dwRequireExplicitPolicySkipCerts; + BOOL fInhibitPolicyMapping; + DWORD dwInhibitPolicyMappingSkipCerts; +} CERT_POLICY_CONSTRAINTS_INFO, *PCERT_POLICY_CONSTRAINTS_INFO; + +typedef struct _CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY { + LPSTR pszObjId; + DWORD cValue; + PCRYPT_DER_BLOB rgValue; +} CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY, *PCRYPT_CONTENT_INFO_SEQUENCE_OF_ANY; + +typedef struct _CRYPT_CONTENT_INFO { + LPSTR pszObjId; + CRYPT_DER_BLOB Content; +} CRYPT_CONTENT_INFO, *PCRYPT_CONTENT_INFO; + +typedef struct _CRYPT_SEQUENCE_OF_ANY { + DWORD cValue; + PCRYPT_DER_BLOB rgValue; +} CRYPT_SEQUENCE_OF_ANY, *PCRYPT_SEQUENCE_OF_ANY; + +typedef struct _CERT_AUTHORITY_KEY_ID2_INFO { + CRYPT_DATA_BLOB KeyId; + CERT_ALT_NAME_INFO AuthorityCertIssuer; + CRYPT_INTEGER_BLOB AuthorityCertSerialNumber; +} CERT_AUTHORITY_KEY_ID2_INFO, *PCERT_AUTHORITY_KEY_ID2_INFO; + +typedef struct _CERT_ACCESS_DESCRIPTION { + LPSTR pszAccessMethod; + CERT_ALT_NAME_ENTRY AccessLocation; +} CERT_ACCESS_DESCRIPTION, *PCERT_ACCESS_DESCRIPTION; + +typedef struct _CERT_AUTHORITY_INFO_ACCESS { + DWORD cAccDescr; + PCERT_ACCESS_DESCRIPTION rgAccDescr; +} CERT_AUTHORITY_INFO_ACCESS, *PCERT_AUTHORITY_INFO_ACCESS; + +typedef struct _CERT_CONTEXT { + DWORD dwCertEncodingType; + BYTE *pbCertEncoded; + DWORD cbCertEncoded; + PCERT_INFO pCertInfo; + HCERTSTORE hCertStore; +} CERT_CONTEXT, *PCERT_CONTEXT; +typedef const CERT_CONTEXT *PCCERT_CONTEXT; + +typedef struct _CRL_ENTRY { + CRYPT_INTEGER_BLOB SerialNumber; + FILETIME RevocationDate; + DWORD cExtension; + PCERT_EXTENSION rgExtension; +} CRL_ENTRY, *PCRL_ENTRY; + +typedef struct _CRL_INFO { + DWORD dwVersion; + CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm; + CERT_NAME_BLOB Issuer; + FILETIME ThisUpdate; + FILETIME NextUpdate; + DWORD cCRLEntry; + PCRL_ENTRY rgCRLEntry; + DWORD cExtension; + PCERT_EXTENSION rgExtension; +} CRL_INFO, *PCRL_INFO; + +typedef struct _CRL_DIST_POINT_NAME { + DWORD dwDistPointNameChoice; + union { + CERT_ALT_NAME_INFO FullName; + } DUMMYUNIONNAME; +} CRL_DIST_POINT_NAME, *PCRL_DIST_POINT_NAME; + +#define CRL_DIST_POINT_NO_NAME 0 +#define CRL_DIST_POINT_FULL_NAME 1 +#define CRL_DIST_POINT_ISSUER_RDN_NAME 2 + +typedef struct _CRL_DIST_POINT { + CRL_DIST_POINT_NAME DistPointName; + CRYPT_BIT_BLOB ReasonFlags; + CERT_ALT_NAME_INFO CRLIssuer; +} CRL_DIST_POINT, *PCRL_DIST_POINT; + +#define CRL_REASON_UNUSED_FLAG 0x80 +#define CRL_REASON_KEY_COMPROMISE_FLAG 0x40 +#define CRL_REASON_CA_COMPROMISE_FLAG 0x20 +#define CRL_REASON_AFFILIATION_CHANGED_FLAG 0x10 +#define CRL_REASON_SUPERSEDED_FLAG 0x08 +#define CRL_REASON_CESSATION_OF_OPERATION_FLAG 0x04 +#define CRL_REASON_CERTIFICATE_HOLD_FLAG 0x02 + +typedef struct _CRL_DIST_POINTS_INFO { + DWORD cDistPoint; + PCRL_DIST_POINT rgDistPoint; +} CRL_DIST_POINTS_INFO, *PCRL_DIST_POINTS_INFO; + +#define CRL_DIST_POINT_ERR_INDEX_MASK 0x7f +#define CRL_DIST_POINT_ERR_INDEX_SHIFT 24 +#define GET_CRL_DIST_POINT_ERR_INDEX(x) \ + (((x) >> CRL_DIST_POINT_ERR_INDEX_SHIFT) & CRL_DIST_POINT_ERR_INDEX_MASK) + +#define CRL_DIST_POINT_ERR_CRL_ISSUER_BIT __MSABI_LONG(0x80000000) +#define IS_CRL_DIST_POINT_ERR_CRL_ISSUER(x) \ + ((x) & CRL_DIST_POINT_ERR_CRL_ISSUER_BIT) + +typedef struct _CROSS_CERT_DIST_POINTS_INFO { + DWORD dwSyncDeltaTime; + DWORD cDistPoint; + PCERT_ALT_NAME_INFO rgDistPoint; +} CROSS_CERT_DIST_POINTS_INFO, *PCROSS_CERT_DIST_POINTS_INFO; + +#define CROSS_CERT_DIST_POINT_ERR_INDEX_MASK 0xff +#define CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT 24 +#define GET_CROSS_CERT_DIST_POINT_ERR_INDEX(x) \ + (((x) >> CROSS_CERT_DIST_POINT_ERR_INDEX_SHIFT) & \ + CROSS_CERT_DIST_POINT_ERR_INDEX_MASK) + +typedef struct _CERT_PAIR { + CERT_BLOB Forward; + CERT_BLOB Reverse; +} CERT_PAIR, *PCERT_PAIR; + +typedef struct _CRL_ISSUING_DIST_POINT { + CRL_DIST_POINT_NAME DistPointName; + BOOL fOnlyContainsUserCerts; + BOOL fOnlyContainsCACerts; + CRYPT_BIT_BLOB OnlySomeReasonFlags; + BOOL fIndirectCRL; +} CRL_ISSUING_DIST_POINT, *PCRL_ISSUING_DIST_POINT; + +typedef struct _CERT_GENERAL_SUBTREE { + CERT_ALT_NAME_ENTRY Base; + DWORD dwMinimum; + BOOL fMaximum; + DWORD dwMaximum; +} CERT_GENERAL_SUBTREE, *PCERT_GENERAL_SUBTREE; + +typedef struct _CERT_NAME_CONSTRAINTS_INFO { + DWORD cPermittedSubtree; + PCERT_GENERAL_SUBTREE rgPermittedSubtree; + DWORD cExcludedSubtree; + PCERT_GENERAL_SUBTREE rgExcludedSubtree; +} CERT_NAME_CONSTRAINTS_INFO, *PCERT_NAME_CONSTRAINTS_INFO; + +#define CERT_EXCLUDED_SUBTREE_BIT __MSABI_LONG(0x80000000) +#define IS_CERT_EXCLUDED_SUBTREE(x) ((x) & CERT_EXCLUDED_SUBTREE_BIT) + +typedef struct _CRYPT_ATTRIBUTE { + LPSTR pszObjId; + DWORD cValue; + PCRYPT_DATA_BLOB rgValue; +} CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE; + +typedef struct _CRYPT_ATTRIBUTES { + DWORD cAttr; + PCRYPT_ATTRIBUTE rgAttr; +} CRYPT_ATTRIBUTES, *PCRYPT_ATTRIBUTES; + +typedef struct _CERT_REQUEST_INFO { + DWORD dwVersion; + CERT_NAME_BLOB Subject; + CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo; + DWORD cAttribute; + PCRYPT_ATTRIBUTE rgAttribute; +} CERT_REQUEST_INFO, *PCERT_REQUEST_INFO; + +typedef struct _CERT_KEYGEN_REQUEST_INFO { + DWORD dwVersion; + CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo; + LPWSTR pwszChallengeString; +} CERT_KEYGEN_REQUEST_INFO, *PCERT_KEYGEN_REQUEST_INFO; + +typedef struct _CERT_SIGNED_CONTENT_INFO { + CRYPT_DER_BLOB ToBeSigned; + CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm; + CRYPT_BIT_BLOB Signature; +} CERT_SIGNED_CONTENT_INFO, *PCERT_SIGNED_CONTENT_INFO; + +typedef struct _OCSP_SIGNATURE_INFO { + CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm; + CRYPT_BIT_BLOB Signature; + DWORD cCertEncoded; + PCERT_BLOB rgCertEncoded; +} OCSP_SIGNATURE_INFO, *POCSP_SIGNATURE_INFO; + +typedef struct _OCSP_SIGNED_REQUEST_INFO { + CRYPT_DER_BLOB ToBeSigned; + POCSP_SIGNATURE_INFO pOptionalSignatureInfo; +} OCSP_SIGNED_REQUEST_INFO, *POCSP_SIGNED_REQUEST_INFO; + +typedef struct _OCSP_CERT_ID { + CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; + CRYPT_HASH_BLOB IssuerNameHash; + CRYPT_HASH_BLOB IssuerKeyHash; + CRYPT_INTEGER_BLOB SerialNumber; +} OCSP_CERT_ID, *POCSP_CERT_ID; + +typedef struct _OCSP_REQUEST_ENTRY { + OCSP_CERT_ID CertId; + DWORD cExtension; + PCERT_EXTENSION rgExtension; +} OCSP_REQUEST_ENTRY, *POCSP_REQUEST_ENTRY; + +#define OCSP_REQUEST_V1 0 + +typedef struct _OCSP_REQUEST_INFO { + DWORD dwVersion; + PCERT_ALT_NAME_ENTRY pRequestorName; + DWORD cRequestEntry; + POCSP_REQUEST_ENTRY rgRequestEntry; + DWORD cExtension; + PCERT_EXTENSION rgExtension; +} OCSP_REQUEST_INFO, *POCSP_REQUEST_INFO; + +#define OCSP_SUCCESSFUL_RESPONSE 0 +#define OCSP_MALFORMED_REQUEST_RESPONSE 1 +#define OCSP_INTERNAL_ERROR_RESPONSE 2 +#define OCSP_TRY_LATER_RESPONSE 3 +#define OCSP_SIG_REQUIRED_RESPONSE 5 +#define OCSP_UNAUTHORIZED_RESPONSE 6 + +#define szOID_PKIX_OCSP_BASIC_SIGNED_RESPONSE "1.3.6.1.5.5.7.48.1.1" + +typedef struct _OCSP_RESPONSE_INFO { + DWORD dwStatus; + LPSTR pszObjId; + CRYPT_OBJID_BLOB Value; +} OCSP_RESPONSE_INFO, *POCSP_RESPONSE_INFO; + +typedef struct _OCSP_BASIC_SIGNED_RESPONSE_INFO { + CRYPT_DER_BLOB ToBeSigned; + OCSP_SIGNATURE_INFO SignatureInfo; +} OCSP_BASIC_SIGNED_RESPONSE_INFO, *POCSP_BASIC_SIGNED_RESPONSE_INFO; + +typedef struct _OCSP_BASIC_REVOKED_INFO { + FILETIME RevocationDate; + DWORD dwCrlReasonCode; +} OCSP_BASIC_REVOKED_INFO, *POCSP_BASIC_REVOKED_INFO; + +#define OCSP_BASIC_GOOD_CERT_STATUS 0 +#define OCSP_BASIC_REVOKED_CERT_STATUS 1 +#define OCSP_BASIC_UNKNOWN_CERT_STATUS 2 + +typedef struct _OCSP_BASIC_RESPONSE_ENTRY { + OCSP_CERT_ID CertId; + DWORD dwCertStatus; + union { + POCSP_BASIC_REVOKED_INFO pRevokedInfo; + } DUMMYUNIONNAME; + FILETIME ThisUpdate; + FILETIME NextUpdate; + DWORD cExtension; + PCERT_EXTENSION rgExtension; +} OCSP_BASIC_RESPONSE_ENTRY, *POCSP_BASIC_RESPONSE_ENTRY; + +#define OCSP_BASIC_RESPONSE_V1 0 +#define OCSP_BASIC_BY_NAME_RESPONDER_ID 1 +#define OCSP_BASIC_BY_KEY_RESPONDER_ID 2 + +typedef struct _OCSP_BASIC_RESPONSE_INFO { + DWORD dwVersion; + DWORD dwResponderIdChoice; + union { + CERT_NAME_BLOB ByNameResponderId; + CRYPT_HASH_BLOB ByKeyResponderId; + } DUMMYUNIONNAME; + FILETIME ProducedAt; + DWORD cResponseEntry; + POCSP_BASIC_RESPONSE_ENTRY rgResponseEntry; + DWORD cExtension; + PCERT_EXTENSION rgExtension; +} OCSP_BASIC_RESPONSE_INFO, *POCSP_BASIC_RESPONSE_INFO; + +typedef struct _CRL_CONTEXT { + DWORD dwCertEncodingType; + BYTE *pbCrlEncoded; + DWORD cbCrlEncoded; + PCRL_INFO pCrlInfo; + HCERTSTORE hCertStore; +} CRL_CONTEXT, *PCRL_CONTEXT; +typedef const CRL_CONTEXT *PCCRL_CONTEXT; + +#define SORTED_CTL_EXT_FLAGS_OFFSET (0*4) +#define SORTED_CTL_EXT_COUNT_OFFSET (1*4) +#define SORTED_CTL_EXT_MAX_COLLISION_OFFSET (2*4) +#define SORTED_CTL_EXT_HASH_BUCKET_OFFSET (3*4) + +#define SORTED_CTL_EXT_HASHED_SUBJECT_IDENTIFIER_FLAG 0x1 + +typedef struct _CERT_DSS_PARAMETERS { + CRYPT_UINT_BLOB p; + CRYPT_UINT_BLOB q; + CRYPT_UINT_BLOB g; +} CERT_DSS_PARAMETERS, *PCERT_DSS_PARAMETERS; + +#define CERT_DSS_R_LEN 20 +#define CERT_DSS_S_LEN 20 +#define CERT_DSS_SIGNATURE_LEN (CERT_DSS_R_LEN + CERT_DSS_S_LEN) + +#define CERT_MAX_ENCODED_DSS_SIGNATURE_LEN (2 + 2*(2 + 20 +1)) + +typedef struct _CERT_DH_PARAMETERS { + CRYPT_UINT_BLOB p; + CRYPT_UINT_BLOB g; +} CERT_DH_PARAMETERS, *PCERT_DH_PARAMETERS; + +typedef struct _CERT_X942_DH_VALIDATION_PARAMS { + CRYPT_BIT_BLOB seed; + DWORD pgenCounter; +} CERT_X942_DH_VALIDATION_PARAMS, *PCERT_X942_DH_VALIDATION_PARAMS; + +typedef struct _CERT_X942_DH_PARAMETERS { + CRYPT_UINT_BLOB p; + CRYPT_UINT_BLOB g; + CRYPT_UINT_BLOB q; + CRYPT_UINT_BLOB j; + PCERT_X942_DH_VALIDATION_PARAMS pValidationParams; +} CERT_X942_DH_PARAMETERS, *PCERT_X942_DH_PARAMETERS; + +#define CRYPT_X942_COUNTER_BYTE_LENGTH 4 +#define CRYPT_X942_KEY_LENGTH_BYTE_LENGTH 4 +#define CRYPT_X942_PUB_INFO_BYTE_LENGTH (512/8) + +typedef struct _CRYPT_X942_OTHER_INFO { + LPSTR pszContentEncryptionObjId; + BYTE rgbCounter[CRYPT_X942_COUNTER_BYTE_LENGTH]; + BYTE rgbKeyLength[CRYPT_X942_KEY_LENGTH_BYTE_LENGTH]; + CRYPT_DATA_BLOB PubInfo; +} CRYPT_X942_OTHER_INFO, *PCRYPT_X942_OTHER_INFO; + +typedef struct _CRYPT_RC2_CBC_PARAMETERS { + DWORD dwVersion; + BOOL fIV; + BYTE rgbIV[4]; +} CRYPT_RC2_CBC_PARAMETERS, *PCRYPT_RC2_CBC_PARAMETERS; + +#define CRYPT_RC2_40BIT_VERSION 160 +#define CRYPT_RC2_56BIT_VERSION 52 +#define CRYPT_RC2_64BIT_VERSION 120 +#define CRYPT_RC2_128BIT_VERSION 58 + +typedef struct _CRYPT_SMIME_CAPABILITY { + LPSTR pszObjId; + CRYPT_OBJID_BLOB Parameters; +} CRYPT_SMIME_CAPABILITY, *PCRYPT_SMIME_CAPABILITY; + +typedef struct _CRYPT_SMIME_CAPABILITIES { + DWORD cCapability; + PCRYPT_SMIME_CAPABILITY rgCapability; +} CRYPT_SMIME_CAPABILITIES, *PCRYPT_SMIME_CAPABILITIES; + +typedef struct _VTableProvStruc { + DWORD Version; +#ifndef WINE_NO_STRICT_PROTOTYPES + BOOL (WINAPI *FuncVerifyImage)(LPCSTR,BYTE*); + void (WINAPI *FuncReturnhWnd)(HWND*); +#else + FARPROC FuncVerifyImage; + FARPROC FuncReturnhWnd; +#endif + DWORD dwProvType; + BYTE *pbContextInfo; + DWORD cbContextInfo; + LPSTR pszProvName; +} VTableProvStruc, *PVTableProvStruc; + +typedef struct _CERT_PRIVATE_KEY_INFO { + DWORD Version; + CRYPT_ALGORITHM_IDENTIFIER Algorithm; + CRYPT_DER_BLOB PrivateKey; + PCRYPT_ATTRIBUTES pAttributes; +} CERT_PRIVATE_KEY_INFO, *PCERT_PRIVATE_KEY_INFO; + +typedef struct _CTL_USAGE { + DWORD cUsageIdentifier; + LPSTR *rgpszUsageIdentifier; +} CTL_USAGE, *PCTL_USAGE, CERT_ENHKEY_USAGE, *PCERT_ENHKEY_USAGE; + +typedef struct _CTL_ENTRY { + CRYPT_DATA_BLOB SubjectIdentifier; + DWORD cAttribute; + PCRYPT_ATTRIBUTE rgAttribute; +} CTL_ENTRY, *PCTL_ENTRY; + +typedef struct _CTL_INFO { + DWORD dwVersion; + CTL_USAGE SubjectUsage; + CRYPT_DATA_BLOB ListIdentifier; + CRYPT_INTEGER_BLOB SequenceNumber; + FILETIME ThisUpdate; + FILETIME NextUpdate; + CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm; + DWORD cCTLEntry; + PCTL_ENTRY rgCTLEntry; + DWORD cExtension; + PCERT_EXTENSION rgExtension; +} CTL_INFO, *PCTL_INFO; + +typedef struct _CTL_CONTEXT { + DWORD dwMsgAndCertEncodingType; + BYTE *pbCtlEncoded; + DWORD cbCtlEncoded; + PCTL_INFO pCtlInfo; + HCERTSTORE hCertStore; + HCRYPTMSG hCryptMsg; + BYTE *pbCtlContext; + DWORD cbCtlContext; +} CTL_CONTEXT, *PCTL_CONTEXT; +typedef const CTL_CONTEXT *PCCTL_CONTEXT; + +typedef struct _CRYPT_TIME_STAMP_REQUEST_INFO { + LPSTR pszTimeStampAlgorithm; + LPSTR pszContentType; + CRYPT_OBJID_BLOB Content; + DWORD cAttribute; + PCRYPT_ATTRIBUTE rgAttribute; +} CRYPT_TIME_STAMP_REQUEST_INFO, *PCRYPT_TIME_STAMP_REQUEST_INFO; + +typedef struct _CRYPT_ENROLLMENT_NAME_VALUE_PAIR { + LPWSTR pwszName; + LPWSTR pwszValue; +} CRYPT_ENROLLMENT_NAME_VALUE_PAIR, *PCRYPT_ENROLLMENT_NAME_VALUE_PAIR; + +typedef struct _CMSG_SIGNER_INFO { + DWORD dwVersion; + CERT_NAME_BLOB Issuer; + CRYPT_INTEGER_BLOB SerialNumber; + CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; + CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm; + CRYPT_DATA_BLOB EncryptedHash; + CRYPT_ATTRIBUTES AuthAttrs; + CRYPT_ATTRIBUTES UnauthAttrs; +} CMSG_SIGNER_INFO, *PCMSG_SIGNER_INFO; + +#define CMSG_VERIFY_SIGNER_PUBKEY 1 +#define CMSG_VERIFY_SIGNER_CERT 2 +#define CMSG_VERIFY_SIGNER_CHAIN 3 +#define CMSG_VERIFY_SIGNER_NULL 4 + +typedef struct _CERT_REVOCATION_CRL_INFO { + DWORD cbSize; + PCCRL_CONTEXT pBaseCrlContext; + PCCRL_CONTEXT pDeltaCrlContext; + PCRL_ENTRY pCrlEntry; + BOOL fDeltaCrlEntry; +} CERT_REVOCATION_CRL_INFO, *PCERT_REVOCATION_CRL_INFO; + +typedef struct _CERT_REVOCATION_INFO { + DWORD cbSize; + DWORD dwRevocationResult; + LPCSTR pszRevocationOid; + LPVOID pvOidSpecificInfo; + BOOL fHasFreshnessTime; + DWORD dwFreshnessTime; + PCERT_REVOCATION_CRL_INFO pCrlInfo; +} CERT_REVOCATION_INFO, *PCERT_REVOCATION_INFO; + +typedef struct _CERT_REVOCATION_PARA { + DWORD cbSize; + PCCERT_CONTEXT pIssuerCert; + DWORD cCertStore; + HCERTSTORE *rgCertStore; + HCERTSTORE hCrlStore; + LPFILETIME pftTimeToUse; +#ifdef CERT_REVOCATION_PARA_HAS_EXTRA_FIELDS + DWORD dwUrlRetrievalTimeout; + BOOL fCheckFreshnessTime; + DWORD dwFreshnessTime; + LPFILETIME pftCurrentTime; + PCERT_REVOCATION_CRL_INFO pCrlInfo; +#endif +} CERT_REVOCATION_PARA, *PCERT_REVOCATION_PARA; + +#define CERT_CONTEXT_REVOCATION_TYPE 1 +#define CERT_VERIFY_REV_CHAIN_FLAG 0x00000001 +#define CERT_VERIFY_CACHE_ONLY_BASED_REVOCATION 0x00000002 +#define CERT_VERIFY_REV_ACCUMULATIVE_TIMEOUT_FLAG 0x00000004 + +typedef struct _CTL_VERIFY_USAGE_PARA { + DWORD cbSize; + CRYPT_DATA_BLOB ListIdentifier; + DWORD cCtlStore; + HCERTSTORE *rghCtlStore; + DWORD cSignerStore; + HCERTSTORE *rghSignerStore; +} CTL_VERIFY_USAGE_PARA, *PCTL_VERIFY_USAGE_PARA; + +typedef struct _CTL_VERIFY_USAGE_STATUS { + DWORD cbSize; + DWORD dwError; + DWORD dwFlags; + PCCTL_CONTEXT *ppCtl; + DWORD dwCtlEntryIndex; + PCCERT_CONTEXT *ppSigner; + DWORD dwSignerIndex; +} CTL_VERIFY_USAGE_STATUS, *PCTL_VERIFY_USAGE_STATUS; + +#define CERT_VERIFY_INHIBIT_CTL_UPDATE_FLAG 0x1 +#define CERT_VERIFY_TRUSTED_SIGNERS_FLAG 0x2 +#define CERT_VERIFY_NO_TIME_CHECK_FLAG 0x4 +#define CERT_VERIFY_ALLOW_MORE_USAGE_FLAG 0x8 +#define CERT_VERIFY_UPDATED_CTL_FLAG 0x1 + +typedef struct _CERT_CHAIN { + DWORD cCerts; + PCERT_BLOB certs; + CRYPT_KEY_PROV_INFO keyLocatorInfo; +} CERT_CHAIN, *PCERT_CHAIN; + +typedef struct _CERT_REVOCATION_STATUS { + DWORD cbSize; + DWORD dwIndex; + DWORD dwError; + DWORD dwReason; + BOOL fHasFreshnessTime; + DWORD dwFreshnessTime; +} CERT_REVOCATION_STATUS, *PCERT_REVOCATION_STATUS; + +typedef struct _CERT_TRUST_LIST_INFO { + DWORD cbSize; + PCTL_ENTRY pCtlEntry; + PCCTL_CONTEXT pCtlContext; +} CERT_TRUST_LIST_INFO, *PCERT_TRUST_LIST_INFO; + +#define CERT_TRUST_NO_ERROR 0x00000000 +#define CERT_TRUST_IS_NOT_TIME_VALID 0x00000001 +#define CERT_TRUST_IS_NOT_TIME_NESTED 0x00000002 +#define CERT_TRUST_IS_REVOKED 0x00000004 +#define CERT_TRUST_IS_NOT_SIGNATURE_VALID 0x00000008 +#define CERT_TRUST_IS_NOT_VALID_FOR_USAGE 0x00000010 +#define CERT_TRUST_IS_UNTRUSTED_ROOT 0x00000020 +#define CERT_TRUST_REVOCATION_STATUS_UNKNOWN 0x00000040 +#define CERT_TRUST_IS_CYCLIC 0x00000080 +#define CERT_TRUST_INVALID_EXTENSION 0x00000100 +#define CERT_TRUST_INVALID_POLICY_CONSTRAINTS 0x00000200 +#define CERT_TRUST_INVALID_BASIC_CONSTRAINTS 0x00000400 +#define CERT_TRUST_INVALID_NAME_CONSTRAINTS 0x00000800 +#define CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT 0x00001000 +#define CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT 0x00002000 +#define CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT 0x00004000 +#define CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT 0x00008000 +#define CERT_TRUST_IS_OFFLINE_REVOCATION 0x01000000 +#define CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY 0x02000000 +#define CERT_TRUST_IS_EXPLICIT_DISTRUST 0x04000000 +#define CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT 0x08000000 + +#define CERT_TRUST_IS_PARTIAL_CHAIN 0x00010000 +#define CERT_TRUST_CTL_IS_NOT_TIME_VALID 0x00020000 +#define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID 0x00040000 +#define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE 0x00080000 + +#define CERT_TRUST_HAS_EXACT_MATCH_ISSUER 0x00000001 +#define CERT_TRUST_HAS_KEY_MATCH_ISSUER 0x00000002 +#define CERT_TRUST_HAS_NAME_MATCH_ISSUER 0x00000004 +#define CERT_TRUST_IS_SELF_SIGNED 0x00000008 + +#define CERT_TRUST_HAS_PREFERRED_ISSUER 0x00000100 +#define CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY 0x00000200 +#define CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS 0x00000400 +#define CERT_TRUST_IS_PEER_TRUSTED 0x00000800 +#define CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED 0x00001000 + +#define CERT_TRUST_IS_COMPLEX_CHAIN 0x00010000 + +typedef struct _CERT_TRUST_STATUS { + DWORD dwErrorStatus; + DWORD dwInfoStatus; +} CERT_TRUST_STATUS, *PCERT_TRUST_STATUS; + +typedef struct _CERT_CHAIN_ELEMENT { + DWORD cbSize; + PCCERT_CONTEXT pCertContext; + CERT_TRUST_STATUS TrustStatus; + PCERT_REVOCATION_INFO pRevocationInfo; + PCERT_ENHKEY_USAGE pIssuanceUsage; + PCERT_ENHKEY_USAGE pApplicationUsage; + LPCWSTR pwszExtendedErrorInfo; +} CERT_CHAIN_ELEMENT, *PCERT_CHAIN_ELEMENT; + +typedef struct _CERT_SIMPLE_CHAIN { + DWORD cbSize; + CERT_TRUST_STATUS TrustStatus; + DWORD cElement; + PCERT_CHAIN_ELEMENT *rgpElement; + PCERT_TRUST_LIST_INFO pTrustListInfo; + BOOL fHasRevocationFreshnessTime; + DWORD dwRevocationFreshnessTime; +} CERT_SIMPLE_CHAIN, *PCERT_SIMPLE_CHAIN; + +typedef struct _CERT_CHAIN_CONTEXT CERT_CHAIN_CONTEXT, *PCERT_CHAIN_CONTEXT; +typedef const CERT_CHAIN_CONTEXT *PCCERT_CHAIN_CONTEXT; + +struct _CERT_CHAIN_CONTEXT { + DWORD cbSize; + CERT_TRUST_STATUS TrustStatus; + DWORD cChain; + PCERT_SIMPLE_CHAIN *rgpChain; + DWORD cLowerQualityChainContext; + PCCERT_CHAIN_CONTEXT *rgpLowerQualityChainContext; + BOOL fHasRevocationFreshnessTime; + DWORD dwRevocationFreshnessTime; +}; + +typedef struct _CERT_CHAIN_POLICY_PARA { + DWORD cbSize; + DWORD dwFlags; + void *pvExtraPolicyPara; +} CERT_CHAIN_POLICY_PARA, *PCERT_CHAIN_POLICY_PARA; + +typedef struct _CERT_CHAIN_POLICY_STATUS { + DWORD cbSize; + DWORD dwError; + LONG lChainIndex; + LONG lElementIndex; + void *pvExtraPolicyStatus; +} CERT_CHAIN_POLICY_STATUS, *PCERT_CHAIN_POLICY_STATUS; + +#define CERT_CHAIN_POLICY_BASE ((LPCSTR)1) +#define CERT_CHAIN_POLICY_AUTHENTICODE ((LPCSTR)2) +#define CERT_CHAIN_POLICY_AUTHENTICODE_TS ((LPCSTR)3) +#define CERT_CHAIN_POLICY_SSL ((LPCSTR)4) +#define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR)5) +#define CERT_CHAIN_POLICY_NT_AUTH ((LPCSTR)6) +#define CERT_CHAIN_POLICY_MICROSOFT_ROOT ((LPCSTR)7) + +#define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG 0x00000001 +#define CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG 0x00000002 +#define CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG 0x00000004 +#define CERT_CHAIN_POLICY_IGNORE_INVALID_BASIC_CONSTRAINTS_FLAG 0x00000008 + +#define CERT_CHAIN_POLICY_IGNORE_ALL_NOT_TIME_VALID_FLAGS ( \ + CERT_CHAIN_POLICY_IGNORE_NOT_TIME_VALID_FLAG \ + CERT_CHAIN_POLICY_IGNORE_CTL_NOT_TIME_VALID_FLAG \ + CERT_CHAIN_POLICY_IGNORE_NOT_TIME_NESTED_FLAG ) + +#define CERT_CHAIN_POLICY_ALLOW_UNKNOWN_CA_FLAG 0x00000010 +#define CERT_CHAIN_POLICY_IGNORE_WRONG_USAGE_FLAG 0x00000020 +#define CERT_CHAIN_POLICY_IGNORE_INVALID_NAME_FLAG 0x00000040 +#define CERT_CHAIN_POLICY_IGNORE_INVALID_POLICY_FLAG 0x00000080 + +#define CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG 0x00000100 +#define CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG 0x00000200 +#define CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG 0x00000400 +#define CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG 0x00000800 + +#define CERT_CHAIN_POLICY_IGNORE_ALL_REV_UNKNOWN_FLAGS ( \ + CERT_CHAIN_POLICY_IGNORE_END_REV_UNKNOWN_FLAG \ + CERT_CHAIN_POLICY_IGNORE_CTL_SIGNER_REV_UNKNOWN_FLAG \ + CERT_CHAIN_POLICY_IGNORE_CA_REV_UNKNOWN_FLAG \ + CERT_CHAIN_POLICY_IGNORE_ROOT_REV_UNKNOWN_FLAG ) + +#define CERT_CHAIN_POLICY_IGNORE_PEER_TRUST_FLAG 0x00001000 +#define CERT_CHAIN_POLICY_IGNORE_NOT_SUPPORTED_CRITICAL_EXT_FLAG 0x00002000 +#define CERT_CHAIN_POLICY_TRUST_TESTROOT_FLAG 0x00004000 +#define CERT_CHAIN_POLICY_ALLOW_TESTROOT_FLAG 0x00008000 +#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x00010000 +#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_CHECK_APPLICATION_ROOT_FLAG 0x00020000 + +typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA { + DWORD cbSize; + DWORD dwRegPolicySettings; + PCMSG_SIGNER_INFO pSignerInfo; +} AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA, + *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA; + +typedef struct _AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS { + DWORD cbSize; + BOOL fCommercial; +} AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS, + *PAUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS; + +typedef struct _AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA { + DWORD cbSize; + DWORD dwRegPolicySettings; + BOOL fCommercial; +} AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA, + *PAUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA; + +typedef struct _HTTPSPolicyCallbackData { + union { + DWORD cbStruct; + DWORD cbSize; + } DUMMYUNIONNAME; + DWORD dwAuthType; + DWORD fdwChecks; + WCHAR *pwszServerName; +} HTTPSPolicyCallbackData, *PHTTPSPolicyCallbackData, + SSL_EXTRA_CERT_CHAIN_POLICY_PARA, *PSSL_EXTRA_CERT_CHAIN_POLICY_PARA; + +/* Values for HTTPSPolicyCallbackData's dwAuthType */ +#define AUTHTYPE_CLIENT 1 +#define AUTHTYPE_SERVER 2 +/* Values for HTTPSPolicyCallbackData's fdwChecks are defined in wininet.h */ + +#define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_CA_FLAG 0x80000000 +#define BASIC_CONSTRAINTS_CERT_CHAIN_POLICY_END_ENTITY_FLAG 0x40000000 + +#define MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG 0x00010000 + +#define USAGE_MATCH_TYPE_AND 0x00000000 +#define USAGE_MATCH_TYPE_OR 0x00000001 + +typedef struct _CERT_USAGE_MATCH { + DWORD dwType; + CERT_ENHKEY_USAGE Usage; +} CERT_USAGE_MATCH, *PCERT_USAGE_MATCH; + +typedef struct _CTL_USAGE_MATCH { + DWORD dwType; + CTL_USAGE Usage; +} CTL_USAGE_MATCH, *PCTL_USAGE_MATCH; + +#define CERT_CHAIN_REVOCATION_CHECK_END_CERT 0x10000000 +#define CERT_CHAIN_REVOCATION_CHECK_CHAIN 0x20000000 +#define CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x40000000 +#define CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY 0x80000000 + +#define CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT 0x08000000 + +#define CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING 0x00000040 +#define CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS 0x00000080 +#define CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE 0x00000100 +#define CERT_CHAIN_TIMESTAMP_TIME 0x00000200 + +typedef struct _CERT_CHAIN_PARA { + DWORD cbSize; + CERT_USAGE_MATCH RequestedUsage; +#ifdef CERT_CHAIN_PARA_HAS_EXTRA_FIELDS + CERT_USAGE_MATCH RequestedIssuancePolicy; + DWORD dwUrlRetrievalTimeout; + BOOL fCheckRevocationFreshnessTime; + DWORD dwRevocationFreshnessTime; + LPFILETIME pftCacheResync; +#endif +} CERT_CHAIN_PARA, *PCERT_CHAIN_PARA; + +typedef struct _CERT_SYSTEM_STORE_INFO { + DWORD cbSize; +} CERT_SYSTEM_STORE_INFO, *PCERT_SYSTEM_STORE_INFO; + +typedef struct _CERT_PHYSICAL_STORE_INFO { + DWORD cbSize; + LPSTR pszOpenStoreProvider; + DWORD dwOpenEncodingType; + DWORD dwOpenFlags; + CRYPT_DATA_BLOB OpenParameters; + DWORD dwFlags; + DWORD dwPriority; +} CERT_PHYSICAL_STORE_INFO, *PCERT_PHYSICAL_STORE_INFO; + +typedef struct _CERT_SYSTEM_STORE_RELOCATE_PARA { + union { + HKEY hKeyBase; + VOID *pvBase; + } DUMMYUNIONNAME; + union { + void *pvSystemStore; + LPCSTR pszSystemStore; + LPCWSTR pwszSystemStore; + } DUMMYUNIONNAME2; +} CERT_SYSTEM_STORE_RELOCATE_PARA, *PCERT_SYSTEM_STORE_RELOCATE_PARA; + +typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION)( + LPCWSTR pwszStoreLocation, DWORD dwFlags, void *pvReserved, void *pvArg); + +typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE)(const void *pvSystemStore, + DWORD dwFlags, PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved, + void *pvArg); + +typedef BOOL (WINAPI *PFN_CERT_ENUM_PHYSICAL_STORE)(const void *pvSystemStore, + DWORD dwFlags, LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo, + void *pvReserved, void *pvArg); + +/* Encode/decode object */ +typedef LPVOID (__WINE_ALLOC_SIZE(1) WINAPI *PFN_CRYPT_ALLOC)(size_t cbsize); +typedef VOID (WINAPI *PFN_CRYPT_FREE)(LPVOID pv); + +typedef struct _CRYPT_ENCODE_PARA { + DWORD cbSize; + PFN_CRYPT_ALLOC pfnAlloc; + PFN_CRYPT_FREE pfnFree; +} CRYPT_ENCODE_PARA, *PCRYPT_ENCODE_PARA; + +typedef struct _CRYPT_DECODE_PARA { + DWORD cbSize; + PFN_CRYPT_ALLOC pfnAlloc; + PFN_CRYPT_FREE pfnFree; +} CRYPT_DECODE_PARA, *PCRYPT_DECODE_PARA; + +typedef struct _CERT_STORE_PROV_INFO { + DWORD cbSize; + DWORD cStoreProvFunc; + void **rgpvStoreProvFunc; + HCERTSTOREPROV hStoreProv; + DWORD dwStoreProvFlags; + HCRYPTOIDFUNCADDR hStoreProvFuncAddr2; +} CERT_STORE_PROV_INFO, *PCERT_STORE_PROV_INFO; + +typedef BOOL (WINAPI *PFN_CERT_DLL_OPEN_STORE_PROV_FUNC)( + LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV_LEGACY hCryptProv, + DWORD dwFlags, const void *pvPara, HCERTSTORE hCertStore, + PCERT_STORE_PROV_INFO pStoreProvInfo); + +typedef void (WINAPI *PFN_CERT_STORE_PROV_CLOSE)(HCERTSTOREPROV hStoreProv, + DWORD dwFlags); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CERT)(HCERTSTOREPROV hStoreProv, + PCCERT_CONTEXT pStoreCertContext, DWORD dwFlags, + PCCERT_CONTEXT *ppProvCertContext); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CERT)(HCERTSTOREPROV hStoreProv, + PCCERT_CONTEXT pCertContext, DWORD dwFlags); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CERT)( + HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwFlags); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CERT_PROPERTY)( + HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId, + DWORD dwFlags, const void *pvData); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CRL)(HCERTSTOREPROV hStoreProv, + PCCRL_CONTEXT pStoreCrlContext, DWORD dwFlags, + PCCRL_CONTEXT *ppProvCrlContext); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CRL)(HCERTSTOREPROV hStoreProv, + PCCRL_CONTEXT pCrlContext, DWORD dwFlags); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CRL)(HCERTSTOREPROV hStoreProv, + PCCRL_CONTEXT pCrlContext, DWORD dwFlags); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CRL_PROPERTY)( + HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId, + DWORD dwFlags, const void *pvData); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_READ_CTL)(HCERTSTOREPROV hStoreProv, + PCCTL_CONTEXT pStoreCtlContext, DWORD dwFlags, + PCCTL_CONTEXT *ppProvCtlContext); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_WRITE_CTL)(HCERTSTOREPROV hStoreProv, + PCCTL_CONTEXT pCtlContext, DWORD dwFlags); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_DELETE_CTL)( + HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwFlags); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_SET_CTL_PROPERTY)( + HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId, + DWORD dwFlags, const void *pvData); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_CONTROL)(HCERTSTOREPROV hStoreProv, + DWORD dwFlags, DWORD dwCtrlType, void const *pvCtrlPara); + +typedef struct _CERT_STORE_PROV_FIND_INFO { + DWORD cbSize; + DWORD dwMsgAndCertEncodingType; + DWORD dwFindFlags; + DWORD dwFindType; + const void *pvFindPara; +} CERT_STORE_PROV_FIND_INFO, *PCERT_STORE_PROV_FIND_INFO; +typedef const CERT_STORE_PROV_FIND_INFO CCERT_STORE_PROV_FIND_INFO, + *PCCERT_STORE_PROV_FIND_INFO; + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CERT)(HCERTSTOREPROV hStoreProv, + PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCERT_CONTEXT pPrevCertContext, + DWORD dwFlags, void **ppvStoreProvFindInfo, PCCERT_CONTEXT *ppProvCertContext); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CERT)( + HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, + void *pvStoreProvFindInfo, DWORD dwFlags); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CERT_PROPERTY)( + HCERTSTOREPROV hStoreProv, PCCERT_CONTEXT pCertContext, DWORD dwPropId, + DWORD dwFlags, void *pvData, DWORD *pcbData); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CRL)(HCERTSTOREPROV hStoreProv, + PCCERT_STORE_PROV_FIND_INFO pFindInfo, PCCRL_CONTEXT pPrevCrlContext, + DWORD dwFlags, void **ppvStoreProvFindInfo, PCCRL_CONTEXT *ppProvCrlContext); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FREE_FIND_CRL)( + HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, + void *pvStoreProvFindInfo, DWORD dwFlags); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CRL_PROPERTY)( + HCERTSTOREPROV hStoreProv, PCCRL_CONTEXT pCrlContext, DWORD dwPropId, + DWORD dwFlags, void *pvData, DWORD *pcbData); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_FIND_CTL)(HCERTSTOREPROV hStoreProv, + PCCTL_CONTEXT pCtlContext, void *pvStoreProvFindInfo, DWORD dwFlags); + +typedef BOOL (WINAPI *PFN_CERT_STORE_PROV_GET_CTL_PROPERTY)( + HCERTSTOREPROV hStoreProv, PCCTL_CONTEXT pCtlContext, DWORD dwPropId, + DWORD dwFlags, void *pvData); + +typedef struct _CERT_CREATE_CONTEXT_PARA { + DWORD cbSize; + PFN_CRYPT_FREE pfnFree; + void *pvFree; +} CERT_CREATE_CONTEXT_PARA, *PCERT_CREATE_CONTEXT_PARA; + +typedef struct _CRYPT_OID_FUNC_ENTRY { + LPCSTR pszOID; + void *pvFuncAddr; +} CRYPT_OID_FUNC_ENTRY, *PCRYPT_OID_FUNC_ENTRY; + +typedef BOOL (WINAPI *PFN_CRYPT_ENUM_OID_FUNC)(DWORD dwEncodingType, + LPCSTR pszFuncName, LPCSTR pszOID, DWORD cValue, const DWORD rgdwValueType[], + LPCWSTR const rgpwszValueName[], const BYTE * const rgpbValueData[], + const DWORD rgcbValueData[], void *pvArg); + +#define CRYPT_MATCH_ANY_ENCODING_TYPE 0xffffffff + +#define CALG_OID_INFO_CNG_ONLY 0xffffffff +#define CALG_OID_INFO_PARAMETERS 0xfffffffe + +#if defined(_MSC_VER) || defined(__MINGW32__) +#define CRYPT_OID_INFO_HASH_PARAMETERS_ALGORITHM L"CryptOIDInfoHashParameters" +#define CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM L"CryptOIDInfoECCParameters" +#define CRYPT_OID_INFO_MGF1_PARAMETERS_ALGORITHM L"CryptOIDInfoMgf1Parameters" +#define CRYPT_OID_INFO_NO_SIGN_ALGORITHM L"CryptOIDInfoNoSign" +#define CRYPT_OID_INFO_OAEP_PARAMETERS_ALGORITHM L"CryptOIDInfoOAEPParameters" +#define CRYPT_OID_INFO_ECC_WRAP_PARAMETERS_ALGORITHM L"CryptOIDInfoECCWrapParameters" +#define CRYPT_OID_INFO_NO_PARAMETERS_ALGORITHM L"CryptOIDInfoNoParameters" +#else +static const WCHAR CRYPT_OID_INFO_HASH_PARAMETERS_ALGORITHM[] = {'C','r','y','p','t','O','I','D','I','n','f','o','H','a','s','h','P','a','r','a','m','e','t','e','r','s',0}; +static const WCHAR CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM[] = {'C','r','y','p','t','O','I','D','I','n','f','o','E','C','C','P','a','r','a','m','e','t','e','r','s',0}; +static const WCHAR CRYPT_OID_INFO_MGF1_PARAMETERS_ALGORITHM[] = {'C','r','y','p','t','O','I','D','I','n','f','o','M','g','f','1','P','a','r','a','m','e','t','e','r','s',0}; +static const WCHAR CRYPT_OID_INFO_NO_SIGN_ALGORITHM[] = {'C','r','y','p','t','O','I','D','I','n','f','o','N','o','S','i','g','n',0}; +static const WCHAR CRYPT_OID_INFO_OAEP_PARAMETERS_ALGORITHM[] = {'C','r','y','p','t','O','I','D','I','n','f','o','O','A','E','P','P','a','r','a','m','e','t','e','r','s',0}; +static const WCHAR CRYPT_OID_INFO_ECC_WRAP_PARAMETERS_ALGORITHM[] = {'C','r','y','p','t','O','I','D','I','n','f','o','E','C','C','W','r','a','p','P','a','r','a','m','e','t','e','r','s',0}; +static const WCHAR CRYPT_OID_INFO_NO_PARAMETERS_ALGORITHM[] = {'C','r','y','p','t','O','I','D','I','n','f','o','N','o','P','a','r','a','m','e','t','e','r','s',0}; +#endif + +typedef struct _CRYPT_OID_INFO { + DWORD cbSize; + LPCSTR pszOID; + LPCWSTR pwszName; + DWORD dwGroupId; + union { + DWORD dwValue; + ALG_ID Algid; + DWORD dwLength; + } DUMMYUNIONNAME; + CRYPT_DATA_BLOB ExtraInfo; +#ifdef CRYPT_OID_INFO_HAS_EXTRA_FIELDS + LPCWSTR pwszCNGAlgid; + LPCWSTR pwszCNGExtraAlgid; +#endif +} CRYPT_OID_INFO, *PCRYPT_OID_INFO; +typedef const CRYPT_OID_INFO CCRYPT_OID_INFO, *PCCRYPT_OID_INFO; + +typedef BOOL (WINAPI *PFN_CRYPT_ENUM_OID_INFO)(PCCRYPT_OID_INFO pInfo, + void *pvArg); + +typedef struct _CRYPT_SIGN_MESSAGE_PARA { + DWORD cbSize; + DWORD dwMsgEncodingType; + PCCERT_CONTEXT pSigningCert; + CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; + void * pvHashAuxInfo; + DWORD cMsgCert; + PCCERT_CONTEXT *rgpMsgCert; + DWORD cMsgCrl; + PCCRL_CONTEXT *rgpMsgCrl; + DWORD cAuthAttr; + PCRYPT_ATTRIBUTE rgAuthAttr; + DWORD cUnauthAttr; + PCRYPT_ATTRIBUTE rgUnauthAttr; + DWORD dwFlags; + DWORD dwInnerContentType; +#ifdef CRYPT_SIGN_MESSAGE_PARA_HAS_CMS_FIELDS + CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm; + void * pvHashEncryptionAuxInfo; +#endif +} CRYPT_SIGN_MESSAGE_PARA, *PCRYPT_SIGN_MESSAGE_PARA; + +#define CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG 0x00000001 +#define CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG 0x00000002 +#define CRYPT_MESSAGE_KEYID_SIGNER_FLAG 0x00000004 +#define CRYPT_MESSAGE_SILENT_KEYSET_FLAG 0x00000008 + +typedef PCCERT_CONTEXT (WINAPI *PFN_CRYPT_GET_SIGNER_CERTIFICATE)(void *pvArg, + DWORD dwCertEncodingType, PCERT_INFO pSignerId, HCERTSTORE hMsgCertStore); + +typedef struct _CRYPT_VERIFY_MESSAGE_PARA { + DWORD cbSize; + DWORD dwMsgAndCertEncodingType; + HCRYPTPROV_LEGACY hCryptProv; + PFN_CRYPT_GET_SIGNER_CERTIFICATE pfnGetSignerCertificate; + void * pvGetArg; +} CRYPT_VERIFY_MESSAGE_PARA, *PCRYPT_VERIFY_MESSAGE_PARA; + +typedef struct _CRYPT_ENCRYPT_MESSAGE_PARA { + DWORD cbSize; + DWORD dwMsgEncodingType; + HCRYPTPROV_LEGACY hCryptProv; + CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm; + void * pvEncryptionAuxInfo; + DWORD dwFlags; + DWORD dwInnerContentType; +} CRYPT_ENCRYPT_MESSAGE_PARA, *PCRYPT_ENCRYPT_MESSAGE_PARA; + +#define CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG 0x00000004 + +typedef struct _CRYPT_DECRYPT_MESSAGE_PARA { + DWORD cbSize; + DWORD dwMsgAndCertEncodingType; + DWORD cCertStore; + HCERTSTORE *rghCertStore; +#ifdef CRYPT_DECRYPT_MESSAGE_PARA_HAS_EXTRA_FIELDS + DWORD dwFlags; +#endif +} CRYPT_DECRYPT_MESSAGE_PARA, *PCRYPT_DECRYPT_MESSAGE_PARA; + +typedef struct _CRYPT_HASH_MESSAGE_PARA { + DWORD cbSize; + DWORD dwMsgEncodingType; + HCRYPTPROV_LEGACY hCryptProv; + CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; + void * pvHashAuxInfo; +} CRYPT_HASH_MESSAGE_PARA, *PCRYPT_HASH_MESSAGE_PARA; + +typedef struct _CRYPT_KEY_SIGN_MESSAGE_PARA { + DWORD cbSize; + DWORD dwMsgAndCertEncodingType; + HCRYPTPROV hCryptProv; + DWORD dwKeySpec; + CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; + void * pvHashAuxInfo; +} CRYPT_KEY_SIGN_MESSAGE_PARA, *PCRYPT_KEY_SIGN_MESSAGE_PARA; + +typedef struct _CRYPT_KEY_VERIFY_MESSAGE_PARA { + DWORD cbSize; + DWORD dwMsgEncodingType; + HCRYPTPROV_LEGACY hCryptProv; +} CRYPT_KEY_VERIFY_MESSAGE_PARA, *PCRYPT_KEY_VERIFY_MESSAGE_PARA; + +typedef struct _CRYPT_URL_ARRAY { + DWORD cUrl; + LPWSTR *rgwszUrl; +} CRYPT_URL_ARRAY, *PCRYPT_URL_ARRAY; + +typedef struct _CRYPT_URL_INFO { + DWORD cbSize; + DWORD dwSyncDeltaTime; + DWORD cGroup; + DWORD *rgcGroupEntry; +} CRYPT_URL_INFO, *PCRYPT_URL_INFO; + +#define URL_OID_CERTIFICATE_ISSUER ((LPCSTR)1) +#define URL_OID_CERTIFICATE_CRL_DIST_POINT ((LPCSTR)2) +#define URL_OID_CTL_ISSUER ((LPCSTR)3) +#define URL_OID_CTL_NEXT_UPDATE ((LPCSTR)4) +#define URL_OID_CRL_ISSUER ((LPCSTR)5) +#define URL_OID_CERTIFICATE_FRESHEST_CRL ((LPCSTR)6) +#define URL_OID_CRL_FRESHEST_CRL ((LPCSTR)7) +#define URL_OID_CROSS_CERT_DIST_POINT ((LPCSTR)8) +#define URL_OID_CERTIFICATE_OCSP ((LPCSTR)9) +#define URL_OID_CERTIFICATE_OCSP_AND_CRL_DIST_POINT ((LPCSTR)10) +#define URL_OID_CERTIFICATE_CRL_DIST_POINT_AND_OCSP ((LPCSTR)11) +#define URL_OID_CROSS_CERT_SUBJECT_INFO_ACCESS ((LPCSTR)12) + +#define URL_OID_GET_OBJECT_URL_FUNC "UrlDllGetObjectUrl" + +typedef HANDLE HCRYPTASYNC, *PHCRYPTASYNC; + +typedef void (WINAPI *PFN_CRYPT_ASYNC_PARAM_FREE_FUNC)(LPSTR pszParamOid, + LPVOID pvParam); + +#define CRYPT_PARAM_ASYNC_RETRIEVAL_COMPLETION ((LPCSTR)1) +#define CRYPT_PARAM_CANCEL_ASYNC_RETRIEVAL ((LPCSTR)2) + +typedef void (WINAPI *PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC)( + void *pvCompletion, DWORD dwCompletionCode, LPCSTR pszURL, LPSTR pszObjectOid, + void *pvObject); + +typedef struct _CRYPT_ASYNC_RETRIEVAL_COMPLETION +{ + PFN_CRYPT_ASYNC_RETRIEVAL_COMPLETION_FUNC pfnCompletion; + void *pvCompletion; +} CRYPT_ASYNC_RETRIEVAL_COMPLETION, *PCRYPT_ASYNC_RETRIEVAL_COMPLETION; + +typedef BOOL (WINAPI *PFN_CANCEL_ASYNC_RETRIEVAL_FUNC)( + HCRYPTASYNC hAsyncRetrieve); + +typedef struct _CRYPT_BLOB_ARRAY +{ + DWORD cBlob; + PCRYPT_DATA_BLOB rgBlob; +} CRYPT_BLOB_ARRAY, *PCRYPT_BLOB_ARRAY; + +typedef struct _CRYPT_CREDENTIALS { + DWORD cbSize; + LPCSTR pszCredentialsOid; + LPVOID pvCredentials; +} CRYPT_CREDENTIALS, *PCRYPT_CREDENTIALS; + +#define CREDENTIAL_OID_PASSWORD_CREDENTIALS_A ((LPCSTR)1) +#define CREDENTIAL_OID_PASSWORD_CREDENTIALS_W ((LPCSTR)2) +#define CREDENTIAL_OID_PASSWORD_CREDENTIALS \ + WINELIB_NAME_AW(CREDENTIAL_OID_PASSWORD_CREDENTIALS_) + +typedef struct _CRYPT_PASSWORD_CREDENTIALSA { + DWORD cbSize; + LPSTR pszUsername; + LPSTR pszPassword; +} CRYPT_PASSWORD_CREDENTIALSA, *PCRYPT_PASSWORD_CREDENTIALSA; + +typedef struct _CRYPT_PASSWORD_CREDENTIALSW { + DWORD cbSize; + LPWSTR pszUsername; + LPWSTR pszPassword; +} CRYPT_PASSWORD_CREDENTIALSW, *PCRYPT_PASSWORD_CREDENTIALSW; +#define CRYPT_PASSWORD_CREDENTIALS WINELIB_NAME_AW(CRYPT_PASSWORD_CREDENTIALS) +#define PCRYPT_PASSWORD_CREDENTIALS WINELIB_NAME_AW(PCRYPT_PASSWORD_CREDENTIALS) + +typedef struct _CRYPT_RETRIEVE_AUX_INFO { + DWORD cbSize; + FILETIME *pLastSyncTime; + DWORD dwMaxUrlRetrievalByteCount; +} CRYPT_RETRIEVE_AUX_INFO, *PCRYPT_RETRIEVE_AUX_INFO; + +typedef void (WINAPI *PFN_FREE_ENCODED_OBJECT_FUNC)(LPCSTR pszObjectOid, + PCRYPT_BLOB_ARRAY pObject, void *pvFreeContext); + +#define SCHEME_OID_RETRIEVE_ENCODED_OBJECT_FUNC \ + "SchemeDllRetrieveEncodedObject" +#define SCHEME_OID_RETRIEVE_ENCODED_OBJECTW_FUNC \ + "SchemeDllRetrieveEncodedObjectW" +/* The signature of SchemeDllRetrieveEncodedObjectW is: +BOOL WINAPI SchemeDllRetrieveEncodedObjectW(LPCWSTR pwszUrl, + LPCSTR pszObjectOid, DWORD dwRetrievalFlags, DWORD dwTimeout, + PCRYPT_BLOB_ARRAY pObject, PFN_FREE_ENCODED_OBJECT_FUNC *ppfnFreeObject, + void **ppvFreeContext, HCRYPTASYNC hAsyncRetrieve, + PCRYPT_CREDENTIALS pCredentials, PCRYPT_RETRIEVE_AUX_INFO pAuxInfo); + */ + +#define CONTEXT_OID_CREATE_OBJECT_CONTEXT_FUNC "ContextDllCreateObjectContext" +/* The signature of ContextDllCreateObjectContext is: +BOOL WINAPI ContextDllCreateObjectContext(LPCSTR pszObjectOid, + DWORD dwRetrievalFlags, PCRYPT_BLOB_ARRAY pObject, void **ppvContxt); + */ + +#define CONTEXT_OID_CERTIFICATE ((LPCSTR)1) +#define CONTEXT_OID_CRL ((LPCSTR)2) +#define CONTEXT_OID_CTL ((LPCSTR)3) +#define CONTEXT_OID_PKCS7 ((LPCSTR)4) +#define CONTEXT_OID_CAPI2_ANY ((LPCSTR)5) + +#define CRYPT_RETRIEVE_MULTIPLE_OBJECTS 0x00000001 +#define CRYPT_CACHE_ONLY_RETRIEVAL 0x00000002 +#define CRYPT_WIRE_ONLY_RETRIEVAL 0x00000004 +#define CRYPT_DONT_CACHE_RESULT 0x00000008 +#define CRYPT_ASYNC_RETRIEVAL 0x00000010 +#define CRYPT_STICKY_CACHE_RETRIEVAL 0x00001000 +#define CRYPT_LDAP_SCOPE_BASE_ONLY_RETRIEVAL 0x00002000 +#define CRYPT_OFFLINE_CHECK_RETRIEVAL 0x00004000 +#define CRYPT_LDAP_INSERT_ENTRY_ATTRIBUTE 0x00008000 +#define CRYPT_LDAP_SIGN_RETRIEVAL 0x00010000 +#define CRYPT_NO_AUTH_RETRIEVAL 0x00020000 +#define CRYPT_LDAP_AREC_EXCLUSIVE_RETRIEVAL 0x00040000 +#define CRYPT_AIA_RETRIEVAL 0x00080000 + +#define CRYPT_VERIFY_CONTEXT_SIGNATURE 0x00000020 +#define CRYPT_VERIFY_DATA_HASH 0x00000040 +#define CRYPT_KEEP_TIME_VALID 0x00000080 +#define CRYPT_DONT_VERIFY_SIGNATURE 0x00000100 +#define CRYPT_DONT_CHECK_TIME_VALIDITY 0x00000200 +#define CRYPT_CHECK_FRESHNESS_TIME_VALIDITY 0x00000400 +#define CRYPT_ACCUMULATIVE_TIMEOUT 0x00000800 + +typedef BOOL (WINAPI *PFN_CRYPT_CANCEL_RETRIEVAL)(DWORD dwFlags, void *pvArg); + +typedef struct _CERT_CRL_CONTEXT_PAIR +{ + PCCERT_CONTEXT pCertContext; + PCCRL_CONTEXT pCrlContext; +} CERT_CRL_CONTEXT_PAIR, *PCERT_CRL_CONTEXT_PAIR; +typedef const CERT_CRL_CONTEXT_PAIR *PCCERT_CRL_CONTEXT_PAIR; + +#define TIME_VALID_OID_GET_OBJECT_FUNC "TimeValidDllGetObject" + +#define TIME_VALID_OID_GET_CTL ((LPCSTR)1) +#define TIME_VALID_OID_GET_CRL ((LPCSTR)2) +#define TIME_VALID_OID_GET_CRL_FROM_CERT ((LPCSTR)3) +#define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CERT ((LPCSTR)4) +#define TIME_VALID_OID_GET_FRESHEST_CRL_FROM_CRL ((LPCSTR)5) + +#define TIME_VALID_OID_FLUSH_OBJECT_FUNC "TimeValidDllFlushObject" + +#define TIME_VALID_OID_FLUSH_CTL ((LPCSTR)1) +#define TIME_VALID_OID_FLUSH_CRL ((LPCSTR)2) +#define TIME_VALID_OID_FLUSH_CRL_FROM_CERT ((LPCSTR)3) +#define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CERT ((LPCSTR)4) +#define TIME_VALID_OID_FLUSH_FRESHEST_CRL_FROM_CRL ((LPCSTR)5) + +/* OID group IDs */ +#define CRYPT_HASH_ALG_OID_GROUP_ID 1 +#define CRYPT_ENCRYPT_ALG_OID_GROUP_ID 2 +#define CRYPT_PUBKEY_ALG_OID_GROUP_ID 3 +#define CRYPT_SIGN_ALG_OID_GROUP_ID 4 +#define CRYPT_RDN_ATTR_OID_GROUP_ID 5 +#define CRYPT_EXT_OR_ATTR_OID_GROUP_ID 6 +#define CRYPT_ENHKEY_USAGE_OID_GROUP_ID 7 +#define CRYPT_POLICY_OID_GROUP_ID 8 +#define CRYPT_TEMPLATE_OID_GROUP_ID 9 +#define CRYPT_LAST_OID_GROUP_ID 9 + +#define CRYPT_FIRST_ALG_OID_GROUP_ID CRYPT_HASH_ALG_OID_GROUP_ID +#define CRYPT_LAST_ALG_OID_GROUP_ID CRYPT_SIGN_ALG_OID_GROUP_ID + +#define CRYPT_OID_INHIBIT_SIGNATURE_FORMAT_FLAG 0x1 +#define CRYPT_OID_USE_PUBKEY_PARA_FOR_PKCS7_FLAG 0x2 +#define CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG 0x4 + +#define CRYPT_OID_INFO_OID_KEY 1 +#define CRYPT_OID_INFO_NAME_KEY 2 +#define CRYPT_OID_INFO_ALGID_KEY 3 +#define CRYPT_OID_INFO_SIGN_KEY 4 + +#define CRYPT_OID_INFO_PUBKEY_ENCRYPT_KEY_FLAG 0x40000000 +#define CRYPT_OID_INFO_PUBKEY_SIGN_KEY_FLAG 0x80000000 + +/* Algorithm IDs */ + +#define GET_ALG_CLASS(x) (x & (7 << 13)) +#define GET_ALG_TYPE(x) (x & (15 << 9)) +#define GET_ALG_SID(x) (x & (511)) + +/* Algorithm Classes */ +#define ALG_CLASS_ANY (0) +#define ALG_CLASS_SIGNATURE (1 << 13) +#define ALG_CLASS_MSG_ENCRYPT (2 << 13) +#define ALG_CLASS_DATA_ENCRYPT (3 << 13) +#define ALG_CLASS_HASH (4 << 13) +#define ALG_CLASS_KEY_EXCHANGE (5 << 13) +#define ALG_CLASS_ALL (7 << 13) +/* Algorithm types */ +#define ALG_TYPE_ANY (0) +#define ALG_TYPE_DSS (1 << 9) +#define ALG_TYPE_RSA (2 << 9) +#define ALG_TYPE_BLOCK (3 << 9) +#define ALG_TYPE_STREAM (4 << 9) +#define ALG_TYPE_DH (5 << 9) +#define ALG_TYPE_SECURECHANNEL (6 << 9) +#define ALG_TYPE_ECDH (7 << 9) + +/* SIDs */ +#define ALG_SID_ANY (0) +/* RSA SIDs */ +#define ALG_SID_RSA_ANY 0 +#define ALG_SID_RSA_PKCS 1 +#define ALG_SID_RSA_MSATWORK 2 +#define ALG_SID_RSA_ENTRUST 3 +#define ALG_SID_RSA_PGP 4 +/* DSS SIDs */ +#define ALG_SID_DSS_ANY 0 +#define ALG_SID_DSS_PKCS 1 +#define ALG_SID_DSS_DMS 2 +#define ALG_SID_ECDSA 3 + +/* DES SIDs */ +#define ALG_SID_DES 1 +#define ALG_SID_3DES 3 +#define ALG_SID_DESX 4 +#define ALG_SID_IDEA 5 +#define ALG_SID_CAST 6 +#define ALG_SID_SAFERSK64 7 +#define ALG_SID_SAFERSK128 8 +#define ALG_SID_3DES_112 9 +#define ALG_SID_CYLINK_MEK 12 +#define ALG_SID_RC5 13 +#define ALG_SID_AES_128 14 +#define ALG_SID_AES_192 15 +#define ALG_SID_AES_256 16 +#define ALG_SID_AES 17 +/* Fortezza */ +#define ALG_SID_SKIPJACK 10 +#define ALG_SID_TEK 11 +/* Diffie-Hellmans SIDs */ +#define ALG_SID_DH_SANDF 1 +#define ALG_SID_DH_EPHEM 2 +#define ALG_SID_AGREED_KEY_ANY 3 +#define ALG_SID_KEA 4 +#define ALG_SID_ECDH 5 +#define ALG_SID_ECDH_EPHEM 6 +/* RC2 SIDs */ +#define ALG_SID_RC4 1 +#define ALG_SID_RC2 2 +#define ALG_SID_SEAL 2 +/* Hash SIDs */ +#define ALG_SID_MD2 1 +#define ALG_SID_MD4 2 +#define ALG_SID_MD5 3 +#define ALG_SID_SHA 4 +#define ALG_SID_SHA1 ALG_SID_SHA +#define ALG_SID_MAC 5 +#define ALG_SID_RIPEMD 6 +#define ALG_SID_RIPEMD160 7 +#define ALG_SID_SSL3SHAMD5 8 +#define ALG_SID_HMAC 9 +#define ALG_SID_TLS1PRF 10 +#define ALG_SID_HASH_REPLACE_OWF 11 +#define ALG_SID_SHA_256 12 +#define ALG_SID_SHA_384 13 +#define ALG_SID_SHA_512 14 +/* SCHANNEL SIDs */ +#define ALG_SID_SSL3_MASTER 1 +#define ALG_SID_SCHANNEL_MASTER_HASH 2 +#define ALG_SID_SCHANNEL_MAC_KEY 3 +#define ALG_SID_PCT1_MASTER 4 +#define ALG_SID_SSL2_MASTER 5 +#define ALG_SID_TLS1_MASTER 6 +#define ALG_SID_SCHANNEL_ENC_KEY 7 +#define ALG_SID_EXAMPLE 80 + +#define ALG_SID_ECMQV 1 + +/* Algorithm Definitions */ +#define CALG_MD2 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2) +#define CALG_MD4 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4) +#define CALG_MD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5) +#define CALG_SHA (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA) +#define CALG_SHA1 CALG_SHA +#define CALG_MAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC) +#define CALG_SSL3_SHAMD5 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SSL3SHAMD5) +#define CALG_HMAC (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HMAC) +#define CALG_TLS1PRF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF) +#define CALG_HASH_REPLACE_OWF (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_HASH_REPLACE_OWF) +#define CALG_SHA_256 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256) +#define CALG_SHA_384 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_384) +#define CALG_SHA_512 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_512) +#define CALG_RSA_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY) +#define CALG_DSS_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY) +#define CALG_NO_SIGN (ALG_CLASS_SIGNATURE | ALG_TYPE_ANY | ALG_SID_ANY) +#define CALG_ECDSA (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_ECDSA) +#define CALG_DH_SF (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_SANDF) +#define CALG_DH_EPHEM (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_DH_EPHEM) +#define CALG_AGREEDKEY_ANY (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_AGREED_KEY_ANY) +#define CALG_KEA_KEYX (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_KEA) +#define CALG_HUGHES_MD5 (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_MD5) +#define CALG_ECDH (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_DH | ALG_SID_ECDH) +#define CALG_ECDH_EPHEM (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ECDH | ALG_SID_ECDH_EPHEM) +#define CALG_RSA_KEYX (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA | ALG_SID_RSA_ANY) +#define CALG_ECMQV (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_ANY | ALG_SID_ECMQV) +#define CALG_DES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DES) +#define CALG_RC2 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RC2) +#define CALG_3DES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES) +#define CALG_3DES_112 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_3DES_112) +#define CALG_DESX (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DESX) +#define CALG_AES_128 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_128) +#define CALG_AES_192 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_192) +#define CALG_AES_256 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_256) +#define CALG_AES (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES) +#define CALG_RC4 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC4) +#define CALG_SEAL (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_SEAL) +#define CALG_RC5 (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC5) +#define CALG_SKIPJACK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_SKIPJACK) +#define CALG_TEK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_TEK) +#define CALG_CYLINK_MEK (ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_CYLINK_MEK) +#define CALG_SSL3_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL3_MASTER) +#define CALG_SCHANNEL_MASTER_HASH (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MASTER_HASH) +#define CALG_SCHANNEL_MAC_KEY (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_MAC_KEY) +#define CALG_SCHANNEL_ENC_KEY (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SCHANNEL_ENC_KEY) +#define CALG_PCT1_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_PCT1_MASTER) +#define CALG_SSL2_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_SSL2_MASTER) +#define CALG_TLS1_MASTER (ALG_CLASS_MSG_ENCRYPT | ALG_TYPE_SECURECHANNEL | ALG_SID_TLS1_MASTER) + + +/* Protocol Flags */ +#define CRYPT_FLAG_PCT1 0x0001 +#define CRYPT_FLAG_SSL2 0x0002 +#define CRYPT_FLAG_SSL3 0x0004 +#define CRYPT_FLAG_TLS1 0x0008 +#define CRYPT_FLAG_IPSEC 0x0010 +#define CRYPT_FLAG_SIGNING 0x0020 + +/* Provider names */ +#define MS_DEF_PROV_A "Microsoft Base Cryptographic Provider v1.0" +#if defined(_MSC_VER) || defined(__MINGW32__) +# define MS_DEF_PROV_W L"Microsoft Base Cryptographic Provider v1.0" +#else +static const WCHAR MS_DEF_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', + 'B','a','s','e',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', + 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }; +#endif +#define MS_DEF_PROV WINELIB_NAME_AW(MS_DEF_PROV_) + +#define MS_ENHANCED_PROV_A "Microsoft Enhanced Cryptographic Provider v1.0" +#if defined(_MSC_VER) || defined(__MINGW32__) +# define MS_ENHANCED_PROV_W L"Microsoft Enhanced Cryptographic Provider v1.0" +#else +static const WCHAR MS_ENHANCED_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', + 'E','n','h','a','n','c','e','d',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', + 'P','r','o','v','i','d','e','r',' ','v','1','.','0',0 }; +#endif +#define MS_ENHANCED_PROV WINELIB_NAME_AW(MS_ENHANCED_PROV_) + +#define MS_STRONG_PROV_A "Microsoft Strong Cryptographic Provider" +#if defined(_MSC_VER) || defined(__MINGW32__) +# define MS_STRONG_PROV_W L"Microsoft Strong Cryptographic Provider" +#else +static const WCHAR MS_STRONG_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', + 'S','t','r','o','n','g',' ','C','r','y','p','t','o','g','r','a','p','h','i','c',' ', + 'P','r','o','v','i','d','e','r',0 }; +#endif +#define MS_STRONG_PROV WINELIB_NAME_AW(MS_STRONG_PROV_) + +#define MS_DEF_RSA_SIG_PROV_A "Microsoft RSA Signature Cryptographic Provider" +#if defined(_MSC_VER) || defined(__MINGW32__) +# define MS_DEF_RSA_SIG_PROV_W L"Microsoft RSA Signature Cryptographic Provider" +#else +static const WCHAR MS_DEF_RSA_SIG_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', + 'R','S','A',' ','S','i','g','n','a','t','u','r','e',' ', + 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; +#endif +#define MS_DEF_RSA_SIG_PROV WINELIB_NAME_AW(MS_DEF_RSA_SIG_PROV_) + +#define MS_DEF_RSA_SCHANNEL_PROV_A "Microsoft RSA SChannel Cryptographic Provider" +#if defined(_MSC_VER) || defined(__MINGW32__) +# define MS_DEF_RSA_SCHANNEL_PROV_W L"Microsoft RSA SChannel Cryptographic Provider" +#else +static const WCHAR MS_DEF_RSA_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', + 'R','S','A',' ','S','C','h','a','n','n','e','l',' ', + 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; +#endif +#define MS_DEF_RSA_SCHANNEL_PROV WINELIB_NAME_AW(MS_DEF_RSA_SCHANNEL_PROV_) + +#define MS_DEF_DSS_PROV_A "Microsoft Base DSS Cryptographic Provider" +#if defined(_MSC_VER) || defined(__MINGW32__) +# define MS_DEF_DSS_PROV_W L"Microsoft Base DSS Cryptographic Provider" +#else +static const WCHAR MS_DEF_DSS_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', + 'B','a','s','e',' ','D','S','S',' ', + 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; +#endif +#define MS_DEF_DSS_PROV WINELIB_NAME_AW(MS_DEF_DSS_PROV_) + +#define MS_DEF_DSS_DH_PROV_A "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider" +#if defined(_MSC_VER) || defined(__MINGW32__) +# define MS_DEF_DSS_DH_PROV_W L"Microsoft Base DSS and Diffie-Hellman Cryptographic Provider" +#else +static const WCHAR MS_DEF_DSS_DH_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', + 'B','a','s','e',' ','D','S','S',' ','a','n','d',' ', + 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', + 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; +#endif +#define MS_DEF_DSS_DH_PROV WINELIB_NAME_AW(MS_DEF_DSS_DH_PROV_) + +#define MS_ENH_DSS_DH_PROV_A "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider" +#if defined(_MSC_VER) || defined(__MINGW32__) +# define MS_ENH_DSS_DH_PROV_W L"Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider" +#else +static const WCHAR MS_ENH_DSS_DH_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', + 'E','n','h','a','n','c','e','d',' ','D','S','S',' ','a','n','d',' ', + 'D','i','f','f','i','e','-','H','e','l','l','m','a','n',' ', + 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; +#endif +#define MS_ENH_DSS_DH_PROV WINELIB_NAME_AW(MS_ENH_DSS_DH_PROV_) + +#define MS_DEF_DH_SCHANNEL_PROV_A "Microsoft DH SChannel Cryptographic Provider" +#if defined(_MSC_VER) || defined(__MINGW32__) +# define MS_DEF_DH_SCHANNEL_PROV_W L"Microsoft DH SChannel Cryptographic Provider" +#else +static const WCHAR MS_DEF_DH_SCHANNEL_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', + 'D','H',' ','S','C','h','a','n','n','e','l',' ', + 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; +#endif +#define MS_DEF_DH_SCHANNEL_PROV WINELIB_NAME_AW(MS_DEF_DH_SCHANNEL_PROV_) + +#define MS_SCARD_PROV_A "Microsoft Base Smart Card Cryptographic Provider" +#if defined(_MSC_VER) || defined(__MINGW32__) +# define MS_SCARD_PROV_W L"Microsoft Base Smart Card Cryptographic Provider" +#else +static const WCHAR MS_SCARD_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', + 'B','a','s','e',' ','S','m','a','r','t',' ','C','a','r','d',' ', + 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; +#endif +#define MS_SCARD_PROV WINELIB_NAME_AW(MS_SCARD_PROV_) + +#define MS_ENH_RSA_AES_PROV_A "Microsoft Enhanced RSA and AES Cryptographic Provider" +#if defined(_MSC_VER) || defined(__MINGW32__) +# define MS_ENH_RSA_AES_PROV_W L"Microsoft Enhanced RSA and AES Cryptographic Provider" +#else +static const WCHAR MS_ENH_RSA_AES_PROV_W[] = { 'M','i','c','r','o','s','o','f','t',' ', + 'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ', + 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',0 }; +#endif +#define MS_ENH_RSA_AES_PROV WINELIB_NAME_AW(MS_ENH_RSA_AES_PROV_) + +#define MS_ENH_RSA_AES_PROV_XP_A "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)" +#if defined(_MSC_VER) || defined(__MINGW32__) +# define MS_ENH_RSA_AES_PROV_XP_W L"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)" +#else +static const WCHAR MS_ENH_RSA_AES_PROV_XP_W[] = { 'M','i','c','r','o','s','o','f','t',' ', + 'E','n','h','a','n','c','e','d',' ','R','S','A',' ','a','n','d',' ','A','E','S',' ', + 'C','r','y','p','t','o','g','r','a','p','h','i','c',' ','P','r','o','v','i','d','e','r',' ', + '(','P','r','o','t','o','t','y','p','e',')',0 }; +#endif +#define MS_ENH_RSA_AES_PROV_XP WINELIB_NAME_AW(MS_ENH_RSA_AES_PROV_XP_) + +/* Key Specs*/ +#define AT_KEYEXCHANGE 1 +#define AT_SIGNATURE 2 + +/* Provider Types */ +#define PROV_RSA_FULL 1 +#define PROV_RSA_SIG 2 +#define PROV_DSS 3 +#define PROV_FORTEZZA 4 +#define PROV_MS_EXCHANGE 5 +#define PROV_SSL 6 +#define PROV_RSA_SCHANNEL 12 +#define PROV_DSS_DH 13 +#define PROV_EC_ECDSA_SIG 14 +#define PROV_EC_ECNRA_SIG 15 +#define PROV_EC_ECDSA_FULL 16 +#define PROV_EC_ECNRA_FULL 17 +#define PROV_DH_SCHANNEL 18 +#define PROV_SPYRUS_LYNKS 20 +#define PROV_RNG 21 +#define PROV_INTEL_SEC 22 +#define PROV_REPLACE_OWF 23 +#define PROV_RSA_AES 24 + +/* FLAGS Section */ + +#define CRYPT_FIRST 1 +#define CRYPT_NEXT 2 + +#define CRYPT_IMPL_HARDWARE 1 +#define CRYPT_IMPL_SOFTWARE 2 +#define CRYPT_IMPL_MIXED 3 +#define CRYPT_IMPL_UNKNOWN 4 + +/* CryptAcquireContext */ +#define CRYPT_VERIFYCONTEXT 0xF0000000 +#define CRYPT_NEWKEYSET 0x00000008 +#define CRYPT_DELETEKEYSET 0x00000010 +#define CRYPT_MACHINE_KEYSET 0x00000020 +#define CRYPT_SILENT 0x00000040 + +/* Crypt{Get|Set}Provider */ +#define CRYPT_MACHINE_DEFAULT 0x00000001 +#define CRYPT_USER_DEFAULT 0x00000002 +#define CRYPT_DELETE_DEFAULT 0x00000004 + +/* Crypt{Get/Set}ProvParam */ +#define PP_CLIENT_HWND 1 +#define PP_ENUMALGS 1 +#define PP_ENUMCONTAINERS 2 +#define PP_IMPTYPE 3 +#define PP_NAME 4 +#define PP_VERSION 5 +#define PP_CONTAINER 6 +#define PP_CHANGE_PASSWORD 7 +#define PP_KEYSET_SEC_DESCR 8 +#define PP_KEY_TYPE_SUBTYPE 10 +#define PP_CONTEXT_INFO 11 +#define PP_KEYEXCHANGE_KEYSIZE 12 +#define PP_SIGNATURE_KEYSIZE 13 +#define PP_KEYEXCHANGE_ALG 14 +#define PP_SIGNATURE_ALG 15 +#define PP_PROVTYPE 16 +#define PP_KEYSTORAGE 17 +#define PP_SYM_KEYSIZE 19 +#define PP_SESSION_KEYSIZE 20 +#define PP_UI_PROMPT 21 +#define PP_ENUMALGS_EX 22 +#define PP_DELETEKEY 24 +#define PP_ENUMMANDROOTS 25 +#define PP_ENUMELECTROOTS 26 +#define PP_KEYSET_TYPE 27 +#define PP_ADMIN_PIN 31 +#define PP_KEYEXCHANGE_PIN 32 +#define PP_SIGNATURE_PIN 33 +#define PP_SIG_KEYSIZE_INC 34 +#define PP_KEYX_KEYSIZE_INC 35 +#define PP_UNIQUE_CONTAINER 36 +#define PP_SGC_INFO 37 +#define PP_USE_HARDWARE_RNG 38 +#define PP_KEYSPEC 39 +#define PP_ENUMEX_SIGNING_PROT 40 +#define PP_CRYPT_COUNT_KEY_USE 41 +#define PP_USER_CERTSTORE 42 +#define PP_SMARTCARD_READER 43 +#define PP_SMARTCARD_GUID 45 +#define PP_ROOT_CERTSTORE 46 + +/* Values returned by CryptGetProvParam of PP_KEYSTORAGE */ +#define CRYPT_SEC_DESCR 0x00000001 +#define CRYPT_PSTORE 0x00000002 +#define CRYPT_UI_PROMPT 0x00000004 + +/* Crypt{Get/Set}KeyParam */ +#define KP_IV 1 +#define KP_SALT 2 +#define KP_PADDING 3 +#define KP_MODE 4 +#define KP_MODE_BITS 5 +#define KP_PERMISSIONS 6 +#define KP_ALGID 7 +#define KP_BLOCKLEN 8 +#define KP_KEYLEN 9 +#define KP_SALT_EX 10 +#define KP_P 11 +#define KP_G 12 +#define KP_Q 13 +#define KP_X 14 +#define KP_Y 15 +#define KP_RA 16 +#define KP_RB 17 +#define KP_INFO 18 +#define KP_EFFECTIVE_KEYLEN 19 +#define KP_SCHANNEL_ALG 20 +#define KP_CLIENT_RANDOM 21 +#define KP_SERVER_RANDOM 22 +#define KP_RP 23 +#define KP_PRECOMP_MD5 24 +#define KP_PRECOMP_SHA 25 +#define KP_CERTIFICATE 26 +#define KP_CLEAR_KEY 27 +#define KP_PUB_EX_LEN 28 +#define KP_PUB_EX_VAL 29 +#define KP_KEYVAL 30 +#define KP_ADMIN_PIN 31 +#define KP_KEYEXCHANGE_PIN 32 +#define KP_SIGNATURE_PIN 33 +#define KP_PREHASH 34 +#define KP_ROUNDS 35 +#define KP_OAEP_PARAMS 36 +#define KP_CMS_KEY_INFO 37 +#define KP_CMS_DH_KEY_INFO 38 +#define KP_PUB_PARAMS 39 +#define KP_VERIFY_PARAMS 40 +#define KP_HIGHEST_VERSION 41 +#define KP_GET_USE_COUNT 42 + +/* Values for KP_PADDING */ +#define PKCS5_PADDING 1 +#define RANDOM_PADDING 2 +#define ZERO_PADDING 3 + +/* CryptSignHash/CryptVerifySignature */ +#define CRYPT_NOHASHOID 0x00000001 +#define CRYPT_TYPE2_FORMAT 0x00000002 +#define CRYPT_X931_FORMAT 0x00000004 + +/* Crypt{Get,Set}HashParam */ +#define HP_ALGID 0x0001 +#define HP_HASHVAL 0x0002 +#define HP_HASHSIZE 0x0004 +#define HP_HMAC_INFO 0x0005 +#define HP_TLS1PRF_LABEL 0x0006 +#define HP_TLS1PRF_SEED 0x0007 + +/* Crypt{Get,Set}KeyParam */ +#define CRYPT_MODE_CBC 1 +#define CRYPT_MODE_ECB 2 +#define CRYPT_MODE_OFB 3 +#define CRYPT_MODE_CFB 4 + +#define CRYPT_ENCRYPT 0x0001 +#define CRYPT_DECRYPT 0x0002 +#define CRYPT_EXPORT 0x0004 +#define CRYPT_READ 0x0008 +#define CRYPT_WRITE 0x0010 +#define CRYPT_MAC 0x0020 +#define CRYPT_EXPORT_KEY 0x0040 +#define CRYPT_IMPORT_KEY 0x0080 +#define CRYPT_ARCHIVE 0x0100 + +/* Crypt*Key */ +#define CRYPT_EXPORTABLE 0x00000001 +#define CRYPT_USER_PROTECTED 0x00000002 +#define CRYPT_CREATE_SALT 0x00000004 +#define CRYPT_UPDATE_KEY 0x00000008 +#define CRYPT_NO_SALT 0x00000010 +#define CRYPT_PREGEN 0x00000040 +#define CRYPT_SERVER 0x00000400 +#define CRYPT_ARCHIVABLE 0x00004000 + +/* CryptExportKey */ +#define CRYPT_SSL2_FALLBACK 0x00000002 +#define CRYPT_DESTROYKEY 0x00000004 +#define CRYPT_OAEP 0x00000040 + +/* CryptHashSessionKey */ +#define CRYPT_LITTLE_ENDIAN 0x00000001 + +/* Crypt{Protect,Unprotect}Data PROMPTSTRUCT flags */ +#define CRYPTPROTECT_PROMPT_ON_PROTECT 0x0001 +#define CRYPTPROTECT_PROMPT_ON_UNPROTECT 0x0002 +/* Crypt{Protect,Unprotect}Data flags */ +#define CRYPTPROTECT_UI_FORBIDDEN 0x0001 +#define CRYPTPROTECT_LOCAL_MACHINE 0x0004 +#define CRYPTPROTECT_AUDIT 0x0010 +#define CRYPTPROTECT_VERIFY_PROTECTION 0x0040 + +/* Crypt{Protect,Unprotect}Memory */ +#define CRYPTPROTECTMEMORY_BLOCK_SIZE 16 +#define CRYPTPROTECTMEMORY_SAME_PROCESS 0x0000 +#define CRYPTPROTECTMEMORY_CROSS_PROCESS 0x0001 +#define CRYPTPROTECTMEMORY_SAME_LOGON 0x0002 + +/* Blob Types */ +#define SIMPLEBLOB 0x1 +#define PUBLICKEYBLOB 0x6 +#define PRIVATEKEYBLOB 0x7 +#define PLAINTEXTKEYBLOB 0x8 +#define OPAQUEKEYBLOB 0x9 +#define PUBLICKEYBLOBEX 0xA +#define SYMMETRICWRAPKEYBLOB 0xB + +#define CUR_BLOB_VERSION 2 + +/* cert store provider types */ +#define CERT_STORE_PROV_MSG ((LPCSTR)1) +#define CERT_STORE_PROV_MEMORY ((LPCSTR)2) +#define CERT_STORE_PROV_FILE ((LPCSTR)3) +#define CERT_STORE_PROV_REG ((LPCSTR)4) +#define CERT_STORE_PROV_PKCS7 ((LPCSTR)5) +#define CERT_STORE_PROV_SERIALIZED ((LPCSTR)6) +#define CERT_STORE_PROV_FILENAME_A ((LPCSTR)7) +#define CERT_STORE_PROV_FILENAME_W ((LPCSTR)8) +#define CERT_STORE_PROV_SYSTEM_A ((LPCSTR)9) +#define CERT_STORE_PROV_SYSTEM_W ((LPCSTR)10) +#define CERT_STORE_PROV_SYSTEM CERT_STORE_PROV_SYSTEM_W +#define CERT_STORE_PROV_COLLECTION ((LPCSTR)11) +#define CERT_STORE_PROV_SYSTEM_REGISTRY_A ((LPCSTR)12) +#define CERT_STORE_PROV_SYSTEM_REGISTRY_W ((LPCSTR)13) +#define CERT_STORE_PROV_SYSTEM_REGISTRY CERT_STORE_PROV_SYSTEM_REGISTRY_W +#define CERT_STORE_PROV_PHYSICAL_W ((LPCSTR)14) +#define CERT_STORE_PROV_PHYSICAL CERT_STORE_PROV_PHYSICAL_W +#define CERT_STORE_PROV_SMART_CARD_W ((LPCSTR)15) +#define CERT_STORE_PROV_SMART_CARD CERT_STORE_PROV_SMART_CARD_W +#define CERT_STORE_PROV_LDAP_W ((LPCSTR)16) +#define CERT_STORE_PROV_LDAP CERT_STORE_PROV_LDAP_W + +#define sz_CERT_STORE_PROV_MEMORY "Memory" +#define sz_CERT_STORE_PROV_FILENAME_W "File" +#define sz_CERT_STORE_PROV_FILENAME sz_CERT_STORE_PROV_FILENAME_W +#define sz_CERT_STORE_PROV_SYSTEM_W "System" +#define sz_CERT_STORE_PROV_SYSTEM sz_CERT_STORE_PROV_SYSTEM_W +#define sz_CERT_STORE_PROV_PKCS7 "PKCS7" +#define sz_CERT_STORE_PROV_SERIALIZED "Serialized" +#define sz_CERT_STORE_PROV_COLLECTION "Collection" +#define sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W "SystemRegistry" +#define sz_CERT_STORE_PROV_SYSTEM_REGISTRY sz_CERT_STORE_PROV_SYSTEM_REGISTRY_W +#define sz_CERT_STORE_PROV_PHYSICAL_W "Physical" +#define sz_CERT_STORE_PROV_PHYSICAL sz_CERT_STORE_PROV_PHYSICAL_W +#define sz_CERT_STORE_PROV_SMART_CARD_W "SmartCard" +#define sz_CERT_STORE_PROV_SMART_CARD sz_CERT_STORE_PROV_SMART_CARD_W +#define sz_CERT_STORE_PROV_LDAP_W "Ldap" +#define sz_CERT_STORE_PROV_LDAP sz_CERT_STORE_PROV_LDAP_W + +/* types for CertOpenStore dwEncodingType */ +#define CERT_ENCODING_TYPE_MASK 0x0000ffff +#define CMSG_ENCODING_TYPE_MASK 0xffff0000 +#define GET_CERT_ENCODING_TYPE(x) ((x) & CERT_ENCODING_TYPE_MASK) +#define GET_CMSG_ENCODING_TYPE(x) ((x) & CMSG_ENCODING_TYPE_MASK) + +#define CRYPT_ASN_ENCODING 0x00000001 +#define CRYPT_NDR_ENCODING 0x00000002 +#define X509_ASN_ENCODING 0x00000001 +#define X509_NDR_ENCODING 0x00000002 +#define PKCS_7_ASN_ENCODING 0x00010000 +#define PKCS_7_NDR_ENCODING 0x00020000 + +/* system store locations */ +#define CERT_SYSTEM_STORE_LOCATION_MASK 0x00ff0000 +#define CERT_SYSTEM_STORE_LOCATION_SHIFT 16 + +/* system store location ids */ +/* hkcu */ +#define CERT_SYSTEM_STORE_CURRENT_USER_ID 1 +/* hklm */ +#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ID 2 +/* hklm\Software\Microsoft\Cryptography\Services */ +#define CERT_SYSTEM_STORE_CURRENT_SERVICE_ID 4 +#define CERT_SYSTEM_STORE_SERVICES_ID 5 +/* HKEY_USERS */ +#define CERT_SYSTEM_STORE_USERS_ID 6 +/* hkcu\Software\Policies\Microsoft\SystemCertificates */ +#define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID 7 +/* hklm\Software\Policies\Microsoft\SystemCertificates */ +#define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID 8 +/* hklm\Software\Microsoft\EnterpriseCertificates */ +#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID 9 + +/* system store location values */ +#define CERT_SYSTEM_STORE_CURRENT_USER \ + (CERT_SYSTEM_STORE_CURRENT_USER_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) +#define CERT_SYSTEM_STORE_LOCAL_MACHINE \ + (CERT_SYSTEM_STORE_LOCAL_MACHINE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) +#define CERT_SYSTEM_STORE_CURRENT_SERVICE \ + (CERT_SYSTEM_STORE_CURRENT_SERVICE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) +#define CERT_SYSTEM_STORE_SERVICES \ + (CERT_SYSTEM_STORE_SERVICES_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) +#define CERT_SYSTEM_STORE_USERS \ + (CERT_SYSTEM_STORE_USERS_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) +#define CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY \ + (CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) +#define CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY \ + (CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) +#define CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE \ + (CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT) + +#if defined(_MSC_VER) || defined(__MINGW32__) +#define CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH \ + L"Software\\Microsoft\\SystemCertificates" +#define CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH \ + L"Software\\Policies\\Microsoft\\SystemCertificates" +#else +static const WCHAR CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH[] = + {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\', + 'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s',0 }; +static const WCHAR CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH[] = + {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\', + 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r', + 't','i','f','i','c','a','t','e','s',0 }; +#endif + +#if defined(_MSC_VER) || defined(__MINGW32__) +#define CERT_EFSBLOB_REGPATH CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\EFS" +#define CERT_EFSBLOB_VALUE_NAME L"EFSBlob" +#else +static const WCHAR CERT_EFSBLOB_REGPATH[] = + {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\', + 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r', + 't','i','f','i','c','a','t','e','s','\\','E','F','S',0 }; +static const WCHAR CERT_EFSBLOB_VALUE_NAME[] = { 'E','F','S','B','l','o','b',0 }; +#endif + +#if defined(_MSC_VER) || defined(__MINGW32__) +#define CERT_PROT_ROOT_FLAGS_REGPATH L"\\Root\\ProtectedRoots" +#define CERT_PROT_ROOT_FLAGS_VALUE_NAME L"Flags" +#else +static const WCHAR CERT_PROT_ROOT_FLAGS_REGPATH[] = + { '\\','R','o','o','t','\\','P','r','o','t','e','c','t','e','d','R','o','o', + 't','s',0 }; +static const WCHAR CERT_PROT_ROOT_FLAGS_VALUE_NAME[] = {'F','l','a','g','s',0 }; +#endif + +#define CERT_PROT_ROOT_DISABLE_CURRENT_USER_FLAG 0x01 +#define CERT_PROT_ROOT_INHIBIT_ADD_AT_INIT_FLAG 0x02 +#define CERT_PROT_ROOT_INHIBIT_PURGE_LM_FLAG 0x04 +#define CERT_PROT_ROOT_DISABLE_LM_AUTH_FLAG 0x08 +#define CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG 0x10 +#define CERT_PROT_ROOT_DISABLE_NOT_DEFINED_NAME_CONSTRAINT_FLAG 0x20 + +#if defined(_MSC_VER) || defined(__MINGW32__) +#define CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH \ + CERT_GROUP_POLICY_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer" +#else +static const WCHAR CERT_TRUST_PUB_SAFER_GROUP_POLICY_REGPATH[] = + {'S','o','f','t','w','a','r','e','\\','P','o','l','i','c','i','e','s','\\', + 'M','i','c','r','o','s','o','f','t','\\','S','y','s','t','e','m','C','e','r', + 't','i','f','i','c','a','t','e','s','\\','T','r','u','s','t','e','d', + 'P','u','b','l','i','s','h','e','r','\\','S','a','f','e','r',0 }; +#endif + +#if defined(_MSC_VER) || defined(__MINGW32__) +#define CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH \ + CERT_LOCAL_MACHINE_SYSTEM_STORE_REGPATH L"\\TrustedPublisher\\Safer" +#define CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME L"AuthenticodeFlags" +#else +static const WCHAR CERT_TRUST_PUB_SAFER_LOCAL_MACHINE_REGPATH[] = + {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\', + 'S','y','s','t','e','m','C','e','r','t','i','f','i','c','a','t','e','s','\\', + 'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r','\\', + 'S','a','f','e','r',0 }; +static const WCHAR CERT_TRUST_PUB_AUTHENTICODE_FLAGS_VALUE_NAME[] = + { 'A','u','t','h','e','n','t','i','c','o','d','e','F','l','a','g','s',0 }; +#endif + +#define CERT_TRUST_PUB_ALLOW_END_USER_TRUST 0x00000000 +#define CERT_TRUST_PUB_ALLOW_MACHINE_ADMIN_TRUST 0x00000001 +#define CERT_TRUST_PUB_ALLOW_ENTERPRISE_ADMIN_TRUST 0x00000002 +#define CERT_TRUST_PUB_ALLOW_TRUST_MASK 0x00000003 +#define CERT_TRUST_PUB_CHECK_PUBLISHER_REV_FLAG 0x00000100 +#define CERT_TRUST_PUB_CHECK_TIMESTAMP_REV_FLAG 0x00000200 + +/* flags for CertOpenStore dwFlags */ +#define CERT_STORE_NO_CRYPT_RELEASE_FLAG 0x00000001 +#define CERT_STORE_SET_LOCALIZED_NAME_FLAG 0x00000002 +#define CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG 0x00000004 +#define CERT_STORE_DELETE_FLAG 0x00000010 +#define CERT_STORE_UNSAFE_PHYSICAL_FLAG 0x00000020 +#define CERT_STORE_SHARE_STORE_FLAG 0x00000040 +#define CERT_STORE_SHARE_CONTEXT_FLAG 0x00000080 +#define CERT_STORE_MANIFOLD_FLAG 0x00000100 +#define CERT_STORE_ENUM_ARCHIVED_FLAG 0x00000200 +#define CERT_STORE_UPDATE_KEYID_FLAG 0x00000400 +#define CERT_STORE_BACKUP_RESTORE_FLAG 0x00000800 +#define CERT_STORE_MAXIMUM_ALLOWED_FLAG 0x00001000 +#define CERT_STORE_CREATE_NEW_FLAG 0x00002000 +#define CERT_STORE_OPEN_EXISTING_FLAG 0x00004000 +#define CERT_STORE_READONLY_FLAG 0x00008000 + +#define CERT_REGISTRY_STORE_REMOTE_FLAG 0x00010000 +#define CERT_REGISTRY_STORE_SERIALIZED_FLAG 0x00020000 +#define CERT_REGISTRY_STORE_ROAMING_FLAG 0x00040000 +#define CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG 0x00080000 +#define CERT_REGISTRY_STORE_LM_GPT_FLAG 0x01000000 +#define CERT_REGISTRY_STORE_CLIENT_GPT_FLAG 0x80000000 + +#define CERT_FILE_STORE_COMMIT_ENABLE_FLAG 0x00010000 + +/* CertCloseStore dwFlags */ +#define CERT_CLOSE_STORE_FORCE_FLAG 0x00000001 +#define CERT_CLOSE_STORE_CHECK_FLAG 0x00000002 + +/* dwAddDisposition */ +#define CERT_STORE_ADD_NEW 1 +#define CERT_STORE_ADD_USE_EXISTING 2 +#define CERT_STORE_ADD_REPLACE_EXISTING 3 +#define CERT_STORE_ADD_ALWAYS 4 +#define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES 5 +#define CERT_STORE_ADD_NEWER 6 +#define CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES 7 + +/* Installable OID function defs */ +#define CRYPT_OID_OPEN_STORE_PROV_FUNC "CertDllOpenStoreProv" +#define CRYPT_OID_ENCODE_OBJECT_FUNC "CryptDllEncodeObject" +#define CRYPT_OID_DECODE_OBJECT_FUNC "CryptDllDecodeObject" +#define CRYPT_OID_ENCODE_OBJECT_EX_FUNC "CryptDllEncodeObjectEx" +#define CRYPT_OID_DECODE_OBJECT_EX_FUNC "CryptDllDecodeObjectEx" +#define CRYPT_OID_CREATE_COM_OBJECT_FUNC "CryptDllCreateComObject" +#define CRYPT_OID_VERIFY_REVOCATION_FUNC "CertDllVerifyRevocation" +#define CRYPT_OID_VERIFY_CTL_USAGE_FUNC "CertDllVerifyCTLUsage" +#define CRYPT_OID_FORMAT_OBJECT_FUNC "CryptDllFormatObject" +#define CRYPT_OID_FIND_OID_INFO_FUNC "CryptDllFindOIDInfo" +#define CRYPT_OID_FIND_LOCALIZED_NAME_FUNC "CryptDllFindLocalizedName" +#define CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC "CryptDllExportPublicKeyInfoEx" +#define CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC "CryptDllImportPublicKeyInfoEx" +#define CRYPT_OID_EXPORT_PRIVATE_KEY_INFO_FUNC "CryptDllExportPrivateKeyInfoEx" +#define CRYPT_OID_IMPORT_PRIVATE_KEY_INFO_FUNC "CryptDllImportPrivateKeyInfoEx" +#define CRYPT_OID_VERIFY_CERTIFICATE_CHAIN_POLICY_FUNC \ + "CertDllVerifyCertificateChainPolicy" +#define CRYPT_OID_CONVERT_PUBLIC_KEY_INFO_FUNC "CryptDllConvertPublicKeyInfo" +#define URL_OID_GET_OBJECT_URL_FUNC "UrlDllGetObjectUrl" +#define TIME_VALID_OID_GET_OBJECT_FUNC "TimeValidDllGetObject" +#define CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC "CryptMsgDllGenContentEncryptKey" +#define CMSG_OID_EXPORT_KEY_TRANS_FUNC "CryptMsgDllExportKeyTrans" +#define CMSG_OID_IMPORT_KEY_TRANS_FUNC "CryptMsgDllImportKeyTrans" + +#define CRYPT_OID_REGPATH "Software\\Microsoft\\Cryptography\\OID" +#define CRYPT_OID_REG_ENCODING_TYPE_PREFIX "EncodingType " +#if defined(_MSC_VER) || defined(__MINGW32__) +# define CRYPT_OID_REG_DLL_VALUE_NAME L"Dll" +# define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME L"FuncName" +# define CRYPT_OID_REG_FLAGS_VALUE_NAME L"CryptFlags" +#else +static const WCHAR CRYPT_OID_REG_DLL_VALUE_NAME[] = { 'D','l','l',0 }; +static const WCHAR CRYPT_OID_REG_FUNC_NAME_VALUE_NAME[] = + { 'F','u','n','c','N','a','m','e',0 }; +static const WCHAR CRYPT_OID_REG_FLAGS_VALUE_NAME[] = + { 'C','r','y','p','t','F','l','a','g','s',0 }; +#endif +#define CRYPT_OID_REG_FUNC_NAME_VALUE_NAME_A "FuncName" +#define CRYPT_DEFAULT_OID "DEFAULT" + +#define CRYPT_INSTALL_OID_FUNC_BEFORE_FLAG 1 +#define CRYPT_INSTALL_OID_INFO_BEFORE_FLAG 1 + +#define CRYPT_GET_INSTALLED_OID_FUNC_FLAG 0x1 + +#define CRYPT_REGISTER_FIRST_INDEX 0 +#define CRYPT_REGISTER_LAST_INDEX 0xffffffff + +/* values for CERT_STORE_PROV_INFO's dwStoreProvFlags */ +#define CERT_STORE_PROV_EXTERNAL_FLAG 0x1 +#define CERT_STORE_PROV_DELETED_FLAG 0x2 +#define CERT_STORE_PROV_NO_PERSIST_FLAG 0x4 +#define CERT_STORE_PROV_SYSTEM_STORE_FLAG 0x8 +#define CERT_STORE_PROV_LM_SYSTEM_STORE_FLAG 0x10 + +/* function indices */ +#define CERT_STORE_PROV_CLOSE_FUNC 0 +#define CERT_STORE_PROV_READ_CERT_FUNC 1 +#define CERT_STORE_PROV_WRITE_CERT_FUNC 2 +#define CERT_STORE_PROV_DELETE_CERT_FUNC 3 +#define CERT_STORE_PROV_SET_CERT_PROPERTY_FUNC 4 +#define CERT_STORE_PROV_READ_CRL_FUNC 5 +#define CERT_STORE_PROV_WRITE_CRL_FUNC 6 +#define CERT_STORE_PROV_DELETE_CRL_FUNC 7 +#define CERT_STORE_PROV_SET_CRL_PROPERTY_FUNC 8 +#define CERT_STORE_PROV_READ_CTL_FUNC 9 +#define CERT_STORE_PROV_WRITE_CTL_FUNC 10 +#define CERT_STORE_PROV_DELETE_CTL_FUNC 11 +#define CERT_STORE_PROV_SET_CTL_PROPERTY_FUNC 12 +#define CERT_STORE_PROV_CONTROL_FUNC 13 +#define CERT_STORE_PROV_FIND_CERT_FUNC 14 +#define CERT_STORE_PROV_FREE_FIND_CERT_FUNC 15 +#define CERT_STORE_PROV_GET_CERT_PROPERTY_FUNC 16 +#define CERT_STORE_PROV_FIND_CRL_FUNC 17 +#define CERT_STORE_PROV_FREE_FIND_CRL_FUNC 18 +#define CERT_STORE_PROV_GET_CRL_PROPERTY_FUNC 19 +#define CERT_STORE_PROV_FIND_CTL_FUNC 20 +#define CERT_STORE_PROV_FREE_FIND_CTL_FUNC 21 +#define CERT_STORE_PROV_GET_CTL_PROPERTY_FUNC 22 + +/* physical store dwFlags, also used by CertAddStoreToCollection as + * dwUpdateFlags + */ +#define CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG 0x1 +#define CERT_PHYSICAL_STORE_OPEN_DISABLE_FLAG 0x2 +#define CERT_PHYSICAL_STORE_REMOVE_OPEN_DISABLE_FLAG 0x4 +#define CERT_PHYSICAL_STORE_INSERT_COMPUTER_NAME_ENABLE_FLAG 0x8 + +/* dwFlag values for CertEnumPhysicalStore callback */ +#define CERT_PHYSICAL_STORE_PREDEFINED_ENUM_FLAG 0x1 + +/* predefined store names */ +#if defined(_MSC_VER) || defined(__MINGW32__) +# define CERT_PHYSICAL_STORE_DEFAULT_NAME \ + L".Default" +# define CERT_PHYSICAL_STORE_GROUP_POLICY_NAME \ + L".GroupPolicy" +# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME \ + L".LocalMachine" +# define CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME \ + L".UserCertificate" +# define CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME \ + L".LocalMachineGroupPolicy" +# define CERT_PHYSICAL_STORE_ENTERPRISE_NAME \ + L".Enterprise" +# define CERT_PHYSICAL_STORE_AUTH_ROOT_NAME \ + L".AuthRoot" +#else +static const WCHAR CERT_PHYSICAL_STORE_DEFAULT_NAME[] = + {'.','D','e','f','a','u','l','t','0'}; +static const WCHAR CERT_PHYSICAL_STORE_GROUP_POLICY_NAME[] = + {'.','G','r','o','u','p','P','o','l','i','c','y',0}; +static const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_NAME[] = + {'.','L','o','c','a','l','M','a','c','h','i','n','e',0}; +static const WCHAR CERT_PHYSICAL_STORE_DS_USER_CERTIFICATE_NAME[] = + {'.','U','s','e','r','C','e','r','t','i','f','i','c','a','t','e',0}; +static const WCHAR CERT_PHYSICAL_STORE_LOCAL_MACHINE_GROUP_POLICY_NAME[] = + {'.','L','o','c','a','l','M','a','c','h','i','n','e','G','r','o','u','p', + 'P','o','l','i','c','y',0}; +static const WCHAR CERT_PHYSICAL_STORE_ENTERPRISE_NAME[] = + {'.','E','n','t','e','r','p','r','i','s','e',0}; +static const WCHAR CERT_PHYSICAL_STORE_AUTH_ROOT_NAME[] = + {'.','A','u','t','h','R','o','o','t',0}; +#endif + +/* cert system store flags */ +#define CERT_SYSTEM_STORE_MASK 0xffff0000 +#define CERT_SYSTEM_STORE_RELOCATE_FLAG 0x80000000 + +/* CertFindChainInStore dwFindType types */ +#define CERT_CHAIN_FIND_BY_ISSUER 1 + +/* CertSaveStore dwSaveAs values */ +#define CERT_STORE_SAVE_AS_STORE 1 +#define CERT_STORE_SAVE_AS_PKCS7 2 +/* CertSaveStore dwSaveTo values */ +#define CERT_STORE_SAVE_TO_FILE 1 +#define CERT_STORE_SAVE_TO_MEMORY 2 +#define CERT_STORE_SAVE_TO_FILENAME_A 3 +#define CERT_STORE_SAVE_TO_FILENAME_W 4 +#define CERT_STORE_SAVE_TO_FILENAME CERT_STORE_SAVE_TO_FILENAME_W + +/* CERT_INFO versions/flags */ +#define CERT_V1 0 +#define CERT_V2 1 +#define CERT_V3 2 +#define CERT_INFO_VERSION_FLAG 1 +#define CERT_INFO_SERIAL_NUMBER_FLAG 2 +#define CERT_INFO_SIGNATURE_ALGORITHM_FLAG 3 +#define CERT_INFO_ISSUER_FLAG 4 +#define CERT_INFO_NOT_BEFORE_FLAG 5 +#define CERT_INFO_NOT_AFTER_FLAG 6 +#define CERT_INFO_SUBJECT_FLAG 7 +#define CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG 8 +#define CERT_INFO_ISSUER_UNIQUE_ID_FLAG 9 +#define CERT_INFO_SUBJECT_UNIQUE_ID_FLAG 10 +#define CERT_INFO_EXTENSION_FLAG 11 + +/* CERT_REQUEST_INFO versions */ +#define CERT_REQUEST_V1 0 + +/* CERT_KEYGEN_REQUEST_INFO versions */ +#define CERT_KEYGEN_REQUEST_V1 0 + +/* CRL versions */ +#define CRL_V1 0 +#define CRL_V2 1 + +/* CTL versions */ +#define CTL_V1 0 + +/* Certificate, CRL, CTL property IDs */ +#define CERT_KEY_PROV_HANDLE_PROP_ID 1 +#define CERT_KEY_PROV_INFO_PROP_ID 2 +#define CERT_SHA1_HASH_PROP_ID 3 +#define CERT_HASH_PROP_ID CERT_SHA1_HASH_PROP_ID +#define CERT_MD5_HASH_PROP_ID 4 +#define CERT_KEY_CONTEXT_PROP_ID 5 +#define CERT_KEY_SPEC_PROP_ID 6 +#define CERT_IE30_RESERVED_PROP_ID 7 +#define CERT_PUBKEY_HASH_RESERVED_PROP_ID 8 +#define CERT_ENHKEY_USAGE_PROP_ID 9 +#define CERT_CTL_USAGE_PROP_ID CERT_ENHKEY_USAGE_PROP_ID +#define CERT_NEXT_UPDATE_LOCATION_PROP_ID 10 +#define CERT_FRIENDLY_NAME_PROP_ID 11 +#define CERT_PVK_FILE_PROP_ID 12 +#define CERT_DESCRIPTION_PROP_ID 13 +#define CERT_ACCESS_STATE_PROP_ID 14 +#define CERT_SIGNATURE_HASH_PROP_ID 15 +#define CERT_SMART_CARD_DATA_PROP_ID 16 +#define CERT_EFS_PROP_ID 17 +#define CERT_FORTEZZA_DATA_PROP_ID 18 +#define CERT_ARCHIVED_PROP_ID 19 +#define CERT_KEY_IDENTIFIER_PROP_ID 20 +#define CERT_AUTO_ENROLL_PROP_ID 21 +#define CERT_PUBKEY_ALG_PARA_PROP_ID 22 +#define CERT_CROSS_CERT_DIST_POINTS_PROP_ID 23 +#define CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID 24 +#define CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID 25 +#define CERT_ENROLLMENT_PROP_ID 26 +#define CERT_DATE_STAMP_PROP_ID 27 +#define CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID 28 +#define CERT_SUBJECT_NAME_MD5_HASH_PROP_ID 29 +#define CERT_EXTENDED_ERROR_INFO_PROP_ID 30 +/* 31 -- unused? + 32 -- cert prop id + 33 -- CRL prop id + 34 -- CTL prop id + 35 -- KeyId prop id + 36-63 -- reserved + */ +#define CERT_RENEWAL_PROP_ID 64 +#define CERT_ARCHIVED_KEY_HASH_PROP_ID 65 +#define CERT_AUTO_ENROLL_RETRY_PROP_ID 66 +#define CERT_AIA_URL_RETRIEVED_PROP_ID 67 +#define CERT_AUTHORITY_INFO_ACCESS_PROP_ID 68 +#define CERT_BACKED_UP_PROP_ID 69 +#define CERT_OCSP_RESPONSE_PROP_ID 70 +#define CERT_REQUEST_ORIGINATOR_PROP_ID 71 +#define CERT_SOURCE_LOCATION_PROP_ID 72 +#define CERT_SOURCE_URL_PROP_ID 73 +#define CERT_NEW_KEY_PROP_ID 74 +#define CERT_OCSP_CACHE_PREFIX_PROP_ID 75 +#define CERT_SMART_CARD_ROOT_INFO_PROP_ID 76 +#define CERT_NO_AUTO_EXPIRE_CHECK_PROP_ID 77 +#define CERT_NCRYPT_KEY_HANDLE_PROP_ID 78 +#define CERT_HCRYPTPROV_OR_NCRYPT_KEY_HANDLE_PROP_ID 79 +#define CERT_SUBJECT_INFO_ACCESS_PROP_ID 80 +#define CERT_CA_OCSP_AUTHORITY_INFO_ACCESS_PROP_ID 81 +#define CERT_CA_DISABLE_CRL_PROP_ID 82 +#define CERT_ROOT_PROGRAM_CERT_POLICIES_PROP_ID 83 +#define CERT_ROOT_PROGRAM_NAME_CONSTRAINTS_PROP_ID 84 + +#define CERT_FIRST_RESERVED_PROP_ID 85 +#define CERT_LAST_RESERVED_PROP_ID 0x00007fff +#define CERT_FIRST_USER_PROP_ID 0x00008000 +#define CERT_LAST_USER_PROP_ID 0x0000ffff + +#define IS_CERT_HASH_PROP_ID(x) \ + ((x) == CERT_SHA1_HASH_PROP_ID || (x) == CERT_MD5_HASH_PROP_ID || \ + (x) == CERT_SIGNATURE_HASH_PROP_ID) + +#define IS_PUBKEY_HASH_PROP_ID(x) \ + ((x) == CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID || \ + (x) == CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID) + +#define IS_CHAIN_HASH_PROP_ID(x) \ + ((x) == CERT_ISSUER_PUBLIC_KEY_MD5_HASH_PROP_ID || \ + (x) == CERT_SUBJECT_PUBLIC_KEY_MD5_HASH_PROP_ID || \ + (x) == CERT_ISSUER_SERIAL_NUMBER_MD5_HASH_PROP_ID || \ + (x) == CERT_SUBJECT_NAME_MD5_HASH_PROP_ID) + +/* access state flags */ +#define CERT_ACCESS_STATE_WRITE_PERSIST_FLAG 0x1 +#define CERT_ACCESS_STATE_SYSTEM_STORE_FLAG 0x2 +#define CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG 0x4 + +/* CertSetCertificateContextProperty flags */ +#define CERT_SET_PROPERTY_INHIBIT_PERSIST_FLAG 0x40000000 +#define CERT_SET_PROPERTY_IGNORE_PERSIST_ERROR_FLAG 0x80000000 + +/* CERT_RDN attribute dwValueType types */ +#define CERT_RDN_TYPE_MASK 0x000000ff +#define CERT_RDN_ANY_TYPE 0 +#define CERT_RDN_ENCODED_BLOB 1 +#define CERT_RDN_OCTET_STRING 2 +#define CERT_RDN_NUMERIC_STRING 3 +#define CERT_RDN_PRINTABLE_STRING 4 +#define CERT_RDN_TELETEX_STRING 5 +#define CERT_RDN_T61_STRING 5 +#define CERT_RDN_VIDEOTEX_STRING 6 +#define CERT_RDN_IA5_STRING 7 +#define CERT_RDN_GRAPHIC_STRING 8 +#define CERT_RDN_VISIBLE_STRING 9 +#define CERT_RDN_ISO646_STRING 9 +#define CERT_RDN_GENERAL_STRING 10 +#define CERT_RDN_UNIVERSAL_STRING 11 +#define CERT_RDN_INT4_STRING 11 +#define CERT_RDN_BMP_STRING 12 +#define CERT_RDN_UNICODE_STRING 12 +#define CERT_RDN_UTF8_STRING 13 + +/* CERT_RDN attribute dwValueType flags */ +#define CERT_RDN_FLAGS_MASK 0xff000000 +#define CERT_RDN_ENABLE_T61_UNICODE_FLAG 0x80000000 +#define CERT_RDN_DISABLE_CHECK_TYPE_FLAG 0x4000000 +#define CERT_RDN_ENABLE_UTF8_UNICODE_FLAG 0x2000000 +#define CERT_RDN_DISABLE_IE4_UTF8_FLAG 0x0100000 + +#define IS_CERT_RDN_CHAR_STRING(x) \ + (((x) & CERT_RDN_TYPE_MASK) >= CERT_RDN_NUMERIC_STRING) + +/* CertIsRDNAttrsInCertificateName flags */ +#define CERT_UNICODE_IS_RDN_ATTRS_FLAG 0x1 +#define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 0x2 + +/* CRL reason codes */ +#define CRL_REASON_UNSPECIFIED 0 +#define CRL_REASON_KEY_COMPROMISE 1 +#define CRL_REASON_CA_COMPROMISE 2 +#define CRL_REASON_AFFILIATION_CHANGED 3 +#define CRL_REASON_SUPERSEDED 4 +#define CRL_REASON_CESSATION_OF_OPERATION 5 +#define CRL_REASON_CERTIFICATE_HOLD 6 +#define CRL_REASON_REMOVE_FROM_CRL 8 + +/* CertControlStore control types */ +#define CERT_STORE_CTRL_RESYNC 1 +#define CERT_STORE_CTRL_NOTIFY_CHANGE 2 +#define CERT_STORE_CTRL_COMMIT 3 +#define CERT_STORE_CTRL_AUTO_RESYNC 4 +#define CERT_STORE_CTRL_CANCEL_NOTIFY 5 + +#define CERT_STORE_CTRL_COMMIT_FORCE_FLAG 0x1 +#define CERT_STORE_CTRL_COMMIT_CLEAR_FLAG 0x2 + +/* cert store properties */ +#define CERT_STORE_LOCALIZED_NAME_PROP_ID 0x1000 + +/* CertCreateContext flags */ +#define CERT_CREATE_CONTEXT_NOCOPY_FLAG 0x1 +#define CERT_CREATE_CONTEXT_SORTED_FLAG 0x2 +#define CERT_CREATE_CONTEXT_NO_HCRYPTMSG_FLAG 0x4 +#define CERT_CREATE_CONTEXT_NO_ENTRY_FLAG 0x8 + +#define CERT_COMPARE_MASK 0xffff +#define CERT_COMPARE_SHIFT 16 +#define CERT_COMPARE_ANY 0 +#define CERT_COMPARE_SHA1_HASH 1 +#define CERT_COMPARE_HASH CERT_COMPARE_SHA1_HASH +#define CERT_COMPARE_NAME 2 +#define CERT_COMPARE_ATTR 3 +#define CERT_COMPARE_MD5_HASH 4 +#define CERT_COMPARE_PROPERTY 5 +#define CERT_COMPARE_PUBLIC_KEY 6 +#define CERT_COMPARE_NAME_STR_A 7 +#define CERT_COMPARE_NAME_STR_W 8 +#define CERT_COMPARE_KEY_SPEC 9 +#define CERT_COMPARE_ENHKEY_USAGE 10 +#define CERT_COMPARE_CTL_USAGE CERT_COMPARE_ENHKEY_USAGE +#define CERT_COMPARE_SUBJECT_CERT 11 +#define CERT_COMPARE_ISSUER_OF 12 +#define CERT_COMPARE_EXISTING 13 +#define CERT_COMPARE_SIGNATURE_HASH 14 +#define CERT_COMPARE_KEY_IDENTIFIER 15 +#define CERT_COMPARE_CERT_ID 16 +#define CERT_COMPARE_CROSS_CERT_DIST_POINTS 17 +#define CERT_COMPARE_PUBKEY_MD5_HASH 18 + +/* values of dwFindType for CertFind*InStore */ +#define CERT_FIND_ANY \ + (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT) +#define CERT_FIND_SHA1_HASH \ + (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT) +#define CERT_FIND_MD5_HASH \ + (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT) +#define CERT_FIND_SIGNATURE_HASH \ + (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT) +#define CERT_FIND_KEY_IDENTIFIER \ + (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT) +#define CERT_FIND_HASH CERT_FIND_SHA1_HASH +#define CERT_FIND_PROPERTY \ + (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT) +#define CERT_FIND_PUBLIC_KEY \ + (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT) +#define CERT_FIND_SUBJECT_NAME \ + (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG) +#define CERT_FIND_SUBJECT_ATTR \ + (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG) +#define CERT_FIND_ISSUER_NAME \ + (CERT_COMPARE_NAME << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG) +#define CERT_FIND_ISSUER_ATTR \ + (CERT_COMPARE_ATTR << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG) +#define CERT_FIND_SUBJECT_STR_A \ + (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG) +#define CERT_FIND_SUBJECT_STR_W \ + (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG) +#define CERT_FIND_SUBJECT_STR CERT_FIND_SUBJECT_STR_W +#define CERT_FIND_ISSUER_STR_A \ + (CERT_COMPARE_NAME_STR_A << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG) +#define CERT_FIND_ISSUER_STR_W \ + (CERT_COMPARE_NAME_STR_W << CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG) +#define CERT_FIND_ISSUER_STR CERT_FIND_ISSUER_STR_W +#define CERT_FIND_KEY_SPEC \ + (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT) +#define CERT_FIND_ENHKEY_USAGE \ + (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT) +#define CERT_FIND_CTL_USAGE CERT_FIND_ENHKEY_USAGE +#define CERT_FIND_SUBJECT_CERT \ + (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT) +#define CERT_FIND_ISSUER_OF \ + (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT) +#define CERT_FIND_EXISTING \ + (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT) +#define CERT_FIND_CERT_ID \ + (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT) +#define CERT_FIND_CROSS_CERT_DIST_POINTS \ + (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT) +#define CERT_FIND_PUBKEY_MD5_HASH \ + (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT) + +#define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG 0x1 +#define CERT_FIND_OPTIONAL_CTL_USAGE_FLAG 0x1 +#define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG 0x2 +#define CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG 0x2 +#define CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG 0x4 +#define CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG 0x4 +#define CERT_FIND_NO_ENHKEY_USAGE_FLAG 0x8 +#define CERT_FIND_NO_CTL_USAGE_FLAG 0x8 +#define CERT_FIND_OR_ENHKEY_USAGE_FLAG 0x10 +#define CERT_FIND_OR_CTL_USAGE_FLAG 0x10 +#define CERT_FIND_VALID_ENHKEY_USAGE_FLAG 0x20 +#define CERT_FIND_VALID_CTL_USAGE_FLAG 0x20 + +#define CRL_FIND_ANY 0 +#define CRL_FIND_ISSUED_BY 1 +#define CRL_FIND_EXISTING 2 +#define CRL_FIND_ISSUED_FOR 3 + +#define CRL_FIND_ISSUED_BY_AKI_FLAG 0x1 +#define CRL_FIND_ISSUED_BY_SIGNATURE_FLAG 0x2 +#define CRL_FIND_ISSUED_BY_DELTA_FLAG 0x4 +#define CRL_FIND_ISSUED_BY_BASE_FLAG 0x8 + +typedef struct _CRL_FIND_ISSUED_FOR_PARA +{ + PCCERT_CONTEXT pSubjectCert; + PCCERT_CONTEXT pIssuerCert; +} CRL_FIND_ISSUED_FOR_PARA, *PCRL_FIND_ISSUED_FOR_PARA; + +#define CTL_FIND_ANY 0 +#define CTL_FIND_SHA1_HASH 1 +#define CTL_FIND_MD5_HASH 2 +#define CTL_FIND_USAGE 3 +#define CTL_FIND_SUBJECT 4 +#define CTL_FIND_EXISTING 5 + +typedef struct _CTL_FIND_USAGE_PARA +{ + DWORD cbSize; + CTL_USAGE SubjectUsage; + CRYPT_DATA_BLOB ListIdentifier; + PCERT_INFO pSigner; +} CTL_FIND_USAGE_PARA, *PCTL_FIND_USAGE_PARA; + +#define CTL_FIND_NO_LIST_ID_CBDATA 0xffffffff +#define CTL_FIND_NO_SIGNER_PTR ((PCERT_INFO)-1) +#define CTL_FIND_SAME_USAGE_FLAG 0x00000001 + +typedef struct _CTL_FIND_SUBJECT_PARA +{ + DWORD cbSize; + PCTL_FIND_USAGE_PARA pUsagePara; + DWORD dwSubjectType; + void *pvSubject; +} CTL_FIND_SUBJECT_PARA, *PCTL_FIND_SUBJECT_PARA; + +/* PFN_CERT_STORE_PROV_WRITE_CERT dwFlags values */ +#define CERT_STORE_PROV_WRITE_ADD_FLAG 0x1 + +/* CertAddSerializedElementToStore context types */ +#define CERT_STORE_CERTIFICATE_CONTEXT 1 +#define CERT_STORE_CRL_CONTEXT 2 +#define CERT_STORE_CTL_CONTEXT 3 +#define CERT_STORE_ALL_CONTEXT_FLAG ~0U +#define CERT_STORE_CERTIFICATE_CONTEXT_FLAG \ + (1 << CERT_STORE_CERTIFICATE_CONTEXT) +#define CERT_STORE_CRL_CONTEXT_FLAG (1 << CERT_STORE_CRL_CONTEXT) +#define CERT_STORE_CTL_CONTEXT_FLAG (1 << CERT_STORE_CTL_CONTEXT) + +/* CryptBinaryToString/CryptStringToBinary flags */ +#define CRYPT_STRING_BASE64HEADER 0x00000000 +#define CRYPT_STRING_BASE64 0x00000001 +#define CRYPT_STRING_BINARY 0x00000002 +#define CRYPT_STRING_BASE64REQUESTHEADER 0x00000003 +#define CRYPT_STRING_HEX 0x00000004 +#define CRYPT_STRING_HEXASCII 0x00000005 +#define CRYPT_STRING_BASE64_ANY 0x00000006 +#define CRYPT_STRING_ANY 0x00000007 +#define CRYPT_STRING_HEX_ANY 0x00000008 +#define CRYPT_STRING_BASE64X509CRLHEADER 0x00000009 +#define CRYPT_STRING_HEXADDR 0x0000000a +#define CRYPT_STRING_HEXASCIIADDR 0x0000000b +#define CRYPT_STRING_HEXRAW 0x0000000c +#define CRYPT_STRING_BASE64URI 0x0000000d + +#define CRYPT_STRING_PERCENTESCAPE 0x08000000 +#define CRYPT_STRING_HASHDATA 0x10000000 +#define CRYPT_STRING_STRICT 0x20000000 +#define CRYPT_STRING_NOCRLF 0x40000000 +#define CRYPT_STRING_NOCR 0x80000000 + +/* OIDs */ +#define szOID_RSA "1.2.840.113549" +#define szOID_PKCS "1.2.840.113549.1" +#define szOID_RSA_HASH "1.2.840.113549.2" +#define szOID_RSA_ENCRYPT "1.2.840.113549.3" +#define szOID_PKCS_1 "1.2.840.113549.1.1" +#define szOID_PKCS_2 "1.2.840.113549.1.2" +#define szOID_PKCS_3 "1.2.840.113549.1.3" +#define szOID_PKCS_4 "1.2.840.113549.1.4" +#define szOID_PKCS_5 "1.2.840.113549.1.5" +#define szOID_PKCS_6 "1.2.840.113549.1.6" +#define szOID_PKCS_7 "1.2.840.113549.1.7" +#define szOID_PKCS_8 "1.2.840.113549.1.8" +#define szOID_PKCS_9 "1.2.840.113549.1.9" +#define szOID_PKCS_10 "1.2.840.113549.1.10" +#define szOID_PKCS_11 "1.2.840.113549.1.12" +#define szOID_RSA_RSA "1.2.840.113549.1.1.1" +#define CERT_RSA_PUBLIC_KEY_OBJID szOID_RSA_RSA +#define CERT_DEFAULT_OID_PUBLIC_KEY_SIGN szOID_RSA_RSA +#define CERT_DEFAULT_OID_PUBLIC_KEY_XCHG szOID_RSA_RSA +#define szOID_RSA_MD2RSA "1.2.840.113549.1.1.2" +#define szOID_RSA_MD4RSA "1.2.840.113549.1.1.3" +#define szOID_RSA_MD5RSA "1.2.840.113549.1.1.4" +#define szOID_RSA_SHA1RSA "1.2.840.113549.1.1.5" +#define szOID_RSA_SET0AEP_RSA "1.2.840.113549.1.1.6" +#define szOID_RSA_SHA256RSA "1.2.840.113549.1.1.11" +#define szOID_RSA_SHA384RSA "1.2.840.113549.1.1.12" +#define szOID_RSA_SHA512RSA "1.2.840.113549.1.1.13" +#define szOID_RSA_DH "1.2.840.113549.1.3.1" +#define szOID_RSA_data "1.2.840.113549.1.7.1" +#define szOID_RSA_signedData "1.2.840.113549.1.7.2" +#define szOID_RSA_envelopedData "1.2.840.113549.1.7.3" +#define szOID_RSA_signEnvData "1.2.840.113549.1.7.4" +#define szOID_RSA_digestedData "1.2.840.113549.1.7.5" +#define szOID_RSA_hashedData "1.2.840.113549.1.7.5" +#define szOID_RSA_encryptedData "1.2.840.113549.1.7.6" +#define szOID_RSA_emailAddr "1.2.840.113549.1.9.1" +#define szOID_RSA_unstructName "1.2.840.113549.1.9.2" +#define szOID_RSA_contentType "1.2.840.113549.1.9.3" +#define szOID_RSA_messageDigest "1.2.840.113549.1.9.4" +#define szOID_RSA_signingTime "1.2.840.113549.1.9.5" +#define szOID_RSA_counterSign "1.2.840.113549.1.9.6" +#define szOID_RSA_challengePwd "1.2.840.113549.1.9.7" +#define szOID_RSA_unstructAddr "1.2.840.113549.1.9.9" +#define szOID_RSA_extCertAttrs "1.2.840.113549.1.9.9" +#define szOID_RSA_certExtensions "1.2.840.113549.1.9.14" +#define szOID_RSA_SMIMECapabilities "1.2.840.113549.1.9.15" +#define szOID_RSA_preferSignedData "1.2.840.113549.1.9.15.1" +#define szOID_RSA_SMIMEalg "1.2.840.113549.1.9.16.3" +#define szOID_RSA_SMIMEalgESDH "1.2.840.113549.1.9.16.3.5" +#define szOID_RSA_SMIMEalgCMS3DESwrap "1.2.840.113549.1.9.16.3.6" +#define szOID_RSA_SMIMEalgCMSRC2wrap "1.2.840.113549.1.9.16.3.7" +#define szOID_RSA_MD2 "1.2.840.113549.2.2" +#define szOID_RSA_MD4 "1.2.840.113549.2.4" +#define szOID_RSA_MD5 "1.2.840.113549.2.5" +#define szOID_RSA_RC2CBC "1.2.840.113549.3.2" +#define szOID_RSA_RC4 "1.2.840.113549.3.4" +#define szOID_RSA_DES_EDE3_CBC "1.2.840.113549.3.7" +#define szOID_RSA_RC5_CBCPad "1.2.840.113549.3.9" +#define szOID_ANSI_X942 "1.2.840.10046" +#define szOID_ANSI_X942_DH "1.2.840.10046.2.1" +#define szOID_X957 "1.2.840.10040" +#define szOID_X957_DSA "1.2.840.10040.4.1" +#define szOID_X957_SHA1DSA "1.2.840.10040.4.3" +#define szOID_ECC_PUBLIC_KEY "1.2.840.10045.2.1" +#define szOID_ECC_CURVE_P256 "1.2.840.10045.3.1.7" +#define szOID_ECDSA_SPECIFIED "1.2.840.10045.4.3" +#define szOID_ECDSA_SHA256 "1.2.840.10045.4.3.2" +#define szOID_ECDSA_SHA384 "1.2.840.10045.4.3.3" +#define szOID_ECDSA_SHA512 "1.2.840.10045.4.3.4" +#define szOID_DS "2.5" +#define szOID_DSALG "2.5.8" +#define szOID_DSALG_CRPT "2.5.8.1" +#define szOID_DSALG_HASH "2.5.8.2" +#define szOID_DSALG_SIGN "2.5.8.3" +#define szOID_DSALG_RSA "2.5.8.1.1" +#define szOID_OIW "1.3.14" +#define szOID_OIWSEC "1.3.14.3.2" +#define szOID_OIWSEC_md4RSA "1.3.14.3.2.2" +#define szOID_OIWSEC_md5RSA "1.3.14.3.2.3" +#define szOID_OIWSEC_md4RSA2 "1.3.14.3.2.4" +#define szOID_OIWSEC_desECB "1.3.14.3.2.6" +#define szOID_OIWSEC_desCBC "1.3.14.3.2.7" +#define szOID_OIWSEC_desOFB "1.3.14.3.2.8" +#define szOID_OIWSEC_desCFB "1.3.14.3.2.9" +#define szOID_OIWSEC_desMAC "1.3.14.3.2.10" +#define szOID_OIWSEC_rsaSign "1.3.14.3.2.11" +#define szOID_OIWSEC_dsa "1.3.14.3.2.12" +#define szOID_OIWSEC_shaDSA "1.3.14.3.2.13" +#define szOID_OIWSEC_mdc2RSA "1.3.14.3.2.14" +#define szOID_OIWSEC_shaRSA "1.3.14.3.2.15" +#define szOID_OIWSEC_dhCommMod "1.3.14.3.2.16" +#define szOID_OIWSEC_desEDE "1.3.14.3.2.17" +#define szOID_OIWSEC_sha "1.3.14.3.2.18" +#define szOID_OIWSEC_mdc2 "1.3.14.3.2.19" +#define szOID_OIWSEC_dsaComm "1.3.14.3.2.20" +#define szOID_OIWSEC_dsaCommSHA "1.3.14.3.2.21" +#define szOID_OIWSEC_rsaXchg "1.3.14.3.2.22" +#define szOID_OIWSEC_keyHashSeal "1.3.14.3.2.23" +#define szOID_OIWSEC_md2RSASign "1.3.14.3.2.24" +#define szOID_OIWSEC_md5RSASign "1.3.14.3.2.25" +#define szOID_OIWSEC_sha1 "1.3.14.3.2.26" +#define szOID_OIWSEC_dsaSHA1 "1.3.14.3.2.27" +#define szOID_OIWSEC_dsaCommSHA1 "1.3.14.3.2.28" +#define szOID_OIWSEC_sha1RSASign "1.3.14.3.2.29" +#define szOID_OIWDIR "1.3.14.7.2" +#define szOID_OIWDIR_CRPT "1.3.14.7.2.1" +#define szOID_OIWDIR_HASH "1.3.14.7.2.2" +#define szOID_OIWDIR_SIGN "1.3.14.7.2.3" +#define szOID_OIWDIR_md2 "1.3.14.7.2.2.1" +#define szOID_OIWDIR_md2RSA "1.3.14.7.2.3.1" +#define szOID_ECC_CURVE_P384 "1.3.132.0.34" +#define szOID_ECC_CURVE_P521 "1.3.132.0.35" +#define szOID_INFOSEC "2.16.840.1.101.2.1" +#define szOID_INFOSEC_sdnsSignature "2.16.840.1.101.2.1.1.1" +#define szOID_INFOSEC_mosaicSignature "2.16.840.1.101.2.1.1.2" +#define szOID_INFOSEC_sdnsConfidentiality "2.16.840.1.101.2.1.1.3" +#define szOID_INFOSEC_mosaicConfidentiality "2.16.840.1.101.2.1.1.4" +#define szOID_INFOSEC_sdnsIntegrity "2.16.840.1.101.2.1.1.5" +#define szOID_INFOSEC_mosaicIntegrity "2.16.840.1.101.2.1.1.6" +#define szOID_INFOSEC_sdnsTokenProtection "2.16.840.1.101.2.1.1.7" +#define szOID_INFOSEC_mosaicTokenProtection "2.16.840.1.101.2.1.1.8" +#define szOID_INFOSEC_sdnsKeyManagement "2.16.840.1.101.2.1.1.9" +#define szOID_INFOSEC_mosaicKeyManagement "2.16.840.1.101.2.1.1.10" +#define szOID_INFOSEC_sdnsKMandSig "2.16.840.1.101.2.1.1.11" +#define szOID_INFOSEC_mosaicKMandSig "2.16.840.1.101.2.1.1.12" +#define szOID_INFOSEC_SuiteASignature "2.16.840.1.101.2.1.1.13" +#define szOID_INFOSEC_SuiteAConfidentiality "2.16.840.1.101.2.1.1.14" +#define szOID_INFOSEC_SuiteAIntegrity "2.16.840.1.101.2.1.1.15" +#define szOID_INFOSEC_SuiteATokenProtection "2.16.840.1.101.2.1.1.16" +#define szOID_INFOSEC_SuiteAKeyManagement "2.16.840.1.101.2.1.1.17" +#define szOID_INFOSEC_SuiteAKMandSig "2.16.840.1.101.2.1.1.18" +#define szOID_INFOSEC_mosaicUpdatedSig "2.16.840.1.101.2.1.1.19" +#define szOID_INFOSEC_mosaicKMandUpdSig "2.16.840.1.101.2.1.1.20" +#define szOID_INFOSEC_mosaicUpdateInteg "2.16.840.1.101.2.1.1.21" +#define szOID_NIST_sha256 "2.16.840.1.101.3.4.2.1" +#define szOID_NIST_sha384 "2.16.840.1.101.3.4.2.2" +#define szOID_NIST_sha512 "2.16.840.1.101.3.4.2.3" +#define szOID_COMMON_NAME "2.5.4.3" +#define szOID_SUR_NAME "2.5.4.4" +#define szOID_DEVICE_SERIAL_NUMBER "2.5.4.5" +#define szOID_COUNTRY_NAME "2.5.4.6" +#define szOID_LOCALITY_NAME "2.5.4.7" +#define szOID_STATE_OR_PROVINCE_NAME "2.5.4.8" +#define szOID_STREET_ADDRESS "2.5.4.9" +#define szOID_ORGANIZATION_NAME "2.5.4.10" +#define szOID_ORGANIZATIONAL_UNIT_NAME "2.5.4.11" +#define szOID_TITLE "2.5.4.12" +#define szOID_DESCRIPTION "2.5.4.13" +#define szOID_SEARCH_GUIDE "2.5.4.14" +#define szOID_BUSINESS_CATEGORY "2.5.4.15" +#define szOID_POSTAL_ADDRESS "2.5.4.16" +#define szOID_POSTAL_CODE "2.5.4.17" +#define szOID_POST_OFFICE_BOX "2.5.4.18" +#define szOID_PHYSICAL_DELIVERY_OFFICE_NAME "2.5.4.19" +#define szOID_TELEPHONE_NUMBER "2.5.4.20" +#define szOID_TELEX_NUMBER "2.5.4.21" +#define szOID_TELETEXT_TERMINAL_IDENTIFIER "2.5.4.22" +#define szOID_FACSIMILE_TELEPHONE_NUMBER "2.5.4.23" +#define szOID_X21_ADDRESS "2.5.4.24" +#define szOID_INTERNATIONAL_ISDN_NUMBER "2.5.4.25" +#define szOID_REGISTERED_ADDRESS "2.5.4.26" +#define szOID_DESTINATION_INDICATOR "2.5.4.27" +#define szOID_PREFERRED_DELIVERY_METHOD "2.5.4.28" +#define szOID_PRESENTATION_ADDRESS "2.5.4.29" +#define szOID_SUPPORTED_APPLICATION_CONTEXT "2.5.4.30" +#define szOID_MEMBER "2.5.4.31" +#define szOID_OWNER "2.5.4.32" +#define szOID_ROLE_OCCUPANT "2.5.4.33" +#define szOID_SEE_ALSO "2.5.4.34" +#define szOID_USER_PASSWORD "2.5.4.35" +#define szOID_USER_CERTIFICATE "2.5.4.36" +#define szOID_CA_CERTIFICATE "2.5.4.37" +#define szOID_AUTHORITY_REVOCATION_LIST "2.5.4.38" +#define szOID_CERTIFICATE_REVOCATION_LIST "2.5.4.39" +#define szOID_CROSS_CERTIFICATE_PAIR "2.5.4.40" +#define szOID_GIVEN_NAME "2.5.4.42" +#define szOID_INITIALS "2.5.4.43" +#define szOID_DN_QUALIFIER "2.5.4.46" +#define szOID_AUTHORITY_KEY_IDENTIFIER "2.5.29.1" +#define szOID_KEY_ATTRIBUTES "2.5.29.2" +#define szOID_CERT_POLICIES_95 "2.5.29.3" +#define szOID_KEY_USAGE_RESTRICTION "2.5.29.4" +#define szOID_LEGACY_POLICY_MAPPINGS "2.5.29.5" +#define szOID_SUBJECT_ALT_NAME "2.5.29.7" +#define szOID_ISSUER_ALT_NAME "2.5.29.8" +#define szOID_SUBJECT_DIR_ATTRS "2.5.29.9" +#define szOID_BASIC_CONSTRAINTS "2.5.29.10" +#define szOID_SUBJECT_KEY_IDENTIFIER "2.5.29.14" +#define szOID_KEY_USAGE "2.5.29.15" +#define szOID_PRIVATEKEY_USAGE_PERIOD "2.5.29.16" +#define szOID_SUBJECT_ALT_NAME2 "2.5.29.17" +#define szOID_ISSUER_ALT_NAME2 "2.5.29.18" +#define szOID_BASIC_CONSTRAINTS2 "2.5.29.19" +#define szOID_CRL_NUMBER "2.5.29.20" +#define szOID_CRL_REASON_CODE "2.5.29.21" +#define szOID_REASON_CODE_HOLD "2.5.29.23" +#define szOID_DELTA_CRL_INDICATOR "2.5.29.27" +#define szOID_ISSUING_DIST_POINT "2.5.29.28" +#define szOID_NAME_CONSTRAINTS "2.5.29.30" +#define szOID_CRL_DIST_POINTS "2.5.29.31" +#define szOID_CERT_POLICIES "2.5.29.32" +#define szOID_ANY_CERT_POLICY "2.5.29.32.0" +#define szOID_POLICY_MAPPINGS "2.5.29.33" +#define szOID_AUTHORITY_KEY_IDENTIFIER2 "2.5.29.35" +#define szOID_POLICY_CONSTRAINTS "2.5.29.36" +#define szOID_ENHANCED_KEY_USAGE "2.5.29.37" +#define szOID_FRESHEST_CRL "2.5.29.46" +#define szOID_INHIBIT_ANY_POLICY "2.5.29.54" +#define szOID_DOMAIN_COMPONENT "0.9.2342.19200300.100.1.25" +#define szOID_PKCS_12_FRIENDLY_NAME_ATTR "1.2.840.113549.1.9.20" +#define szOID_PKCS_12_LOCAL_KEY_ID "1.2.840.113549.1.9.21" +#define szOID_CERT_EXTENSIONS "1.3.6.1.4.1.311.2.1.14" +#define szOID_NEXT_UPDATE_LOCATION "1.3.6.1.4.1.311.10.2" +#define szOID_KP_CTL_USAGE_SIGNING "1.3.6.1.4.1.311.10.3.1" +#define szOID_KP_TIME_STAMP_SIGNING "1.3.6.1.4.1.311.10.3.2" +#ifndef szOID_SERVER_GATED_CRYPTO +#define szOID_SERVER_GATED_CRYPTO "1.3.6.1.4.1.311.10.3.3" +#endif +#ifndef szOID_SGC_NETSCAPE +#define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1" +#endif +#define szOID_KP_EFS "1.3.6.1.4.1.311.10.3.4" +#define szOID_EFS_RECOVERY "1.3.6.1.4.1.311.10.3.4.1" +#define szOID_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.5" +#define szOID_NT5_CRYPTO "1.3.6.1.4.1.311.10.3.6" +#define szOID_OEM_WHQL_CRYPTO "1.3.6.1.4.1.311.10.3.7" +#define szOID_EMBEDDED_NT_CRYPTO "1.3.6.1.4.1.311.10.3.8" +#define szOID_ROOT_LIST_SIGNER "1.3.6.1.4.1.311.10.3.9" +#define szOID_KP_QUALIFIED_SUBORDINATION "1.3.6.1.4.1.311.10.3.10" +#define szOID_KP_KEY_RECOVERY "1.3.6.1.4.1.311.10.3.11" +#define szOID_KP_DOCUMENT_SIGNING "1.3.6.1.4.1.311.10.3.12" +#define szOID_KP_LIFETIME_SIGNING "1.3.6.1.4.1.311.10.3.13" +#define szOID_KP_MOBILE_DEVICE_SOFTWARE "1.3.6.1.4.1.311.10.3.14" +#define szOID_YESNO_TRUST_ATTR "1.3.6.1.4.1.311.10.4.1" +#ifndef szOID_DRM +#define szOID_DRM "1.3.6.1.4.1.311.10.5.1" +#endif +#ifndef szOID_DRM_INDIVIDUALIZATION +#define szOID_DRM_INDIVIDUALIZATION "1.3.6.1.4.1.311.10.5.2" +#endif +#ifndef szOID_LICENSES +#define szOID_LICENSES "1.3.6.1.4.1.311.10.6.1" +#endif +#ifndef szOID_LICENSE_SERVER +#define szOID_LICENSE_SERVER "1.3.6.1.4.1.311.10.6.2" +#endif +#define szOID_REMOVE_CERTIFICATE "1.3.6.1.4.1.311.10.8.1" +#define szOID_CROSS_CERT_DIST_POINTS "1.3.6.1.4.1.311.10.9.1" +#define szOID_CTL "1.3.6.1.4.1.311.10.1" +#define szOID_SORTED_CTL "1.3.6.1.4.1.311.10.1.1" +#define szOID_ANY_APPLICATION_POLICY "1.3.6.1.4.1.311.10.12.1" +#define szOID_RENEWAL_CERTIFICATE "1.3.6.1.4.1.311.13.1" +#define szOID_ENROLLMENT_NAME_VALUE_PAIR "1.3.6.1.4.1.311.13.2.1" +#define szOID_ENROLLMENT_CSP_PROVIDER "1.3.6.1.4.1.311.13.2.2" +#define szOID_OS_VERSION "1.3.6.1.4.1.311.13.2.3" +#define szOID_PKCS_12_KEY_PROVIDER_NAME_ATTR "1.3.6.1.4.1.311.17.1" +#define szOID_LOCAL_MACHINE_KEYSET "1.3.6.1.4.1.311.17.2" +#define szOID_AUTO_ENROLL_CTL_USAGE "1.3.6.1.4.1.311.20.1" +#define szOID_ENROLL_CERTTYPE_EXTENSION "1.3.6.1.4.1.311.20.2" +#define szOID_ENROLLMENT_AGENT "1.3.6.1.4.1.311.20.2.1" +#ifndef szOID_KP_SMARTCARD_LOGON +#define szOID_KP_SMARTCARD_LOGON "1.3.6.1.4.1.311.20.2.2" +#endif +#ifndef szOID_NT_PRINCIPAL_NAME +#define szOID_NT_PRINCIPAL_NAME "1.3.6.1.4.1.311.20.2.3" +#endif +#define szOID_CERT_MANIFOLD "1.3.6.1.4.1.311.20.3" +#ifndef szOID_CERTSRV_CA_VERSION +#define szOID_CERTSRV_CA_VERSION "1.3.6.1.4.1.311.21.1" +#endif +#define szOID_CERTSRV_PREVIOUS_CERT_HASH "1.3.6.1.4.1.311.21.2" +#define szOID_CRL_VIRTUAL_BASE "1.3.6.1.4.1.311.21.3" +#define szOID_CRL_NEXT_PUBLISH "1.3.6.1.4.1.311.21.4" +#define szOID_KP_CA_EXCHANGE "1.3.6.1.4.1.311.21.5" +#define szOID_KP_KEY_RECOVERY_AGENT "1.3.6.1.4.1.311.21.6" +#define szOID_CERTIFICATE_TEMPLATE "1.3.6.1.4.1.311.21.7" +#define szOID_ENTERPRISE_OID_ROOT "1.3.6.1.4.1.311.21.8" +#define szOID_RDN_DUMMY_SIGNER "1.3.6.1.4.1.311.21.9" +#define szOID_APPLICATION_CERT_POLICIES "1.3.6.1.4.1.311.21.10" +#define szOID_APPLICATION_POLICY_MAPPINGS "1.3.6.1.4.1.311.21.11" +#define szOID_APPLICATION_POLICY_CONSTRAINTS "1.3.6.1.4.1.311.21.12" +#define szOID_ARCHIVED_KEY_ATTR "1.3.6.1.4.1.311.21.13" +#define szOID_CRL_SELF_CDP "1.3.6.1.4.1.311.21.14" +#define szOID_REQUIRE_CERT_CHAIN_POLICY "1.3.6.1.4.1.311.21.15" +#define szOID_ARCHIVED_KEY_CERT_HASH "1.3.6.1.4.1.311.21.16" +#define szOID_ISSUED_CERT_HASH "1.3.6.1.4.1.311.21.17" +#define szOID_DS_EMAIL_REPLICATION "1.3.6.1.4.1.311.21.19" +#define szOID_REQUEST_CLIENT_INFO "1.3.6.1.4.1.311.21.20" +#define szOID_ENCRYPTED_KEY_HASH "1.3.6.1.4.1.311.21.21" +#define szOID_CERTSRV_CROSSCA_VERSION "1.3.6.1.4.1.311.21.22" +#define szOID_KEYID_RDN "1.3.6.1.4.1.311.10.7.1" +#define szOID_PKIX "1.3.6.1.5.5.7" +#define szOID_PKIX_PE "1.3.6.1.5.5.7.1" +#define szOID_AUTHORITY_INFO_ACCESS "1.3.6.1.5.5.7.1.1" +#define szOID_PKIX_POLICY_QUALIFIER_CPS "1.3.6.1.5.5.7.2.1" +#define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE "1.3.6.1.5.5.7.2.2" +#define szOID_PKIX_KP "1.3.6.1.5.5.7.3" +#define szOID_PKIX_KP_SERVER_AUTH "1.3.6.1.5.5.7.3.1" +#define szOID_PKIX_KP_CLIENT_AUTH "1.3.6.1.5.5.7.3.2" +#define szOID_PKIX_KP_CODE_SIGNING "1.3.6.1.5.5.7.3.3" +#define szOID_PKIX_KP_EMAIL_PROTECTION "1.3.6.1.5.5.7.3.4" +#define szOID_PKIX_KP_IPSEC_END_SYSTEM "1.3.6.1.5.5.7.3.5" +#define szOID_PKIX_KP_IPSEC_TUNNEL "1.3.6.1.5.5.7.3.6" +#define szOID_PKIX_KP_IPSEC_USER "1.3.6.1.5.5.7.3.7" +#define szOID_PKIX_KP_TIMESTAMP_SIGNING "1.3.6.1.5.5.7.3.8" +#define szOID_PKIX_NO_SIGNATURE "1.3.6.1.5.5.7.6.2" +#define szOID_CMC "1.3.6.1.5.5.7.7" +#define szOID_CMC_STATUS_INFO "1.3.6.1.5.5.7.7.1" +#define szOID_CMC_IDENTIFICATION "1.3.6.1.5.5.7.7.2" +#define szOID_CMC_IDENTITY_PROOF "1.3.6.1.5.5.7.7.3" +#define szOID_CMC_DATA_RETURN "1.3.6.1.5.5.7.7.4" +#define szOID_CMC_TRANSACTION_ID "1.3.6.1.5.5.7.7.5" +#define szOID_CMC_SENDER_NONCE "1.3.6.1.5.5.7.7.6" +#define szOID_CMC_RECIPIENT_NONCE "1.3.6.1.5.5.7.7.7" +#define szOID_CMC_ADD_EXTENSIONS "1.3.6.1.5.5.7.7.8" +#define szOID_CMC_ENCRYPTED_POP "1.3.6.1.5.5.7.7.9" +#define szOID_CMC_DECRYPTED_POP "1.3.6.1.5.5.7.7.10" +#define szOID_CMC_LRA_POP_WITNESS "1.3.6.1.5.5.7.7.11" +#define szOID_CMC_GET_CERT "1.3.6.1.5.5.7.7.15" +#define szOID_CMC_GET_CRL "1.3.6.1.5.5.7.7.16" +#define szOID_CMC_REVOKE_REQUEST "1.3.6.1.5.5.7.7.17" +#define szOID_CMC_REG_INFO "1.3.6.1.5.5.7.7.18" +#define szOID_CMC_RESPONSE_INFO "1.3.6.1.5.5.7.7.19" +#define szOID_CMC_QUERY_PENDING "1.3.6.1.5.5.7.7.21" +#define szOID_CMC_ID_POP_LINK_RANDOM "1.3.6.1.5.5.7.7.22" +#define szOID_CMC_ID_POP_LINK_WITNESS "1.3.6.1.5.5.7.7.23" +#define szOID_CT_PKI_DATA "1.3.6.1.5.5.7.12.2" +#define szOID_CT_PKI_RESPONSE "1.3.6.1.5.5.7.12.3" +#define szOID_PKIX_ACC_DESCR "1.3.6.1.5.5.7.48" +#define szOID_PKIX_OCSP "1.3.6.1.5.5.7.48.1" +#define szOID_PKIX_CA_ISSUERS "1.3.6.1.5.5.7.48.2" +#define szOID_IPSEC_KP_IKE_INTERMEDIATE "1.3.6.1.5.5.8.2.2" + +#ifndef szOID_SERIALIZED +#define szOID_SERIALIZED "1.3.6.1.4.1.311.10.3.3.1" +#endif + +#ifndef szOID_PRODUCT_UPDATE +#define szOID_PRODUCT_UPDATE "1.3.6.1.4.1.311.31.1" +#endif + +#define szOID_NETSCAPE "2.16.840.1.113730" +#define szOID_NETSCAPE_CERT_EXTENSION "2.16.840.1.113730.1" +#define szOID_NETSCAPE_CERT_TYPE "2.16.840.1.113730.1.1" +#define szOID_NETSCAPE_BASE_URL "2.16.840.1.113730.1.2" +#define szOID_NETSCAPE_REVOCATION_URL "2.16.840.1.113730.1.3" +#define szOID_NETSCAPE_CA_REVOCATION_URL "2.16.840.1.113730.1.4" +#define szOID_NETSCAPE_CERT_RENEWAL_URL "2.16.840.1.113730.1.7" +#define szOID_NETSCAPE_CA_POLICY_URL "2.16.840.1.113730.1.8" +#define szOID_NETSCAPE_SSL_SERVER_NAME "2.16.840.1.113730.1.12" +#define szOID_NETSCAPE_COMMENT "2.16.840.1.113730.1.13" +#define szOID_NETSCAPE_DATA_TYPE "2.16.840.1.113730.2" +#define szOID_NETSCAPE_CERT_SEQUENCE "2.16.840.1.113730.2.5" + +/* Bits for szOID_NETSCAPE_CERT_TYPE */ +#define NETSCAPE_SSL_CLIENT_AUTH_CERT_TYPE 0x80 +#define NETSCAPE_SSL_SERVER_AUTH_CERT_TYPE 0x40 +#define NETSCAPE_SMIME_CERT_TYPE 0x20 +#define NETSCAPE_SIGN_CERT_TYPE 0x10 +#define NETSCAPE_SSL_CA_CERT_TYPE 0x04 +#define NETSCAPE_SMIME_CA_CERT_TYPE 0x02 +#define NETSCAPE_SIGN_CA_CERT_TYPE 0x01 + +#define CRYPT_ENCODE_DECODE_NONE 0 +#define X509_CERT ((LPCSTR)1) +#define X509_CERT_TO_BE_SIGNED ((LPCSTR)2) +#define X509_CERT_CRL_TO_BE_SIGNED ((LPCSTR)3) +#define X509_CERT_REQUEST_TO_BE_SIGNED ((LPCSTR)4) +#define X509_EXTENSIONS ((LPCSTR)5) +#define X509_NAME_VALUE ((LPCSTR)6) +#define X509_ANY_STRING X509_NAME_VALUE +#define X509_NAME ((LPCSTR)7) +#define X509_PUBLIC_KEY_INFO ((LPCSTR)8) +#define X509_AUTHORITY_KEY_ID ((LPCSTR)9) +#define X509_KEY_ATTRIBUTES ((LPCSTR)10) +#define X509_KEY_USAGE_RESTRICTION ((LPCSTR)11) +#define X509_ALTERNATE_NAME ((LPCSTR)12) +#define X509_BASIC_CONSTRAINTS ((LPCSTR)13) +#define X509_KEY_USAGE ((LPCSTR)14) +#define X509_BASIC_CONSTRAINTS2 ((LPCSTR)15) +#define X509_CERT_POLICIES ((LPCSTR)16) +#define PKCS_UTC_TIME ((LPCSTR)17) +#define PKCS_TIME_REQUEST ((LPCSTR)18) +#define RSA_CSP_PUBLICKEYBLOB ((LPCSTR)19) +#define X509_UNICODE_NAME ((LPCSTR)20) +#define X509_KEYGEN_REQUEST_TO_BE_SIGNED ((LPCSTR)21) +#define PKCS_ATTRIBUTE ((LPCSTR)22) +#define PKCS_CONTENT_INFO_SEQUENCE_OF_ANY ((LPCSTR)23) +#define X509_UNICODE_NAME_VALUE ((LPCSTR)24) +#define X509_UNICODE_ANY_STRING X509_UNICODE_NAME_VALUE +#define X509_OCTET_STRING ((LPCSTR)25) +#define X509_BITS ((LPCSTR)26) +#define X509_INTEGER ((LPCSTR)27) +#define X509_MULTI_BYTE_INTEGER ((LPCSTR)28) +#define X509_ENUMERATED ((LPCSTR)29) +#define X509_CRL_REASON_CODE X509_ENUMERATED +#define X509_CHOICE_OF_TIME ((LPCSTR)30) +#define X509_AUTHORITY_KEY_ID2 ((LPCSTR)31) +#define X509_AUTHORITY_INFO_ACCESS ((LPCSTR)32) +#define PKCS_CONTENT_INFO ((LPCSTR)33) +#define X509_SEQUENCE_OF_ANY ((LPCSTR)34) +#define X509_CRL_DIST_POINTS ((LPCSTR)35) +#define X509_ENHANCED_KEY_USAGE ((LPCSTR)36) +#define PKCS_CTL ((LPCSTR)37) +#define X509_MULTI_BYTE_UINT ((LPCSTR)38) +#define X509_DSS_PUBLICKEY X509_MULTI_BYTE_UINT +#define X509_DSS_PARAMETERS ((LPCSTR)39) +#define X509_DSS_SIGNATURE ((LPCSTR)40) +#define PKCS_RC2_CBC_PARAMETERS ((LPCSTR)41) +#define PKCS_SMIME_CAPABILITIES ((LPCSTR)42) +#define PKCS_RSA_PRIVATE_KEY ((LPCSTR)43) +#define PKCS_PRIVATE_KEY_INFO ((LPCSTR)44) +#define PKCS_ENCRYPTED_PRIVATE_KEY_INFO ((LPCSTR)45) +#define X509_PKIX_POLICY_QUALIFIER_USERNOTICE ((LPCSTR)46) +#define X509_DH_PUBLICKEY X509_MULTI_BYTE_UINT +#define X509_DH_PARAMETERS ((LPCSTR)47) +#define X509_ECC_SIGNATURE ((LPCSTR)47) +#define PKCS_ATTRIBUTES ((LPCSTR)48) +#define PKCS_SORTED_CTL ((LPCSTR)49) +#define X942_DH_PARAMETERS ((LPCSTR)50) +#define X509_BITS_WITHOUT_TRAILING_ZEROES ((LPCSTR)51) +#define X942_OTHER_INFO ((LPCSTR)52) +#define X509_CERT_PAIR ((LPCSTR)53) +#define X509_ISSUING_DIST_POINT ((LPCSTR)54) +#define X509_NAME_CONSTRAINTS ((LPCSTR)55) +#define X509_POLICY_MAPPINGS ((LPCSTR)56) +#define X509_POLICY_CONSTRAINTS ((LPCSTR)57) +#define X509_CROSS_CERT_DIST_POINTS ((LPCSTR)58) +#define CMC_DATA ((LPCSTR)59) +#define CMC_RESPONSE ((LPCSTR)60) +#define CMC_STATUS ((LPCSTR)61) +#define CMC_ADD_EXTENSIONS ((LPCSTR)62) +#define CMC_ADD_ATTRIBUTES ((LPCSTR)63) +#define X509_CERTIFICATE_TEMPLATE ((LPCSTR)64) +#define OCSP_SIGNED_REQUEST ((LPCSTR)65) +#define OCSP_REQUEST ((LPCSTR)66) +#define OCSP_RESPONSE ((LPCSTR)67) +#define OCSP_BASIC_SIGNED_RESPONSE ((LPCSTR)68) +#define OCSP_BASIC_RESPONSE ((LPCSTR)69) +#define CNG_RSA_PUBLIC_KEY_BLOB ((LPCSTR)72) +#define X509_OBJECT_IDENTIFIER ((LPCSTR)73) +#define PKCS7_SIGNER_INFO ((LPCSTR)500) +#define CMS_SIGNER_INFO ((LPCSTR)501) + +/* encode/decode flags */ +#define CRYPT_ENCODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x00008 +#define CRYPT_ENCODE_ALLOC_FLAG 0x08000 +#define CRYPT_SORTED_CTL_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x10000 +#define CRYPT_UNICODE_NAME_ENCODE_ENABLE_T61_UNICODE_FLAG \ + CERT_RDN_ENABLE_T61_UNICODE_FLAG +#define CRYPT_UNICODE_NAME_ENCODE_ENABLE_UTF8_UNICODE_FLAG \ + CERT_RDN_ENABLE_UTF8_UNICODE_FLAG +#define CRYPT_UNICODE_NAME_ENCODE_DISABLE_CHECK_TYPE_FLAG \ + CERT_RDN_DISABLE_CHECK_TYPE_FLAG + +#define CRYPT_DECODE_NOCOPY_FLAG 0x00001 +#define CRYPT_DECODE_TO_BE_SIGNED_FLAG 0x00002 +#define CRYPT_DECODE_SHARE_OID_STRING_FLAG 0x00004 +#define CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG 0x00008 +#define CRYPT_DECODE_ALLOC_FLAG 0x08000 +#define CRYPT_UNICODE_NAME_DECODE_DISABLE_IE4_UTF8_FLAG \ + CERT_RDN_DISABLE_IE4_UTF8_FLAG + +#define CERT_STORE_SIGNATURE_FLAG 0x00000001 +#define CERT_STORE_TIME_VALIDITY_FLAG 0x00000002 +#define CERT_STORE_REVOCATION_FLAG 0x00000004 +#define CERT_STORE_NO_CRL_FLAG 0x00010000 +#define CERT_STORE_NO_ISSUER_FLAG 0x00020000 + +#define CERT_STORE_BASE_CRL_FLAG 0x00000100 +#define CERT_STORE_DELTA_CRL_FLAG 0x00000200 + +/* subject types for CryptVerifyCertificateSignatureEx */ +#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB 1 +#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT 2 +#define CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL 3 + +/* issuer types for CryptVerifyCertificateSignatureEx */ +#define CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY 1 +#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT 2 +#define CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN 3 +#define CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL 4 + +#define CRYPT_GET_URL_FROM_PROPERTY 0x00000001 +#define CRYPT_GET_URL_FROM_EXTENSION 0x00000002 +#define CRYPT_GET_URL_FROM_UNAUTH_ATTRIBUTE 0x00000004 +#define CRYPT_GET_URL_FROM_AUTH_ATTRIBUTE 0x00000008 + +/* Certificate name string types and flags */ +#define CERT_SIMPLE_NAME_STR 1 +#define CERT_OID_NAME_STR 2 +#define CERT_X500_NAME_STR 3 +#define CERT_NAME_STR_SEMICOLON_FLAG 0x40000000 +#define CERT_NAME_STR_NO_PLUS_FLAG 0x20000000 +#define CERT_NAME_STR_NO_QUOTING_FLAG 0x10000000 +#define CERT_NAME_STR_CRLF_FLAG 0x08000000 +#define CERT_NAME_STR_COMMA_FLAG 0x04000000 +#define CERT_NAME_STR_REVERSE_FLAG 0x02000000 +#define CERT_NAME_STR_ENABLE_UTF8_UNICODE_FLAG 0x00040000 +#define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG 0x00020000 +#define CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG 0x00010000 + +#define CERT_NAME_EMAIL_TYPE 1 +#define CERT_NAME_RDN_TYPE 2 +#define CERT_NAME_ATTR_TYPE 3 +#define CERT_NAME_SIMPLE_DISPLAY_TYPE 4 +#define CERT_NAME_FRIENDLY_DISPLAY_TYPE 5 +#define CERT_NAME_DNS_TYPE 6 +#define CERT_NAME_URL_TYPE 7 +#define CERT_NAME_UPN_TYPE 8 + +#define CERT_NAME_ISSUER_FLAG 0x00000001 +#define CERT_NAME_SEARCH_ALL_NAMES_FLAG 0x00000002 +#define CERT_NAME_DISABLE_IE4_UTF8_FLAG 0x00010000 +#define CERT_NAME_STR_ENABLE_PUNYCODE_FLAG 0x00200000 + +/* CryptFormatObject flags */ +#define CRYPT_FORMAT_STR_MULTI_LINE 0x0001 +#define CRYPT_FORMAT_STR_NO_HEX 0x0010 + +#define CRYPT_FORMAT_SIMPLE 0x0001 +#define CRYPT_FORMAT_X509 0x0002 +#define CRYPT_FORMAT_OID 0x0004 +#define CRYPT_FORMAT_RDN_SEMICOLON 0x0100 +#define CRYPT_FORMAT_RDN_CRLF 0x0200 +#define CRYPT_FORMAT_RDN_UNQUOTE 0x0400 +#define CRYPT_FORMAT_RDN_REVERSE 0x0800 + +#define CRYPT_FORMAT_COMMA 0x1000 +#define CRYPT_FORMAT_SEMICOLON CRYPT_FORMAT_RDN_SEMICOLON +#define CRYPT_FORMAT_CRLF CRYPT_FORMAT_RDN_CRLF + +/* CryptQueryObject types and flags */ +#define CERT_QUERY_OBJECT_FILE 1 +#define CERT_QUERY_OBJECT_BLOB 2 + +#define CERT_QUERY_CONTENT_CERT 1 +#define CERT_QUERY_CONTENT_CTL 2 +#define CERT_QUERY_CONTENT_CRL 3 +#define CERT_QUERY_CONTENT_SERIALIZED_STORE 4 +#define CERT_QUERY_CONTENT_SERIALIZED_CERT 5 +#define CERT_QUERY_CONTENT_SERIALIZED_CTL 6 +#define CERT_QUERY_CONTENT_SERIALIZED_CRL 7 +#define CERT_QUERY_CONTENT_PKCS7_SIGNED 8 +#define CERT_QUERY_CONTENT_PKCS7_UNSIGNED 9 +#define CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED 10 +#define CERT_QUERY_CONTENT_PKCS10 11 +#define CERT_QUERY_CONTENT_PFX 12 +#define CERT_QUERY_CONTENT_CERT_PAIR 13 + +#define CERT_QUERY_CONTENT_FLAG_CERT (1 << CERT_QUERY_CONTENT_CERT) +#define CERT_QUERY_CONTENT_FLAG_CTL (1 << CERT_QUERY_CONTENT_CTL) +#define CERT_QUERY_CONTENT_FLAG_CRL (1 << CERT_QUERY_CONTENT_CRL) +#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE \ + (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE) +#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT \ + (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT) +#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL \ + (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL) +#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL \ + (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL) +#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED \ + (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED) +#define CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED \ + (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED) +#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED \ + (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED) +#define CERT_QUERY_CONTENT_FLAG_PKCS10 (1 << CERT_QUERY_CONTENT_PKCS10) +#define CERT_QUERY_CONTENT_FLAG_PFX (1 << CERT_QUERY_CONTENT_PFX) +#define CERT_QUERY_CONTENT_FLAG_CERT_PAIR (1 << CERT_QUERY_CONTENT_CERT_PAIR) + +#define CERT_QUERY_CONTENT_FLAG_ALL \ + CERT_QUERY_CONTENT_FLAG_CERT | \ + CERT_QUERY_CONTENT_FLAG_CTL | \ + CERT_QUERY_CONTENT_FLAG_CRL | \ + CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | \ + CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | \ + CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | \ + CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | \ + CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | \ + CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | \ + CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | \ + CERT_QUERY_CONTENT_FLAG_PKCS10 | \ + CERT_QUERY_CONTENT_FLAG_PFX | \ + CERT_QUERY_CONTENT_FLAG_CERT_PAIR + +#define CERT_QUERY_FORMAT_BINARY 1 +#define CERT_QUERY_FORMAT_BASE64_ENCODED 2 +#define CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED 3 + +#define CERT_QUERY_FORMAT_FLAG_BINARY (1 << CERT_QUERY_FORMAT_BINARY) +#define CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED \ + (1 << CERT_QUERY_FORMAT_BASE64_ENCODED) +#define CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED \ + (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED) + +#define CERT_QUERY_FORMAT_FLAG_ALL \ + CERT_QUERY_FORMAT_FLAG_BINARY | \ + CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | \ + CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED \ + +#define CERT_SET_KEY_PROV_HANDLE_PROP_ID 0x00000001 +#define CERT_SET_KEY_CONTEXT_PROP_ID 0x00000001 + +#define CERT_CREATE_SELFSIGN_NO_SIGN 1 +#define CERT_CREATE_SELFSIGN_NO_KEY_INFO 2 + +/* flags for CryptAcquireCertificatePrivateKey */ +#define CRYPT_ACQUIRE_CACHE_FLAG 0x00000001 +#define CRYPT_ACQUIRE_USE_PROV_INFO_FLAG 0x00000002 +#define CRYPT_ACQUIRE_COMPARE_KEY_FLAG 0x00000004 +#define CRYPT_ACQUIRE_SILENT_FLAG 0x00000040 + +/* flags for CryptFindCertificateKeyProvInfo */ +#define CRYPT_FIND_USER_KEYSET_FLAG 0x00000001 +#define CRYPT_FIND_MACHINE_KEYSET_FLAG 0x00000002 +#define CRYPT_FIND_SILENT_KEYSET_FLAG 0x00000040 + +/* Chain engines and chains */ +typedef HANDLE HCERTCHAINENGINE; +#define HCCE_CURRENT_USER ((HCERTCHAINENGINE)NULL) +#define HCCE_LOCAL_MACHINE ((HCERTCHAINENGINE)1) + +#define CERT_CHAIN_CACHE_END_CERT 0x00000001 +#define CERT_CHAIN_THREAD_STORE_SYNC 0x00000002 +#define CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL 0x00000004 +#define CERT_CHAIN_USE_LOCAL_MACHINE_STORE 0x00000008 +#define CERT_CHAIN_ENABLE_CACHE_AUTO_UPDATE 0x00000010 +#define CERT_CHAIN_ENABLE_SHARE_STORE 0x00000020 + +typedef struct _CERT_CHAIN_ENGINE_CONFIG +{ + DWORD cbSize; + HCERTSTORE hRestrictedRoot; + HCERTSTORE hRestrictedTrust; + HCERTSTORE hRestrictedOther; + DWORD cAdditionalStore; + HCERTSTORE *rghAdditionalStore; + DWORD dwFlags; + DWORD dwUrlRetrievalTimeout; + DWORD MaximumCachedCertificates; + DWORD CycleDetectionModulus; + HCERTSTORE hExclusiveRoot; + HCERTSTORE hExclusiveRootTrustedPeople; +} CERT_CHAIN_ENGINE_CONFIG, *PCERT_CHAIN_ENGINE_CONFIG; + +/* message-related definitions */ + +typedef BOOL (WINAPI *PFN_CMSG_STREAM_OUTPUT)(const void *pvArg, BYTE *pbData, + DWORD cbData, BOOL fFinal); + +#define CMSG_INDEFINITE_LENGTH 0xffffffff + +typedef struct _CMSG_STREAM_INFO +{ + DWORD cbContent; + PFN_CMSG_STREAM_OUTPUT pfnStreamOutput; + void *pvArg; +} CMSG_STREAM_INFO, *PCMSG_STREAM_INFO; + +typedef struct _CERT_ISSUER_SERIAL_NUMBER +{ + CERT_NAME_BLOB Issuer; + CRYPT_INTEGER_BLOB SerialNumber; +} CERT_ISSUER_SERIAL_NUMBER, *PCERT_ISSUER_SERIAL_NUMBER; + +typedef struct _CERT_ID +{ + DWORD dwIdChoice; + union { + CERT_ISSUER_SERIAL_NUMBER IssuerSerialNumber; + CRYPT_HASH_BLOB KeyId; + CRYPT_HASH_BLOB HashId; + } DUMMYUNIONNAME; +} CERT_ID, *PCERT_ID; + +#define CERT_ID_ISSUER_SERIAL_NUMBER 1 +#define CERT_ID_KEY_IDENTIFIER 2 +#define CERT_ID_SHA1_HASH 3 + +#ifndef USE_WC_PREFIX +#undef CMSG_DATA /* may be defined by sys/socket.h */ +#define CMSG_DATA 1 +#define CMSG_SIGNED 2 +#define CMSG_ENVELOPED 3 +#define CMSG_SIGNED_AND_ENVELOPED 4 +#define CMSG_HASHED 5 +#define CMSG_ENCRYPTED 6 + +#define CMSG_ALL_FLAGS ~0U +#define CMSG_DATA_FLAG (1 << CMSG_DATA) +#define CMSG_SIGNED_FLAG (1 << CMSG_SIGNED) +#define CMSG_ENVELOPED_FLAG (1 << CMSG_ENVELOPED) +#define CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << CMSG_SIGNED_AND_ENVELOPED) +#define CMSG_ENCRYPTED_FLAG (1 << CMSG_ENCRYPTED) +#else +#define WC_CMSG_DATA 1 +#define WC_CMSG_SIGNED 2 +#define WC_CMSG_ENVELOPED 3 +#define WC_CMSG_SIGNED_AND_ENVELOPED 4 +#define WC_CMSG_HASHED 5 +#define WC_CMSG_ENCRYPTED 6 + +#define WC_CMSG_ALL_FLAGS ~0U +#define WC_CMSG_DATA_FLAG (1 << WC_CMSG_DATA) +#define WC_CMSG_SIGNED_FLAG (1 << WC_CMSG_SIGNED) +#define WC_CMSG_ENVELOPED_FLAG (1 << WC_CMSG_ENVELOPED) +#define WC_CMSG_SIGNED_AND_ENVELOPED_FLAG (1 << WC_CMSG_SIGNED_AND_ENVELOPED) +#define WC_CMSG_ENCRYPTED_FLAG (1 << WC_CMSG_ENCRYPTED) +#endif + +typedef struct _CMSG_SIGNER_ENCODE_INFO +{ + DWORD cbSize; + PCERT_INFO pCertInfo; + HCRYPTPROV hCryptProv; + DWORD dwKeySpec; + CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; + void *pvHashAuxInfo; + DWORD cAuthAttr; + PCRYPT_ATTRIBUTE rgAuthAttr; + DWORD cUnauthAttr; + PCRYPT_ATTRIBUTE rgUnauthAttr; +#ifdef CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS + CERT_ID SignerId; + CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm; + void *pvHashEncryptionAuxInfo; +#endif +} CMSG_SIGNER_ENCODE_INFO, *PCMSG_SIGNER_ENCODE_INFO; + +typedef struct _CMSG_SIGNED_ENCODE_INFO +{ + DWORD cbSize; + DWORD cSigners; + PCMSG_SIGNER_ENCODE_INFO rgSigners; + DWORD cCertEncoded; + PCERT_BLOB rgCertEncoded; + DWORD cCrlEncoded; + PCRL_BLOB rgCrlEncoded; +#ifdef CMSG_SIGNED_ENCODE_INFO_HAS_CMS_FIELDS + DWORD cAttrCertEncoded; + PCERT_BLOB rgAttrCertEncoded; +#endif +} CMSG_SIGNED_ENCODE_INFO, *PCMSG_SIGNED_ENCODE_INFO; + +typedef struct _CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO +{ + DWORD cbSize; + CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm; + void *pvKeyEncryptionAuxInfo; + HCRYPTPROV_LEGACY hCryptProv; + CRYPT_BIT_BLOB RecipientPublicKey; + CERT_ID RecipientId; +} CMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO; + +typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO +{ + DWORD cbSize; + CRYPT_BIT_BLOB RecipientPublicKey; + CERT_ID RecipientId; + FILETIME Date; + PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr; +} CMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO, + *PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO; + +typedef struct _CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO +{ + DWORD cbSize; + CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm; + void *pvKeyEncryptionAuxInfo; + CRYPT_ALGORITHM_IDENTIFIER KeyWrapAlgorithm; + void *pvKeyWrapAuxInfo; + HCRYPTPROV_LEGACY hCryptProv; + DWORD dwKeySpec; + DWORD dwKeyChoice; + union { + PCRYPT_ALGORITHM_IDENTIFIER pEphemeralAlgorithm; + PCERT_ID pSenderId; + } DUMMYUNIONNAME; + CRYPT_DATA_BLOB UserKeyingMaterial; + DWORD cRecipientEncryptedKeys; + PCMSG_RECIPIENT_ENCRYPTED_KEY_ENCODE_INFO *rgpRecipientEncryptedKeys; +} CMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO, *PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO; + +#define CMSG_KEY_AGREE_EPHEMERAL_KEY_CHOICE 1 +#define CMSG_KEY_AGREE_STATIC_KEY_CHOICE 2 + +typedef struct _CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO +{ + DWORD cbSize; + CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm; + void *pvKeyEncryptionAuxInfo; + HCRYPTPROV hCryptProv; + DWORD dwKeyChoice; + union { + HCRYPTKEY hKeyEncryptionKey; + void *pvKeyEncryptionKey; + } DUMMYUNIONNAME; + CRYPT_DATA_BLOB KeyId; + FILETIME Date; + PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr; +} CMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO, *PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO; + +#define CMSG_MAIL_LIST_HANDLE_KEY_CHOICE 1 + +typedef struct _CMSG_RECIPIENT_ENCODE_INFO +{ + DWORD dwRecipientChoice; + union { + PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTrans; + PCMSG_KEY_AGREE_RECIPIENT_ENCODE_INFO pKeyAgree; + PCMSG_MAIL_LIST_RECIPIENT_ENCODE_INFO pMailList; + } DUMMYUNIONNAME; +} CMSG_RECIPIENT_ENCODE_INFO, *PCMSG_RECIPIENT_ENCODE_INFO; + +#define CMSG_KEY_TRANS_RECIPIENT 1 +#define CMSG_KEY_AGREE_RECIPIENT 2 +#define CMSG_MAIL_LIST_RECIPIENT 3 + +typedef struct _CMSG_ENVELOPED_ENCODE_INFO +{ + DWORD cbSize; + HCRYPTPROV_LEGACY hCryptProv; + CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm; + void *pvEncryptionAuxInfo; + DWORD cRecipients; + PCERT_INFO *rgpRecipientCert; +#ifdef CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS + PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients; + DWORD cCertEncoded; + PCERT_BLOB rgCertEncoded; + DWORD cCrlEncoded; + PCRL_BLOB rgCrlEncoded; + DWORD cAttrCertEncoded; + PCERT_BLOB rgAttrCertEncoded; + DWORD cUnprotectedAttr; + PCRYPT_ATTRIBUTE rgUnprotectedAttr; +#endif +} CMSG_ENVELOPED_ENCODE_INFO, *PCMSG_ENVELOPED_ENCODE_INFO; + +typedef struct _CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO +{ + DWORD cbSize; + CMSG_SIGNED_ENCODE_INFO SignedInfo; + CMSG_ENVELOPED_ENCODE_INFO EnvelopedInfo; +} CMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO, + *PCMSG_SIGNED_AND_ENVELOPED_ENCODE_INFO; + +typedef struct _CMSG_HASHED_ENCODE_INFO +{ + DWORD cbSize; + HCRYPTPROV_LEGACY hCryptProv; + CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; + void *pvHashAuxInfo; +} CMSG_HASHED_ENCODE_INFO, *PCMSG_HASHED_ENCODE_INFO; + +typedef struct _CMSG_ENCRYPTED_ENCODE_INFO +{ + DWORD cbSize; + CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm; + void *pvEncryptionAuxInfo; +} CMSG_ENCRYPTED_ENCODE_INFO, *PCMSG_ENCRYPTED_ENCODE_INFO; + +#define CMSG_BARE_CONTENT_FLAG 0x00000001 +#define CMSG_LENGTH_ONLY_FLAG 0x00000002 +#define CMSG_DETACHED_FLAG 0x00000004 +#define CMSG_AUTHENTICATED_ATTRIBUTES_FLAG 0x00000008 +#define CMSG_CONTENTS_OCTETS_FLAG 0x00000010 +#define CMSG_MAX_LENGTH_FLAG 0x00000020 +#define CMSG_CMS_ENCAPSULATED_CONTENT_FLAG 0x00000040 +#define CMSG_CRYPT_RELEASE_CONTEXT_FLAG 0x00008000 + +#define CMSG_CTRL_VERIFY_SIGNATURE 1 +#define CMSG_CTRL_DECRYPT 2 +#define CMSG_CTRL_VERIFY_HASH 5 +#define CMSG_CTRL_ADD_SIGNER 6 +#define CMSG_CTRL_DEL_SIGNER 7 +#define CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR 8 +#define CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR 9 +#define CMSG_CTRL_ADD_CERT 10 +#define CMSG_CTRL_DEL_CERT 11 +#define CMSG_CTRL_ADD_CRL 12 +#define CMSG_CTRL_DEL_CRL 13 +#define CMSG_CTRL_ADD_ATTR_CERT 14 +#define CMSG_CTRL_DEL_ATTR_CERT 15 +#define CMSG_CTRL_KEY_TRANS_DECRYPT 16 +#define CMSG_CTRL_KEY_AGREE_DECRYPT 17 +#define CMSG_CTRL_MAIL_LIST_DECRYPT 18 +#define CMSG_CTRL_VERIFY_SIGNATURE_EX 19 +#define CMSG_CTRL_ADD_CMS_SIGNER_INFO 20 + +typedef struct _CMSG_CTRL_DECRYPT_PARA +{ + DWORD cbSize; + HCRYPTPROV hCryptProv; + DWORD dwKeySpec; + DWORD dwRecipientIndex; +} CMSG_CTRL_DECRYPT_PARA, *PCMSG_CTRL_DECRYPT_PARA; + +typedef struct _CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA +{ + DWORD cbSize; + DWORD dwSignerIndex; + CRYPT_DATA_BLOB blob; +} CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA, + *PCMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA; + +typedef struct _CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA +{ + DWORD cbSize; + DWORD dwSignerIndex; + DWORD dwUnauthAttrIndex; +} CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA, + *PCMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA; + +typedef struct _CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA { + DWORD cbSize; + HCRYPTPROV hCryptProv; + DWORD dwSignerIndex; + DWORD dwSignerType; + void *pvSigner; +} CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA, *PCMSG_CTRL_VERIFY_SIGNATURE_EX_PARA; + +#define CMSG_VERIFY_SIGNER_PUBKEY 1 +#define CMSG_VERIFY_SIGNER_CERT 2 +#define CMSG_VERIFY_SIGNER_CHAIN 3 +#define CMSG_VERIFY_SIGNER_NULL 4 + +#define CMSG_TYPE_PARAM 1 +#define CMSG_CONTENT_PARAM 2 +#define CMSG_BARE_CONTENT_PARAM 3 +#define CMSG_INNER_CONTENT_TYPE_PARAM 4 +#define CMSG_SIGNER_COUNT_PARAM 5 +#define CMSG_SIGNER_INFO_PARAM 6 +#define CMSG_SIGNER_CERT_INFO_PARAM 7 +#define CMSG_SIGNER_HASH_ALGORITHM_PARAM 8 +#define CMSG_SIGNER_AUTH_ATTR_PARAM 9 +#define CMSG_SIGNER_UNAUTH_ATTR_PARAM 10 +#define CMSG_CERT_COUNT_PARAM 11 +#define CMSG_CERT_PARAM 12 +#define CMSG_CRL_COUNT_PARAM 13 +#define CMSG_CRL_PARAM 14 +#define CMSG_ENVELOPE_ALGORITHM_PARAM 15 +#define CMSG_RECIPIENT_COUNT_PARAM 17 +#define CMSG_RECIPIENT_INDEX_PARAM 18 +#define CMSG_RECIPIENT_INFO_PARAM 19 +#define CMSG_HASH_ALGORITHM_PARAM 20 +#define CMSG_HASH_DATA_PARAM 21 +#define CMSG_COMPUTED_HASH_PARAM 22 +#define CMSG_ENCRYPT_PARAM 26 +#define CMSG_ENCRYPTED_DIGEST 27 +#define CMSG_ENCODED_SIGNER 28 +#define CMSG_ENCODED_MESSAGE 29 +#define CMSG_VERSION_PARAM 30 +#define CMSG_ATTR_CERT_COUNT_PARAM 31 +#define CMSG_ATTR_CERT_PARAM 32 +#define CMSG_CMS_RECIPIENT_COUNT_PARAM 33 +#define CMSG_CMS_RECIPIENT_INDEX_PARAM 34 +#define CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM 35 +#define CMSG_CMS_RECIPIENT_INFO_PARAM 36 +#define CMSG_UNPROTECTED_ATTR_PARAM 37 +#define CMSG_SIGNER_CERT_ID_PARAM 38 +#define CMSG_CMS_SIGNER_INFO_PARAM 39 + +typedef struct _CMSG_CMS_SIGNER_INFO { + DWORD dwVersion; + CERT_ID SignerId; + CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; + CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm; + CRYPT_DATA_BLOB EncryptedHash; + CRYPT_ATTRIBUTES AuthAttrs; + CRYPT_ATTRIBUTES UnauthAttrs; +} CMSG_CMS_SIGNER_INFO, *PCMSG_CMS_SIGNER_INFO; + +typedef CRYPT_ATTRIBUTES CMSG_ATTR, *PCMSG_ATTR; + +#define CMSG_SIGNED_DATA_V1 1 +#define CMSG_SIGNED_DATA_V3 3 +#define CMSG_SIGNED_DATA_PKCS_1_5_VERSION CMSG_SIGNED_DATA_V1 +#define CMSG_SIGNED_DATA_CMS_VERSION CMSG_SIGNED_DATA_V3 + +#define CMSG_SIGNER_INFO_V1 1 +#define CMSG_SIGNER_INFO_V3 3 +#define CMSG_SIGNER_INFO_PKCS_1_5_VERSION CMSG_SIGNER_INFO_V1 +#define CMSG_SIGNER_INFO_CMS_VERSION CMSG_SIGNER_INFO_V3 + +#define CMSG_HASHED_DATA_V0 0 +#define CMSG_HASHED_DATA_V2 2 +#define CMSG_HASHED_DATA_PKCS_1_5_VERSION CMSG_HASHED_DATA_V0 +#define CMSG_HASHED_DATA_CMS_VERSION CMSG_HASHED_DATA_V2 + +#define CMSG_ENVELOPED_DATA_V0 0 +#define CMSG_ENVELOPED_DATA_V2 2 +#define CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION CMSG_ENVELOPED_DATA_V0 +#define CMSG_ENVELOPED_DATA_CMS_VERSION CMSG_ENVELOPED_DATA_V2 + +typedef struct _CMSG_KEY_TRANS_RECIPIENT_INFO { + DWORD dwVersion; + CERT_ID RecipientId; + CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm; + CRYPT_DATA_BLOB EncryptedKey; +} CMSG_KEY_TRANS_RECIPIENT_INFO, *PCMSG_KEY_TRANS_RECIPIENT_INFO; + +typedef struct _CMSG_RECIPIENT_ENCRYPTED_KEY_INFO { + CERT_ID RecipientId; + CRYPT_DATA_BLOB EncryptedKey; + PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr; +} CMSG_RECIPIENT_ENCRYPTED_KEY_INFO, *PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO; + +typedef struct _CMSG_KEY_AGREE_RECIPIENT_INFO { + DWORD dwVersion; + DWORD dwOriginatorChoice; + union { + CERT_ID OriginatorCertId; + CERT_PUBLIC_KEY_INFO OriginatorPublicKeyInfo; + } DUMMYUNIONNAME; + CRYPT_ALGORITHM_IDENTIFIER UserKeyingMaterial; + DWORD cRecipientEncryptedKeys; + PCMSG_RECIPIENT_ENCRYPTED_KEY_INFO *rgpRecipientEncryptedKeys; +} CMSG_KEY_AGREE_RECIPIENT_INFO, *PCMSG_KEY_AGREE_RECIPIENT_INFO; + +#define CMSG_KEY_AGREE_ORIGINATOR_CERT 1 +#define CMSG_KEY_AGREE_ORIGINATOR_PUBLIC_KEY 2 + +typedef struct _CMSG_MAIL_LIST_RECIPIENT_INFO { + DWORD dwVersion; + CRYPT_DATA_BLOB KeyId; + CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm; + CRYPT_DATA_BLOB EncryptedKey; + FILETIME Date; + PCRYPT_ATTRIBUTE_TYPE_VALUE pOtherAttr; +} CMSG_MAIL_LIST_RECIPIENT_INFO, *PCMSG_MAIL_LIST_RECIPIENT_INFO; + +typedef struct _CMSG_CMS_RECIPIENT_INFO { + DWORD dwRecipientChoice; + union { + PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans; + PCMSG_KEY_AGREE_RECIPIENT_INFO pKeyAgree; + PCMSG_MAIL_LIST_RECIPIENT_INFO pMailList; + } DUMMYUNIONNAME; +} CMSG_CMS_RECIPIENT_INFO, *PCMSG_CMS_RECIPIENT_INFO; + +#define CMSG_ENVELOPED_RECIPIENT_V0 0 +#define CMSG_ENVELOPED_RECIPIENT_V2 2 +#define CMSG_ENVELOPED_RECIPIENT_V3 3 +#define CMSG_ENVELOPED_RECIPIENT_V4 4 +#define CMSG_KEY_TRANS_PKCS_1_5_VERSION CMSG_ENVELOPED_RECIPIENT_V0 +#define CMSG_KEY_TRANS_CMS_VERSION CMSG_ENVELOPED_RECIPIENT_V2 +#define CMSG_KEY_AGREE_VERSION CMSG_ENVELOPED_RECIPIENT_V3 +#define CMSG_MAIL_LIST_VERSION CMSG_ENVELOPED_RECIPIENT_V4 + +typedef void * (__WINE_ALLOC_SIZE(1) WINAPI *PFN_CMSG_ALLOC)(size_t cb); +typedef void (WINAPI *PFN_CMSG_FREE)(void *pv); + +typedef struct _CMSG_CONTENT_ENCRYPT_INFO { + DWORD cbSize; + HCRYPTPROV hCryptProv; + CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm; + void *pvEncryptionAuxInfo; + DWORD cRecipients; + PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients; + PFN_CMSG_ALLOC pfnAlloc; + PFN_CMSG_FREE pfnFree; + DWORD dwEncryptFlags; + HCRYPTKEY hContentEncryptKey; + DWORD dwFlags; +} CMSG_CONTENT_ENCRYPT_INFO, *PCMSG_CONTENT_ENCRYPT_INFO; + +typedef struct _CMSG_KEY_TRANS_ENCRYPT_INFO { + DWORD cbSize; + DWORD dwRecipientIndex; + CRYPT_ALGORITHM_IDENTIFIER KeyEncryptionAlgorithm; + CRYPT_DATA_BLOB EncryptedKey; + DWORD dwFlags; +} CMSG_KEY_TRANS_ENCRYPT_INFO, *PCMSG_KEY_TRANS_ENCRYPT_INFO; + +typedef struct _CMSG_CTRL_KEY_TRANS_DECRYPT_PARA { + DWORD cbSize; + HCRYPTPROV hCryptProv; + DWORD dwKeySpec; + PCMSG_KEY_TRANS_RECIPIENT_INFO pKeyTrans; + DWORD dwRecipientIndex; +} CMSG_CTRL_KEY_TRANS_DECRYPT_PARA, *PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA; + +typedef struct _CERT_STRONG_SIGN_SERIALIZED_INFO { + DWORD dwFlags; + WCHAR *pwszCNGSignHashAlgids; + WCHAR *pwszCNGPubKeyMinBitLengths; +} CERT_STRONG_SIGN_SERIALIZED_INFO, *PCERT_STRONG_SIGN_SERIALIZED_INFO; + +typedef struct _CERT_STRONG_SIGN_PARA { + DWORD cbSize; + DWORD dwInfoChoice; + union { + void *pvInfo; + CERT_STRONG_SIGN_SERIALIZED_INFO *pSerializedInfo; + char *pszOID; + } DUMMYUNIONNAME; +} CERT_STRONG_SIGN_PARA, *PCERT_STRONG_SIGN_PARA; + +#define CERT_STRONG_SIGN_SERIALIZED_INFO_CHOICE 1 +#define CERT_STRONG_SIGN_OID_INFO_CHOICE 2 + +#define CERT_STRONG_SIGN_ENABLE_CRL_CHECK 0x1 +#define CERT_STRONG_SIGN_ENABLE_OCSP_CHECK 0x2 + +typedef BOOL (WINAPI *PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY)( + PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, DWORD dwFlags, + void *pvReserved); + +typedef BOOL (WINAPI *PFN_CMSG_EXPORT_KEY_TRANS)( + PCMSG_CONTENT_ENCRYPT_INFO pContentEncryptInfo, + PCMSG_KEY_TRANS_RECIPIENT_ENCODE_INFO pKeyTransEncodeInfo, + PCMSG_KEY_TRANS_ENCRYPT_INFO pKeyTransEncryptInfo, + DWORD dwFlags, void *pvReserved); + +typedef BOOL (WINAPI *PFN_CMSG_IMPORT_KEY_TRANS)( + PCRYPT_ALGORITHM_IDENTIFIER pContentEncryptionAlgorithm, + PCMSG_CTRL_KEY_TRANS_DECRYPT_PARA pKeyTransDecryptPara, DWORD dwFlags, + void *pvReserved, HCRYPTKEY *phContentEncryptKey); + +/* CryptMsgGetAndVerifySigner flags */ +#define CMSG_TRUSTED_SIGNER_FLAG 0x1 +#define CMSG_SIGNER_ONLY_FLAG 0x2 +#define CMSG_USE_SIGNER_INDEX_FLAG 0x4 + +/* CryptMsgSignCTL flags */ +#define CMSG_CMS_ENCAPSULATED_CTL_FLAG 0x00008000 + +/* CryptMsgEncodeAndSignCTL flags */ +#define CMSG_ENCODED_SORTED_CTL_FLAG 0x1 +#define CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x2 + +/* PFXImportCertStore flags */ +#define CRYPT_USER_KEYSET 0x00001000 +#define PKCS12_IMPORT_SILENT 0x00000040 +#define PKCS12_PREFER_CNG_KSP 0x00000100 +#define PKCS12_ALWAYS_CNG_KSP 0x00000200 +#define PKCS12_ONLY_CERTIFICATES 0x00000400 +#define PKCS12_ONLY_NOT_ENCRYPTED_CERTIFICATES 0x00000800 +#define PKCS12_ALLOW_OVERWRITE_KEY 0x00004000 +#define PKCS12_NO_PERSIST_KEY 0x00008000 +#define PKCS12_VIRTUAL_ISOLATION_KEY 0x00010000 +#define PKCS12_IMPORT_RESERVED_MASK 0xffff0000 +/* PFXExportCertStore flags */ +#define REPORT_NO_PRIVATE_KEY 0x00000001 +#define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY 0x00000002 +#define EXPORT_PRIVATE_KEYS 0x00000004 +#define PKCS12_EXPORT_RESERVED_MASK 0xffff0000 + +#define CRYPT_USERDATA 0x00000001 + +/* function declarations */ +/* advapi32.dll */ +WINADVAPI BOOL WINAPI CryptAcquireContextA(HCRYPTPROV *, LPCSTR, LPCSTR, DWORD, DWORD); +WINADVAPI BOOL WINAPI CryptAcquireContextW (HCRYPTPROV *, LPCWSTR, LPCWSTR, DWORD, DWORD); +#define CryptAcquireContext WINELIB_NAME_AW(CryptAcquireContext) +WINADVAPI BOOL WINAPI CryptGenRandom (HCRYPTPROV, DWORD, BYTE *); +WINADVAPI BOOL WINAPI CryptContextAddRef (HCRYPTPROV, DWORD *, DWORD); +WINADVAPI BOOL WINAPI CryptCreateHash (HCRYPTPROV, ALG_ID, HCRYPTKEY, DWORD, HCRYPTHASH *); +WINADVAPI BOOL WINAPI CryptDecrypt (HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE *, DWORD *); +WINADVAPI BOOL WINAPI CryptDeriveKey (HCRYPTPROV, ALG_ID, HCRYPTHASH, DWORD, HCRYPTKEY *); +WINADVAPI BOOL WINAPI CryptDestroyHash (HCRYPTHASH); +WINADVAPI BOOL WINAPI CryptDestroyKey (HCRYPTKEY); +WINADVAPI BOOL WINAPI CryptDuplicateKey (HCRYPTKEY, DWORD *, DWORD, HCRYPTKEY *); +WINADVAPI BOOL WINAPI CryptDuplicateHash (HCRYPTHASH, DWORD *, DWORD, HCRYPTHASH *); +WINADVAPI BOOL WINAPI CryptEncrypt (HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, BYTE *, DWORD *, DWORD); +WINADVAPI BOOL WINAPI CryptEnumProvidersA (DWORD, DWORD *, DWORD, DWORD *, LPSTR, DWORD *); +WINADVAPI BOOL WINAPI CryptEnumProvidersW (DWORD, DWORD *, DWORD, DWORD *, LPWSTR, DWORD *); +#define CryptEnumProviders WINELIB_NAME_AW(CryptEnumProviders) +WINADVAPI BOOL WINAPI CryptEnumProviderTypesA (DWORD, DWORD *, DWORD, DWORD *, LPSTR, DWORD *); +WINADVAPI BOOL WINAPI CryptEnumProviderTypesW (DWORD, DWORD *, DWORD, DWORD *, LPWSTR, DWORD *); +#define CryptEnumProviderTypes WINELIB_NAME_AW(CryptEnumProviderTypes) +WINADVAPI BOOL WINAPI CryptExportKey (HCRYPTKEY, HCRYPTKEY, DWORD, DWORD, BYTE *, DWORD *); +WINADVAPI BOOL WINAPI CryptGenKey (HCRYPTPROV, ALG_ID, DWORD, HCRYPTKEY *); +WINADVAPI BOOL WINAPI CryptGetKeyParam (HCRYPTKEY, DWORD, BYTE *, DWORD *, DWORD); +WINADVAPI BOOL WINAPI CryptGetHashParam (HCRYPTHASH, DWORD, BYTE *, DWORD *, DWORD); +WINADVAPI BOOL WINAPI CryptGetProvParam (HCRYPTPROV, DWORD, BYTE *, DWORD *, DWORD); +WINADVAPI BOOL WINAPI CryptGetDefaultProviderA (DWORD, DWORD *, DWORD, LPSTR, DWORD *); +WINADVAPI BOOL WINAPI CryptGetDefaultProviderW (DWORD, DWORD *, DWORD, LPWSTR, DWORD *); +#define CryptGetDefaultProvider WINELIB_NAME_AW(CryptGetDefaultProvider) +WINADVAPI BOOL WINAPI CryptGetUserKey (HCRYPTPROV, DWORD, HCRYPTKEY *); +WINADVAPI BOOL WINAPI CryptHashData (HCRYPTHASH, const BYTE *, DWORD, DWORD); +WINADVAPI BOOL WINAPI CryptHashSessionKey (HCRYPTHASH, HCRYPTKEY, DWORD); +WINADVAPI BOOL WINAPI CryptImportKey (HCRYPTPROV, const BYTE *, DWORD, HCRYPTKEY, DWORD, HCRYPTKEY *); +WINADVAPI BOOL WINAPI CryptReleaseContext (HCRYPTPROV, DWORD); +WINADVAPI BOOL WINAPI CryptSetHashParam (HCRYPTHASH, DWORD, const BYTE *, DWORD); +WINADVAPI BOOL WINAPI CryptSetKeyParam (HCRYPTKEY, DWORD, const BYTE *, DWORD); +WINADVAPI BOOL WINAPI CryptSetProviderA (LPCSTR, DWORD); +WINADVAPI BOOL WINAPI CryptSetProviderW (LPCWSTR, DWORD); +#define CryptSetProvider WINELIB_NAME_AW(CryptSetProvider) +WINADVAPI BOOL WINAPI CryptSetProviderExA (LPCSTR, DWORD, DWORD *, DWORD); +WINADVAPI BOOL WINAPI CryptSetProviderExW (LPCWSTR, DWORD, DWORD *, DWORD); +#define CryptSetProviderEx WINELIB_NAME_AW(CryptSetProviderEx) +WINADVAPI BOOL WINAPI CryptSetProvParam (HCRYPTPROV, DWORD, const BYTE *, DWORD); +WINADVAPI BOOL WINAPI CryptSignHashA (HCRYPTHASH, DWORD, LPCSTR, DWORD, BYTE *, DWORD *); +WINADVAPI BOOL WINAPI CryptSignHashW (HCRYPTHASH, DWORD, LPCWSTR, DWORD, BYTE *, DWORD *); +#define CryptSignHash WINELIB_NAME_AW(CryptSignHash) +WINADVAPI BOOL WINAPI CryptVerifySignatureA (HCRYPTHASH, const BYTE *, DWORD, HCRYPTKEY, LPCSTR, DWORD); +WINADVAPI BOOL WINAPI CryptVerifySignatureW (HCRYPTHASH, const BYTE *, DWORD, HCRYPTKEY, LPCWSTR, DWORD); +#define CryptVerifySignature WINELIB_NAME_AW(CryptVerifySignature) + +/* crypt32.dll functions */ +WINCRYPT32API VOID WINAPI CryptMemFree(LPVOID pv); +WINCRYPT32API LPVOID WINAPI CryptMemAlloc(ULONG cbSize) __WINE_ALLOC_SIZE(1) __WINE_DEALLOC(CryptMemFree) __WINE_MALLOC; +WINCRYPT32API LPVOID WINAPI CryptMemRealloc(LPVOID pv, ULONG cbSize) __WINE_ALLOC_SIZE(2) __WINE_DEALLOC(CryptMemFree); + +WINCRYPT32API BOOL WINAPI CryptBinaryToStringA(const BYTE *pbBinary, + DWORD cbBinary, DWORD dwFlags, LPSTR pszString, DWORD *pcchString); +WINCRYPT32API BOOL WINAPI CryptBinaryToStringW(const BYTE *pbBinary, + DWORD cbBinary, DWORD dwFlags, LPWSTR pszString, DWORD *pcchString); +#define CryptBinaryToString WINELIB_NAME_AW(CryptBinaryToString) + +WINCRYPT32API BOOL WINAPI CryptStringToBinaryA(LPCSTR pszString, + DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary, + DWORD *pdwSkip, DWORD *pdwFlags); +WINCRYPT32API BOOL WINAPI CryptStringToBinaryW(LPCWSTR pszString, + DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary, + DWORD *pdwSkip, DWORD *pdwFlags); +#define CryptStringToBinary WINELIB_NAME_AW(CryptStringToBinary) + +WINCRYPT32API BOOL WINAPI CryptCreateAsyncHandle(DWORD dwFlags, PHCRYPTASYNC phAsync); +WINCRYPT32API BOOL WINAPI CryptSetAsyncParam(HCRYPTASYNC hAsync, LPSTR pszParamOid, + LPVOID pvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC pfnFree); +WINCRYPT32API BOOL WINAPI CryptGetAsyncParam(HCRYPTASYNC hAsync, LPSTR pszParamOid, + LPVOID *ppvParam, PFN_CRYPT_ASYNC_PARAM_FREE_FUNC *ppfnFree); +WINCRYPT32API BOOL WINAPI CryptCloseAsyncHandle(HCRYPTASYNC hAsync); + +WINCRYPT32API BOOL WINAPI CryptRegisterDefaultOIDFunction(DWORD,LPCSTR,DWORD,LPCWSTR); +WINCRYPT32API BOOL WINAPI CryptRegisterOIDFunction(DWORD,LPCSTR,LPCSTR,LPCWSTR,LPCSTR); +WINCRYPT32API BOOL WINAPI CryptGetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName, + LPCSTR pszOID, LPCWSTR szValueName, DWORD *pdwValueType, + BYTE *pbValueData, DWORD *pcbValueData); +WINCRYPT32API BOOL WINAPI CryptSetOIDFunctionValue(DWORD dwEncodingType, LPCSTR pszFuncName, + LPCSTR pszOID, LPCWSTR pwszValueName, DWORD dwValueType, + const BYTE *pbValueData, DWORD cbValueData); +WINCRYPT32API BOOL WINAPI CryptUnregisterDefaultOIDFunction(DWORD,LPCSTR,LPCWSTR); +WINCRYPT32API BOOL WINAPI CryptUnregisterOIDFunction(DWORD,LPCSTR,LPCSTR); +WINCRYPT32API BOOL WINAPI CryptEnumOIDFunction(DWORD dwEncodingType, LPCSTR pszFuncName, + LPCSTR pszOID, DWORD dwFlags, void *pvArg, + PFN_CRYPT_ENUM_OID_FUNC pfnEnumOIDFunc); +WINCRYPT32API HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR,DWORD); +WINCRYPT32API BOOL WINAPI CryptGetDefaultOIDDllList(HCRYPTOIDFUNCSET hFuncSet, + DWORD dwEncodingType, LPWSTR pwszDllList, DWORD *pcchDllList); +WINCRYPT32API BOOL WINAPI CryptGetDefaultOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet, + DWORD dwEncodingType, LPCWSTR pwszDll, DWORD dwFlags, void **ppvFuncAddr, + HCRYPTOIDFUNCADDR *phFuncAddr); +WINCRYPT32API BOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet, + DWORD dwEncodingType, LPCSTR pszOID, DWORD dwFlags, void **ppvFuncAddr, + HCRYPTOIDFUNCADDR *phFuncAddr); +WINCRYPT32API BOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr, + DWORD dwFlags); +WINCRYPT32API BOOL WINAPI CryptInstallOIDFunctionAddress(HMODULE hModule, + DWORD dwEncodingType, LPCSTR pszFuncName, DWORD cFuncEntry, + const CRYPT_OID_FUNC_ENTRY rgFuncEntry[], DWORD dwFlags); +WINCRYPT32API BOOL WINAPI CryptInstallDefaultContext(HCRYPTPROV hCryptProv, + DWORD dwDefaultType, const void *pvDefaultPara, DWORD dwFlags, + void *pvReserved, HCRYPTDEFAULTCONTEXT *phDefaultContext); +WINCRYPT32API BOOL WINAPI CryptUninstallDefaultContext(HCRYPTDEFAULTCONTEXT hDefaultContext, + DWORD dwFlags, void *pvReserved); + +WINCRYPT32API BOOL WINAPI CryptEnumOIDInfo(DWORD dwGroupId, DWORD dwFlags, void *pvArg, + PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo); +WINCRYPT32API PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey, + DWORD dwGroupId); +WINCRYPT32API BOOL WINAPI CryptRegisterOIDInfo(PCCRYPT_OID_INFO pInfo, DWORD dwFlags); +WINCRYPT32API BOOL WINAPI CryptUnregisterOIDInfo(PCCRYPT_OID_INFO pInfo); + +WINCRYPT32API LPCWSTR WINAPI CryptFindLocalizedName(LPCWSTR pwszCryptName); + +WINCRYPT32API LPCSTR WINAPI CertAlgIdToOID(DWORD dwAlgId); +WINCRYPT32API DWORD WINAPI CertOIDToAlgId(LPCSTR pszObjId); + +/* cert store functions */ +WINCRYPT32API HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwEncodingType, + HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara); + +WINCRYPT32API HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV_LEGACY hProv, + LPCSTR szSubSystemProtocol); +WINCRYPT32API HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV_LEGACY hProv, + LPCWSTR szSubSystemProtocol); +#define CertOpenSystemStore WINELIB_NAME_AW(CertOpenSystemStore) + +WINCRYPT32API PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore, + PCCERT_CONTEXT pPrev); + +WINCRYPT32API PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore, + PCCRL_CONTEXT pPrev); + +WINCRYPT32API PCCTL_CONTEXT WINAPI CertEnumCTLsInStore(HCERTSTORE hCertStore, + PCCTL_CONTEXT pPrev); + +WINCRYPT32API BOOL WINAPI CertEnumSystemStoreLocation(DWORD dwFlags, void *pvArg, + PFN_CERT_ENUM_SYSTEM_STORE_LOCATION pfnEnum); + +WINCRYPT32API BOOL WINAPI CertEnumSystemStore(DWORD dwFlags, void *pvSystemStoreLocationPara, + void *pvArg, PFN_CERT_ENUM_SYSTEM_STORE pfnEnum); + +WINCRYPT32API BOOL WINAPI CertRegisterSystemStore(const void *store, DWORD flags, + CERT_SYSTEM_STORE_INFO *info, void *reserved); + +WINCRYPT32API BOOL WINAPI CertUnregisterSystemStore(const void *store, DWORD flags); + +WINCRYPT32API BOOL WINAPI CertEnumPhysicalStore(const void *pvSystemStore, DWORD dwFlags, + void *pvArg, PFN_CERT_ENUM_PHYSICAL_STORE pfnEnum); + +WINCRYPT32API BOOL WINAPI CertRegisterPhysicalStore(const void *pvSystemStore, DWORD dwFlags, + LPCWSTR pwszStoreName, PCERT_PHYSICAL_STORE_INFO pStoreInfo, void *pvReserved); + +WINCRYPT32API BOOL WINAPI CertUnregisterPhysicalStore(const void *pvSystemStore, DWORD dwFlags, + LPCWSTR pwszStoreName); + +WINCRYPT32API BOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType, + DWORD dwSaveAs, DWORD dwSaveTo, void* pvSaveToPara, DWORD dwFlags); + +WINCRYPT32API BOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore, + HCERTSTORE hSiblingStore, DWORD dwUpdateFlags, DWORD dwPriority); + +WINCRYPT32API void WINAPI CertRemoveStoreFromCollection(HCERTSTORE hCollectionStore, + HCERTSTORE hSiblingStore); + +WINCRYPT32API BOOL WINAPI CertCreateCertificateChainEngine(PCERT_CHAIN_ENGINE_CONFIG pConfig, + HCERTCHAINENGINE *phChainEngine); + +WINCRYPT32API BOOL WINAPI CertResyncCertificateChainEngine(HCERTCHAINENGINE hChainEngine); + +WINCRYPT32API VOID WINAPI CertFreeCertificateChainEngine(HCERTCHAINENGINE hChainEngine); + +WINCRYPT32API BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine, + PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore, + PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved, + PCCERT_CHAIN_CONTEXT *ppChainContext); + +WINCRYPT32API PCCERT_CHAIN_CONTEXT WINAPI CertDuplicateCertificateChain( + PCCERT_CHAIN_CONTEXT pChainContext); + +WINCRYPT32API VOID WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext); + +WINCRYPT32API PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE hCertStore, + DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, + const void *pvFindPara, PCCERT_CHAIN_CONTEXT pPrevChainContext); + +WINCRYPT32API BOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR szPolicyOID, + PCCERT_CHAIN_CONTEXT pChainContext, PCERT_CHAIN_POLICY_PARA pPolicyPara, + PCERT_CHAIN_POLICY_STATUS pPolicyStatus); + +WINCRYPT32API DWORD WINAPI CertEnumCertificateContextProperties(PCCERT_CONTEXT pCertContext, + DWORD dwPropId); + +WINCRYPT32API BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext, + DWORD dwPropId, void *pvData, DWORD *pcbData); + +WINCRYPT32API BOOL WINAPI CertSetCertificateContextProperty(PCCERT_CONTEXT pCertContext, + DWORD dwPropId, DWORD dwFlags, const void *pvData); + +WINCRYPT32API DWORD WINAPI CertEnumCRLContextProperties(PCCRL_CONTEXT pCRLContext, + DWORD dwPropId); + +WINCRYPT32API BOOL WINAPI CertGetCRLContextProperty(PCCRL_CONTEXT pCRLContext, + DWORD dwPropId, void *pvData, DWORD *pcbData); + +WINCRYPT32API BOOL WINAPI CertSetCRLContextProperty(PCCRL_CONTEXT pCRLContext, + DWORD dwPropId, DWORD dwFlags, const void *pvData); + +WINCRYPT32API DWORD WINAPI CertEnumCTLContextProperties(PCCTL_CONTEXT pCTLContext, + DWORD dwPropId); + +WINCRYPT32API BOOL WINAPI CertEnumSubjectInSortedCTL(PCCTL_CONTEXT pCTLContext, + void **ppvNextSubject, PCRYPT_DER_BLOB pSubjectIdentifier, + PCRYPT_DER_BLOB pEncodedAttributes); + +WINCRYPT32API BOOL WINAPI CertGetCTLContextProperty(PCCTL_CONTEXT pCTLContext, + DWORD dwPropId, void *pvData, DWORD *pcbData); + +WINCRYPT32API BOOL WINAPI CertSetCTLContextProperty(PCCTL_CONTEXT pCTLContext, + DWORD dwPropId, DWORD dwFlags, const void *pvData); + +WINCRYPT32API BOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId, + void *pvData, DWORD *pcbData); + +WINCRYPT32API BOOL WINAPI CertSetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId, + DWORD dwFlags, const void *pvData); + +WINCRYPT32API BOOL WINAPI CertControlStore(HCERTSTORE hCertStore, DWORD dwFlags, + DWORD dwCtrlType, void const *pvCtrlPara); + +WINCRYPT32API HCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE hCertStore); + +WINCRYPT32API BOOL WINAPI CertCloseStore( HCERTSTORE hCertStore, DWORD dwFlags ); + +WINCRYPT32API BOOL WINAPI CertFreeCertificateContext( PCCERT_CONTEXT pCertContext ); + +WINCRYPT32API BOOL WINAPI CertFreeCRLContext( PCCRL_CONTEXT pCrlContext ); + +WINCRYPT32API BOOL WINAPI CertFreeCTLContext( PCCTL_CONTEXT pCtlContext ); + +WINCRYPT32API BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore, + PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, + PCCERT_CONTEXT *ppStoreContext); + +WINCRYPT32API BOOL WINAPI CertAddCRLContextToStore( HCERTSTORE hCertStore, + PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition, + PCCRL_CONTEXT *ppStoreContext ); + +WINCRYPT32API BOOL WINAPI CertAddCTLContextToStore( HCERTSTORE hCertStore, + PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition, + PCCTL_CONTEXT *ppStoreContext ); + +WINCRYPT32API BOOL WINAPI CertAddCertificateLinkToStore(HCERTSTORE hCertStore, + PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, + PCCERT_CONTEXT *ppStoreContext); + +WINCRYPT32API BOOL WINAPI CertAddCRLLinkToStore(HCERTSTORE hCertStore, + PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition, + PCCRL_CONTEXT *ppStoreContext); + +WINCRYPT32API BOOL WINAPI CertAddCTLLinkToStore(HCERTSTORE hCertStore, + PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition, + PCCTL_CONTEXT *ppStoreContext); + +WINCRYPT32API BOOL WINAPI CertAddEncodedCertificateToStore(HCERTSTORE hCertStore, + DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded, + DWORD dwAddDisposition, PCCERT_CONTEXT *ppCertContext); + +WINCRYPT32API BOOL WINAPI CertAddEncodedCertificateToSystemStoreA(LPCSTR pszCertStoreName, + const BYTE *pbCertEncoded, DWORD cbCertEncoded); +WINCRYPT32API BOOL WINAPI CertAddEncodedCertificateToSystemStoreW(LPCWSTR pszCertStoreName, + const BYTE *pbCertEncoded, DWORD cbCertEncoded); +#define CertAddEncodedCertificateToSystemStore \ + WINELIB_NAME_AW(CertAddEncodedCertificateToSystemStore) + +WINCRYPT32API BOOL WINAPI CertAddEncodedCRLToStore(HCERTSTORE hCertStore, + DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded, + DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext); + +WINCRYPT32API BOOL WINAPI CertAddEncodedCTLToStore(HCERTSTORE hCertStore, + DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded, + DWORD dwAddDisposition, PCCTL_CONTEXT *ppCtlContext); + +WINCRYPT32API BOOL WINAPI CertAddSerializedElementToStore(HCERTSTORE hCertStore, + const BYTE *pbElement, DWORD cbElement, DWORD dwAddDisposition, DWORD dwFlags, + DWORD dwContextTypeFlags, DWORD *pdwContentType, const void **ppvContext); + +WINCRYPT32API BOOL WINAPI CertCompareCertificate(DWORD dwCertEncodingType, + PCERT_INFO pCertId1, PCERT_INFO pCertId2); +WINCRYPT32API BOOL WINAPI CertCompareCertificateName(DWORD dwCertEncodingType, + PCERT_NAME_BLOB pCertName1, PCERT_NAME_BLOB pCertName2); +WINCRYPT32API BOOL WINAPI CertCompareIntegerBlob(PCRYPT_INTEGER_BLOB pInt1, + PCRYPT_INTEGER_BLOB pInt2); +WINCRYPT32API BOOL WINAPI CertComparePublicKeyInfo(DWORD dwCertEncodingType, + PCERT_PUBLIC_KEY_INFO pPublicKey1, PCERT_PUBLIC_KEY_INFO pPublicKey2); +WINCRYPT32API DWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType, + PCERT_PUBLIC_KEY_INFO pPublicKey); + +WINCRYPT32API const void * WINAPI CertCreateContext(DWORD dwContextType, DWORD dwEncodingType, + const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, + PCERT_CREATE_CONTEXT_PARA pCreatePara); + +WINCRYPT32API PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType, + const BYTE *pbCertEncoded, DWORD cbCertEncoded); + +WINCRYPT32API PCCRL_CONTEXT WINAPI CertCreateCRLContext( DWORD dwCertEncodingType, + const BYTE* pbCrlEncoded, DWORD cbCrlEncoded); + +WINCRYPT32API PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType, + const BYTE *pbCtlEncoded, DWORD cbCtlEncoded); + +WINCRYPT32API PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hProv, + PCERT_NAME_BLOB pSubjectIssuerBlob, DWORD dwFlags, + PCRYPT_KEY_PROV_INFO pKeyProvInfo, + PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, PSYSTEMTIME pStartTime, + PSYSTEMTIME pEndTime, PCERT_EXTENSIONS pExtensions); + +WINCRYPT32API BOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT pCertContext); + +WINCRYPT32API BOOL WINAPI CertDeleteCRLFromStore(PCCRL_CONTEXT pCrlContext); + +WINCRYPT32API BOOL WINAPI CertDeleteCTLFromStore(PCCTL_CONTEXT pCtlContext); + +WINCRYPT32API PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext( + PCCERT_CONTEXT pCertContext); + +WINCRYPT32API PCCRL_CONTEXT WINAPI CertDuplicateCRLContext(PCCRL_CONTEXT pCrlContext); + +WINCRYPT32API PCCTL_CONTEXT WINAPI CertDuplicateCTLContext(PCCTL_CONTEXT pCtlContext); + +WINCRYPT32API PCCERT_CONTEXT WINAPI CertFindCertificateInStore( HCERTSTORE hCertStore, + DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, + const void *pvFindPara, PCCERT_CONTEXT pPrevCertContext ); + +WINCRYPT32API PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore, + DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, + const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext); + +WINCRYPT32API PCCTL_CONTEXT WINAPI CertFindCTLInStore(HCERTSTORE hCertStore, + DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, + const void *pvFindPara, PCCTL_CONTEXT pPrevCtlContext); + +WINCRYPT32API PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE hCertStore, + PCCERT_CONTEXT pSubjectContext, PCCERT_CONTEXT pPrevIssuerContext, + DWORD *pdwFlags); + +WINCRYPT32API PCCERT_CONTEXT WINAPI CertGetSubjectCertificateFromStore(HCERTSTORE hCertStore, + DWORD dwCertEncodingType, PCERT_INFO pCertId); + +WINCRYPT32API PCCRL_CONTEXT WINAPI CertGetCRLFromStore(HCERTSTORE hCertStore, + PCCERT_CONTEXT pIssuerContext, PCCRL_CONTEXT pPrevCrlContext, DWORD *pdwFlags); + +WINCRYPT32API BOOL WINAPI CertSerializeCertificateStoreElement(PCCERT_CONTEXT pCertContext, + DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement); + +WINCRYPT32API BOOL WINAPI CertSerializeCRLStoreElement(PCCRL_CONTEXT pCrlContext, + DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement); + +WINCRYPT32API BOOL WINAPI CertSerializeCTLStoreElement(PCCTL_CONTEXT pCtlContext, + DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement); + +WINCRYPT32API BOOL WINAPI CertGetIntendedKeyUsage(DWORD dwCertEncodingType, + PCERT_INFO pCertInfo, BYTE *pbKeyUsage, DWORD cbKeyUsage); + +WINCRYPT32API BOOL WINAPI CertGetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext, DWORD dwFlags, + PCERT_ENHKEY_USAGE pUsage, DWORD *pcbUsage); +WINCRYPT32API BOOL WINAPI CertSetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext, + PCERT_ENHKEY_USAGE pUsage); +WINCRYPT32API BOOL WINAPI CertAddEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext, + LPCSTR pszUsageIdentifier); +WINCRYPT32API BOOL WINAPI CertRemoveEnhancedKeyUsageIdentifier(PCCERT_CONTEXT pCertContext, + LPCSTR pszUsageIdentifier); +WINCRYPT32API BOOL WINAPI CertGetValidUsages(DWORD cCerts, PCCERT_CONTEXT *rghCerts, + int *cNumOIDs, LPSTR *rghOIDs, DWORD *pcbOIDs); + +WINCRYPT32API BOOL WINAPI CryptEncodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType, + const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded); +WINCRYPT32API BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, + const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, + void *pvEncoded, DWORD *pcbEncoded); + +WINCRYPT32API BOOL WINAPI CryptDecodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType, + const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, + DWORD *pcbStructInfo); +WINCRYPT32API BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, + const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, + PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo); + +WINCRYPT32API BOOL WINAPI CryptFormatObject(DWORD dwCertEncodingType, DWORD dwFormatType, + DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, + const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat); + +WINCRYPT32API BOOL WINAPI CryptHashCertificate(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid, + DWORD dwFlags, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, + DWORD *pcbComputedHash); + +WINCRYPT32API BOOL WINAPI CryptHashCertificate2(LPCWSTR pwszCNGHashAlgid, DWORD dwFlags, + void *pvReserved, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, + DWORD *pcbComputedHash); + +WINCRYPT32API BOOL WINAPI CryptHashPublicKeyInfo(HCRYPTPROV_LEGACY hCryptProv, ALG_ID Algid, + DWORD dwFlags, DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, + BYTE *pbComputedHash, DWORD *pcbComputedHash); + +WINCRYPT32API BOOL WINAPI CryptHashToBeSigned(HCRYPTPROV_LEGACY hCryptProv, DWORD dwCertEncodingType, + const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, + DWORD *pcbComputedHash); + +WINCRYPT32API BOOL WINAPI CryptQueryObject(DWORD dwObjectType, const void* pvObject, + DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags, + DWORD dwFlags, DWORD* pdwMsgAndCertEncodingType, DWORD* pdwContentType, + DWORD* pdwFormatType, HCERTSTORE* phCertStore, HCRYPTMSG* phMsg, + const void** ppvContext); + +WINCRYPT32API BOOL WINAPI CryptSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec, + DWORD dwCertEncodingType, const BYTE *pbEncodedToBeSigned, + DWORD cbEncodedToBeSigned, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, + const void *pvHashAuxInfo, BYTE *pbSignature, DWORD *pcbSignature); + +WINCRYPT32API BOOL WINAPI CryptSignAndEncodeCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, + DWORD dwKeySpec, DWORD dwCertEncodingType, LPCSTR lpszStructType, + const void *pvStructInfo, PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm, + const void *pvHashAuxInfo, BYTE *pbEncoded, DWORD *pcbEncoded); + +WINCRYPT32API BOOL WINAPI CryptVerifyCertificateSignature(HCRYPTPROV_LEGACY hCryptProv, + DWORD dwCertEncodingType, const BYTE *pbEncoded, DWORD cbEncoded, + PCERT_PUBLIC_KEY_INFO pPublicKey); + +WINCRYPT32API BOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv, + DWORD dwCertEncodingType, DWORD dwSubjectType, void *pvSubject, + DWORD dwIssuerType, void *pvIssuer, DWORD dwFlags, void *pvReserved); + +WINCRYPT32API PCRYPT_ATTRIBUTE WINAPI CertFindAttribute(LPCSTR pszObjId, DWORD cAttr, + CRYPT_ATTRIBUTE rgAttr[]); +WINCRYPT32API PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId, DWORD cExtensions, + CERT_EXTENSION rgExtensions[]); +WINCRYPT32API PCERT_RDN_ATTR WINAPI CertFindRDNAttr(LPCSTR pszObjId, PCERT_NAME_INFO pName); + +WINCRYPT32API BOOL WINAPI CertFindSubjectInSortedCTL(PCRYPT_DATA_BLOB pSubjectIdentifier, + PCCTL_CONTEXT pCtlContext, DWORD dwFlags, void *pvReserved, + PCRYPT_DER_BLOB pEncodedAttributes); + +WINCRYPT32API BOOL WINAPI CertIsRDNAttrsInCertificateName(DWORD dwCertEncodingType, + DWORD dwFlags, PCERT_NAME_BLOB pCertName, PCERT_RDN pRDN); + +WINCRYPT32API BOOL WINAPI CertIsValidCRLForCertificate(PCCERT_CONTEXT pCert, + PCCRL_CONTEXT pCrl, DWORD dwFlags, void *pvReserved); +WINCRYPT32API BOOL WINAPI CertFindCertificateInCRL(PCCERT_CONTEXT pCert, + PCCRL_CONTEXT pCrlContext, DWORD dwFlags, void *pvReserved, + PCRL_ENTRY *ppCrlEntry); +WINCRYPT32API BOOL WINAPI CertVerifyCRLRevocation(DWORD dwCertEncodingType, + PCERT_INFO pCertId, DWORD cCrlInfo, PCRL_INFO rgpCrlInfo[]); + +WINCRYPT32API BOOL WINAPI CertVerifySubjectCertificateContext(PCCERT_CONTEXT pSubject, + PCCERT_CONTEXT pIssuer, DWORD *pdwFlags); + +WINCRYPT32API LONG WINAPI CertVerifyCRLTimeValidity(LPFILETIME pTimeToVerify, + PCRL_INFO pCrlInfo); +WINCRYPT32API LONG WINAPI CertVerifyTimeValidity(LPFILETIME pTimeToVerify, + PCERT_INFO pCertInfo); +WINCRYPT32API BOOL WINAPI CertVerifyValidityNesting(PCERT_INFO pSubjectInfo, + PCERT_INFO pIssuerInfo); + +WINCRYPT32API BOOL WINAPI CertVerifyCTLUsage(DWORD dwEncodingType, DWORD dwSubjectType, + void *pvSubject, PCTL_USAGE pSubjectUsage, DWORD dwFlags, + PCTL_VERIFY_USAGE_PARA pVerifyUsagePara, + PCTL_VERIFY_USAGE_STATUS pVerifyUsageStatus); + +WINCRYPT32API BOOL WINAPI CertVerifyRevocation(DWORD dwEncodingType, DWORD dwRevType, + DWORD cContext, PVOID rgpvContext[], DWORD dwFlags, + PCERT_REVOCATION_PARA pRevPara, PCERT_REVOCATION_STATUS pRevStatus); + +WINCRYPT32API BOOL WINAPI CryptExportPublicKeyInfo(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec, + DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo); +WINCRYPT32API BOOL WINAPI CryptExportPublicKeyInfoEx(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec, + DWORD dwCertEncodingType, LPSTR pszPublicKeyObjId, DWORD dwFlags, + void *pvAuxInfo, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo); +WINCRYPT32API BOOL WINAPI CryptImportPublicKeyInfo(HCRYPTPROV hCryptProv, + DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, HCRYPTKEY *phKey); +WINCRYPT32API BOOL WINAPI CryptImportPublicKeyInfoEx(HCRYPTPROV hCryptProv, + DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, ALG_ID aiKeyAlg, + DWORD dwFlags, void *pvAuxInfo, HCRYPTKEY *phKey); +WINCRYPT32API BOOL WINAPI CryptImportPublicKeyInfoEx2(DWORD dwCertEncodingType, + PCERT_PUBLIC_KEY_INFO pInfo, DWORD dwFlags, void *pvAuxInfo, + BCRYPT_KEY_HANDLE *phKey); + +WINCRYPT32API BOOL WINAPI CryptAcquireCertificatePrivateKey(PCCERT_CONTEXT pCert, + DWORD dwFlags, void *pvReserved, HCRYPTPROV_OR_NCRYPT_KEY_HANDLE *phCryptProv, DWORD *pdwKeySpec, + BOOL *pfCallerFreeProv); + +WINCRYPT32API BOOL WINAPI CryptFindCertificateKeyProvInfo(PCCERT_CONTEXT pCert, + DWORD dwFlags, void *pvReserved); + +WINCRYPT32API BOOL WINAPI CryptProtectData( DATA_BLOB* pDataIn, LPCWSTR szDataDescr, + DATA_BLOB* pOptionalEntropy, PVOID pvReserved, + CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut ); + +WINCRYPT32API BOOL WINAPI CryptUnprotectData( DATA_BLOB* pDataIn, LPWSTR* ppszDataDescr, + DATA_BLOB* pOptionalEntropy, PVOID pvReserved, + CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut ); + +WINCRYPT32API BOOL WINAPI CryptProtectMemory(void *pData, DWORD cbData, DWORD dwFlags); +WINCRYPT32API BOOL WINAPI CryptUnprotectMemory(void *pData, DWORD cbData, DWORD dwFlags); + +WINCRYPT32API DWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT pCertContext, DWORD dwType, + DWORD dwFlags, void *pvTypePara, LPSTR pszNameString, DWORD cchNameString); +WINCRYPT32API DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType, + DWORD dwFlags, void *pvTypePara, LPWSTR pszNameString, DWORD cchNameString); +#define CertGetNameString WINELIB_NAME_AW(CertGetNameString) + +WINCRYPT32API DWORD WINAPI CertRDNValueToStrA(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, + LPSTR psz, DWORD csz); +WINCRYPT32API DWORD WINAPI CertRDNValueToStrW(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, + LPWSTR psz, DWORD csz); +#define CertRDNValueToStr WINELIB_NAME_AW(CertRDNValueToStr) + +WINCRYPT32API DWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, + DWORD dwStrType, LPSTR psz, DWORD csz); +WINCRYPT32API DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, + DWORD dwStrType, LPWSTR psz, DWORD csz); +#define CertNameToStr WINELIB_NAME_AW(CertNameToStr) + +WINCRYPT32API BOOL WINAPI CertStrToNameA(DWORD dwCertEncodingType, LPCSTR pszX500, + DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded, + LPCSTR *ppszError); +WINCRYPT32API BOOL WINAPI CertStrToNameW(DWORD dwCertEncodingType, LPCWSTR pszX500, + DWORD dwStrType, void *pvReserved, BYTE *pbEncoded, DWORD *pcbEncoded, + LPCWSTR *ppszError); +#define CertStrToName WINELIB_NAME_AW(CertStrToName) + +WINCRYPT32API DWORD WINAPI CryptMsgCalculateEncodedLength(DWORD dwMsgEncodingType, + DWORD dwFlags, DWORD dwMsgType, const void *pvMsgEncodeInfo, + LPSTR pszInnerContentObjID, DWORD cbData); + +WINCRYPT32API BOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg); + +WINCRYPT32API BOOL WINAPI CryptMsgControl(HCRYPTMSG hCryptMsg, DWORD dwFlags, + DWORD dwCtrlType, const void *pvCtrlPara); + +WINCRYPT32API BOOL WINAPI CryptMsgCountersign(HCRYPTMSG hCryptMsg, DWORD dwIndex, + DWORD dwCountersigners, PCMSG_SIGNER_ENCODE_INFO rgCountersigners); + +WINCRYPT32API BOOL WINAPI CryptMsgCountersignEncoded(DWORD dwEncodingType, PBYTE pbSignerInfo, + DWORD cbSignerInfo, DWORD cCountersigners, + PCMSG_SIGNER_ENCODE_INFO rgCountersigners, PBYTE pbCountersignature, + PDWORD pcbCountersignature); + +WINCRYPT32API HCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg); + +WINCRYPT32API BOOL WINAPI CryptMsgEncodeAndSignCTL(DWORD dwMsgEncodingType, + PCTL_INFO pCtlInfo, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags, + BYTE *pbEncoded, DWORD *pcbEncoded); + +WINCRYPT32API BOOL WINAPI CryptMsgGetAndVerifySigner(HCRYPTMSG hCryptMsg, DWORD cSignerStore, + HCERTSTORE *rghSignerStore, DWORD dwFlags, PCCERT_CONTEXT *ppSigner, + DWORD *pdwSignerIndex); + +WINCRYPT32API BOOL WINAPI CryptMsgGetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType, + DWORD dwIndex, void *pvData, DWORD *pcbData); + +WINCRYPT32API HCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType, DWORD dwFlags, + DWORD dwMsgType, HCRYPTPROV_LEGACY hCryptProv, PCERT_INFO pRecipientInfo, + PCMSG_STREAM_INFO pStreamInfo); + +WINCRYPT32API HCRYPTMSG WINAPI CryptMsgOpenToEncode(DWORD dwMsgEncodingType, DWORD dwFlags, + DWORD dwMsgType, const void *pvMsgEncodeInfo, LPSTR pszInnerContentObjID, + PCMSG_STREAM_INFO pStreamInfo); + +WINCRYPT32API BOOL WINAPI CryptMsgSignCTL(DWORD dwMsgEncodingType, BYTE *pbCtlContent, + DWORD cbCtlContent, PCMSG_SIGNED_ENCODE_INFO pSignInfo, DWORD dwFlags, + BYTE *pbEncoded, DWORD *pcbEncoded); + +WINCRYPT32API BOOL WINAPI CryptMsgUpdate(HCRYPTMSG hCryptMsg, const BYTE *pbData, + DWORD cbData, BOOL fFinal); + +WINCRYPT32API BOOL WINAPI CryptMsgVerifyCountersignatureEncoded(HCRYPTPROV_LEGACY hCryptProv, + DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo, + PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature, + PCERT_INFO pciCountersigner); + +WINCRYPT32API BOOL WINAPI CryptMsgVerifyCountersignatureEncodedEx(HCRYPTPROV_LEGACY hCryptProv, + DWORD dwEncodingType, PBYTE pbSignerInfo, DWORD cbSignerInfo, + PBYTE pbSignerInfoCountersignature, DWORD cbSignerInfoCountersignature, + DWORD dwSignerType, void *pvSigner, DWORD dwFlags, void *pvReserved); + +WINCRYPT32API BOOL WINAPI CryptSignMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara, + BOOL fDetachedSignature, DWORD cToBeSigned, const BYTE *rgpbToBeSigned[], + DWORD rgcbToBeSigned[], BYTE *pbSignedBlob, DWORD *pcbSignedBlob); +WINCRYPT32API BOOL WINAPI CryptSignMessageWithKey(PCRYPT_KEY_SIGN_MESSAGE_PARA pSignPara, + const BYTE *pbToBeSigned, DWORD cbToBeSigned, BYTE *pbSignedBlob, + DWORD *pcbSignedBlob); + +WINCRYPT32API BOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, + DWORD dwSignerIndex, const BYTE* pbSignedBlob, DWORD cbSignedBlob, + BYTE* pbDecoded, DWORD* pcbDecoded, PCCERT_CONTEXT* ppSignerCert); +WINCRYPT32API BOOL WINAPI CryptVerifyMessageSignatureWithKey( + PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara, + PCERT_PUBLIC_KEY_INFO pPublicKeyInfo, const BYTE *pbSignedBlob, + DWORD cbSignedBlob, BYTE *pbDecoded, DWORD *pcbDecoded); + +WINCRYPT32API BOOL WINAPI CryptVerifyDetachedMessageSignature( + PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, + const BYTE *pbDetachedSignBlob, DWORD cbDetachedSignBlob, DWORD cToBeSigned, + const BYTE *rgpbToBeSigned[], DWORD rgcbToBeSigned[], + PCCERT_CONTEXT *ppSignerCert); +WINCRYPT32API LONG WINAPI CryptGetMessageSignerCount(DWORD dwMsgEncodingType, + const BYTE *pbSignedBlob, DWORD cbSignedBlob); + +WINCRYPT32API BOOL WINAPI CryptEncryptMessage(PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara, + DWORD cRecipientCert, PCCERT_CONTEXT rgpRecipientCert[], + const BYTE *pbToBeEncrypted, DWORD cbToBeEncrypted, BYTE *pbEncryptedBlob, + DWORD *pcbEncryptedBlob); +WINCRYPT32API BOOL WINAPI CryptDecryptMessage(PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara, + const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted, + DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert); + +WINCRYPT32API BOOL WINAPI CryptSignAndEncryptMessage(PCRYPT_SIGN_MESSAGE_PARA pSignPara, + PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara, DWORD cRecipientCert, + PCCERT_CONTEXT rgpRecipientCert[], const BYTE *pbToBeSignedAndEncrypted, + DWORD cbToBeSignedAndEncrypted, BYTE *pbSignedAndEncryptedBlob, + DWORD *pcbSignedAndEncryptedBlob); +WINCRYPT32API BOOL WINAPI CryptDecryptAndVerifyMessageSignature( + PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara, + PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, + const BYTE *pbEncryptedBlob, DWORD cbEncryptedBlob, BYTE *pbDecrypted, + DWORD *pcbDecrypted, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert); + +WINCRYPT32API HCERTSTORE WINAPI CryptGetMessageCertificates(DWORD dwMsgAndCertEncodingType, + HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const BYTE *pbSignedBlob, + DWORD cbSignedBlob); + +WINCRYPT32API BOOL WINAPI CryptDecodeMessage(DWORD dwMsgTypeFlags, + PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara, + PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara, DWORD dwSignerIndex, + const BYTE *pbEncodedBlob, DWORD cbEncodedBlob, DWORD dwPrevInnerContentType, + DWORD *pdwMsgType, DWORD *pdwInnerContentType, BYTE *pbDecoded, + DWORD *pcbDecoded, PCCERT_CONTEXT *ppXchgCert, PCCERT_CONTEXT *ppSignerCert); + +WINCRYPT32API BOOL WINAPI CryptHashMessage(PCRYPT_HASH_MESSAGE_PARA pHashPara, + BOOL fDetachedHash, DWORD cToBeHashed, const BYTE *rgpbToBeHashed[], + DWORD rgcbToBeHashed[], BYTE *pbHashedBlob, DWORD *pcbHashedBlob, + BYTE *pbComputedHash, DWORD *pcbComputedHash); +WINCRYPT32API BOOL WINAPI CryptVerifyMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara, + BYTE *pbHashedBlob, DWORD cbHashedBlob, BYTE *pbToBeHashed, + DWORD *pcbToBeHashed, BYTE *pbComputedHash, DWORD *pcbComputedHash); +WINCRYPT32API BOOL WINAPI CryptVerifyDetachedMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara, + BYTE *pbDetachedHashBlob, DWORD cbDetachedHashBlob, DWORD cToBeHashed, + const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbComputedHash, + DWORD *pcbComputedHash); + +/* PFX functions */ +WINCRYPT32API HCERTSTORE WINAPI PFXImportCertStore(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, + DWORD dwFlags); +WINCRYPT32API BOOL WINAPI PFXIsPFXBlob(CRYPT_DATA_BLOB *pPFX); +WINCRYPT32API BOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, + DWORD dwFlags); +WINCRYPT32API BOOL WINAPI PFXExportCertStoreEx(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX, + LPCWSTR szPassword, void *pvReserved, DWORD dwFlags); +WINCRYPT32API BOOL WINAPI PFXExportCertStore(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX, + LPCWSTR szPassword, DWORD dwFlags); + +/* cryptnet.dll functions */ +BOOL WINAPI CryptCancelAsyncRetrieval(HCRYPTASYNC hAsyncRetrieval); + +BOOL WINAPI CryptGetObjectUrl(LPCSTR pszUrlOid, LPVOID pvPara, DWORD dwFlags, + PCRYPT_URL_ARRAY pUrlArray, DWORD *pcbUrlArray, PCRYPT_URL_INFO pUrlInfo, + DWORD *pcbUrlInfo, LPVOID pvReserved); + +BOOL WINAPI CryptGetTimeValidObject(LPCSTR pszTimeValidOid, void *pvPara, + PCCERT_CONTEXT pIssuer, LPFILETIME pftValidFor, DWORD dwFlags, DWORD dwTimeout, + void **ppvObject, PCRYPT_CREDENTIALS pCredentials, void *pvReserved); + +BOOL WINAPI CryptFlushTimeValidObject(LPCSTR pszFlushTimeValidOid, void *pvPara, + PCCERT_CONTEXT pIssuer, DWORD dwFlags, void *pvReserved); + +BOOL WINAPI CryptInstallCancelRetrieval(PFN_CRYPT_CANCEL_RETRIEVAL pfnCancel, + const void *pvArg, DWORD dwFlags, void *pvReserved); + +BOOL WINAPI CryptUninstallCancelRetrieval(DWORD dwFlags, void *pvReserved); + +BOOL WINAPI CryptRetrieveObjectByUrlA(LPCSTR pszURL, LPCSTR pszObjectOid, + DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject, + HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify, + PCRYPT_RETRIEVE_AUX_INFO pAuxInfo); +BOOL WINAPI CryptRetrieveObjectByUrlW(LPCWSTR pszURL, LPCSTR pszObjectOid, + DWORD dwRetrievalFlags, DWORD dwTimeout, LPVOID *ppvObject, + HCRYPTASYNC hAsyncRetrieve, PCRYPT_CREDENTIALS pCredentials, LPVOID pvVerify, + PCRYPT_RETRIEVE_AUX_INFO pAuxInfo); +#define CryptRetrieveObjectByUrl WINELIB_NAME_AW(CryptRetrieveObjectByUrl) + +/* Not found in crypt32.dll but in softpub.dll */ +HRESULT WINAPI FindCertsByIssuer(PCERT_CHAIN pCertChains, DWORD *pcbCertChains, + DWORD *pcCertChains, BYTE* pbEncodedIssuerName, DWORD cbEncodedIssuerName, + LPCWSTR pwszPurpose, DWORD dwKeySpec); + +#ifdef __cplusplus +} +#endif + +#endif
diff --git a/mingw-w64-tools/widl/src/metadata.c b/mingw-w64-tools/widl/src/metadata.c new file mode 100644 index 0000000..4fd2039 --- /dev/null +++ b/mingw-w64-tools/widl/src/metadata.c
@@ -0,0 +1,788 @@ +/* + * Copyright 2024, 2025 Hans Leidekker for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "config.h" +#include <stdarg.h> +#include <stdio.h> + +#include "widl.h" +#include "windef.h" +#include "winbase.h" +#include "wincrypt.h" +#include "winnt.h" +#include "utils.h" +#include "typetree.h" + +static const IMAGE_DOS_HEADER dos_header = +{ + .e_magic = IMAGE_DOS_SIGNATURE, + .e_lfanew = sizeof(dos_header), +}; + +#define FILE_ALIGNMENT 0x200 +#define SECTION_ALIGNMENT 0x1000 +static IMAGE_NT_HEADERS32 nt_header = +{ + .Signature = IMAGE_NT_SIGNATURE, + .FileHeader = + { + .Machine = IMAGE_FILE_MACHINE_I386, + .NumberOfSections = 1, + .SizeOfOptionalHeader = sizeof(IMAGE_OPTIONAL_HEADER32), + .Characteristics = IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_32BIT_MACHINE | IMAGE_FILE_DLL + }, + .OptionalHeader = + { + .Magic = IMAGE_NT_OPTIONAL_HDR32_MAGIC, + .MajorLinkerVersion = 11, + .ImageBase = 0x400000, + .SectionAlignment = SECTION_ALIGNMENT, + .FileAlignment = FILE_ALIGNMENT, + .MajorOperatingSystemVersion = 6, + .MinorOperatingSystemVersion = 2, + .MajorSubsystemVersion = 6, + .MinorSubsystemVersion = 2, + .SizeOfHeaders = FILE_ALIGNMENT, + .Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI, + .DllCharacteristics = IMAGE_DLLCHARACTERISTICS_NO_SEH | IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE | + IMAGE_DLLCHARACTERISTICS_NX_COMPAT, + .SizeOfStackReserve = 0x100000, + .SizeOfHeapReserve = 0x1000, + .LoaderFlags = 0x100000, + .NumberOfRvaAndSizes = IMAGE_NUMBEROF_DIRECTORY_ENTRIES, + .DataDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR] = + { .VirtualAddress = SECTION_ALIGNMENT, .Size = sizeof(IMAGE_COR20_HEADER) } + } +}; + +static IMAGE_SECTION_HEADER section_header = +{ + .Name = ".text", + .Characteristics = IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_READ +}; + +static IMAGE_COR20_HEADER cor_header = +{ + .cb = sizeof(IMAGE_COR20_HEADER), + .MajorRuntimeVersion = 2, + .MinorRuntimeVersion = 5, + .Flags = COMIMAGE_FLAGS_ILONLY +}; + +#define METADATA_MAGIC ('B' | ('S' << 8) | ('J' << 16) | ('B' << 24)) +static struct +{ + UINT signature; + USHORT major_version; + USHORT minor_version; + UINT reserved; + UINT length; + char version[20]; + USHORT flags; + USHORT num_streams; +} +metadata_header = +{ + METADATA_MAGIC, + 1, + 1, + 0, + 20, + "WindowsRuntime 1.4" +}; + +enum +{ + STREAM_TABLE, + STREAM_STRING, + STREAM_USERSTRING, + STREAM_GUID, + STREAM_BLOB, + STREAM_MAX +}; + +static struct +{ + UINT data_offset; + UINT data_size; + char name[12]; + UINT header_size; + const BYTE *data; +} +streams[] = +{ + { 0, 0, "#~", 12 }, + { 0, 0, "#Strings", 20 }, + { 0, 0, "#US", 12 }, + { 0, 0, "#GUID", 16 }, + { 0, 0, "#Blob", 16 } +}; + +static void write_headers( UINT image_size ) +{ + static const BYTE pad[8]; + UINT i, streams_size = 0; + USHORT num_streams = 0; + + put_data( &dos_header, sizeof(dos_header) ); + + image_size += nt_header.OptionalHeader.SizeOfHeaders + sizeof(section_header); + nt_header.OptionalHeader.SizeOfImage = (image_size + 0x1fff) & ~0x1fff; + + put_data( &nt_header, sizeof(nt_header) ); + + for (i = 0; i < STREAM_MAX; i++) + { + if (!streams[i].data_size) continue; + streams_size += streams[i].header_size + streams[i].data_size; + num_streams++; + } + + section_header.PointerToRawData = FILE_ALIGNMENT; + section_header.VirtualAddress = SECTION_ALIGNMENT; + section_header.Misc.VirtualSize = sizeof(cor_header) + sizeof(metadata_header) + streams_size + 8; + section_header.SizeOfRawData = (section_header.Misc.VirtualSize + FILE_ALIGNMENT - 1) & ~(FILE_ALIGNMENT - 1); + + put_data( §ion_header, sizeof(section_header) ); + + for (i = 0; i < FILE_ALIGNMENT - sizeof(dos_header) - sizeof(nt_header) - sizeof(section_header); i++) + put_data( pad, 1 ); + + cor_header.MetaData.VirtualAddress = section_header.VirtualAddress + sizeof(cor_header) + 8; + cor_header.MetaData.Size = sizeof(metadata_header) + streams_size; + + put_data( &cor_header, sizeof(cor_header) ); + put_data( pad, 8 ); + + metadata_header.num_streams = num_streams; + put_data( &metadata_header, sizeof(metadata_header) ); + for (i = 0; i < STREAM_MAX; i++) + { + if (!streams[i].data_size) continue; + put_data( &streams[i], streams[i].header_size ); + } +} + +enum table +{ + TABLE_MODULE = 0x00, + TABLE_TYPEREF = 0x01, + TABLE_TYPEDEF = 0x02, + TABLE_FIELD = 0x04, + TABLE_METHODDEF = 0x06, + TABLE_PARAM = 0x08, + TABLE_INTERFACEIMPL = 0x09, + TABLE_MEMBERREF = 0x0a, + TABLE_CONSTANT = 0x0b, + TABLE_CUSTOMATTRIBUTE = 0x0c, + TABLE_FIELDMARSHAL = 0x0d, + TABLE_DECLSECURITY = 0x0e, + TABLE_CLASSLAYOUT = 0x0f, + TABLE_FIELDLAYOUT = 0x10, + TABLE_STANDALONESIG = 0x11, + TABLE_EVENTMAP = 0x12, + TABLE_EVENT = 0x14, + TABLE_PROPERTYMAP = 0x15, + TABLE_PROPERTY = 0x17, + TABLE_METHODSEMANTICS = 0x18, + TABLE_METHODIMPL = 0x19, + TABLE_MODULEREF = 0x1a, + TABLE_TYPESPEC = 0x1b, + TABLE_IMPLMAP = 0x1c, + TABLE_FIELDRVA = 0x1d, + TABLE_ASSEMBLY = 0x20, + TABLE_ASSEMBLYPROCESSOR = 0x21, + TABLE_ASSEMBLYOS = 0x22, + TABLE_ASSEMBLYREF = 0x23, + TABLE_ASSEMBLYREFPROCESSOR = 0x24, + TABLE_ASSEMBLYREFOS = 0x25, + TABLE_FILE = 0x26, + TABLE_EXPORTEDTYPE = 0x27, + TABLE_MANIFESTRESOURCE = 0x28, + TABLE_NESTEDCLASS = 0x29, + TABLE_GENERICPARAM = 0x2a, + TABLE_METHODSPEC = 0x2b, + TABLE_GENERICPARAMCONSTRAINT = 0x2c, + TABLE_MAX = 0x2d +}; + +#define SORTED_TABLES \ + 1ull << TABLE_INTERFACEIMPL |\ + 1ull << TABLE_CONSTANT |\ + 1ull << TABLE_CUSTOMATTRIBUTE |\ + 1ull << TABLE_FIELDMARSHAL |\ + 1ull << TABLE_DECLSECURITY |\ + 1ull << TABLE_CLASSLAYOUT |\ + 1ull << TABLE_FIELDLAYOUT |\ + 1ull << TABLE_EVENTMAP |\ + 1ull << TABLE_PROPERTYMAP |\ + 1ull << TABLE_METHODSEMANTICS |\ + 1ull << TABLE_METHODIMPL |\ + 1ull << TABLE_IMPLMAP |\ + 1ull << TABLE_FIELDRVA |\ + 1ull << TABLE_NESTEDCLASS |\ + 1ull << TABLE_GENERICPARAM |\ + 1ull << TABLE_GENERICPARAMCONSTRAINT + +static struct +{ + UINT reserved; + BYTE majorversion; + BYTE minor_version; + BYTE heap_sizes; + BYTE reserved2; + UINT64 valid; + UINT64 sorted; +} +tables_header = { 0, 2, 0, 0, 1, 0, SORTED_TABLES }; + +static struct buffer +{ + UINT offset; /* write position */ + UINT allocated; /* allocated size in bytes */ + UINT count; /* number of entries written */ + BYTE *ptr; +} strings, strings_idx, userstrings, userstrings_idx, blobs, blobs_idx, guids, tables[TABLE_MAX], + tables_idx[TABLE_MAX], tables_disk; + +static void *grow_buffer( struct buffer *buf, UINT size ) +{ + UINT new_size; + + if (buf->allocated - buf->offset >= size) return buf->ptr; + + new_size = max( buf->offset + size, buf->allocated * 2 ); + buf->ptr = xrealloc( buf->ptr, new_size ); + buf->allocated = new_size; + return buf->ptr; +} + +static UINT encode_int( UINT value, BYTE *encoded ) +{ + if (value < 0x80) + { + encoded[0] = value; + return 1; + } + if (value < 0x4000) + { + encoded[0] = value >> 8 | 0x80; + encoded[1] = value & 0xff; + return 2; + } + if (value < 0x20000000) + { + encoded[0] = value >> 24 | 0xc0; + encoded[1] = value >> 16 & 0xff; + encoded[2] = value >> 8 & 0xff; + encoded[3] = value & 0xff; + return 4; + } + fprintf( stderr, "Value too large to encode.\n" ); + exit( 1 ); +} + +static UINT decode_int( const BYTE *encoded, UINT *len ) +{ + if (!(encoded[0] & 0x80)) + { + *len = 1; + return encoded[0]; + } + if (!(encoded[0] & 0x40)) + { + *len = 2; + return ((encoded[0] & ~0xc0) << 8) + encoded[1]; + } + if (!(encoded[0] & 0x20)) + { + *len = 4; + return ((encoded[0] & ~0xe0) << 24) + (encoded[1] << 16) + (encoded[2] << 8) + encoded[3]; + } + fprintf( stderr, "Invalid encoding.\n" ); + exit( 1 ); +} + +struct index +{ + UINT offset; /* offset into corresponding data buffer */ + UINT size; /* size of data entry */ +}; + +static inline int cmp_data( const BYTE *data, UINT size, const BYTE *data2, UINT size2 ) +{ + if (size < size2) return -1; + else if (size > size2) return 1; + return memcmp( data, data2, size ); +} + +/* return index struct if found, NULL and insert index if not found */ +static const struct index *find_index( const struct buffer *buf_idx, const struct buffer *buf_data, const BYTE *data, + UINT data_size, BOOL is_blob, UINT *insert_idx ) +{ + int i, c, min = 0, max = buf_idx->count - 1; + const struct index *idx, *base = (const struct index *)buf_idx->ptr; + UINT size, len = 0; + + while (min <= max) + { + i = (min + max) / 2; + idx = &base[i]; + + if (is_blob) size = decode_int( buf_data->ptr + idx->offset, &len ); + else size = idx->size; + + c = cmp_data( data, data_size, buf_data->ptr + idx->offset + len, size ); + + if (c < 0) max = i - 1; + else if (c > 0) min = i + 1; + else return idx; + } + + if (insert_idx) *insert_idx = max + 1; + return NULL; +} + +static void insert_index( struct buffer *buf_idx, UINT idx, UINT offset, UINT size ) +{ + struct index new = { offset, size }, *base = grow_buffer( buf_idx, sizeof(new) ); + + memmove( &base[idx] + 1, &base[idx], (buf_idx->count - idx) * sizeof(new) ); + base[idx] = new; + buf_idx->offset += sizeof(new); + buf_idx->count++; +} + +static UINT add_string( const char *str ) +{ + UINT insert_idx, size, offset = strings.offset; + const struct index *idx; + + if (!str) return 0; + size = strlen( str ) + 1; + if ((idx = find_index( &strings_idx, &strings, (const BYTE *)str, size, FALSE, &insert_idx ))) + return idx->offset; + + grow_buffer( &strings, size ); + memcpy( strings.ptr + offset, str, size ); + strings.offset += size; + strings.count++; + + insert_index( &strings_idx, insert_idx, offset, size ); + return offset; +} + +static inline int is_special_char( USHORT c ) +{ + return (c >= 0x100 || (c >= 0x01 && c <= 0x08) || (c >= 0x0e && c <= 0x1f) || c == 0x27 || c == 0x2d || c == 0x7f); +} + +static UINT add_userstring( const USHORT *str, UINT size ) +{ + BYTE encoded[4], terminal = 0; + UINT i, insert_idx, offset = userstrings.offset, len = encode_int( size + (str ? 1 : 0), encoded ); + const struct index *idx; + + if (!str && offset) return 0; + + if ((idx = find_index( &userstrings_idx, &userstrings, (const BYTE *)str, size, TRUE, &insert_idx ))) + return idx->offset; + + grow_buffer( &userstrings, len + size + 1 ); + memcpy( userstrings.ptr + userstrings.offset, encoded, len ); + userstrings.offset += len; + if (str) + { + for (i = 0; i < size / sizeof(USHORT); i++) + { + *(USHORT *)(userstrings.ptr + userstrings.offset) = str[i]; + userstrings.offset += sizeof(USHORT); + if (is_special_char( str[i] )) terminal = 1; + } + userstrings.ptr[userstrings.offset++] = terminal; + } + userstrings.count++; + + insert_index( &userstrings_idx, insert_idx, offset, size ); + return offset; +} + +static UINT add_blob( const BYTE *blob, UINT size ) +{ + BYTE encoded[4]; + UINT insert_idx, offset = blobs.offset, len = encode_int( size, encoded ); + const struct index *idx; + + if (!blob && offset) return 0; + if ((idx = find_index( &blobs_idx, &blobs, blob, size, TRUE, &insert_idx ))) return idx->offset; + + grow_buffer( &blobs, len + size ); + memcpy( blobs.ptr + blobs.offset, encoded, len ); + blobs.offset += len; + if (blob) + { + memcpy( blobs.ptr + blobs.offset, blob, size ); + blobs.offset += size; + } + blobs.count++; + + insert_index( &blobs_idx, insert_idx, offset, size ); + return offset; +} + +static UINT add_guid( const GUID *guid ) +{ + grow_buffer( &guids, sizeof(*guid) ); + memcpy( guids.ptr + guids.offset, guid, sizeof(*guid) ); + guids.offset += sizeof(*guid); + return ++guids.count; +} + +/* returns row number */ +static UINT add_row( enum table table, const BYTE *row, UINT row_size ) +{ + const struct index *idx; + UINT insert_idx, offset = tables[table].offset; + BOOL sort = (table != TABLE_PARAM && table != TABLE_FIELD); + + if (sort && (idx = find_index( &tables_idx[table], &tables[table], row, row_size, FALSE, &insert_idx ))) + return idx->offset / row_size + 1; + + grow_buffer( &tables[table], row_size ); + memcpy( tables[table].ptr + offset, row, row_size ); + tables[table].offset += row_size; + tables[table].count++; + + if (sort) insert_index( &tables_idx[table], insert_idx, offset, row_size ); + return tables[table].count; +} + +static void add_bytes( struct buffer *buf, const BYTE *data, UINT size ) +{ + grow_buffer( buf, size ); + memcpy( buf->ptr + buf->offset, data, size ); + buf->offset += size; +} + +static void serialize_ushort( USHORT value ) +{ + add_bytes( &tables_disk, (const BYTE *)&value, sizeof(value) ); +} + +static void serialize_uint( UINT value ) +{ + add_bytes( &tables_disk, (const BYTE *)&value, sizeof(value) ); +} + +static void serialize_string_idx( UINT idx ) +{ + UINT size = strings.offset >> 16 ? sizeof(UINT) : sizeof(USHORT); + add_bytes( &tables_disk, (const BYTE *)&idx, size ); +} + +static void serialize_guid_idx( UINT idx ) +{ + UINT size = guids.offset >> 16 ? sizeof(UINT) : sizeof(USHORT); + add_bytes( &tables_disk, (const BYTE *)&idx, size ); +} + +static void serialize_blob_idx( UINT idx ) +{ + UINT size = blobs.offset >> 16 ? sizeof(UINT) : sizeof(USHORT); + add_bytes( &tables_disk, (const BYTE *)&idx, size ); +} + +static void serialize_table_idx( UINT idx, enum table target ) +{ + UINT size = tables[target].count >> 16 ? sizeof(UINT) : sizeof(USHORT); + add_bytes( &tables_disk, (const BYTE *)&idx, size ); +} + +static enum table typedef_or_ref_to_table( UINT token ) +{ + switch (token & 0x3) + { + case 0: return TABLE_TYPEDEF; + case 1: return TABLE_TYPEREF; + case 2: return TABLE_TYPESPEC; + default: assert( 0 ); + } +} + +struct module_row +{ + USHORT generation; + UINT name; + UINT mvid; + UINT encid; + UINT encbaseid; +}; + +static UINT add_module_row( UINT name, UINT mvid ) +{ + struct module_row row = { 0, name, mvid, 0, 0 }; + return add_row( TABLE_MODULE, (const BYTE *)&row, sizeof(row) ); +} + +static void serialize_module_table( void ) +{ + const struct module_row *row = (const struct module_row *)tables[TABLE_MODULE].ptr; + + serialize_ushort( row->generation ); + serialize_string_idx( row->name ); + serialize_guid_idx( row->mvid ); + serialize_guid_idx( row->encid ); + serialize_guid_idx( row->encbaseid ); +} + +struct typedef_row +{ + UINT flags; + UINT name; + UINT namespace; + UINT extends; + UINT fieldlist; + UINT methodlist; +}; + +static UINT add_typedef_row( UINT flags, UINT name, UINT namespace, UINT extends, UINT fieldlist, UINT methodlist ) +{ + struct typedef_row row = { flags, name, namespace, extends, fieldlist, methodlist }; + + if (!row.fieldlist) row.fieldlist = tables[TABLE_FIELD].count + 1; + if (!row.methodlist) row.methodlist = tables[TABLE_METHODDEF].count + 1; + return add_row( TABLE_TYPEDEF, (const BYTE *)&row, sizeof(row) ); +} + +/* FIXME: enclosing classes should come before enclosed classes */ +static void serialize_typedef_table( void ) +{ + const struct typedef_row *row = (const struct typedef_row *)tables[TABLE_TYPEDEF].ptr; + UINT i; + + for (i = 0; i < tables[TABLE_TYPEDEF].count; i++) + { + serialize_uint( row->flags ); + serialize_string_idx( row->name ); + serialize_string_idx( row->namespace ); + serialize_table_idx( row->extends, typedef_or_ref_to_table(row->extends) ); + serialize_table_idx( row->fieldlist, TABLE_FIELD ); + serialize_table_idx( row->methodlist, TABLE_METHODDEF ); + row++; + } +} + +struct assembly_row +{ + UINT hashalgid; + USHORT majorversion; + USHORT minorversion; + USHORT buildnumber; + USHORT revisionnumber; + UINT flags; + UINT publickey; + UINT name; + UINT culture; +}; + +static UINT add_assembly_row( UINT name ) +{ + struct assembly_row row = { CALG_SHA, 255, 255, 255, 255, 0x200, 0, name, 0 }; + return add_row( TABLE_ASSEMBLY, (const BYTE *)&row, sizeof(row) ); +} + +static void serialize_assembly_table( void ) +{ + const struct assembly_row *row = (const struct assembly_row *)tables[TABLE_ASSEMBLY].ptr; + + serialize_uint( row->hashalgid ); + serialize_ushort( row->majorversion ); + serialize_ushort( row->minorversion ); + serialize_ushort( row->buildnumber ); + serialize_ushort( row->revisionnumber ); + serialize_uint( row->flags ); + serialize_blob_idx( row->publickey ); + serialize_string_idx( row->name ); + serialize_string_idx( row->culture ); +} + +struct assemblyref_row +{ + USHORT majorversion; + USHORT minorversion; + USHORT buildnumber; + USHORT revisionnumber; + UINT flags; + UINT publickey; + UINT name; + UINT culture; + UINT hashvalue; +}; + +static UINT add_assemblyref_row( UINT flags, UINT publickey, UINT name ) +{ + struct assemblyref_row row = { 255, 255, 255, 255, flags, publickey, name, 0, 0 }; + return add_row( TABLE_ASSEMBLYREF, (const BYTE *)&row, sizeof(row) ); +} + +static void serialize_assemblyref_table( void ) +{ + const struct assemblyref_row *row = (const struct assemblyref_row *)tables[TABLE_ASSEMBLYREF].ptr; + UINT i; + + for (i = 0; i < tables[TABLE_ASSEMBLYREF].count; i++) + { + serialize_ushort( row->majorversion ); + serialize_ushort( row->minorversion ); + serialize_ushort( row->buildnumber ); + serialize_ushort( row->revisionnumber ); + serialize_uint( row->flags ); + serialize_blob_idx( row->publickey ); + serialize_string_idx( row->name ); + serialize_string_idx( row->culture ); + serialize_blob_idx( row->hashvalue ); + row++; + } +} + +enum +{ + LARGE_STRING_HEAP = 0x01, + LARGE_GUID_HEAP = 0x02, + LARGE_BLOB_HEAP = 0x04 +}; + +static char *assembly_name; + +static void build_table_stream( const statement_list_t *stmts ) +{ + static const GUID guid = { 0x9ddc04c6, 0x04ca, 0x04cc, { 0x52, 0x85, 0x4b, 0x50, 0xb2, 0x60, 0x1d, 0xa8 } }; + static const BYTE token[] = { 0xb7, 0x7a, 0x5c, 0x56, 0x19, 0x34, 0xe0, 0x89 }; + static const USHORT space = 0x20; + char *ptr; + UINT i; + + add_string( "" ); + add_userstring( NULL, 0 ); + add_userstring( &space, sizeof(space) ); + add_blob( NULL, 0 ); + + assembly_name = xstrdup( metadata_name ); + if ((ptr = strrchr( assembly_name, '.' ))) *ptr = 0; + + add_typedef_row( 0, add_string("<Module>"), 0, 0, 1, 1 ); + add_assembly_row( add_string(assembly_name) ); + add_module_row( add_string(metadata_name), add_guid(&guid) ); + add_assemblyref_row( 0, add_blob(token, sizeof(token)), add_string("mscorlib") ); + + for (i = 0; i < TABLE_MAX; i++) if (tables[i].count) tables_header.valid |= (1ull << i); + + if (strings.offset >> 16) tables_header.heap_sizes |= LARGE_STRING_HEAP; + if (guids.offset >> 16) tables_header.heap_sizes |= LARGE_GUID_HEAP; + if (blobs.offset >> 16) tables_header.heap_sizes |= LARGE_BLOB_HEAP; + + add_bytes( &tables_disk, (const BYTE *)&tables_header, sizeof(tables_header) ); + + for (i = 0; i < TABLE_MAX; i++) + if (tables[i].count) add_bytes( &tables_disk, (const BYTE *)&tables[i].count, sizeof(tables[i].count) ); + + serialize_module_table(); + serialize_typedef_table(); + serialize_assembly_table(); + serialize_assemblyref_table(); +} + +static void build_streams( const statement_list_t *stmts ) +{ + static const BYTE pad[4]; + UINT i, len, offset = sizeof(metadata_header); + + build_table_stream( stmts ); + + len = (tables_disk.offset + 3) & ~3; + add_bytes( &tables_disk, pad, len - tables_disk.offset ); + + streams[STREAM_TABLE].data_size = tables_disk.offset; + streams[STREAM_TABLE].data = tables_disk.ptr; + + len = (strings.offset + 3) & ~3; + add_bytes( &strings, pad, len - strings.offset ); + + streams[STREAM_STRING].data_size = strings.offset; + streams[STREAM_STRING].data = strings.ptr; + + len = (userstrings.offset + 3) & ~3; + add_bytes( &userstrings, pad, len - userstrings.offset ); + + streams[STREAM_USERSTRING].data_size = userstrings.offset; + streams[STREAM_USERSTRING].data = userstrings.ptr; + + len = (blobs.offset + 3) & ~3; + add_bytes( &blobs, pad, len - blobs.offset ); + + streams[STREAM_BLOB].data_size = blobs.offset; + streams[STREAM_BLOB].data = blobs.ptr; + + streams[STREAM_GUID].data_size = guids.offset; + streams[STREAM_GUID].data = guids.ptr; + + for (i = 0; i < STREAM_MAX; i++) + { + if (!streams[i].data_size) continue; + offset += streams[i].header_size; + } + for (i = 0; i < STREAM_MAX; i++) + { + if (!streams[i].data_size) continue; + streams[i].data_offset = offset; + offset += streams[i].data_size; + } +} + +static void write_streams( void ) +{ + UINT i; + for (i = 0; i < STREAM_MAX; i++) + { + if (!streams[i].data_size) continue; + put_data( streams[i].data, streams[i].data_size ); + } +} + +void write_metadata( const statement_list_t *stmts ) +{ + static const BYTE pad[FILE_ALIGNMENT]; + UINT image_size, file_size, i; + + if (!do_metadata) return; + + build_streams( stmts ); + + image_size = FILE_ALIGNMENT + sizeof(cor_header) + 8 + sizeof(metadata_header); + for (i = 0; i < STREAM_MAX; i++) image_size += streams[i].header_size + streams[i].data_size; + + init_output_buffer(); + + write_headers( image_size ); + write_streams( ); + + file_size = (image_size + FILE_ALIGNMENT - 1) & ~(FILE_ALIGNMENT - 1); + put_data( pad, file_size - image_size ); + + flush_output_buffer( metadata_name ); +}
diff --git a/mingw-w64-tools/widl/src/parser.tab.c b/mingw-w64-tools/widl/src/parser.tab.c index 528e411..92bf76b 100644 --- a/mingw-w64-tools/widl/src/parser.tab.c +++ b/mingw-w64-tools/widl/src/parser.tab.c
@@ -1332,57 +1332,57 @@ /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 370, 370, 387, 388, 392, 393, 399, 403, 404, - 409, 413, 414, 414, 416, 417, 418, 419, 420, 423, - 426, 427, 429, 430, 432, 433, 434, 435, 439, 440, - 441, 442, 442, 444, 445, 446, 447, 450, 451, 453, - 454, 456, 457, 458, 459, 460, 464, 465, 469, 470, - 474, 475, 476, 477, 478, 479, 480, 483, 491, 499, - 500, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 515, 518, 520, 523, 527, 529, 533, 538, 539, 542, - 543, 546, 547, 551, 556, 563, 567, 568, 572, 573, - 577, 580, 581, 582, 585, 586, 590, 591, 592, 596, - 597, 601, 611, 618, 622, 626, 627, 631, 639, 644, - 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, - 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, - 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, - 678, 679, 680, 681, 682, 683, 684, 685, 686, 690, - 691, 692, 693, 694, 695, 696, 697, 698, 700, 701, - 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, - 712, 713, 714, 715, 717, 718, 719, 720, 721, 722, - 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, - 733, 734, 735, 736, 737, 738, 739, 740, 741, 746, - 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, - 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, - 767, 768, 769, 770, 773, 774, 775, 776, 780, 781, - 784, 788, 795, 796, 797, 800, 806, 823, 828, 832, - 837, 840, 841, 845, 846, 849, 850, 851, 852, 854, - 856, 858, 859, 860, 861, 862, 863, 864, 865, 866, - 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, - 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, - 887, 888, 889, 891, 893, 894, 897, 898, 901, 907, - 914, 915, 918, 923, 930, 931, 935, 936, 940, 941, - 944, 948, 954, 962, 966, 972, 973, 977, 978, 981, - 982, 985, 988, 989, 990, 991, 992, 993, 994, 995, - 996, 997, 998, 1002, 1003, 1006, 1007, 1008, 1009, 1010, - 1011, 1012, 1013, 1014, 1018, 1019, 1023, 1024, 1027, 1032, - 1033, 1034, 1035, 1036, 1040, 1041, 1045, 1048, 1052, 1055, - 1060, 1063, 1067, 1068, 1072, 1073, 1077, 1078, 1081, 1084, - 1087, 1088, 1091, 1092, 1096, 1098, 1103, 1104, 1105, 1108, - 1112, 1113, 1117, 1118, 1118, 1118, 1122, 1127, 1128, 1126, - 1135, 1136, 1137, 1138, 1142, 1143, 1146, 1146, 1159, 1163, - 1164, 1165, 1169, 1172, 1175, 1180, 1181, 1182, 1186, 1190, - 1194, 1195, 1198, 1199, 1203, 1205, 1210, 1211, 1215, 1216, - 1217, 1221, 1223, 1224, 1228, 1229, 1230, 1231, 1236, 1238, - 1239, 1244, 1246, 1251, 1252, 1257, 1258, 1259, 1260, 1264, - 1272, 1274, 1275, 1280, 1282, 1287, 1288, 1295, 1296, 1297, - 1298, 1299, 1303, 1310, 1311, 1315, 1316, 1319, 1326, 1327, - 1332, 1333, 1337, 1338, 1339, 1340, 1341, 1342, 1346, 1347, - 1348, 1351, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, - 1363, 1364, 1368, 1369, 1370, 1373, 1380, 1382, 1388, 1389, - 1390, 1394, 1395, 1399, 1400, 1404, 1411, 1420, 1421, 1425, - 1426, 1430, 1432, 1433, 1434, 1438, 1439, 1444, 1445, 1446, - 1447 + 0, 370, 370, 388, 389, 393, 394, 400, 404, 405, + 410, 414, 415, 415, 417, 418, 419, 420, 421, 424, + 427, 428, 430, 431, 433, 434, 435, 436, 440, 441, + 442, 443, 443, 445, 446, 447, 448, 451, 452, 454, + 455, 457, 458, 459, 460, 461, 465, 466, 470, 471, + 475, 476, 477, 478, 479, 480, 481, 484, 492, 500, + 501, 505, 506, 507, 508, 509, 510, 511, 512, 513, + 516, 519, 521, 524, 528, 530, 534, 539, 540, 543, + 544, 547, 548, 552, 557, 564, 568, 569, 573, 574, + 578, 581, 582, 583, 586, 587, 591, 592, 593, 597, + 598, 602, 612, 619, 623, 627, 628, 632, 640, 645, + 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, + 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, + 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, + 679, 680, 681, 682, 683, 684, 685, 686, 687, 691, + 692, 693, 694, 695, 696, 697, 698, 699, 701, 702, + 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, + 713, 714, 715, 716, 718, 719, 720, 721, 722, 723, + 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, + 734, 735, 736, 737, 738, 739, 740, 741, 742, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, + 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 774, 775, 776, 777, 781, 782, + 785, 789, 796, 797, 798, 801, 807, 824, 829, 833, + 838, 841, 842, 846, 847, 850, 851, 852, 853, 855, + 857, 859, 860, 861, 862, 863, 864, 865, 866, 867, + 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, + 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, + 888, 889, 890, 892, 894, 895, 898, 899, 902, 908, + 915, 916, 919, 924, 931, 932, 936, 937, 941, 942, + 945, 949, 955, 963, 967, 973, 974, 978, 979, 982, + 983, 986, 989, 990, 991, 992, 993, 994, 995, 996, + 997, 998, 999, 1003, 1004, 1007, 1008, 1009, 1010, 1011, + 1012, 1013, 1014, 1015, 1019, 1020, 1024, 1025, 1028, 1033, + 1034, 1035, 1036, 1037, 1041, 1042, 1046, 1049, 1053, 1056, + 1061, 1064, 1068, 1069, 1073, 1074, 1078, 1079, 1082, 1085, + 1088, 1089, 1092, 1093, 1097, 1099, 1104, 1105, 1106, 1109, + 1113, 1114, 1118, 1119, 1119, 1119, 1123, 1128, 1129, 1127, + 1136, 1137, 1138, 1139, 1143, 1144, 1147, 1147, 1160, 1164, + 1165, 1166, 1170, 1173, 1176, 1181, 1182, 1183, 1187, 1191, + 1195, 1196, 1199, 1200, 1204, 1206, 1211, 1212, 1216, 1217, + 1218, 1222, 1224, 1225, 1229, 1230, 1231, 1232, 1237, 1239, + 1240, 1245, 1247, 1252, 1253, 1258, 1259, 1260, 1261, 1265, + 1273, 1275, 1276, 1281, 1283, 1288, 1289, 1296, 1297, 1298, + 1299, 1300, 1304, 1311, 1312, 1316, 1317, 1320, 1327, 1328, + 1333, 1334, 1338, 1339, 1340, 1341, 1342, 1343, 1347, 1348, + 1349, 1352, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, + 1364, 1365, 1369, 1370, 1371, 1374, 1381, 1383, 1389, 1390, + 1391, 1395, 1396, 1400, 1401, 1405, 1412, 1421, 1422, 1426, + 1427, 1431, 1433, 1434, 1435, 1439, 1440, 1445, 1446, 1447, + 1448 }; #endif @@ -3562,325 +3562,326 @@ write_typelib_regscript((yyvsp[-1].stmt_list)); write_dlldata((yyvsp[-1].stmt_list)); write_local_stubs((yyvsp[-1].stmt_list)); + write_metadata((yyvsp[-1].stmt_list)); (void)parser_nerrs; /* avoid unused variable warning */ } -#line 3568 "tools/widl/parser.tab.c" +#line 3569 "tools/widl/parser.tab.c" break; case 5: /* decl_statements: %empty */ -#line 392 "tools/widl/parser.y" +#line 393 "tools/widl/parser.y" { (yyval.stmt_list) = NULL; } -#line 3574 "tools/widl/parser.tab.c" +#line 3575 "tools/widl/parser.tab.c" break; case 6: /* decl_statements: decl_statements tINTERFACE qualified_type '<' parameterized_type_args '>' ';' */ -#line 394 "tools/widl/parser.y" +#line 395 "tools/widl/parser.y" { parameterized_type_stmts = append_statement(parameterized_type_stmts, make_statement_parameterized_type((yyvsp[-4].type), (yyvsp[-2].typeref_list))); (yyval.stmt_list) = append_statement((yyvsp[-6].stmt_list), make_statement_reference(type_parameterized_type_specialize_declare((yyvsp[-4].type), (yyvsp[-2].typeref_list)))); } -#line 3582 "tools/widl/parser.tab.c" +#line 3583 "tools/widl/parser.tab.c" break; case 7: /* decl_block: tDECLARE '{' decl_statements '}' */ -#line 399 "tools/widl/parser.y" +#line 400 "tools/widl/parser.y" { (yyval.stmt_list) = (yyvsp[-1].stmt_list); } -#line 3588 "tools/widl/parser.tab.c" +#line 3589 "tools/widl/parser.tab.c" break; case 8: /* imp_decl_statements: %empty */ -#line 403 "tools/widl/parser.y" +#line 404 "tools/widl/parser.y" { (yyval.stmt_list) = NULL; } -#line 3594 "tools/widl/parser.tab.c" +#line 3595 "tools/widl/parser.tab.c" break; case 9: /* imp_decl_statements: imp_decl_statements tINTERFACE qualified_type '<' parameterized_type_args '>' ';' */ -#line 405 "tools/widl/parser.y" +#line 406 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-6].stmt_list), make_statement_reference(type_parameterized_type_specialize_declare((yyvsp[-4].type), (yyvsp[-2].typeref_list)))); } -#line 3600 "tools/widl/parser.tab.c" +#line 3601 "tools/widl/parser.tab.c" break; case 10: /* imp_decl_block: tDECLARE '{' imp_decl_statements '}' */ -#line 409 "tools/widl/parser.y" +#line 410 "tools/widl/parser.y" { (yyval.stmt_list) = (yyvsp[-1].stmt_list); } -#line 3606 "tools/widl/parser.tab.c" +#line 3607 "tools/widl/parser.tab.c" break; case 11: /* gbl_statements: %empty */ -#line 413 "tools/widl/parser.y" +#line 414 "tools/widl/parser.y" { (yyval.stmt_list) = NULL; } -#line 3612 "tools/widl/parser.tab.c" +#line 3613 "tools/widl/parser.tab.c" break; case 12: /* $@1: %empty */ -#line 414 "tools/widl/parser.y" +#line 415 "tools/widl/parser.y" { push_namespaces((yyvsp[-1].str_list)); } -#line 3618 "tools/widl/parser.tab.c" +#line 3619 "tools/widl/parser.tab.c" break; case 13: /* gbl_statements: gbl_statements namespacedef '{' $@1 gbl_statements '}' */ -#line 415 "tools/widl/parser.y" +#line 416 "tools/widl/parser.y" { pop_namespaces((yyvsp[-4].str_list)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); } -#line 3624 "tools/widl/parser.tab.c" +#line 3625 "tools/widl/parser.tab.c" break; case 14: /* gbl_statements: gbl_statements interface ';' */ -#line 416 "tools/widl/parser.y" +#line 417 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); } -#line 3630 "tools/widl/parser.tab.c" +#line 3631 "tools/widl/parser.tab.c" break; case 15: /* gbl_statements: gbl_statements dispinterface ';' */ -#line 417 "tools/widl/parser.y" +#line 418 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); } -#line 3636 "tools/widl/parser.tab.c" +#line 3637 "tools/widl/parser.tab.c" break; case 16: /* gbl_statements: gbl_statements interfacedef */ -#line 418 "tools/widl/parser.y" +#line 419 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); } -#line 3642 "tools/widl/parser.tab.c" +#line 3643 "tools/widl/parser.tab.c" break; case 17: /* gbl_statements: gbl_statements delegatedef */ -#line 419 "tools/widl/parser.y" +#line 420 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); } -#line 3648 "tools/widl/parser.tab.c" +#line 3649 "tools/widl/parser.tab.c" break; case 18: /* gbl_statements: gbl_statements coclass ';' */ -#line 420 "tools/widl/parser.y" +#line 421 "tools/widl/parser.y" { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); } -#line 3656 "tools/widl/parser.tab.c" +#line 3657 "tools/widl/parser.tab.c" break; case 19: /* gbl_statements: gbl_statements coclassdef */ -#line 423 "tools/widl/parser.y" +#line 424 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); } -#line 3664 "tools/widl/parser.tab.c" +#line 3665 "tools/widl/parser.tab.c" break; case 20: /* gbl_statements: gbl_statements apicontract ';' */ -#line 426 "tools/widl/parser.y" +#line 427 "tools/widl/parser.y" { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); } -#line 3670 "tools/widl/parser.tab.c" +#line 3671 "tools/widl/parser.tab.c" break; case 21: /* gbl_statements: gbl_statements apicontract_def */ -#line 427 "tools/widl/parser.y" +#line 428 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); } -#line 3677 "tools/widl/parser.tab.c" +#line 3678 "tools/widl/parser.tab.c" break; case 22: /* gbl_statements: gbl_statements runtimeclass ';' */ -#line 429 "tools/widl/parser.y" +#line 430 "tools/widl/parser.y" { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); } -#line 3683 "tools/widl/parser.tab.c" +#line 3684 "tools/widl/parser.tab.c" break; case 23: /* gbl_statements: gbl_statements runtimeclass_def */ -#line 430 "tools/widl/parser.y" +#line 431 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); } -#line 3690 "tools/widl/parser.tab.c" +#line 3691 "tools/widl/parser.tab.c" break; case 24: /* gbl_statements: gbl_statements moduledef */ -#line 432 "tools/widl/parser.y" +#line 433 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); } -#line 3696 "tools/widl/parser.tab.c" +#line 3697 "tools/widl/parser.tab.c" break; case 25: /* gbl_statements: gbl_statements librarydef */ -#line 433 "tools/widl/parser.y" +#line 434 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); } -#line 3702 "tools/widl/parser.tab.c" +#line 3703 "tools/widl/parser.tab.c" break; case 26: /* gbl_statements: gbl_statements statement */ -#line 434 "tools/widl/parser.y" +#line 435 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); } -#line 3708 "tools/widl/parser.tab.c" +#line 3709 "tools/widl/parser.tab.c" break; case 27: /* gbl_statements: gbl_statements decl_block */ -#line 435 "tools/widl/parser.y" +#line 436 "tools/widl/parser.y" { (yyval.stmt_list) = append_statements((yyvsp[-1].stmt_list), (yyvsp[0].stmt_list)); } -#line 3714 "tools/widl/parser.tab.c" +#line 3715 "tools/widl/parser.tab.c" break; case 28: /* imp_statements: %empty */ -#line 439 "tools/widl/parser.y" +#line 440 "tools/widl/parser.y" { (yyval.stmt_list) = NULL; } -#line 3720 "tools/widl/parser.tab.c" +#line 3721 "tools/widl/parser.tab.c" break; case 29: /* imp_statements: imp_statements interface ';' */ -#line 440 "tools/widl/parser.y" +#line 441 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); } -#line 3726 "tools/widl/parser.tab.c" +#line 3727 "tools/widl/parser.tab.c" break; case 30: /* imp_statements: imp_statements dispinterface ';' */ -#line 441 "tools/widl/parser.y" +#line 442 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-2].stmt_list), make_statement_reference((yyvsp[-1].type))); } -#line 3732 "tools/widl/parser.tab.c" +#line 3733 "tools/widl/parser.tab.c" break; case 31: /* $@2: %empty */ -#line 442 "tools/widl/parser.y" +#line 443 "tools/widl/parser.y" { push_namespaces((yyvsp[-1].str_list)); } -#line 3738 "tools/widl/parser.tab.c" +#line 3739 "tools/widl/parser.tab.c" break; case 32: /* imp_statements: imp_statements namespacedef '{' $@2 imp_statements '}' */ -#line 443 "tools/widl/parser.y" +#line 444 "tools/widl/parser.y" { pop_namespaces((yyvsp[-4].str_list)); (yyval.stmt_list) = append_statements((yyvsp[-5].stmt_list), (yyvsp[-1].stmt_list)); } -#line 3744 "tools/widl/parser.tab.c" +#line 3745 "tools/widl/parser.tab.c" break; case 33: /* imp_statements: imp_statements interfacedef */ -#line 444 "tools/widl/parser.y" +#line 445 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); } -#line 3750 "tools/widl/parser.tab.c" +#line 3751 "tools/widl/parser.tab.c" break; case 34: /* imp_statements: imp_statements delegatedef */ -#line 445 "tools/widl/parser.y" +#line 446 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); } -#line 3756 "tools/widl/parser.tab.c" +#line 3757 "tools/widl/parser.tab.c" break; case 35: /* imp_statements: imp_statements coclass ';' */ -#line 446 "tools/widl/parser.y" +#line 447 "tools/widl/parser.y" { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); } -#line 3762 "tools/widl/parser.tab.c" +#line 3763 "tools/widl/parser.tab.c" break; case 36: /* imp_statements: imp_statements coclassdef */ -#line 447 "tools/widl/parser.y" +#line 448 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); } -#line 3770 "tools/widl/parser.tab.c" +#line 3771 "tools/widl/parser.tab.c" break; case 37: /* imp_statements: imp_statements apicontract ';' */ -#line 450 "tools/widl/parser.y" +#line 451 "tools/widl/parser.y" { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); } -#line 3776 "tools/widl/parser.tab.c" +#line 3777 "tools/widl/parser.tab.c" break; case 38: /* imp_statements: imp_statements apicontract_def */ -#line 451 "tools/widl/parser.y" +#line 452 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); } -#line 3783 "tools/widl/parser.tab.c" +#line 3784 "tools/widl/parser.tab.c" break; case 39: /* imp_statements: imp_statements runtimeclass ';' */ -#line 453 "tools/widl/parser.y" +#line 454 "tools/widl/parser.y" { (yyval.stmt_list) = (yyvsp[-2].stmt_list); reg_type((yyvsp[-1].type), (yyvsp[-1].type)->name, current_namespace, 0); } -#line 3789 "tools/widl/parser.tab.c" +#line 3790 "tools/widl/parser.tab.c" break; case 40: /* imp_statements: imp_statements runtimeclass_def */ -#line 454 "tools/widl/parser.y" +#line 455 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_type_decl((yyvsp[0].type))); reg_type((yyvsp[0].type), (yyvsp[0].type)->name, current_namespace, 0); } -#line 3796 "tools/widl/parser.tab.c" +#line 3797 "tools/widl/parser.tab.c" break; case 41: /* imp_statements: imp_statements moduledef */ -#line 456 "tools/widl/parser.y" +#line 457 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_module((yyvsp[0].type))); } -#line 3802 "tools/widl/parser.tab.c" +#line 3803 "tools/widl/parser.tab.c" break; case 42: /* imp_statements: imp_statements statement */ -#line 457 "tools/widl/parser.y" +#line 458 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); } -#line 3808 "tools/widl/parser.tab.c" +#line 3809 "tools/widl/parser.tab.c" break; case 43: /* imp_statements: imp_statements importlib */ -#line 458 "tools/widl/parser.y" +#line 459 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_importlib((yyvsp[0].str))); } -#line 3814 "tools/widl/parser.tab.c" +#line 3815 "tools/widl/parser.tab.c" break; case 44: /* imp_statements: imp_statements librarydef */ -#line 459 "tools/widl/parser.y" +#line 460 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), make_statement_library((yyvsp[0].typelib))); } -#line 3820 "tools/widl/parser.tab.c" +#line 3821 "tools/widl/parser.tab.c" break; case 45: /* imp_statements: imp_statements imp_decl_block */ -#line 460 "tools/widl/parser.y" +#line 461 "tools/widl/parser.y" { (yyval.stmt_list) = append_statements((yyvsp[-1].stmt_list), (yyvsp[0].stmt_list)); } -#line 3826 "tools/widl/parser.tab.c" +#line 3827 "tools/widl/parser.tab.c" break; case 46: /* int_statements: %empty */ -#line 464 "tools/widl/parser.y" +#line 465 "tools/widl/parser.y" { (yyval.stmt_list) = NULL; } -#line 3832 "tools/widl/parser.tab.c" +#line 3833 "tools/widl/parser.tab.c" break; case 47: /* int_statements: int_statements statement */ -#line 465 "tools/widl/parser.y" +#line 466 "tools/widl/parser.y" { (yyval.stmt_list) = append_statement((yyvsp[-1].stmt_list), (yyvsp[0].statement)); } -#line 3838 "tools/widl/parser.tab.c" +#line 3839 "tools/widl/parser.tab.c" break; case 50: /* statement: cppquote */ -#line 474 "tools/widl/parser.y" +#line 475 "tools/widl/parser.y" { (yyval.statement) = make_statement_cppquote((yyvsp[0].str)); } -#line 3844 "tools/widl/parser.tab.c" +#line 3845 "tools/widl/parser.tab.c" break; case 51: /* statement: typedecl ';' */ -#line 475 "tools/widl/parser.y" +#line 476 "tools/widl/parser.y" { (yyval.statement) = make_statement_type_decl((yyvsp[-1].type)); } -#line 3850 "tools/widl/parser.tab.c" +#line 3851 "tools/widl/parser.tab.c" break; case 52: /* statement: declaration ';' */ -#line 476 "tools/widl/parser.y" +#line 477 "tools/widl/parser.y" { (yyval.statement) = make_statement_declaration((yyvsp[-1].var)); } -#line 3856 "tools/widl/parser.tab.c" +#line 3857 "tools/widl/parser.tab.c" break; case 53: /* statement: import */ -#line 477 "tools/widl/parser.y" +#line 478 "tools/widl/parser.y" { (yyval.statement) = make_statement_import((yyvsp[0].str)); } -#line 3862 "tools/widl/parser.tab.c" +#line 3863 "tools/widl/parser.tab.c" break; case 54: /* statement: typedef ';' */ -#line 478 "tools/widl/parser.y" +#line 479 "tools/widl/parser.y" { (yyval.statement) = (yyvsp[-1].statement); } -#line 3868 "tools/widl/parser.tab.c" +#line 3869 "tools/widl/parser.tab.c" break; case 55: /* statement: aPRAGMA */ -#line 479 "tools/widl/parser.y" +#line 480 "tools/widl/parser.y" { (yyval.statement) = make_statement_pragma((yyvsp[0].str)); } -#line 3874 "tools/widl/parser.tab.c" +#line 3875 "tools/widl/parser.tab.c" break; case 56: /* statement: pragma_warning */ -#line 480 "tools/widl/parser.y" +#line 481 "tools/widl/parser.y" { (yyval.statement) = NULL; } -#line 3880 "tools/widl/parser.tab.c" +#line 3881 "tools/widl/parser.tab.c" break; case 57: /* pragma_warning: tPRAGMA_WARNING '(' aIDENTIFIER ':' warnings ')' */ -#line 484 "tools/widl/parser.y" +#line 485 "tools/widl/parser.y" { int result; (yyval.statement) = NULL; @@ -3888,249 +3889,249 @@ if(!result) error_loc("expected \"disable\", \"enable\" or \"default\"\n"); } -#line 3892 "tools/widl/parser.tab.c" +#line 3893 "tools/widl/parser.tab.c" break; case 58: /* pragma_warning: tPRAGMA_WARNING '(' tDEFAULT ':' warnings ')' */ -#line 492 "tools/widl/parser.y" +#line 493 "tools/widl/parser.y" { (yyval.statement) = NULL; do_warning("default", (yyvsp[-1].warning_list)); } -#line 3901 "tools/widl/parser.tab.c" +#line 3902 "tools/widl/parser.tab.c" break; case 59: /* warnings: aNUM */ -#line 499 "tools/widl/parser.y" +#line 500 "tools/widl/parser.y" { (yyval.warning_list) = append_warning(NULL, (yyvsp[0].integer).value); } -#line 3907 "tools/widl/parser.tab.c" +#line 3908 "tools/widl/parser.tab.c" break; case 60: /* warnings: warnings aNUM */ -#line 500 "tools/widl/parser.y" +#line 501 "tools/widl/parser.y" { (yyval.warning_list) = append_warning((yyvsp[-1].warning_list), (yyvsp[0].integer).value); } -#line 3913 "tools/widl/parser.tab.c" +#line 3914 "tools/widl/parser.tab.c" break; case 62: /* typedecl: tENUM typename */ -#line 505 "tools/widl/parser.y" +#line 506 "tools/widl/parser.y" { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL, &(yyloc)); } -#line 3919 "tools/widl/parser.tab.c" +#line 3920 "tools/widl/parser.tab.c" break; case 64: /* typedecl: tSTRUCT typename */ -#line 507 "tools/widl/parser.y" +#line 508 "tools/widl/parser.y" { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL, &(yyloc)); } -#line 3925 "tools/widl/parser.tab.c" +#line 3926 "tools/widl/parser.tab.c" break; case 66: /* typedecl: tUNION typename */ -#line 509 "tools/widl/parser.y" +#line 510 "tools/widl/parser.y" { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), current_namespace, FALSE, NULL, &(yyloc)); } -#line 3931 "tools/widl/parser.tab.c" +#line 3932 "tools/widl/parser.tab.c" break; case 67: /* typedecl: attributes enumdef */ -#line 510 "tools/widl/parser.y" +#line 511 "tools/widl/parser.y" { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_enum_attrs((yyvsp[-1].attr_list)); } -#line 3937 "tools/widl/parser.tab.c" +#line 3938 "tools/widl/parser.tab.c" break; case 68: /* typedecl: attributes structdef */ -#line 511 "tools/widl/parser.y" +#line 512 "tools/widl/parser.y" { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_struct_attrs((yyvsp[-1].attr_list)); } -#line 3943 "tools/widl/parser.tab.c" +#line 3944 "tools/widl/parser.tab.c" break; case 69: /* typedecl: attributes uniondef */ -#line 512 "tools/widl/parser.y" +#line 513 "tools/widl/parser.y" { (yyval.type) = (yyvsp[0].type); (yyval.type)->attrs = check_union_attrs((yyvsp[-1].attr_list)); } -#line 3949 "tools/widl/parser.tab.c" +#line 3950 "tools/widl/parser.tab.c" break; case 70: /* cppquote: tCPPQUOTE '(' aSTRING ')' */ -#line 515 "tools/widl/parser.y" +#line 516 "tools/widl/parser.y" { (yyval.str) = (yyvsp[-1].str); } -#line 3955 "tools/widl/parser.tab.c" +#line 3956 "tools/widl/parser.tab.c" break; case 71: /* import_start: tIMPORT aSTRING ';' */ -#line 518 "tools/widl/parser.y" +#line 519 "tools/widl/parser.y" { (yyval.str) = (yyvsp[-1].str); push_import( (yyvsp[-1].str), &yylloc ); } -#line 3961 "tools/widl/parser.tab.c" +#line 3962 "tools/widl/parser.tab.c" break; case 72: /* import: import_start imp_statements aEOF */ -#line 520 "tools/widl/parser.y" +#line 521 "tools/widl/parser.y" { yylloc = pop_import(); } -#line 3967 "tools/widl/parser.tab.c" +#line 3968 "tools/widl/parser.tab.c" break; case 73: /* importlib: tIMPORTLIB '(' aSTRING ')' semicolon_opt */ -#line 524 "tools/widl/parser.y" +#line 525 "tools/widl/parser.y" { (yyval.str) = (yyvsp[-2].str); if(!parse_only) add_importlib((yyvsp[-2].str), current_typelib); } -#line 3973 "tools/widl/parser.tab.c" +#line 3974 "tools/widl/parser.tab.c" break; case 74: /* libraryhdr: tLIBRARY typename */ -#line 527 "tools/widl/parser.y" +#line 528 "tools/widl/parser.y" { (yyval.str) = (yyvsp[0].str); } -#line 3979 "tools/widl/parser.tab.c" +#line 3980 "tools/widl/parser.tab.c" break; case 75: /* library_start: attributes libraryhdr '{' */ -#line 529 "tools/widl/parser.y" +#line 530 "tools/widl/parser.y" { (yyval.typelib) = make_library((yyvsp[-1].str), check_library_attrs((yyvsp[-1].str), (yyvsp[-2].attr_list))); if (!parse_only && do_typelib) current_typelib = (yyval.typelib); } -#line 3987 "tools/widl/parser.tab.c" +#line 3988 "tools/widl/parser.tab.c" break; case 76: /* librarydef: library_start imp_statements '}' semicolon_opt */ -#line 534 "tools/widl/parser.y" +#line 535 "tools/widl/parser.y" { (yyval.typelib) = (yyvsp[-3].typelib); (yyval.typelib)->stmts = (yyvsp[-2].stmt_list); } -#line 3993 "tools/widl/parser.tab.c" +#line 3994 "tools/widl/parser.tab.c" break; case 77: /* m_args: %empty */ -#line 538 "tools/widl/parser.y" +#line 539 "tools/widl/parser.y" { (yyval.var_list) = NULL; } -#line 3999 "tools/widl/parser.tab.c" +#line 4000 "tools/widl/parser.tab.c" break; case 79: /* arg_list: arg */ -#line 542 "tools/widl/parser.y" +#line 543 "tools/widl/parser.y" { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); } -#line 4005 "tools/widl/parser.tab.c" +#line 4006 "tools/widl/parser.tab.c" break; case 80: /* arg_list: arg_list ',' arg */ -#line 543 "tools/widl/parser.y" +#line 544 "tools/widl/parser.y" { check_arg_attrs((yyvsp[0].var)); (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) ); } -#line 4011 "tools/widl/parser.tab.c" +#line 4012 "tools/widl/parser.tab.c" break; case 82: /* args: arg_list ',' ELLIPSIS */ -#line 547 "tools/widl/parser.y" +#line 548 "tools/widl/parser.y" { (yyval.var_list) = append_var( (yyvsp[-2].var_list), make_var(xstrdup("...")) ); } -#line 4017 "tools/widl/parser.tab.c" +#line 4018 "tools/widl/parser.tab.c" break; case 83: /* arg: attributes decl_spec m_any_declarator */ -#line 551 "tools/widl/parser.y" +#line 552 "tools/widl/parser.y" { if ((yyvsp[-1].declspec)->stgclass != STG_NONE && (yyvsp[-1].declspec)->stgclass != STG_REGISTER) error_loc("invalid storage class for function parameter\n"); (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), TRUE); free((yyvsp[-1].declspec)); free((yyvsp[0].declarator)); } -#line 4027 "tools/widl/parser.tab.c" +#line 4028 "tools/widl/parser.tab.c" break; case 84: /* arg: decl_spec m_any_declarator */ -#line 556 "tools/widl/parser.y" +#line 557 "tools/widl/parser.y" { if ((yyvsp[-1].declspec)->stgclass != STG_NONE && (yyvsp[-1].declspec)->stgclass != STG_REGISTER) error_loc("invalid storage class for function parameter\n"); (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), TRUE); free((yyvsp[-1].declspec)); free((yyvsp[0].declarator)); } -#line 4037 "tools/widl/parser.tab.c" +#line 4038 "tools/widl/parser.tab.c" break; case 85: /* array: '[' expr ']' */ -#line 563 "tools/widl/parser.y" +#line 564 "tools/widl/parser.y" { (yyval.expr) = (yyvsp[-1].expr); if (!(yyval.expr)->is_const || (yyval.expr)->cval <= 0) error_loc("array dimension is not a positive integer constant\n"); } -#line 4046 "tools/widl/parser.tab.c" +#line 4047 "tools/widl/parser.tab.c" break; case 86: /* array: '[' '*' ']' */ -#line 567 "tools/widl/parser.y" +#line 568 "tools/widl/parser.y" { (yyval.expr) = make_expr(EXPR_VOID); } -#line 4052 "tools/widl/parser.tab.c" +#line 4053 "tools/widl/parser.tab.c" break; case 87: /* array: '[' ']' */ -#line 568 "tools/widl/parser.y" +#line 569 "tools/widl/parser.y" { (yyval.expr) = make_expr(EXPR_VOID); } -#line 4058 "tools/widl/parser.tab.c" +#line 4059 "tools/widl/parser.tab.c" break; case 88: /* m_attributes: %empty */ -#line 572 "tools/widl/parser.y" +#line 573 "tools/widl/parser.y" { (yyval.attr_list) = NULL; } -#line 4064 "tools/widl/parser.tab.c" +#line 4065 "tools/widl/parser.tab.c" break; case 90: /* attributes: '[' attrib_list ']' */ -#line 577 "tools/widl/parser.y" +#line 578 "tools/widl/parser.y" { (yyval.attr_list) = (yyvsp[-1].attr_list); } -#line 4070 "tools/widl/parser.tab.c" +#line 4071 "tools/widl/parser.tab.c" break; case 91: /* attrib_list: attribute */ -#line 580 "tools/widl/parser.y" +#line 581 "tools/widl/parser.y" { (yyval.attr_list) = append_attr( NULL, (yyvsp[0].attr) ); } -#line 4076 "tools/widl/parser.tab.c" +#line 4077 "tools/widl/parser.tab.c" break; case 92: /* attrib_list: attrib_list ',' attribute */ -#line 581 "tools/widl/parser.y" +#line 582 "tools/widl/parser.y" { (yyval.attr_list) = append_attr( (yyvsp[-2].attr_list), (yyvsp[0].attr) ); } -#line 4082 "tools/widl/parser.tab.c" +#line 4083 "tools/widl/parser.tab.c" break; case 93: /* attrib_list: attrib_list ']' '[' attribute */ -#line 582 "tools/widl/parser.y" +#line 583 "tools/widl/parser.y" { (yyval.attr_list) = append_attr( (yyvsp[-3].attr_list), (yyvsp[0].attr) ); } -#line 4088 "tools/widl/parser.tab.c" +#line 4089 "tools/widl/parser.tab.c" break; case 94: /* str_list: aSTRING */ -#line 585 "tools/widl/parser.y" +#line 586 "tools/widl/parser.y" { (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); } -#line 4094 "tools/widl/parser.tab.c" +#line 4095 "tools/widl/parser.tab.c" break; case 95: /* str_list: str_list ',' aSTRING */ -#line 586 "tools/widl/parser.y" +#line 587 "tools/widl/parser.y" { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); } -#line 4100 "tools/widl/parser.tab.c" +#line 4101 "tools/widl/parser.tab.c" break; case 96: /* marshaling_behavior: tAGILE */ -#line 590 "tools/widl/parser.y" +#line 591 "tools/widl/parser.y" { (yyval.num) = MARSHALING_AGILE; } -#line 4106 "tools/widl/parser.tab.c" +#line 4107 "tools/widl/parser.tab.c" break; case 97: /* marshaling_behavior: tNONE */ -#line 591 "tools/widl/parser.y" +#line 592 "tools/widl/parser.y" { (yyval.num) = MARSHALING_NONE; } -#line 4112 "tools/widl/parser.tab.c" +#line 4113 "tools/widl/parser.tab.c" break; case 98: /* marshaling_behavior: tSTANDARD */ -#line 592 "tools/widl/parser.y" +#line 593 "tools/widl/parser.y" { (yyval.num) = MARSHALING_STANDARD; } -#line 4118 "tools/widl/parser.tab.c" +#line 4119 "tools/widl/parser.tab.c" break; case 99: /* contract_ver: aNUM */ -#line 596 "tools/widl/parser.y" +#line 597 "tools/widl/parser.y" { (yyval.num) = MAKEVERSION(0, (yyvsp[0].integer).value); } -#line 4124 "tools/widl/parser.tab.c" +#line 4125 "tools/widl/parser.tab.c" break; case 100: /* contract_ver: aNUM '.' aNUM */ -#line 597 "tools/widl/parser.y" +#line 598 "tools/widl/parser.y" { (yyval.num) = MAKEVERSION((yyvsp[0].integer).value, (yyvsp[-2].integer).value); } -#line 4130 "tools/widl/parser.tab.c" +#line 4131 "tools/widl/parser.tab.c" break; case 101: /* contract_req: decl_spec ',' contract_ver */ -#line 601 "tools/widl/parser.y" +#line 602 "tools/widl/parser.y" { struct integer integer = {.value = (yyvsp[0].num)}; if ((yyvsp[-2].declspec)->type->type_type != TYPE_APICONTRACT) @@ -4138,814 +4139,814 @@ (yyval.expr) = make_exprl(EXPR_NUM, &integer); (yyval.expr) = make_exprt(EXPR_GTREQL, declare_var(NULL, (yyvsp[-2].declspec), make_declarator(NULL), 0), (yyval.expr)); } -#line 4142 "tools/widl/parser.tab.c" +#line 4143 "tools/widl/parser.tab.c" break; case 102: /* static_attr: decl_spec ',' contract_req */ -#line 611 "tools/widl/parser.y" +#line 612 "tools/widl/parser.y" { if ((yyvsp[-2].declspec)->type->type_type != TYPE_INTERFACE) error_loc("type %s is not an interface\n", (yyvsp[-2].declspec)->type->name); (yyval.expr) = make_exprt(EXPR_MEMBER, declare_var(NULL, (yyvsp[-2].declspec), make_declarator(NULL), 0), (yyvsp[0].expr)); } -#line 4151 "tools/widl/parser.tab.c" +#line 4152 "tools/widl/parser.tab.c" break; case 103: /* activatable_attr: decl_spec ',' contract_req */ -#line 618 "tools/widl/parser.y" +#line 619 "tools/widl/parser.y" { if ((yyvsp[-2].declspec)->type->type_type != TYPE_INTERFACE) error_loc("type %s is not an interface\n", (yyvsp[-2].declspec)->type->name); (yyval.expr) = make_exprt(EXPR_MEMBER, declare_var(NULL, (yyvsp[-2].declspec), make_declarator(NULL), 0), (yyvsp[0].expr)); } -#line 4160 "tools/widl/parser.tab.c" +#line 4161 "tools/widl/parser.tab.c" break; case 104: /* activatable_attr: contract_req */ -#line 622 "tools/widl/parser.y" +#line 623 "tools/widl/parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 4166 "tools/widl/parser.tab.c" +#line 4167 "tools/widl/parser.tab.c" break; case 105: /* access_attr: tPUBLIC */ -#line 626 "tools/widl/parser.y" +#line 627 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_PUBLIC, 0 ); } -#line 4172 "tools/widl/parser.tab.c" +#line 4173 "tools/widl/parser.tab.c" break; case 106: /* access_attr: tPROTECTED */ -#line 627 "tools/widl/parser.y" +#line 628 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_PROTECTED, 0 ); } -#line 4178 "tools/widl/parser.tab.c" +#line 4179 "tools/widl/parser.tab.c" break; case 107: /* composable_attr: decl_spec ',' access_attr ',' contract_req */ -#line 632 "tools/widl/parser.y" +#line 633 "tools/widl/parser.y" { if ((yyvsp[-4].declspec)->type->type_type != TYPE_INTERFACE) error_loc( "type %s is not an interface\n", (yyvsp[-4].declspec)->type->name ); (yyval.expr) = make_exprt( EXPR_MEMBER, declare_var( append_attr( NULL, (yyvsp[-2].attr) ), (yyvsp[-4].declspec), make_declarator( NULL ), 0 ), (yyvsp[0].expr) ); } -#line 4187 "tools/widl/parser.tab.c" +#line 4188 "tools/widl/parser.tab.c" break; case 108: /* deprecated_attr: aSTRING ',' aIDENTIFIER ',' contract_req */ -#line 640 "tools/widl/parser.y" +#line 641 "tools/widl/parser.y" { (yyval.expr) = make_expr3( EXPR_MEMBER, make_exprs( EXPR_STRLIT, (yyvsp[-4].str) ), make_exprs( EXPR_IDENTIFIER, (yyvsp[-2].str) ), (yyvsp[0].expr) ); } -#line 4193 "tools/widl/parser.tab.c" +#line 4194 "tools/widl/parser.tab.c" break; case 109: /* attribute: %empty */ -#line 644 "tools/widl/parser.y" +#line 645 "tools/widl/parser.y" { (yyval.attr) = NULL; } -#line 4199 "tools/widl/parser.tab.c" +#line 4200 "tools/widl/parser.tab.c" break; case 110: /* attribute: tACTIVATABLE '(' activatable_attr ')' */ -#line 645 "tools/widl/parser.y" +#line 646 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_ACTIVATABLE, (yyvsp[-1].expr) ); } -#line 4205 "tools/widl/parser.tab.c" +#line 4206 "tools/widl/parser.tab.c" break; case 111: /* attribute: tAGGREGATABLE */ -#line 646 "tools/widl/parser.y" +#line 647 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_AGGREGATABLE, 0 ); } -#line 4211 "tools/widl/parser.tab.c" +#line 4212 "tools/widl/parser.tab.c" break; case 112: /* attribute: tANNOTATION '(' aSTRING ')' */ -#line 647 "tools/widl/parser.y" +#line 648 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_ANNOTATION, (yyvsp[-1].str) ); } -#line 4217 "tools/widl/parser.tab.c" +#line 4218 "tools/widl/parser.tab.c" break; case 113: /* attribute: tAPPOBJECT */ -#line 648 "tools/widl/parser.y" +#line 649 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_APPOBJECT, 0 ); } -#line 4223 "tools/widl/parser.tab.c" +#line 4224 "tools/widl/parser.tab.c" break; case 114: /* attribute: tASYNC */ -#line 649 "tools/widl/parser.y" +#line 650 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_ASYNC, 0 ); } -#line 4229 "tools/widl/parser.tab.c" +#line 4230 "tools/widl/parser.tab.c" break; case 115: /* attribute: tAUTOHANDLE */ -#line 650 "tools/widl/parser.y" +#line 651 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_AUTO_HANDLE, 0 ); } -#line 4235 "tools/widl/parser.tab.c" +#line 4236 "tools/widl/parser.tab.c" break; case 116: /* attribute: tBINDABLE */ -#line 651 "tools/widl/parser.y" +#line 652 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_BINDABLE, 0 ); } -#line 4241 "tools/widl/parser.tab.c" +#line 4242 "tools/widl/parser.tab.c" break; case 117: /* attribute: tBROADCAST */ -#line 652 "tools/widl/parser.y" +#line 653 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_BROADCAST, 0 ); } -#line 4247 "tools/widl/parser.tab.c" +#line 4248 "tools/widl/parser.tab.c" break; case 118: /* attribute: tCALLAS '(' ident ')' */ -#line 653 "tools/widl/parser.y" +#line 654 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_CALLAS, (yyvsp[-1].var) ); } -#line 4253 "tools/widl/parser.tab.c" +#line 4254 "tools/widl/parser.tab.c" break; case 119: /* attribute: tCASE '(' expr_list_int_const ')' */ -#line 654 "tools/widl/parser.y" +#line 655 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_CASE, (yyvsp[-1].expr_list) ); } -#line 4259 "tools/widl/parser.tab.c" +#line 4260 "tools/widl/parser.tab.c" break; case 120: /* attribute: tCODE */ -#line 655 "tools/widl/parser.y" +#line 656 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_CODE, 0 ); } -#line 4265 "tools/widl/parser.tab.c" +#line 4266 "tools/widl/parser.tab.c" break; case 121: /* attribute: tCOMPOSABLE '(' composable_attr ')' */ -#line 656 "tools/widl/parser.y" +#line 657 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_COMPOSABLE, (yyvsp[-1].expr) ); } -#line 4271 "tools/widl/parser.tab.c" +#line 4272 "tools/widl/parser.tab.c" break; case 122: /* attribute: tCOMMSTATUS */ -#line 657 "tools/widl/parser.y" +#line 658 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_COMMSTATUS, 0 ); } -#line 4277 "tools/widl/parser.tab.c" +#line 4278 "tools/widl/parser.tab.c" break; case 123: /* attribute: tCONTEXTHANDLE */ -#line 658 "tools/widl/parser.y" +#line 659 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_CONTEXTHANDLE, 0 ); } -#line 4283 "tools/widl/parser.tab.c" +#line 4284 "tools/widl/parser.tab.c" break; case 124: /* attribute: tCONTEXTHANDLENOSERIALIZE */ -#line 659 "tools/widl/parser.y" +#line 660 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_CONTEXTHANDLE, 0 ); /* RPC_CONTEXT_HANDLE_DONT_SERIALIZE */ } -#line 4289 "tools/widl/parser.tab.c" +#line 4290 "tools/widl/parser.tab.c" break; case 125: /* attribute: tCONTEXTHANDLESERIALIZE */ -#line 660 "tools/widl/parser.y" +#line 661 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_CONTEXTHANDLE, 0 ); /* RPC_CONTEXT_HANDLE_SERIALIZE */ } -#line 4295 "tools/widl/parser.tab.c" +#line 4296 "tools/widl/parser.tab.c" break; case 126: /* attribute: tCONTRACT '(' contract_req ')' */ -#line 661 "tools/widl/parser.y" +#line 662 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_CONTRACT, (yyvsp[-1].expr) ); } -#line 4301 "tools/widl/parser.tab.c" +#line 4302 "tools/widl/parser.tab.c" break; case 127: /* attribute: tCONTRACTVERSION '(' contract_ver ')' */ -#line 662 "tools/widl/parser.y" +#line 663 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_CONTRACTVERSION, (yyvsp[-1].num) ); } -#line 4307 "tools/widl/parser.tab.c" +#line 4308 "tools/widl/parser.tab.c" break; case 128: /* attribute: tCONTROL */ -#line 663 "tools/widl/parser.y" +#line 664 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_CONTROL, 0 ); } -#line 4313 "tools/widl/parser.tab.c" +#line 4314 "tools/widl/parser.tab.c" break; case 129: /* attribute: tCUSTOM '(' aUUID ',' expr_const ')' */ -#line 664 "tools/widl/parser.y" +#line 665 "tools/widl/parser.y" { attr_custdata_t *data = xmalloc( sizeof(*data) ); data->id = *(yyvsp[-3].uuid); data->pval = (yyvsp[-1].expr); (yyval.attr) = attr_ptr( (yyloc), ATTR_CUSTOM, data ); } -#line 4322 "tools/widl/parser.tab.c" +#line 4323 "tools/widl/parser.tab.c" break; case 130: /* attribute: tDECODE */ -#line 668 "tools/widl/parser.y" +#line 669 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_DECODE, 0 ); } -#line 4328 "tools/widl/parser.tab.c" +#line 4329 "tools/widl/parser.tab.c" break; case 131: /* attribute: tDEFAULT */ -#line 669 "tools/widl/parser.y" +#line 670 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_DEFAULT, 0 ); } -#line 4334 "tools/widl/parser.tab.c" +#line 4335 "tools/widl/parser.tab.c" break; case 132: /* attribute: tDEFAULT_OVERLOAD */ -#line 670 "tools/widl/parser.y" +#line 671 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_DEFAULT_OVERLOAD, 0 ); } -#line 4340 "tools/widl/parser.tab.c" +#line 4341 "tools/widl/parser.tab.c" break; case 133: /* attribute: tDEFAULTBIND */ -#line 671 "tools/widl/parser.y" +#line 672 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_DEFAULTBIND, 0 ); } -#line 4346 "tools/widl/parser.tab.c" +#line 4347 "tools/widl/parser.tab.c" break; case 134: /* attribute: tDEFAULTCOLLELEM */ -#line 672 "tools/widl/parser.y" +#line 673 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_DEFAULTCOLLELEM, 0 ); } -#line 4352 "tools/widl/parser.tab.c" +#line 4353 "tools/widl/parser.tab.c" break; case 135: /* attribute: tDEFAULTVALUE '(' expr_const ')' */ -#line 673 "tools/widl/parser.y" +#line 674 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_DEFAULTVALUE, (yyvsp[-1].expr) ); } -#line 4358 "tools/widl/parser.tab.c" +#line 4359 "tools/widl/parser.tab.c" break; case 136: /* attribute: tDEFAULTVTABLE */ -#line 674 "tools/widl/parser.y" +#line 675 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_DEFAULTVTABLE, 0 ); } -#line 4364 "tools/widl/parser.tab.c" +#line 4365 "tools/widl/parser.tab.c" break; case 137: /* attribute: tDEPRECATED '(' deprecated_attr ')' */ -#line 675 "tools/widl/parser.y" +#line 676 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_DEPRECATED, (yyvsp[-1].expr) ); } -#line 4370 "tools/widl/parser.tab.c" +#line 4371 "tools/widl/parser.tab.c" break; case 138: /* attribute: tDISABLECONSISTENCYCHECK */ -#line 676 "tools/widl/parser.y" +#line 677 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_DISABLECONSISTENCYCHECK, 0 ); } -#line 4376 "tools/widl/parser.tab.c" +#line 4377 "tools/widl/parser.tab.c" break; case 139: /* attribute: tDISPLAYBIND */ -#line 677 "tools/widl/parser.y" +#line 678 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_DISPLAYBIND, 0 ); } -#line 4382 "tools/widl/parser.tab.c" +#line 4383 "tools/widl/parser.tab.c" break; case 140: /* attribute: tDLLNAME '(' aSTRING ')' */ -#line 678 "tools/widl/parser.y" +#line 679 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_DLLNAME, (yyvsp[-1].str) ); } -#line 4388 "tools/widl/parser.tab.c" +#line 4389 "tools/widl/parser.tab.c" break; case 141: /* attribute: tDUAL */ -#line 679 "tools/widl/parser.y" +#line 680 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_DUAL, 0 ); } -#line 4394 "tools/widl/parser.tab.c" +#line 4395 "tools/widl/parser.tab.c" break; case 142: /* attribute: tENABLEALLOCATE */ -#line 680 "tools/widl/parser.y" +#line 681 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_ENABLEALLOCATE, 0 ); } -#line 4400 "tools/widl/parser.tab.c" +#line 4401 "tools/widl/parser.tab.c" break; case 143: /* attribute: tENCODE */ -#line 681 "tools/widl/parser.y" +#line 682 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_ENCODE, 0 ); } -#line 4406 "tools/widl/parser.tab.c" +#line 4407 "tools/widl/parser.tab.c" break; case 144: /* attribute: tENDPOINT '(' str_list ')' */ -#line 682 "tools/widl/parser.y" +#line 683 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_ENDPOINT, (yyvsp[-1].str_list) ); } -#line 4412 "tools/widl/parser.tab.c" +#line 4413 "tools/widl/parser.tab.c" break; case 145: /* attribute: tENTRY '(' expr_const ')' */ -#line 683 "tools/widl/parser.y" +#line 684 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_ENTRY, (yyvsp[-1].expr) ); } -#line 4418 "tools/widl/parser.tab.c" +#line 4419 "tools/widl/parser.tab.c" break; case 146: /* attribute: tEVENTADD */ -#line 684 "tools/widl/parser.y" +#line 685 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_EVENTADD, 0 ); } -#line 4424 "tools/widl/parser.tab.c" +#line 4425 "tools/widl/parser.tab.c" break; case 147: /* attribute: tEVENTREMOVE */ -#line 685 "tools/widl/parser.y" +#line 686 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_EVENTREMOVE, 0 ); } -#line 4430 "tools/widl/parser.tab.c" +#line 4431 "tools/widl/parser.tab.c" break; case 148: /* attribute: tEXCLUSIVETO '(' decl_spec ')' */ -#line 686 "tools/widl/parser.y" +#line 687 "tools/widl/parser.y" { if ((yyvsp[-1].declspec)->type->type_type != TYPE_RUNTIMECLASS) error_loc( "type %s is not a runtimeclass\n", (yyvsp[-1].declspec)->type->name ); (yyval.attr) = attr_ptr( (yyloc), ATTR_EXCLUSIVETO, (yyvsp[-1].declspec)->type ); } -#line 4439 "tools/widl/parser.tab.c" +#line 4440 "tools/widl/parser.tab.c" break; case 149: /* attribute: tEXPLICITHANDLE */ -#line 690 "tools/widl/parser.y" +#line 691 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_EXPLICIT_HANDLE, 0 ); } -#line 4445 "tools/widl/parser.tab.c" +#line 4446 "tools/widl/parser.tab.c" break; case 150: /* attribute: tFAULTSTATUS */ -#line 691 "tools/widl/parser.y" +#line 692 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_FAULTSTATUS, 0 ); } -#line 4451 "tools/widl/parser.tab.c" +#line 4452 "tools/widl/parser.tab.c" break; case 151: /* attribute: tFLAGS */ -#line 692 "tools/widl/parser.y" +#line 693 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_FLAGS, 0 ); } -#line 4457 "tools/widl/parser.tab.c" +#line 4458 "tools/widl/parser.tab.c" break; case 152: /* attribute: tFORCEALLOCATE */ -#line 693 "tools/widl/parser.y" +#line 694 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_FORCEALLOCATE, 0 ); } -#line 4463 "tools/widl/parser.tab.c" +#line 4464 "tools/widl/parser.tab.c" break; case 153: /* attribute: tHANDLE */ -#line 694 "tools/widl/parser.y" +#line 695 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_HANDLE, 0 ); } -#line 4469 "tools/widl/parser.tab.c" +#line 4470 "tools/widl/parser.tab.c" break; case 154: /* attribute: tHELPCONTEXT '(' expr_int_const ')' */ -#line 695 "tools/widl/parser.y" +#line 696 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_HELPCONTEXT, (yyvsp[-1].expr) ); } -#line 4475 "tools/widl/parser.tab.c" +#line 4476 "tools/widl/parser.tab.c" break; case 155: /* attribute: tHELPFILE '(' aSTRING ')' */ -#line 696 "tools/widl/parser.y" +#line 697 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_HELPFILE, (yyvsp[-1].str) ); } -#line 4481 "tools/widl/parser.tab.c" +#line 4482 "tools/widl/parser.tab.c" break; case 156: /* attribute: tHELPSTRING '(' aSTRING ')' */ -#line 697 "tools/widl/parser.y" +#line 698 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_HELPSTRING, (yyvsp[-1].str) ); } -#line 4487 "tools/widl/parser.tab.c" +#line 4488 "tools/widl/parser.tab.c" break; case 157: /* attribute: tHELPSTRINGCONTEXT '(' expr_int_const ')' */ -#line 699 "tools/widl/parser.y" +#line 700 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_HELPSTRINGCONTEXT, (yyvsp[-1].expr) ); } -#line 4493 "tools/widl/parser.tab.c" +#line 4494 "tools/widl/parser.tab.c" break; case 158: /* attribute: tHELPSTRINGDLL '(' aSTRING ')' */ -#line 700 "tools/widl/parser.y" +#line 701 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_HELPSTRINGDLL, (yyvsp[-1].str) ); } -#line 4499 "tools/widl/parser.tab.c" +#line 4500 "tools/widl/parser.tab.c" break; case 159: /* attribute: tHIDDEN */ -#line 701 "tools/widl/parser.y" +#line 702 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_HIDDEN, 0 ); } -#line 4505 "tools/widl/parser.tab.c" +#line 4506 "tools/widl/parser.tab.c" break; case 160: /* attribute: tID '(' expr_int_const ')' */ -#line 702 "tools/widl/parser.y" +#line 703 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_ID, (yyvsp[-1].expr) ); } -#line 4511 "tools/widl/parser.tab.c" +#line 4512 "tools/widl/parser.tab.c" break; case 161: /* attribute: tIDEMPOTENT */ -#line 703 "tools/widl/parser.y" +#line 704 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_IDEMPOTENT, 0 ); } -#line 4517 "tools/widl/parser.tab.c" +#line 4518 "tools/widl/parser.tab.c" break; case 162: /* attribute: tIGNORE */ -#line 704 "tools/widl/parser.y" +#line 705 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_IGNORE, 0 ); } -#line 4523 "tools/widl/parser.tab.c" +#line 4524 "tools/widl/parser.tab.c" break; case 163: /* attribute: tIIDIS '(' expr ')' */ -#line 705 "tools/widl/parser.y" +#line 706 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_IIDIS, (yyvsp[-1].expr) ); } -#line 4529 "tools/widl/parser.tab.c" +#line 4530 "tools/widl/parser.tab.c" break; case 164: /* attribute: tIMMEDIATEBIND */ -#line 706 "tools/widl/parser.y" +#line 707 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_IMMEDIATEBIND, 0 ); } -#line 4535 "tools/widl/parser.tab.c" +#line 4536 "tools/widl/parser.tab.c" break; case 165: /* attribute: tIMPLICITHANDLE '(' arg ')' */ -#line 707 "tools/widl/parser.y" +#line 708 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_IMPLICIT_HANDLE, (yyvsp[-1].var) ); } -#line 4541 "tools/widl/parser.tab.c" +#line 4542 "tools/widl/parser.tab.c" break; case 166: /* attribute: tIN */ -#line 708 "tools/widl/parser.y" +#line 709 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_IN, 0 ); } -#line 4547 "tools/widl/parser.tab.c" +#line 4548 "tools/widl/parser.tab.c" break; case 167: /* attribute: tINPUTSYNC */ -#line 709 "tools/widl/parser.y" +#line 710 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_INPUTSYNC, 0 ); } -#line 4553 "tools/widl/parser.tab.c" +#line 4554 "tools/widl/parser.tab.c" break; case 168: /* attribute: tLENGTHIS '(' m_exprs ')' */ -#line 710 "tools/widl/parser.y" +#line 711 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_LENGTHIS, (yyvsp[-1].expr_list) ); } -#line 4559 "tools/widl/parser.tab.c" +#line 4560 "tools/widl/parser.tab.c" break; case 169: /* attribute: tLCID '(' expr_int_const ')' */ -#line 711 "tools/widl/parser.y" +#line 712 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_LIBLCID, (yyvsp[-1].expr) ); } -#line 4565 "tools/widl/parser.tab.c" +#line 4566 "tools/widl/parser.tab.c" break; case 170: /* attribute: tLCID */ -#line 712 "tools/widl/parser.y" +#line 713 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_PARAMLCID, 0 ); } -#line 4571 "tools/widl/parser.tab.c" +#line 4572 "tools/widl/parser.tab.c" break; case 171: /* attribute: tLICENSED */ -#line 713 "tools/widl/parser.y" +#line 714 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_LICENSED, 0 ); } -#line 4577 "tools/widl/parser.tab.c" +#line 4578 "tools/widl/parser.tab.c" break; case 172: /* attribute: tLOCAL */ -#line 714 "tools/widl/parser.y" +#line 715 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_LOCAL, 0 ); } -#line 4583 "tools/widl/parser.tab.c" +#line 4584 "tools/widl/parser.tab.c" break; case 173: /* attribute: tMARSHALINGBEHAVIOR '(' marshaling_behavior ')' */ -#line 716 "tools/widl/parser.y" +#line 717 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_MARSHALING_BEHAVIOR, (yyvsp[-1].num) ); } -#line 4589 "tools/widl/parser.tab.c" +#line 4590 "tools/widl/parser.tab.c" break; case 174: /* attribute: tMAYBE */ -#line 717 "tools/widl/parser.y" +#line 718 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_MAYBE, 0 ); } -#line 4595 "tools/widl/parser.tab.c" +#line 4596 "tools/widl/parser.tab.c" break; case 175: /* attribute: tMESSAGE */ -#line 718 "tools/widl/parser.y" +#line 719 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_MESSAGE, 0 ); } -#line 4601 "tools/widl/parser.tab.c" +#line 4602 "tools/widl/parser.tab.c" break; case 176: /* attribute: tNOCODE */ -#line 719 "tools/widl/parser.y" +#line 720 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_NOCODE, 0 ); } -#line 4607 "tools/widl/parser.tab.c" +#line 4608 "tools/widl/parser.tab.c" break; case 177: /* attribute: tNONBROWSABLE */ -#line 720 "tools/widl/parser.y" +#line 721 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_NONBROWSABLE, 0 ); } -#line 4613 "tools/widl/parser.tab.c" +#line 4614 "tools/widl/parser.tab.c" break; case 178: /* attribute: tNONCREATABLE */ -#line 721 "tools/widl/parser.y" +#line 722 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_NONCREATABLE, 0 ); } -#line 4619 "tools/widl/parser.tab.c" +#line 4620 "tools/widl/parser.tab.c" break; case 179: /* attribute: tNONEXTENSIBLE */ -#line 722 "tools/widl/parser.y" +#line 723 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_NONEXTENSIBLE, 0 ); } -#line 4625 "tools/widl/parser.tab.c" +#line 4626 "tools/widl/parser.tab.c" break; case 180: /* attribute: tNOTIFY */ -#line 723 "tools/widl/parser.y" +#line 724 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_NOTIFY, 0 ); } -#line 4631 "tools/widl/parser.tab.c" +#line 4632 "tools/widl/parser.tab.c" break; case 181: /* attribute: tNOTIFYFLAG */ -#line 724 "tools/widl/parser.y" +#line 725 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_NOTIFYFLAG, 0 ); } -#line 4637 "tools/widl/parser.tab.c" +#line 4638 "tools/widl/parser.tab.c" break; case 182: /* attribute: tOBJECT */ -#line 725 "tools/widl/parser.y" +#line 726 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_OBJECT, 0 ); } -#line 4643 "tools/widl/parser.tab.c" +#line 4644 "tools/widl/parser.tab.c" break; case 183: /* attribute: tODL */ -#line 726 "tools/widl/parser.y" +#line 727 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_ODL, 0 ); } -#line 4649 "tools/widl/parser.tab.c" +#line 4650 "tools/widl/parser.tab.c" break; case 184: /* attribute: tOLEAUTOMATION */ -#line 727 "tools/widl/parser.y" +#line 728 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_OLEAUTOMATION, 0 ); } -#line 4655 "tools/widl/parser.tab.c" +#line 4656 "tools/widl/parser.tab.c" break; case 185: /* attribute: tOPTIMIZE '(' aSTRING ')' */ -#line 728 "tools/widl/parser.y" +#line 729 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_OPTIMIZE, (yyvsp[-1].str) ); } -#line 4661 "tools/widl/parser.tab.c" +#line 4662 "tools/widl/parser.tab.c" break; case 186: /* attribute: tOPTIONAL */ -#line 729 "tools/widl/parser.y" +#line 730 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_OPTIONAL, 0 ); } -#line 4667 "tools/widl/parser.tab.c" +#line 4668 "tools/widl/parser.tab.c" break; case 187: /* attribute: tOUT */ -#line 730 "tools/widl/parser.y" +#line 731 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_OUT, 0 ); } -#line 4673 "tools/widl/parser.tab.c" +#line 4674 "tools/widl/parser.tab.c" break; case 188: /* attribute: tOVERLOAD '(' aSTRING ')' */ -#line 731 "tools/widl/parser.y" +#line 732 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_OVERLOAD, (yyvsp[-1].str) ); } -#line 4679 "tools/widl/parser.tab.c" +#line 4680 "tools/widl/parser.tab.c" break; case 189: /* attribute: tPARTIALIGNORE */ -#line 732 "tools/widl/parser.y" +#line 733 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_PARTIALIGNORE, 0 ); } -#line 4685 "tools/widl/parser.tab.c" +#line 4686 "tools/widl/parser.tab.c" break; case 190: /* attribute: tPOINTERDEFAULT '(' pointer_type ')' */ -#line 733 "tools/widl/parser.y" +#line 734 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_POINTERDEFAULT, (yyvsp[-1].num) ); } -#line 4691 "tools/widl/parser.tab.c" +#line 4692 "tools/widl/parser.tab.c" break; case 191: /* attribute: tPROGID '(' aSTRING ')' */ -#line 734 "tools/widl/parser.y" +#line 735 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_PROGID, (yyvsp[-1].str) ); } -#line 4697 "tools/widl/parser.tab.c" +#line 4698 "tools/widl/parser.tab.c" break; case 192: /* attribute: tPROPGET */ -#line 735 "tools/widl/parser.y" +#line 736 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_PROPGET, 0 ); } -#line 4703 "tools/widl/parser.tab.c" +#line 4704 "tools/widl/parser.tab.c" break; case 193: /* attribute: tPROPPUT */ -#line 736 "tools/widl/parser.y" +#line 737 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_PROPPUT, 0 ); } -#line 4709 "tools/widl/parser.tab.c" +#line 4710 "tools/widl/parser.tab.c" break; case 194: /* attribute: tPROPPUTREF */ -#line 737 "tools/widl/parser.y" +#line 738 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_PROPPUTREF, 0 ); } -#line 4715 "tools/widl/parser.tab.c" +#line 4716 "tools/widl/parser.tab.c" break; case 195: /* attribute: tPROTECTED */ -#line 738 "tools/widl/parser.y" +#line 739 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_PROTECTED, 0 ); } -#line 4721 "tools/widl/parser.tab.c" +#line 4722 "tools/widl/parser.tab.c" break; case 196: /* attribute: tPROXY */ -#line 739 "tools/widl/parser.y" +#line 740 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_PROXY, 0 ); } -#line 4727 "tools/widl/parser.tab.c" +#line 4728 "tools/widl/parser.tab.c" break; case 197: /* attribute: tPUBLIC */ -#line 740 "tools/widl/parser.y" +#line 741 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_PUBLIC, 0 ); } -#line 4733 "tools/widl/parser.tab.c" +#line 4734 "tools/widl/parser.tab.c" break; case 198: /* attribute: tRANGE '(' expr_int_const ',' expr_int_const ')' */ -#line 742 "tools/widl/parser.y" +#line 743 "tools/widl/parser.y" { expr_list_t *list = append_expr( NULL, (yyvsp[-3].expr) ); list = append_expr( list, (yyvsp[-1].expr) ); (yyval.attr) = attr_ptr( (yyloc), ATTR_RANGE, list ); } -#line 4742 "tools/widl/parser.tab.c" +#line 4743 "tools/widl/parser.tab.c" break; case 199: /* attribute: tREADONLY */ -#line 746 "tools/widl/parser.y" +#line 747 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_READONLY, 0 ); } -#line 4748 "tools/widl/parser.tab.c" +#line 4749 "tools/widl/parser.tab.c" break; case 200: /* attribute: tREPRESENTAS '(' type ')' */ -#line 747 "tools/widl/parser.y" +#line 748 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_REPRESENTAS, (yyvsp[-1].type) ); } -#line 4754 "tools/widl/parser.tab.c" +#line 4755 "tools/widl/parser.tab.c" break; case 201: /* attribute: tREQUESTEDIT */ -#line 748 "tools/widl/parser.y" +#line 749 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_REQUESTEDIT, 0 ); } -#line 4760 "tools/widl/parser.tab.c" +#line 4761 "tools/widl/parser.tab.c" break; case 202: /* attribute: tRESTRICTED */ -#line 749 "tools/widl/parser.y" +#line 750 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_RESTRICTED, 0 ); } -#line 4766 "tools/widl/parser.tab.c" +#line 4767 "tools/widl/parser.tab.c" break; case 203: /* attribute: tRETVAL */ -#line 750 "tools/widl/parser.y" +#line 751 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_RETVAL, 0 ); } -#line 4772 "tools/widl/parser.tab.c" +#line 4773 "tools/widl/parser.tab.c" break; case 204: /* attribute: tSIZEIS '(' m_exprs ')' */ -#line 751 "tools/widl/parser.y" +#line 752 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_SIZEIS, (yyvsp[-1].expr_list) ); } -#line 4778 "tools/widl/parser.tab.c" +#line 4779 "tools/widl/parser.tab.c" break; case 205: /* attribute: tSOURCE */ -#line 752 "tools/widl/parser.y" +#line 753 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_SOURCE, 0 ); } -#line 4784 "tools/widl/parser.tab.c" +#line 4785 "tools/widl/parser.tab.c" break; case 206: /* attribute: tSTATIC '(' static_attr ')' */ -#line 753 "tools/widl/parser.y" +#line 754 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_STATIC, (yyvsp[-1].expr) ); } -#line 4790 "tools/widl/parser.tab.c" +#line 4791 "tools/widl/parser.tab.c" break; case 207: /* attribute: tSTRICTCONTEXTHANDLE */ -#line 754 "tools/widl/parser.y" +#line 755 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_STRICTCONTEXTHANDLE, 0 ); } -#line 4796 "tools/widl/parser.tab.c" +#line 4797 "tools/widl/parser.tab.c" break; case 208: /* attribute: tSTRING */ -#line 755 "tools/widl/parser.y" +#line 756 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_STRING, 0 ); } -#line 4802 "tools/widl/parser.tab.c" +#line 4803 "tools/widl/parser.tab.c" break; case 209: /* attribute: tSWITCHIS '(' expr ')' */ -#line 756 "tools/widl/parser.y" +#line 757 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_SWITCHIS, (yyvsp[-1].expr) ); } -#line 4808 "tools/widl/parser.tab.c" +#line 4809 "tools/widl/parser.tab.c" break; case 210: /* attribute: tSWITCHTYPE '(' type ')' */ -#line 757 "tools/widl/parser.y" +#line 758 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_SWITCHTYPE, (yyvsp[-1].type) ); } -#line 4814 "tools/widl/parser.tab.c" +#line 4815 "tools/widl/parser.tab.c" break; case 211: /* attribute: tTRANSMITAS '(' type ')' */ -#line 758 "tools/widl/parser.y" +#line 759 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_TRANSMITAS, (yyvsp[-1].type) ); } -#line 4820 "tools/widl/parser.tab.c" +#line 4821 "tools/widl/parser.tab.c" break; case 212: /* attribute: tTHREADING '(' threading_type ')' */ -#line 759 "tools/widl/parser.y" +#line 760 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_THREADING, (yyvsp[-1].num) ); } -#line 4826 "tools/widl/parser.tab.c" +#line 4827 "tools/widl/parser.tab.c" break; case 213: /* attribute: tUIDEFAULT */ -#line 760 "tools/widl/parser.y" +#line 761 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_UIDEFAULT, 0 ); } -#line 4832 "tools/widl/parser.tab.c" +#line 4833 "tools/widl/parser.tab.c" break; case 214: /* attribute: tUSESGETLASTERROR */ -#line 761 "tools/widl/parser.y" +#line 762 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_USESGETLASTERROR, 0 ); } -#line 4838 "tools/widl/parser.tab.c" +#line 4839 "tools/widl/parser.tab.c" break; case 215: /* attribute: tUSERMARSHAL '(' type ')' */ -#line 762 "tools/widl/parser.y" +#line 763 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_USERMARSHAL, (yyvsp[-1].type) ); } -#line 4844 "tools/widl/parser.tab.c" +#line 4845 "tools/widl/parser.tab.c" break; case 216: /* attribute: tUUID '(' aUUID ')' */ -#line 763 "tools/widl/parser.y" +#line 764 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_UUID, (yyvsp[-1].uuid) ); } -#line 4850 "tools/widl/parser.tab.c" +#line 4851 "tools/widl/parser.tab.c" break; case 217: /* attribute: tASYNCUUID '(' aUUID ')' */ -#line 764 "tools/widl/parser.y" +#line 765 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_ASYNCUUID, (yyvsp[-1].uuid) ); } -#line 4856 "tools/widl/parser.tab.c" +#line 4857 "tools/widl/parser.tab.c" break; case 218: /* attribute: tV1ENUM */ -#line 765 "tools/widl/parser.y" +#line 766 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_V1ENUM, 0 ); } -#line 4862 "tools/widl/parser.tab.c" +#line 4863 "tools/widl/parser.tab.c" break; case 219: /* attribute: tVARARG */ -#line 766 "tools/widl/parser.y" +#line 767 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_VARARG, 0 ); } -#line 4868 "tools/widl/parser.tab.c" +#line 4869 "tools/widl/parser.tab.c" break; case 220: /* attribute: tVERSION '(' version ')' */ -#line 767 "tools/widl/parser.y" +#line 768 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_VERSION, (yyvsp[-1].num) ); } -#line 4874 "tools/widl/parser.tab.c" +#line 4875 "tools/widl/parser.tab.c" break; case 221: /* attribute: tVIPROGID '(' aSTRING ')' */ -#line 768 "tools/widl/parser.y" +#line 769 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_VIPROGID, (yyvsp[-1].str) ); } -#line 4880 "tools/widl/parser.tab.c" +#line 4881 "tools/widl/parser.tab.c" break; case 222: /* attribute: tWIREMARSHAL '(' type ')' */ -#line 769 "tools/widl/parser.y" +#line 770 "tools/widl/parser.y" { (yyval.attr) = attr_ptr( (yyloc), ATTR_WIREMARSHAL, (yyvsp[-1].type) ); } -#line 4886 "tools/widl/parser.tab.c" +#line 4887 "tools/widl/parser.tab.c" break; case 223: /* attribute: pointer_type */ -#line 770 "tools/widl/parser.y" +#line 771 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_POINTERTYPE, (yyvsp[0].num) ); } -#line 4892 "tools/widl/parser.tab.c" +#line 4893 "tools/widl/parser.tab.c" break; case 228: /* cases: %empty */ -#line 780 "tools/widl/parser.y" +#line 781 "tools/widl/parser.y" { (yyval.var_list) = NULL; } -#line 4898 "tools/widl/parser.tab.c" +#line 4899 "tools/widl/parser.tab.c" break; case 229: /* cases: cases case */ -#line 781 "tools/widl/parser.y" +#line 782 "tools/widl/parser.y" { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); } -#line 4904 "tools/widl/parser.tab.c" +#line 4905 "tools/widl/parser.tab.c" break; case 230: /* case: tCASE expr_int_const ':' union_field */ -#line 784 "tools/widl/parser.y" +#line 785 "tools/widl/parser.y" { attr_t *a = attr_ptr( (yyloc), ATTR_CASE, append_expr( NULL, (yyvsp[-2].expr) ) ); (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var( NULL ); (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a ); } -#line 4913 "tools/widl/parser.tab.c" +#line 4914 "tools/widl/parser.tab.c" break; case 231: /* case: tDEFAULT ':' union_field */ -#line 788 "tools/widl/parser.y" +#line 789 "tools/widl/parser.y" { attr_t *a = attr_int( (yyloc), ATTR_DEFAULT, 0 ); (yyval.var) = (yyvsp[0].var); if (!(yyval.var)) (yyval.var) = make_var( NULL ); (yyval.var)->attrs = append_attr( (yyval.var)->attrs, a ); } -#line 4922 "tools/widl/parser.tab.c" +#line 4923 "tools/widl/parser.tab.c" break; case 232: /* enums: %empty */ -#line 795 "tools/widl/parser.y" +#line 796 "tools/widl/parser.y" { (yyval.var_list) = NULL; } -#line 4928 "tools/widl/parser.tab.c" +#line 4929 "tools/widl/parser.tab.c" break; case 233: /* enums: enum_list ',' */ -#line 796 "tools/widl/parser.y" +#line 797 "tools/widl/parser.y" { (yyval.var_list) = (yyvsp[-1].var_list); } -#line 4934 "tools/widl/parser.tab.c" +#line 4935 "tools/widl/parser.tab.c" break; case 235: /* enum_list: enum */ -#line 800 "tools/widl/parser.y" +#line 801 "tools/widl/parser.y" { struct integer integer = {.value = 0}; if (!(yyvsp[0].var)->eval) (yyvsp[0].var)->eval = make_exprl(EXPR_NUM, &integer); (yyval.var_list) = append_var( NULL, (yyvsp[0].var) ); } -#line 4945 "tools/widl/parser.tab.c" +#line 4946 "tools/widl/parser.tab.c" break; case 236: /* enum_list: enum_list ',' enum */ -#line 806 "tools/widl/parser.y" +#line 807 "tools/widl/parser.y" { if (!(yyvsp[0].var)->eval) { @@ -4961,904 +4962,904 @@ } (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[0].var) ); } -#line 4965 "tools/widl/parser.tab.c" +#line 4966 "tools/widl/parser.tab.c" break; case 237: /* enum_member: m_attributes ident */ -#line 823 "tools/widl/parser.y" +#line 824 "tools/widl/parser.y" { (yyval.var) = (yyvsp[0].var); (yyval.var)->attrs = check_enum_member_attrs((yyvsp[-1].attr_list)); } -#line 4973 "tools/widl/parser.tab.c" +#line 4974 "tools/widl/parser.tab.c" break; case 238: /* enum: enum_member '=' expr_int_const */ -#line 828 "tools/widl/parser.y" +#line 829 "tools/widl/parser.y" { (yyval.var) = reg_const((yyvsp[-2].var)); (yyval.var)->eval = (yyvsp[0].expr); (yyval.var)->declspec.type = type_new_int(TYPE_BASIC_INT, 0); } -#line 4982 "tools/widl/parser.tab.c" +#line 4983 "tools/widl/parser.tab.c" break; case 239: /* enum: enum_member */ -#line 832 "tools/widl/parser.y" +#line 833 "tools/widl/parser.y" { (yyval.var) = reg_const((yyvsp[0].var)); (yyval.var)->declspec.type = type_new_int(TYPE_BASIC_INT, 0); } -#line 4990 "tools/widl/parser.tab.c" +#line 4991 "tools/widl/parser.tab.c" break; case 240: /* enumdef: tENUM m_typename '{' enums '}' */ -#line 837 "tools/widl/parser.y" +#line 838 "tools/widl/parser.y" { (yyval.type) = type_new_enum((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list), &(yylsp[-3])); } -#line 4996 "tools/widl/parser.tab.c" +#line 4997 "tools/widl/parser.tab.c" break; case 241: /* m_exprs: m_expr */ -#line 840 "tools/widl/parser.y" +#line 841 "tools/widl/parser.y" { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); } -#line 5002 "tools/widl/parser.tab.c" +#line 5003 "tools/widl/parser.tab.c" break; case 242: /* m_exprs: m_exprs ',' m_expr */ -#line 841 "tools/widl/parser.y" +#line 842 "tools/widl/parser.y" { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); } -#line 5008 "tools/widl/parser.tab.c" +#line 5009 "tools/widl/parser.tab.c" break; case 243: /* m_expr: %empty */ -#line 845 "tools/widl/parser.y" +#line 846 "tools/widl/parser.y" { (yyval.expr) = make_expr(EXPR_VOID); } -#line 5014 "tools/widl/parser.tab.c" +#line 5015 "tools/widl/parser.tab.c" break; case 245: /* expr: aNUM */ -#line 849 "tools/widl/parser.y" +#line 850 "tools/widl/parser.y" { (yyval.expr) = make_exprl(EXPR_NUM, &(yyvsp[0].integer)); } -#line 5020 "tools/widl/parser.tab.c" +#line 5021 "tools/widl/parser.tab.c" break; case 246: /* expr: aHEXNUM */ -#line 850 "tools/widl/parser.y" +#line 851 "tools/widl/parser.y" { (yyval.expr) = make_exprl(EXPR_NUM, &(yyvsp[0].integer)); } -#line 5026 "tools/widl/parser.tab.c" +#line 5027 "tools/widl/parser.tab.c" break; case 247: /* expr: aDOUBLE */ -#line 851 "tools/widl/parser.y" +#line 852 "tools/widl/parser.y" { (yyval.expr) = make_exprd(EXPR_DOUBLE, (yyvsp[0].dbl)); } -#line 5032 "tools/widl/parser.tab.c" +#line 5033 "tools/widl/parser.tab.c" break; case 248: /* expr: tFALSE */ -#line 852 "tools/widl/parser.y" +#line 853 "tools/widl/parser.y" { struct integer integer = {.value = 0}; (yyval.expr) = make_exprl(EXPR_TRUEFALSE, &integer); } -#line 5039 "tools/widl/parser.tab.c" +#line 5040 "tools/widl/parser.tab.c" break; case 249: /* expr: tNULL */ -#line 854 "tools/widl/parser.y" +#line 855 "tools/widl/parser.y" { struct integer integer = {.value = 0}; (yyval.expr) = make_exprl(EXPR_NUM, &integer); } -#line 5046 "tools/widl/parser.tab.c" +#line 5047 "tools/widl/parser.tab.c" break; case 250: /* expr: tTRUE */ -#line 856 "tools/widl/parser.y" +#line 857 "tools/widl/parser.y" { struct integer integer = {.value = 1}; (yyval.expr) = make_exprl(EXPR_TRUEFALSE, &integer); } -#line 5053 "tools/widl/parser.tab.c" +#line 5054 "tools/widl/parser.tab.c" break; case 251: /* expr: aSTRING */ -#line 858 "tools/widl/parser.y" +#line 859 "tools/widl/parser.y" { (yyval.expr) = make_exprs(EXPR_STRLIT, (yyvsp[0].str)); } -#line 5059 "tools/widl/parser.tab.c" +#line 5060 "tools/widl/parser.tab.c" break; case 252: /* expr: aWSTRING */ -#line 859 "tools/widl/parser.y" +#line 860 "tools/widl/parser.y" { (yyval.expr) = make_exprs(EXPR_WSTRLIT, (yyvsp[0].str)); } -#line 5065 "tools/widl/parser.tab.c" +#line 5066 "tools/widl/parser.tab.c" break; case 253: /* expr: aSQSTRING */ -#line 860 "tools/widl/parser.y" +#line 861 "tools/widl/parser.y" { (yyval.expr) = make_exprs(EXPR_CHARCONST, (yyvsp[0].str)); } -#line 5071 "tools/widl/parser.tab.c" +#line 5072 "tools/widl/parser.tab.c" break; case 254: /* expr: aIDENTIFIER */ -#line 861 "tools/widl/parser.y" +#line 862 "tools/widl/parser.y" { (yyval.expr) = make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str)); } -#line 5077 "tools/widl/parser.tab.c" +#line 5078 "tools/widl/parser.tab.c" break; case 255: /* expr: expr '?' expr ':' expr */ -#line 862 "tools/widl/parser.y" +#line 863 "tools/widl/parser.y" { (yyval.expr) = make_expr3(EXPR_COND, (yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5083 "tools/widl/parser.tab.c" +#line 5084 "tools/widl/parser.tab.c" break; case 256: /* expr: expr LOGICALOR expr */ -#line 863 "tools/widl/parser.y" +#line 864 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_LOGOR, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5089 "tools/widl/parser.tab.c" +#line 5090 "tools/widl/parser.tab.c" break; case 257: /* expr: expr LOGICALAND expr */ -#line 864 "tools/widl/parser.y" +#line 865 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_LOGAND, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5095 "tools/widl/parser.tab.c" +#line 5096 "tools/widl/parser.tab.c" break; case 258: /* expr: expr '|' expr */ -#line 865 "tools/widl/parser.y" +#line 866 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_OR , (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5101 "tools/widl/parser.tab.c" +#line 5102 "tools/widl/parser.tab.c" break; case 259: /* expr: expr '^' expr */ -#line 866 "tools/widl/parser.y" +#line 867 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_XOR, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5107 "tools/widl/parser.tab.c" +#line 5108 "tools/widl/parser.tab.c" break; case 260: /* expr: expr '&' expr */ -#line 867 "tools/widl/parser.y" +#line 868 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_AND, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5113 "tools/widl/parser.tab.c" +#line 5114 "tools/widl/parser.tab.c" break; case 261: /* expr: expr EQUALITY expr */ -#line 868 "tools/widl/parser.y" +#line 869 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_EQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5119 "tools/widl/parser.tab.c" +#line 5120 "tools/widl/parser.tab.c" break; case 262: /* expr: expr INEQUALITY expr */ -#line 869 "tools/widl/parser.y" +#line 870 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_INEQUALITY, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5125 "tools/widl/parser.tab.c" +#line 5126 "tools/widl/parser.tab.c" break; case 263: /* expr: expr '>' expr */ -#line 870 "tools/widl/parser.y" +#line 871 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_GTR, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5131 "tools/widl/parser.tab.c" +#line 5132 "tools/widl/parser.tab.c" break; case 264: /* expr: expr '<' expr */ -#line 871 "tools/widl/parser.y" +#line 872 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_LESS, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5137 "tools/widl/parser.tab.c" +#line 5138 "tools/widl/parser.tab.c" break; case 265: /* expr: expr GREATEREQUAL expr */ -#line 872 "tools/widl/parser.y" +#line 873 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_GTREQL, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5143 "tools/widl/parser.tab.c" +#line 5144 "tools/widl/parser.tab.c" break; case 266: /* expr: expr LESSEQUAL expr */ -#line 873 "tools/widl/parser.y" +#line 874 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_LESSEQL, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5149 "tools/widl/parser.tab.c" +#line 5150 "tools/widl/parser.tab.c" break; case 267: /* expr: expr SHL expr */ -#line 874 "tools/widl/parser.y" +#line 875 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_SHL, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5155 "tools/widl/parser.tab.c" +#line 5156 "tools/widl/parser.tab.c" break; case 268: /* expr: expr SHR expr */ -#line 875 "tools/widl/parser.y" +#line 876 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_SHR, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5161 "tools/widl/parser.tab.c" +#line 5162 "tools/widl/parser.tab.c" break; case 269: /* expr: expr '+' expr */ -#line 876 "tools/widl/parser.y" +#line 877 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_ADD, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5167 "tools/widl/parser.tab.c" +#line 5168 "tools/widl/parser.tab.c" break; case 270: /* expr: expr '-' expr */ -#line 877 "tools/widl/parser.y" +#line 878 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_SUB, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5173 "tools/widl/parser.tab.c" +#line 5174 "tools/widl/parser.tab.c" break; case 271: /* expr: expr '%' expr */ -#line 878 "tools/widl/parser.y" +#line 879 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_MOD, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5179 "tools/widl/parser.tab.c" +#line 5180 "tools/widl/parser.tab.c" break; case 272: /* expr: expr '*' expr */ -#line 879 "tools/widl/parser.y" +#line 880 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_MUL, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5185 "tools/widl/parser.tab.c" +#line 5186 "tools/widl/parser.tab.c" break; case 273: /* expr: expr '/' expr */ -#line 880 "tools/widl/parser.y" +#line 881 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_DIV, (yyvsp[-2].expr), (yyvsp[0].expr)); } -#line 5191 "tools/widl/parser.tab.c" +#line 5192 "tools/widl/parser.tab.c" break; case 274: /* expr: '!' expr */ -#line 881 "tools/widl/parser.y" +#line 882 "tools/widl/parser.y" { (yyval.expr) = make_expr1(EXPR_LOGNOT, (yyvsp[0].expr)); } -#line 5197 "tools/widl/parser.tab.c" +#line 5198 "tools/widl/parser.tab.c" break; case 275: /* expr: '~' expr */ -#line 882 "tools/widl/parser.y" +#line 883 "tools/widl/parser.y" { (yyval.expr) = make_expr1(EXPR_NOT, (yyvsp[0].expr)); } -#line 5203 "tools/widl/parser.tab.c" +#line 5204 "tools/widl/parser.tab.c" break; case 276: /* expr: '+' expr */ -#line 883 "tools/widl/parser.y" +#line 884 "tools/widl/parser.y" { (yyval.expr) = make_expr1(EXPR_POS, (yyvsp[0].expr)); } -#line 5209 "tools/widl/parser.tab.c" +#line 5210 "tools/widl/parser.tab.c" break; case 277: /* expr: '-' expr */ -#line 884 "tools/widl/parser.y" +#line 885 "tools/widl/parser.y" { (yyval.expr) = make_expr1(EXPR_NEG, (yyvsp[0].expr)); } -#line 5215 "tools/widl/parser.tab.c" +#line 5216 "tools/widl/parser.tab.c" break; case 278: /* expr: '&' expr */ -#line 885 "tools/widl/parser.y" +#line 886 "tools/widl/parser.y" { (yyval.expr) = make_expr1(EXPR_ADDRESSOF, (yyvsp[0].expr)); } -#line 5221 "tools/widl/parser.tab.c" +#line 5222 "tools/widl/parser.tab.c" break; case 279: /* expr: '*' expr */ -#line 886 "tools/widl/parser.y" +#line 887 "tools/widl/parser.y" { (yyval.expr) = make_expr1(EXPR_PPTR, (yyvsp[0].expr)); } -#line 5227 "tools/widl/parser.tab.c" +#line 5228 "tools/widl/parser.tab.c" break; case 280: /* expr: expr MEMBERPTR aIDENTIFIER */ -#line 887 "tools/widl/parser.y" +#line 888 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_MEMBER, make_expr1(EXPR_PPTR, (yyvsp[-2].expr)), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); } -#line 5233 "tools/widl/parser.tab.c" +#line 5234 "tools/widl/parser.tab.c" break; case 281: /* expr: expr '.' aIDENTIFIER */ -#line 888 "tools/widl/parser.y" +#line 889 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_MEMBER, (yyvsp[-2].expr), make_exprs(EXPR_IDENTIFIER, (yyvsp[0].str))); } -#line 5239 "tools/widl/parser.tab.c" +#line 5240 "tools/widl/parser.tab.c" break; case 282: /* expr: '(' unqualified_decl_spec m_abstract_declarator ')' expr */ -#line 890 "tools/widl/parser.y" +#line 891 "tools/widl/parser.y" { (yyval.expr) = make_exprt(EXPR_CAST, declare_var(NULL, (yyvsp[-3].declspec), (yyvsp[-2].declarator), 0), (yyvsp[0].expr)); free((yyvsp[-3].declspec)); free((yyvsp[-2].declarator)); } -#line 5245 "tools/widl/parser.tab.c" +#line 5246 "tools/widl/parser.tab.c" break; case 283: /* expr: tSIZEOF '(' unqualified_decl_spec m_abstract_declarator ')' */ -#line 892 "tools/widl/parser.y" +#line 893 "tools/widl/parser.y" { (yyval.expr) = make_exprt(EXPR_SIZEOF, declare_var(NULL, (yyvsp[-2].declspec), (yyvsp[-1].declarator), 0), NULL); free((yyvsp[-2].declspec)); free((yyvsp[-1].declarator)); } -#line 5251 "tools/widl/parser.tab.c" +#line 5252 "tools/widl/parser.tab.c" break; case 284: /* expr: expr '[' expr ']' */ -#line 893 "tools/widl/parser.y" +#line 894 "tools/widl/parser.y" { (yyval.expr) = make_expr2(EXPR_ARRAY, (yyvsp[-3].expr), (yyvsp[-1].expr)); } -#line 5257 "tools/widl/parser.tab.c" +#line 5258 "tools/widl/parser.tab.c" break; case 285: /* expr: '(' expr ')' */ -#line 894 "tools/widl/parser.y" +#line 895 "tools/widl/parser.y" { (yyval.expr) = (yyvsp[-1].expr); } -#line 5263 "tools/widl/parser.tab.c" +#line 5264 "tools/widl/parser.tab.c" break; case 286: /* expr_list_int_const: expr_int_const */ -#line 897 "tools/widl/parser.y" +#line 898 "tools/widl/parser.y" { (yyval.expr_list) = append_expr( NULL, (yyvsp[0].expr) ); } -#line 5269 "tools/widl/parser.tab.c" +#line 5270 "tools/widl/parser.tab.c" break; case 287: /* expr_list_int_const: expr_list_int_const ',' expr_int_const */ -#line 898 "tools/widl/parser.y" +#line 899 "tools/widl/parser.y" { (yyval.expr_list) = append_expr( (yyvsp[-2].expr_list), (yyvsp[0].expr) ); } -#line 5275 "tools/widl/parser.tab.c" +#line 5276 "tools/widl/parser.tab.c" break; case 288: /* expr_int_const: expr */ -#line 901 "tools/widl/parser.y" +#line 902 "tools/widl/parser.y" { (yyval.expr) = (yyvsp[0].expr); if (!(yyval.expr)->is_const) error_loc("expression is not an integer constant\n"); } -#line 5284 "tools/widl/parser.tab.c" +#line 5285 "tools/widl/parser.tab.c" break; case 289: /* expr_const: expr */ -#line 907 "tools/widl/parser.y" +#line 908 "tools/widl/parser.y" { (yyval.expr) = (yyvsp[0].expr); if (!(yyval.expr)->is_const && (yyval.expr)->type != EXPR_STRLIT && (yyval.expr)->type != EXPR_WSTRLIT) error_loc("expression is not constant\n"); } -#line 5293 "tools/widl/parser.tab.c" +#line 5294 "tools/widl/parser.tab.c" break; case 290: /* fields: %empty */ -#line 914 "tools/widl/parser.y" +#line 915 "tools/widl/parser.y" { (yyval.var_list) = NULL; } -#line 5299 "tools/widl/parser.tab.c" +#line 5300 "tools/widl/parser.tab.c" break; case 291: /* fields: fields field */ -#line 915 "tools/widl/parser.y" +#line 916 "tools/widl/parser.y" { (yyval.var_list) = append_var_list((yyvsp[-1].var_list), (yyvsp[0].var_list)); } -#line 5305 "tools/widl/parser.tab.c" +#line 5306 "tools/widl/parser.tab.c" break; case 292: /* field: m_attributes decl_spec struct_declarator_list ';' */ -#line 919 "tools/widl/parser.y" +#line 920 "tools/widl/parser.y" { const char *first = LIST_ENTRY(list_head((yyvsp[-1].declarator_list)), declarator_t, entry)->var->name; check_field_attrs(first, (yyvsp[-3].attr_list)); (yyval.var_list) = set_var_types((yyvsp[-3].attr_list), (yyvsp[-2].declspec), (yyvsp[-1].declarator_list)); } -#line 5314 "tools/widl/parser.tab.c" +#line 5315 "tools/widl/parser.tab.c" break; case 293: /* field: m_attributes uniondef ';' */ -#line 923 "tools/widl/parser.y" +#line 924 "tools/widl/parser.y" { var_t *v = make_var(NULL); v->declspec.type = (yyvsp[-1].type); v->attrs = (yyvsp[-2].attr_list); (yyval.var_list) = append_var(NULL, v); } -#line 5323 "tools/widl/parser.tab.c" +#line 5324 "tools/widl/parser.tab.c" break; case 294: /* ne_union_field: s_field ';' */ -#line 930 "tools/widl/parser.y" +#line 931 "tools/widl/parser.y" { (yyval.var) = (yyvsp[-1].var); } -#line 5329 "tools/widl/parser.tab.c" +#line 5330 "tools/widl/parser.tab.c" break; case 295: /* ne_union_field: attributes ';' */ -#line 931 "tools/widl/parser.y" +#line 932 "tools/widl/parser.y" { (yyval.var) = make_var(NULL); (yyval.var)->attrs = (yyvsp[-1].attr_list); } -#line 5335 "tools/widl/parser.tab.c" +#line 5336 "tools/widl/parser.tab.c" break; case 296: /* ne_union_fields: %empty */ -#line 935 "tools/widl/parser.y" +#line 936 "tools/widl/parser.y" { (yyval.var_list) = NULL; } -#line 5341 "tools/widl/parser.tab.c" +#line 5342 "tools/widl/parser.tab.c" break; case 297: /* ne_union_fields: ne_union_fields ne_union_field */ -#line 936 "tools/widl/parser.y" +#line 937 "tools/widl/parser.y" { (yyval.var_list) = append_var( (yyvsp[-1].var_list), (yyvsp[0].var) ); } -#line 5347 "tools/widl/parser.tab.c" +#line 5348 "tools/widl/parser.tab.c" break; case 298: /* union_field: s_field ';' */ -#line 940 "tools/widl/parser.y" +#line 941 "tools/widl/parser.y" { (yyval.var) = (yyvsp[-1].var); } -#line 5353 "tools/widl/parser.tab.c" +#line 5354 "tools/widl/parser.tab.c" break; case 299: /* union_field: ';' */ -#line 941 "tools/widl/parser.y" +#line 942 "tools/widl/parser.y" { (yyval.var) = NULL; } -#line 5359 "tools/widl/parser.tab.c" +#line 5360 "tools/widl/parser.tab.c" break; case 300: /* s_field: m_attributes decl_spec declarator */ -#line 944 "tools/widl/parser.y" +#line 945 "tools/widl/parser.y" { (yyval.var) = declare_var(check_field_attrs((yyvsp[0].declarator)->var->name, (yyvsp[-2].attr_list)), (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE); free((yyvsp[0].declarator)); } -#line 5368 "tools/widl/parser.tab.c" +#line 5369 "tools/widl/parser.tab.c" break; case 301: /* s_field: m_attributes structdef */ -#line 948 "tools/widl/parser.y" +#line 949 "tools/widl/parser.y" { var_t *v = make_var(NULL); v->declspec.type = (yyvsp[0].type); v->attrs = (yyvsp[-1].attr_list); (yyval.var) = v; } -#line 5377 "tools/widl/parser.tab.c" +#line 5378 "tools/widl/parser.tab.c" break; case 302: /* funcdef: declaration */ -#line 954 "tools/widl/parser.y" +#line 955 "tools/widl/parser.y" { (yyval.var) = (yyvsp[0].var); if (type_get_type((yyval.var)->declspec.type) != TYPE_FUNCTION) error_loc("only methods may be declared inside the methods section of a dispinterface\n"); check_function_attrs((yyval.var)->name, (yyval.var)->attrs); } -#line 5387 "tools/widl/parser.tab.c" +#line 5388 "tools/widl/parser.tab.c" break; case 303: /* declaration: attributes decl_spec init_declarator */ -#line 963 "tools/widl/parser.y" +#line 964 "tools/widl/parser.y" { (yyval.var) = declare_var((yyvsp[-2].attr_list), (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE); free((yyvsp[0].declarator)); } -#line 5395 "tools/widl/parser.tab.c" +#line 5396 "tools/widl/parser.tab.c" break; case 304: /* declaration: decl_spec init_declarator */ -#line 966 "tools/widl/parser.y" +#line 967 "tools/widl/parser.y" { (yyval.var) = declare_var(NULL, (yyvsp[-1].declspec), (yyvsp[0].declarator), FALSE); free((yyvsp[0].declarator)); } -#line 5403 "tools/widl/parser.tab.c" +#line 5404 "tools/widl/parser.tab.c" break; case 305: /* m_ident: %empty */ -#line 972 "tools/widl/parser.y" +#line 973 "tools/widl/parser.y" { (yyval.var) = NULL; } -#line 5409 "tools/widl/parser.tab.c" +#line 5410 "tools/widl/parser.tab.c" break; case 307: /* m_typename: %empty */ -#line 977 "tools/widl/parser.y" +#line 978 "tools/widl/parser.y" { (yyval.str) = NULL; } -#line 5415 "tools/widl/parser.tab.c" +#line 5416 "tools/widl/parser.tab.c" break; case 311: /* ident: typename */ -#line 985 "tools/widl/parser.y" +#line 986 "tools/widl/parser.y" { (yyval.var) = make_var((yyvsp[0].str)); } -#line 5421 "tools/widl/parser.tab.c" +#line 5422 "tools/widl/parser.tab.c" break; case 312: /* base_type: tBYTE */ -#line 988 "tools/widl/parser.y" +#line 989 "tools/widl/parser.y" { (yyval.type) = find_type_or_error( NULL, "byte" ); } -#line 5427 "tools/widl/parser.tab.c" +#line 5428 "tools/widl/parser.tab.c" break; case 313: /* base_type: tWCHAR */ -#line 989 "tools/widl/parser.y" +#line 990 "tools/widl/parser.y" { (yyval.type) = find_type_or_error( NULL, "wchar_t" ); } -#line 5433 "tools/widl/parser.tab.c" +#line 5434 "tools/widl/parser.tab.c" break; case 315: /* base_type: tSIGNED int_std */ -#line 991 "tools/widl/parser.y" +#line 992 "tools/widl/parser.y" { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), -1); } -#line 5439 "tools/widl/parser.tab.c" +#line 5440 "tools/widl/parser.tab.c" break; case 316: /* base_type: tUNSIGNED int_std */ -#line 992 "tools/widl/parser.y" +#line 993 "tools/widl/parser.y" { (yyval.type) = type_new_int(type_basic_get_type((yyvsp[0].type)), 1); } -#line 5445 "tools/widl/parser.tab.c" +#line 5446 "tools/widl/parser.tab.c" break; case 317: /* base_type: tUNSIGNED */ -#line 993 "tools/widl/parser.y" +#line 994 "tools/widl/parser.y" { (yyval.type) = type_new_int(TYPE_BASIC_INT, 1); } -#line 5451 "tools/widl/parser.tab.c" +#line 5452 "tools/widl/parser.tab.c" break; case 318: /* base_type: tFLOAT */ -#line 994 "tools/widl/parser.y" +#line 995 "tools/widl/parser.y" { (yyval.type) = find_type_or_error( NULL, "float" ); } -#line 5457 "tools/widl/parser.tab.c" +#line 5458 "tools/widl/parser.tab.c" break; case 319: /* base_type: tDOUBLE */ -#line 995 "tools/widl/parser.y" +#line 996 "tools/widl/parser.y" { (yyval.type) = find_type_or_error( NULL, "double" ); } -#line 5463 "tools/widl/parser.tab.c" +#line 5464 "tools/widl/parser.tab.c" break; case 320: /* base_type: tBOOLEAN */ -#line 996 "tools/widl/parser.y" +#line 997 "tools/widl/parser.y" { (yyval.type) = find_type_or_error( NULL, "boolean" ); } -#line 5469 "tools/widl/parser.tab.c" +#line 5470 "tools/widl/parser.tab.c" break; case 321: /* base_type: tERRORSTATUST */ -#line 997 "tools/widl/parser.y" +#line 998 "tools/widl/parser.y" { (yyval.type) = find_type_or_error( NULL, "error_status_t" ); } -#line 5475 "tools/widl/parser.tab.c" +#line 5476 "tools/widl/parser.tab.c" break; case 322: /* base_type: tHANDLET */ -#line 998 "tools/widl/parser.y" +#line 999 "tools/widl/parser.y" { (yyval.type) = find_type_or_error( NULL, "handle_t" ); } -#line 5481 "tools/widl/parser.tab.c" +#line 5482 "tools/widl/parser.tab.c" break; case 325: /* int_std: tINT */ -#line 1006 "tools/widl/parser.y" +#line 1007 "tools/widl/parser.y" { (yyval.type) = type_new_int(TYPE_BASIC_INT, 0); } -#line 5487 "tools/widl/parser.tab.c" +#line 5488 "tools/widl/parser.tab.c" break; case 326: /* int_std: tSHORT m_int */ -#line 1007 "tools/widl/parser.y" +#line 1008 "tools/widl/parser.y" { (yyval.type) = type_new_int(TYPE_BASIC_INT16, 0); } -#line 5493 "tools/widl/parser.tab.c" +#line 5494 "tools/widl/parser.tab.c" break; case 327: /* int_std: tSMALL */ -#line 1008 "tools/widl/parser.y" +#line 1009 "tools/widl/parser.y" { (yyval.type) = type_new_int(TYPE_BASIC_INT8, 0); } -#line 5499 "tools/widl/parser.tab.c" +#line 5500 "tools/widl/parser.tab.c" break; case 328: /* int_std: tLONG m_int */ -#line 1009 "tools/widl/parser.y" +#line 1010 "tools/widl/parser.y" { (yyval.type) = type_new_int(TYPE_BASIC_LONG, 0); } -#line 5505 "tools/widl/parser.tab.c" +#line 5506 "tools/widl/parser.tab.c" break; case 329: /* int_std: tHYPER m_int */ -#line 1010 "tools/widl/parser.y" +#line 1011 "tools/widl/parser.y" { (yyval.type) = type_new_int(TYPE_BASIC_HYPER, 0); } -#line 5511 "tools/widl/parser.tab.c" +#line 5512 "tools/widl/parser.tab.c" break; case 330: /* int_std: tINT64 */ -#line 1011 "tools/widl/parser.y" +#line 1012 "tools/widl/parser.y" { (yyval.type) = type_new_int(TYPE_BASIC_INT64, 0); } -#line 5517 "tools/widl/parser.tab.c" +#line 5518 "tools/widl/parser.tab.c" break; case 331: /* int_std: tCHAR */ -#line 1012 "tools/widl/parser.y" +#line 1013 "tools/widl/parser.y" { (yyval.type) = type_new_int(TYPE_BASIC_CHAR, 0); } -#line 5523 "tools/widl/parser.tab.c" +#line 5524 "tools/widl/parser.tab.c" break; case 332: /* int_std: tINT32 */ -#line 1013 "tools/widl/parser.y" +#line 1014 "tools/widl/parser.y" { (yyval.type) = type_new_int(TYPE_BASIC_INT32, 0); } -#line 5529 "tools/widl/parser.tab.c" +#line 5530 "tools/widl/parser.tab.c" break; case 333: /* int_std: tINT3264 */ -#line 1014 "tools/widl/parser.y" +#line 1015 "tools/widl/parser.y" { (yyval.type) = type_new_int(TYPE_BASIC_INT3264, 0); } -#line 5535 "tools/widl/parser.tab.c" +#line 5536 "tools/widl/parser.tab.c" break; case 334: /* namespace_pfx: aIDENTIFIER '.' */ -#line 1018 "tools/widl/parser.y" +#line 1019 "tools/widl/parser.y" { (yyval.namespace) = find_namespace_or_error(&global_namespace, (yyvsp[-1].str)); } -#line 5541 "tools/widl/parser.tab.c" +#line 5542 "tools/widl/parser.tab.c" break; case 335: /* namespace_pfx: namespace_pfx aIDENTIFIER '.' */ -#line 1019 "tools/widl/parser.y" +#line 1020 "tools/widl/parser.y" { (yyval.namespace) = find_namespace_or_error((yyvsp[-2].namespace), (yyvsp[-1].str)); } -#line 5547 "tools/widl/parser.tab.c" +#line 5548 "tools/widl/parser.tab.c" break; case 336: /* qualified_type: typename */ -#line 1023 "tools/widl/parser.y" +#line 1024 "tools/widl/parser.y" { (yyval.type) = find_type_or_error(current_namespace, (yyvsp[0].str)); } -#line 5553 "tools/widl/parser.tab.c" +#line 5554 "tools/widl/parser.tab.c" break; case 337: /* qualified_type: namespace_pfx typename */ -#line 1024 "tools/widl/parser.y" +#line 1025 "tools/widl/parser.y" { (yyval.type) = find_type_or_error((yyvsp[-1].namespace), (yyvsp[0].str)); } -#line 5559 "tools/widl/parser.tab.c" +#line 5560 "tools/widl/parser.tab.c" break; case 338: /* parameterized_type: qualified_type '<' parameterized_type_args '>' */ -#line 1028 "tools/widl/parser.y" +#line 1029 "tools/widl/parser.y" { (yyval.type) = find_parameterized_type((yyvsp[-3].type), (yyvsp[-1].typeref_list)); } -#line 5565 "tools/widl/parser.tab.c" +#line 5566 "tools/widl/parser.tab.c" break; case 339: /* parameterized_type_arg: base_type */ -#line 1032 "tools/widl/parser.y" +#line 1033 "tools/widl/parser.y" { (yyval.type) = (yyvsp[0].type); } -#line 5571 "tools/widl/parser.tab.c" +#line 5572 "tools/widl/parser.tab.c" break; case 340: /* parameterized_type_arg: qualified_type */ -#line 1033 "tools/widl/parser.y" +#line 1034 "tools/widl/parser.y" { (yyval.type) = (yyvsp[0].type); } -#line 5577 "tools/widl/parser.tab.c" +#line 5578 "tools/widl/parser.tab.c" break; case 341: /* parameterized_type_arg: qualified_type '*' */ -#line 1034 "tools/widl/parser.y" +#line 1035 "tools/widl/parser.y" { (yyval.type) = type_new_pointer((yyvsp[-1].type)); } -#line 5583 "tools/widl/parser.tab.c" +#line 5584 "tools/widl/parser.tab.c" break; case 342: /* parameterized_type_arg: parameterized_type */ -#line 1035 "tools/widl/parser.y" +#line 1036 "tools/widl/parser.y" { (yyval.type) = (yyvsp[0].type); } -#line 5589 "tools/widl/parser.tab.c" +#line 5590 "tools/widl/parser.tab.c" break; case 343: /* parameterized_type_arg: parameterized_type '*' */ -#line 1036 "tools/widl/parser.y" +#line 1037 "tools/widl/parser.y" { (yyval.type) = type_new_pointer((yyvsp[-1].type)); } -#line 5595 "tools/widl/parser.tab.c" +#line 5596 "tools/widl/parser.tab.c" break; case 344: /* parameterized_type_args: parameterized_type_arg */ -#line 1040 "tools/widl/parser.y" +#line 1041 "tools/widl/parser.y" { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); } -#line 5601 "tools/widl/parser.tab.c" +#line 5602 "tools/widl/parser.tab.c" break; case 345: /* parameterized_type_args: parameterized_type_args ',' parameterized_type_arg */ -#line 1042 "tools/widl/parser.y" +#line 1043 "tools/widl/parser.y" { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); } -#line 5607 "tools/widl/parser.tab.c" +#line 5608 "tools/widl/parser.tab.c" break; case 346: /* coclass: tCOCLASS typename */ -#line 1045 "tools/widl/parser.y" +#line 1046 "tools/widl/parser.y" { (yyval.type) = type_coclass_declare((yyvsp[0].str)); } -#line 5613 "tools/widl/parser.tab.c" +#line 5614 "tools/widl/parser.tab.c" break; case 347: /* coclassdef: attributes coclass '{' class_interfaces '}' semicolon_opt */ -#line 1049 "tools/widl/parser.y" +#line 1050 "tools/widl/parser.y" { (yyval.type) = type_coclass_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].typeref_list), &(yylsp[-4])); } -#line 5619 "tools/widl/parser.tab.c" +#line 5620 "tools/widl/parser.tab.c" break; case 348: /* runtimeclass: tRUNTIMECLASS typename */ -#line 1052 "tools/widl/parser.y" +#line 1053 "tools/widl/parser.y" { (yyval.type) = type_runtimeclass_declare((yyvsp[0].str), current_namespace); } -#line 5625 "tools/widl/parser.tab.c" +#line 5626 "tools/widl/parser.tab.c" break; case 349: /* runtimeclass_def: attributes runtimeclass inherit '{' class_interfaces '}' semicolon_opt */ -#line 1056 "tools/widl/parser.y" +#line 1057 "tools/widl/parser.y" { if ((yyvsp[-4].type) && type_get_type((yyvsp[-4].type)) != TYPE_RUNTIMECLASS) error_loc("%s is not a runtimeclass\n", (yyvsp[-4].type)->name); (yyval.type) = type_runtimeclass_define((yyvsp[-5].type), (yyvsp[-6].attr_list), (yyvsp[-2].typeref_list), &(yylsp[-5])); } -#line 5632 "tools/widl/parser.tab.c" +#line 5633 "tools/widl/parser.tab.c" break; case 350: /* apicontract: tAPICONTRACT typename */ -#line 1060 "tools/widl/parser.y" +#line 1061 "tools/widl/parser.y" { (yyval.type) = type_apicontract_declare((yyvsp[0].str), current_namespace); } -#line 5638 "tools/widl/parser.tab.c" +#line 5639 "tools/widl/parser.tab.c" break; case 351: /* apicontract_def: attributes apicontract '{' '}' semicolon_opt */ -#line 1064 "tools/widl/parser.y" +#line 1065 "tools/widl/parser.y" { (yyval.type) = type_apicontract_define((yyvsp[-3].type), (yyvsp[-4].attr_list), &(yylsp[-3])); } -#line 5644 "tools/widl/parser.tab.c" +#line 5645 "tools/widl/parser.tab.c" break; case 352: /* namespacedef: tNAMESPACE aIDENTIFIER */ -#line 1067 "tools/widl/parser.y" +#line 1068 "tools/widl/parser.y" { (yyval.str_list) = append_str( NULL, (yyvsp[0].str) ); } -#line 5650 "tools/widl/parser.tab.c" +#line 5651 "tools/widl/parser.tab.c" break; case 353: /* namespacedef: namespacedef '.' aIDENTIFIER */ -#line 1068 "tools/widl/parser.y" +#line 1069 "tools/widl/parser.y" { (yyval.str_list) = append_str( (yyvsp[-2].str_list), (yyvsp[0].str) ); } -#line 5656 "tools/widl/parser.tab.c" +#line 5657 "tools/widl/parser.tab.c" break; case 354: /* class_interfaces: %empty */ -#line 1072 "tools/widl/parser.y" +#line 1073 "tools/widl/parser.y" { (yyval.typeref_list) = NULL; } -#line 5662 "tools/widl/parser.tab.c" +#line 5663 "tools/widl/parser.tab.c" break; case 355: /* class_interfaces: class_interfaces class_interface */ -#line 1073 "tools/widl/parser.y" +#line 1074 "tools/widl/parser.y" { (yyval.typeref_list) = append_typeref( (yyvsp[-1].typeref_list), (yyvsp[0].typeref) ); } -#line 5668 "tools/widl/parser.tab.c" +#line 5669 "tools/widl/parser.tab.c" break; case 356: /* class_interface: m_attributes interfaceref ';' */ -#line 1077 "tools/widl/parser.y" +#line 1078 "tools/widl/parser.y" { (yyval.typeref) = make_typeref((yyvsp[-1].type)); (yyval.typeref)->attrs = (yyvsp[-2].attr_list); } -#line 5674 "tools/widl/parser.tab.c" +#line 5675 "tools/widl/parser.tab.c" break; case 357: /* class_interface: m_attributes dispinterfaceref ';' */ -#line 1078 "tools/widl/parser.y" +#line 1079 "tools/widl/parser.y" { (yyval.typeref) = make_typeref((yyvsp[-1].type)); (yyval.typeref)->attrs = (yyvsp[-2].attr_list); } -#line 5680 "tools/widl/parser.tab.c" +#line 5681 "tools/widl/parser.tab.c" break; case 358: /* dispinterface: tDISPINTERFACE typename */ -#line 1081 "tools/widl/parser.y" +#line 1082 "tools/widl/parser.y" { (yyval.type) = type_dispinterface_declare((yyvsp[0].str)); } -#line 5686 "tools/widl/parser.tab.c" +#line 5687 "tools/widl/parser.tab.c" break; case 359: /* dispattributes: attributes */ -#line 1084 "tools/widl/parser.y" +#line 1085 "tools/widl/parser.y" { (yyval.attr_list) = append_attr( (yyvsp[0].attr_list), attr_int( (yyloc), ATTR_DISPINTERFACE, 0 ) ); } -#line 5692 "tools/widl/parser.tab.c" +#line 5693 "tools/widl/parser.tab.c" break; case 360: /* dispint_props: tPROPERTIES ':' */ -#line 1087 "tools/widl/parser.y" +#line 1088 "tools/widl/parser.y" { (yyval.var_list) = NULL; } -#line 5698 "tools/widl/parser.tab.c" +#line 5699 "tools/widl/parser.tab.c" break; case 361: /* dispint_props: dispint_props s_field ';' */ -#line 1088 "tools/widl/parser.y" +#line 1089 "tools/widl/parser.y" { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); } -#line 5704 "tools/widl/parser.tab.c" +#line 5705 "tools/widl/parser.tab.c" break; case 362: /* dispint_meths: tMETHODS ':' */ -#line 1091 "tools/widl/parser.y" +#line 1092 "tools/widl/parser.y" { (yyval.var_list) = NULL; } -#line 5710 "tools/widl/parser.tab.c" +#line 5711 "tools/widl/parser.tab.c" break; case 363: /* dispint_meths: dispint_meths funcdef ';' */ -#line 1092 "tools/widl/parser.y" +#line 1093 "tools/widl/parser.y" { (yyval.var_list) = append_var( (yyvsp[-2].var_list), (yyvsp[-1].var) ); } -#line 5716 "tools/widl/parser.tab.c" +#line 5717 "tools/widl/parser.tab.c" break; case 364: /* dispinterfacedef: dispattributes dispinterface '{' dispint_props dispint_meths '}' */ -#line 1097 "tools/widl/parser.y" +#line 1098 "tools/widl/parser.y" { (yyval.type) = type_dispinterface_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].var_list), (yyvsp[-1].var_list), &(yylsp[-4])); } -#line 5722 "tools/widl/parser.tab.c" +#line 5723 "tools/widl/parser.tab.c" break; case 365: /* dispinterfacedef: dispattributes dispinterface '{' interface ';' '}' */ -#line 1099 "tools/widl/parser.y" +#line 1100 "tools/widl/parser.y" { (yyval.type) = type_dispinterface_define_from_iface((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].type), &(yylsp[-4])); } -#line 5728 "tools/widl/parser.tab.c" +#line 5729 "tools/widl/parser.tab.c" break; case 366: /* inherit: %empty */ -#line 1103 "tools/widl/parser.y" +#line 1104 "tools/widl/parser.y" { (yyval.type) = NULL; } -#line 5734 "tools/widl/parser.tab.c" +#line 5735 "tools/widl/parser.tab.c" break; case 367: /* inherit: ':' qualified_type */ -#line 1104 "tools/widl/parser.y" +#line 1105 "tools/widl/parser.y" { (yyval.type) = (yyvsp[0].type); } -#line 5740 "tools/widl/parser.tab.c" +#line 5741 "tools/widl/parser.tab.c" break; case 368: /* inherit: ':' parameterized_type */ -#line 1105 "tools/widl/parser.y" +#line 1106 "tools/widl/parser.y" { (yyval.type) = (yyvsp[0].type); } -#line 5746 "tools/widl/parser.tab.c" +#line 5747 "tools/widl/parser.tab.c" break; case 369: /* type_parameter: typename */ -#line 1108 "tools/widl/parser.y" +#line 1109 "tools/widl/parser.y" { (yyval.type) = get_type(TYPE_PARAMETER, (yyvsp[0].str), parameters_namespace, 0); } -#line 5752 "tools/widl/parser.tab.c" +#line 5753 "tools/widl/parser.tab.c" break; case 370: /* type_parameters: type_parameter */ -#line 1112 "tools/widl/parser.y" +#line 1113 "tools/widl/parser.y" { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); } -#line 5758 "tools/widl/parser.tab.c" +#line 5759 "tools/widl/parser.tab.c" break; case 371: /* type_parameters: type_parameters ',' type_parameter */ -#line 1113 "tools/widl/parser.y" +#line 1114 "tools/widl/parser.y" { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); } -#line 5764 "tools/widl/parser.tab.c" +#line 5765 "tools/widl/parser.tab.c" break; case 372: /* interface: tINTERFACE typename */ -#line 1117 "tools/widl/parser.y" +#line 1118 "tools/widl/parser.y" { (yyval.type) = type_interface_declare((yyvsp[0].str), current_namespace); } -#line 5770 "tools/widl/parser.tab.c" +#line 5771 "tools/widl/parser.tab.c" break; case 373: /* $@3: %empty */ -#line 1118 "tools/widl/parser.y" +#line 1119 "tools/widl/parser.y" { push_parameters_namespace((yyvsp[-1].str)); } -#line 5776 "tools/widl/parser.tab.c" +#line 5777 "tools/widl/parser.tab.c" break; case 374: /* $@4: %empty */ -#line 1118 "tools/widl/parser.y" +#line 1119 "tools/widl/parser.y" { pop_parameters_namespace((yyvsp[-3].str)); } -#line 5782 "tools/widl/parser.tab.c" +#line 5783 "tools/widl/parser.tab.c" break; case 375: /* interface: tINTERFACE typename '<' $@3 type_parameters $@4 '>' */ -#line 1119 "tools/widl/parser.y" +#line 1120 "tools/widl/parser.y" { (yyval.type) = type_parameterized_interface_declare((yyvsp[-5].str), current_namespace, (yyvsp[-2].typeref_list)); } -#line 5788 "tools/widl/parser.tab.c" +#line 5789 "tools/widl/parser.tab.c" break; case 376: /* delegatedef: m_attributes tDELEGATE type ident '(' m_args ')' semicolon_opt */ -#line 1123 "tools/widl/parser.y" +#line 1124 "tools/widl/parser.y" { (yyval.type) = type_delegate_declare((yyvsp[-4].var)->name, current_namespace); (yyval.type) = type_delegate_define((yyval.type), (yyvsp[-7].attr_list), append_statement(NULL, make_statement_delegate((yyvsp[-5].type), (yyvsp[-2].var_list))), &(yylsp[-4])); } -#line 5796 "tools/widl/parser.tab.c" +#line 5797 "tools/widl/parser.tab.c" break; case 377: /* $@5: %empty */ -#line 1127 "tools/widl/parser.y" +#line 1128 "tools/widl/parser.y" { push_parameters_namespace((yyvsp[-1].var)->name); } -#line 5802 "tools/widl/parser.tab.c" +#line 5803 "tools/widl/parser.tab.c" break; case 378: /* $@6: %empty */ -#line 1128 "tools/widl/parser.y" +#line 1129 "tools/widl/parser.y" { pop_parameters_namespace((yyvsp[-7].var)->name); } -#line 5808 "tools/widl/parser.tab.c" +#line 5809 "tools/widl/parser.tab.c" break; case 379: /* delegatedef: m_attributes tDELEGATE type ident '<' $@5 type_parameters '>' '(' m_args ')' $@6 semicolon_opt */ -#line 1129 "tools/widl/parser.y" +#line 1130 "tools/widl/parser.y" { (yyval.type) = type_parameterized_delegate_declare((yyvsp[-9].var)->name, current_namespace, (yyvsp[-6].typeref_list)); (yyval.type) = type_parameterized_delegate_define((yyval.type), (yyvsp[-12].attr_list), append_statement(NULL, make_statement_delegate((yyvsp[-10].type), (yyvsp[-3].var_list))), &(yylsp[-9])); } -#line 5816 "tools/widl/parser.tab.c" +#line 5817 "tools/widl/parser.tab.c" break; case 380: /* required_types: qualified_type */ -#line 1135 "tools/widl/parser.y" +#line 1136 "tools/widl/parser.y" { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); } -#line 5822 "tools/widl/parser.tab.c" +#line 5823 "tools/widl/parser.tab.c" break; case 381: /* required_types: parameterized_type */ -#line 1136 "tools/widl/parser.y" +#line 1137 "tools/widl/parser.y" { (yyval.typeref_list) = append_typeref(NULL, make_typeref((yyvsp[0].type))); } -#line 5828 "tools/widl/parser.tab.c" +#line 5829 "tools/widl/parser.tab.c" break; case 382: /* required_types: required_types ',' qualified_type */ -#line 1137 "tools/widl/parser.y" +#line 1138 "tools/widl/parser.y" { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); } -#line 5834 "tools/widl/parser.tab.c" +#line 5835 "tools/widl/parser.tab.c" break; case 383: /* required_types: required_types ',' parameterized_type */ -#line 1138 "tools/widl/parser.y" +#line 1139 "tools/widl/parser.y" { (yyval.typeref_list) = append_typeref((yyvsp[-2].typeref_list), make_typeref((yyvsp[0].type))); } -#line 5840 "tools/widl/parser.tab.c" +#line 5841 "tools/widl/parser.tab.c" break; case 384: /* requires: %empty */ -#line 1142 "tools/widl/parser.y" +#line 1143 "tools/widl/parser.y" { (yyval.typeref_list) = NULL; } -#line 5846 "tools/widl/parser.tab.c" +#line 5847 "tools/widl/parser.tab.c" break; case 385: /* requires: tREQUIRES required_types */ -#line 1143 "tools/widl/parser.y" +#line 1144 "tools/widl/parser.y" { (yyval.typeref_list) = (yyvsp[0].typeref_list); } -#line 5852 "tools/widl/parser.tab.c" +#line 5853 "tools/widl/parser.tab.c" break; case 386: /* $@7: %empty */ -#line 1146 "tools/widl/parser.y" +#line 1147 "tools/widl/parser.y" { if ((yyvsp[0].type)->type_type == TYPE_PARAMETERIZED_TYPE) push_parameters_namespace((yyvsp[0].type)->name); } -#line 5858 "tools/widl/parser.tab.c" +#line 5859 "tools/widl/parser.tab.c" break; case 387: /* interfacedef: attributes interface $@7 inherit requires '{' int_statements '}' semicolon_opt */ -#line 1148 "tools/widl/parser.y" +#line 1149 "tools/widl/parser.y" { if ((yyvsp[-7].type)->type_type == TYPE_PARAMETERIZED_TYPE) { (yyval.type) = type_parameterized_interface_define((yyvsp[-7].type), (yyvsp[-8].attr_list), (yyvsp[-5].type), (yyvsp[-2].stmt_list), (yyvsp[-4].typeref_list), &(yylsp[-7])); @@ -5870,643 +5871,643 @@ check_async_uuid((yyval.type)); } } -#line 5874 "tools/widl/parser.tab.c" +#line 5875 "tools/widl/parser.tab.c" break; case 388: /* interfacedef: dispinterfacedef semicolon_opt */ -#line 1159 "tools/widl/parser.y" +#line 1160 "tools/widl/parser.y" { (yyval.type) = (yyvsp[-1].type); } -#line 5880 "tools/widl/parser.tab.c" +#line 5881 "tools/widl/parser.tab.c" break; case 389: /* interfaceref: tINTERFACE typename */ -#line 1163 "tools/widl/parser.y" +#line 1164 "tools/widl/parser.y" { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); } -#line 5886 "tools/widl/parser.tab.c" +#line 5887 "tools/widl/parser.tab.c" break; case 390: /* interfaceref: tINTERFACE namespace_pfx typename */ -#line 1164 "tools/widl/parser.y" +#line 1165 "tools/widl/parser.y" { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), (yyvsp[-1].namespace), 0); } -#line 5892 "tools/widl/parser.tab.c" +#line 5893 "tools/widl/parser.tab.c" break; case 391: /* interfaceref: tINTERFACE parameterized_type */ -#line 1165 "tools/widl/parser.y" +#line 1166 "tools/widl/parser.y" { if (type_get_type(((yyval.type) = (yyvsp[0].type))) != TYPE_INTERFACE) error_loc("%s is not an interface\n", (yyval.type)->name); } -#line 5898 "tools/widl/parser.tab.c" +#line 5899 "tools/widl/parser.tab.c" break; case 392: /* dispinterfaceref: tDISPINTERFACE typename */ -#line 1169 "tools/widl/parser.y" +#line 1170 "tools/widl/parser.y" { (yyval.type) = get_type(TYPE_INTERFACE, (yyvsp[0].str), current_namespace, 0); } -#line 5904 "tools/widl/parser.tab.c" +#line 5905 "tools/widl/parser.tab.c" break; case 393: /* module: tMODULE typename */ -#line 1172 "tools/widl/parser.y" +#line 1173 "tools/widl/parser.y" { (yyval.type) = type_module_declare((yyvsp[0].str)); } -#line 5910 "tools/widl/parser.tab.c" +#line 5911 "tools/widl/parser.tab.c" break; case 394: /* moduledef: m_attributes module '{' int_statements '}' semicolon_opt */ -#line 1176 "tools/widl/parser.y" +#line 1177 "tools/widl/parser.y" { (yyval.type) = type_module_define((yyvsp[-4].type), (yyvsp[-5].attr_list), (yyvsp[-2].stmt_list), &(yylsp[-4])); } -#line 5916 "tools/widl/parser.tab.c" +#line 5917 "tools/widl/parser.tab.c" break; case 395: /* storage_cls_spec: tEXTERN */ -#line 1180 "tools/widl/parser.y" +#line 1181 "tools/widl/parser.y" { (yyval.stgclass) = STG_EXTERN; } -#line 5922 "tools/widl/parser.tab.c" +#line 5923 "tools/widl/parser.tab.c" break; case 396: /* storage_cls_spec: tSTATIC */ -#line 1181 "tools/widl/parser.y" +#line 1182 "tools/widl/parser.y" { (yyval.stgclass) = STG_STATIC; } -#line 5928 "tools/widl/parser.tab.c" +#line 5929 "tools/widl/parser.tab.c" break; case 397: /* storage_cls_spec: tREGISTER */ -#line 1182 "tools/widl/parser.y" +#line 1183 "tools/widl/parser.y" { (yyval.stgclass) = STG_REGISTER; } -#line 5934 "tools/widl/parser.tab.c" +#line 5935 "tools/widl/parser.tab.c" break; case 398: /* function_specifier: tINLINE */ -#line 1186 "tools/widl/parser.y" +#line 1187 "tools/widl/parser.y" { (yyval.function_specifier) = FUNCTION_SPECIFIER_INLINE; } -#line 5940 "tools/widl/parser.tab.c" +#line 5941 "tools/widl/parser.tab.c" break; case 399: /* type_qualifier: tCONST */ -#line 1190 "tools/widl/parser.y" +#line 1191 "tools/widl/parser.y" { (yyval.type_qualifier) = TYPE_QUALIFIER_CONST; } -#line 5946 "tools/widl/parser.tab.c" +#line 5947 "tools/widl/parser.tab.c" break; case 400: /* m_type_qual_list: %empty */ -#line 1194 "tools/widl/parser.y" +#line 1195 "tools/widl/parser.y" { (yyval.type_qualifier) = 0; } -#line 5952 "tools/widl/parser.tab.c" +#line 5953 "tools/widl/parser.tab.c" break; case 401: /* m_type_qual_list: m_type_qual_list type_qualifier */ -#line 1195 "tools/widl/parser.y" +#line 1196 "tools/widl/parser.y" { (yyval.type_qualifier) = (yyvsp[-1].type_qualifier) | (yyvsp[0].type_qualifier); } -#line 5958 "tools/widl/parser.tab.c" +#line 5959 "tools/widl/parser.tab.c" break; case 402: /* decl_spec: type m_decl_spec_no_type */ -#line 1198 "tools/widl/parser.y" +#line 1199 "tools/widl/parser.y" { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); } -#line 5964 "tools/widl/parser.tab.c" +#line 5965 "tools/widl/parser.tab.c" break; case 403: /* decl_spec: decl_spec_no_type type m_decl_spec_no_type */ -#line 1200 "tools/widl/parser.y" +#line 1201 "tools/widl/parser.y" { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); } -#line 5970 "tools/widl/parser.tab.c" +#line 5971 "tools/widl/parser.tab.c" break; case 404: /* unqualified_decl_spec: unqualified_type m_decl_spec_no_type */ -#line 1204 "tools/widl/parser.y" +#line 1205 "tools/widl/parser.y" { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[0].declspec), NULL, STG_NONE, 0, 0); } -#line 5976 "tools/widl/parser.tab.c" +#line 5977 "tools/widl/parser.tab.c" break; case 405: /* unqualified_decl_spec: decl_spec_no_type unqualified_type m_decl_spec_no_type */ -#line 1206 "tools/widl/parser.y" +#line 1207 "tools/widl/parser.y" { (yyval.declspec) = make_decl_spec((yyvsp[-1].type), (yyvsp[-2].declspec), (yyvsp[0].declspec), STG_NONE, 0, 0); } -#line 5982 "tools/widl/parser.tab.c" +#line 5983 "tools/widl/parser.tab.c" break; case 406: /* m_decl_spec_no_type: %empty */ -#line 1210 "tools/widl/parser.y" +#line 1211 "tools/widl/parser.y" { (yyval.declspec) = NULL; } -#line 5988 "tools/widl/parser.tab.c" +#line 5989 "tools/widl/parser.tab.c" break; case 408: /* decl_spec_no_type: type_qualifier m_decl_spec_no_type */ -#line 1215 "tools/widl/parser.y" +#line 1216 "tools/widl/parser.y" { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, (yyvsp[-1].type_qualifier), 0); } -#line 5994 "tools/widl/parser.tab.c" +#line 5995 "tools/widl/parser.tab.c" break; case 409: /* decl_spec_no_type: function_specifier m_decl_spec_no_type */ -#line 1216 "tools/widl/parser.y" +#line 1217 "tools/widl/parser.y" { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, STG_NONE, 0, (yyvsp[-1].function_specifier)); } -#line 6000 "tools/widl/parser.tab.c" +#line 6001 "tools/widl/parser.tab.c" break; case 410: /* decl_spec_no_type: storage_cls_spec m_decl_spec_no_type */ -#line 1217 "tools/widl/parser.y" +#line 1218 "tools/widl/parser.y" { (yyval.declspec) = make_decl_spec(NULL, (yyvsp[0].declspec), NULL, (yyvsp[-1].stgclass), 0, 0); } -#line 6006 "tools/widl/parser.tab.c" +#line 6007 "tools/widl/parser.tab.c" break; case 411: /* declarator: '*' m_type_qual_list declarator */ -#line 1222 "tools/widl/parser.y" +#line 1223 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); } -#line 6012 "tools/widl/parser.tab.c" +#line 6013 "tools/widl/parser.tab.c" break; case 412: /* declarator: callconv declarator */ -#line 1223 "tools/widl/parser.y" +#line 1224 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv( (yyloc), (yyval.declarator)->type, (yyvsp[-1].str) ); } -#line 6018 "tools/widl/parser.tab.c" +#line 6019 "tools/widl/parser.tab.c" break; case 414: /* direct_declarator: ident */ -#line 1228 "tools/widl/parser.y" +#line 1229 "tools/widl/parser.y" { (yyval.declarator) = make_declarator((yyvsp[0].var)); } -#line 6024 "tools/widl/parser.tab.c" +#line 6025 "tools/widl/parser.tab.c" break; case 415: /* direct_declarator: '(' declarator ')' */ -#line 1229 "tools/widl/parser.y" +#line 1230 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[-1].declarator); } -#line 6030 "tools/widl/parser.tab.c" +#line 6031 "tools/widl/parser.tab.c" break; case 416: /* direct_declarator: direct_declarator array */ -#line 1230 "tools/widl/parser.y" +#line 1231 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); } -#line 6036 "tools/widl/parser.tab.c" +#line 6037 "tools/widl/parser.tab.c" break; case 417: /* direct_declarator: direct_declarator '(' m_args ')' */ -#line 1231 "tools/widl/parser.y" +#line 1232 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[-3].declarator); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); } -#line 6042 "tools/widl/parser.tab.c" +#line 6043 "tools/widl/parser.tab.c" break; case 418: /* abstract_declarator: '*' m_type_qual_list m_abstract_declarator */ -#line 1237 "tools/widl/parser.y" +#line 1238 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); } -#line 6048 "tools/widl/parser.tab.c" +#line 6049 "tools/widl/parser.tab.c" break; case 419: /* abstract_declarator: callconv m_abstract_declarator */ -#line 1238 "tools/widl/parser.y" +#line 1239 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv( (yyloc), (yyval.declarator)->type, (yyvsp[-1].str) ); } -#line 6054 "tools/widl/parser.tab.c" +#line 6055 "tools/widl/parser.tab.c" break; case 421: /* abstract_declarator_no_direct: '*' m_type_qual_list m_any_declarator */ -#line 1245 "tools/widl/parser.y" +#line 1246 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); } -#line 6060 "tools/widl/parser.tab.c" +#line 6061 "tools/widl/parser.tab.c" break; case 422: /* abstract_declarator_no_direct: callconv m_any_declarator */ -#line 1246 "tools/widl/parser.y" +#line 1247 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv( (yyloc), (yyval.declarator)->type, (yyvsp[-1].str) ); } -#line 6066 "tools/widl/parser.tab.c" +#line 6067 "tools/widl/parser.tab.c" break; case 423: /* m_abstract_declarator: %empty */ -#line 1251 "tools/widl/parser.y" +#line 1252 "tools/widl/parser.y" { (yyval.declarator) = make_declarator(NULL); } -#line 6072 "tools/widl/parser.tab.c" +#line 6073 "tools/widl/parser.tab.c" break; case 425: /* abstract_direct_declarator: '(' abstract_declarator_no_direct ')' */ -#line 1257 "tools/widl/parser.y" +#line 1258 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[-1].declarator); } -#line 6078 "tools/widl/parser.tab.c" +#line 6079 "tools/widl/parser.tab.c" break; case 426: /* abstract_direct_declarator: abstract_direct_declarator array */ -#line 1258 "tools/widl/parser.y" +#line 1259 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); } -#line 6084 "tools/widl/parser.tab.c" +#line 6085 "tools/widl/parser.tab.c" break; case 427: /* abstract_direct_declarator: array */ -#line 1259 "tools/widl/parser.y" +#line 1260 "tools/widl/parser.y" { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); } -#line 6090 "tools/widl/parser.tab.c" +#line 6091 "tools/widl/parser.tab.c" break; case 428: /* abstract_direct_declarator: '(' m_args ')' */ -#line 1261 "tools/widl/parser.y" +#line 1262 "tools/widl/parser.y" { (yyval.declarator) = make_declarator(NULL); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); } -#line 6098 "tools/widl/parser.tab.c" +#line 6099 "tools/widl/parser.tab.c" break; case 429: /* abstract_direct_declarator: abstract_direct_declarator '(' m_args ')' */ -#line 1265 "tools/widl/parser.y" +#line 1266 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[-3].declarator); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); } -#line 6106 "tools/widl/parser.tab.c" +#line 6107 "tools/widl/parser.tab.c" break; case 430: /* any_declarator: '*' m_type_qual_list m_any_declarator */ -#line 1273 "tools/widl/parser.y" +#line 1274 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); } -#line 6112 "tools/widl/parser.tab.c" +#line 6113 "tools/widl/parser.tab.c" break; case 431: /* any_declarator: callconv m_any_declarator */ -#line 1274 "tools/widl/parser.y" +#line 1275 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv( (yyloc), (yyval.declarator)->type, (yyvsp[-1].str) ); } -#line 6118 "tools/widl/parser.tab.c" +#line 6119 "tools/widl/parser.tab.c" break; case 433: /* any_declarator_no_direct: '*' m_type_qual_list m_any_declarator */ -#line 1281 "tools/widl/parser.y" +#line 1282 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[0].declarator); append_chain_type((yyval.declarator), type_new_pointer(NULL), (yyvsp[-1].type_qualifier)); } -#line 6124 "tools/widl/parser.tab.c" +#line 6125 "tools/widl/parser.tab.c" break; case 434: /* any_declarator_no_direct: callconv m_any_declarator */ -#line 1282 "tools/widl/parser.y" +#line 1283 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[0].declarator); append_chain_callconv( (yyloc), (yyval.declarator)->type, (yyvsp[-1].str) ); } -#line 6130 "tools/widl/parser.tab.c" +#line 6131 "tools/widl/parser.tab.c" break; case 435: /* m_any_declarator: %empty */ -#line 1287 "tools/widl/parser.y" +#line 1288 "tools/widl/parser.y" { (yyval.declarator) = make_declarator(NULL); } -#line 6136 "tools/widl/parser.tab.c" +#line 6137 "tools/widl/parser.tab.c" break; case 437: /* any_direct_declarator: ident */ -#line 1295 "tools/widl/parser.y" +#line 1296 "tools/widl/parser.y" { (yyval.declarator) = make_declarator((yyvsp[0].var)); } -#line 6142 "tools/widl/parser.tab.c" +#line 6143 "tools/widl/parser.tab.c" break; case 438: /* any_direct_declarator: '(' any_declarator_no_direct ')' */ -#line 1296 "tools/widl/parser.y" +#line 1297 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[-1].declarator); } -#line 6148 "tools/widl/parser.tab.c" +#line 6149 "tools/widl/parser.tab.c" break; case 439: /* any_direct_declarator: any_direct_declarator array */ -#line 1297 "tools/widl/parser.y" +#line 1298 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[-1].declarator); append_array((yyval.declarator), (yyvsp[0].expr)); } -#line 6154 "tools/widl/parser.tab.c" +#line 6155 "tools/widl/parser.tab.c" break; case 440: /* any_direct_declarator: array */ -#line 1298 "tools/widl/parser.y" +#line 1299 "tools/widl/parser.y" { (yyval.declarator) = make_declarator(NULL); append_array((yyval.declarator), (yyvsp[0].expr)); } -#line 6160 "tools/widl/parser.tab.c" +#line 6161 "tools/widl/parser.tab.c" break; case 441: /* any_direct_declarator: '(' m_args ')' */ -#line 1300 "tools/widl/parser.y" +#line 1301 "tools/widl/parser.y" { (yyval.declarator) = make_declarator(NULL); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); } -#line 6168 "tools/widl/parser.tab.c" +#line 6169 "tools/widl/parser.tab.c" break; case 442: /* any_direct_declarator: any_direct_declarator '(' m_args ')' */ -#line 1304 "tools/widl/parser.y" +#line 1305 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[-3].declarator); append_chain_type((yyval.declarator), type_new_function((yyvsp[-1].var_list)), 0); } -#line 6176 "tools/widl/parser.tab.c" +#line 6177 "tools/widl/parser.tab.c" break; case 443: /* declarator_list: declarator */ -#line 1310 "tools/widl/parser.y" +#line 1311 "tools/widl/parser.y" { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); } -#line 6182 "tools/widl/parser.tab.c" +#line 6183 "tools/widl/parser.tab.c" break; case 444: /* declarator_list: declarator_list ',' declarator */ -#line 1311 "tools/widl/parser.y" +#line 1312 "tools/widl/parser.y" { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); } -#line 6188 "tools/widl/parser.tab.c" +#line 6189 "tools/widl/parser.tab.c" break; case 445: /* m_bitfield: %empty */ -#line 1315 "tools/widl/parser.y" +#line 1316 "tools/widl/parser.y" { (yyval.expr) = NULL; } -#line 6194 "tools/widl/parser.tab.c" +#line 6195 "tools/widl/parser.tab.c" break; case 446: /* m_bitfield: ':' expr_const */ -#line 1316 "tools/widl/parser.y" +#line 1317 "tools/widl/parser.y" { (yyval.expr) = (yyvsp[0].expr); } -#line 6200 "tools/widl/parser.tab.c" +#line 6201 "tools/widl/parser.tab.c" break; case 447: /* struct_declarator: any_declarator m_bitfield */ -#line 1319 "tools/widl/parser.y" +#line 1320 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[-1].declarator); (yyval.declarator)->bits = (yyvsp[0].expr); if (!(yyval.declarator)->bits && !(yyval.declarator)->var->name) error_loc("unnamed fields are not allowed\n"); } -#line 6209 "tools/widl/parser.tab.c" +#line 6210 "tools/widl/parser.tab.c" break; case 448: /* struct_declarator_list: struct_declarator */ -#line 1326 "tools/widl/parser.y" +#line 1327 "tools/widl/parser.y" { (yyval.declarator_list) = append_declarator( NULL, (yyvsp[0].declarator) ); } -#line 6215 "tools/widl/parser.tab.c" +#line 6216 "tools/widl/parser.tab.c" break; case 449: /* struct_declarator_list: struct_declarator_list ',' struct_declarator */ -#line 1328 "tools/widl/parser.y" +#line 1329 "tools/widl/parser.y" { (yyval.declarator_list) = append_declarator( (yyvsp[-2].declarator_list), (yyvsp[0].declarator) ); } -#line 6221 "tools/widl/parser.tab.c" +#line 6222 "tools/widl/parser.tab.c" break; case 450: /* init_declarator: declarator */ -#line 1332 "tools/widl/parser.y" +#line 1333 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[0].declarator); } -#line 6227 "tools/widl/parser.tab.c" +#line 6228 "tools/widl/parser.tab.c" break; case 451: /* init_declarator: declarator '=' expr_const */ -#line 1333 "tools/widl/parser.y" +#line 1334 "tools/widl/parser.y" { (yyval.declarator) = (yyvsp[-2].declarator); (yyvsp[-2].declarator)->var->eval = (yyvsp[0].expr); } -#line 6233 "tools/widl/parser.tab.c" +#line 6234 "tools/widl/parser.tab.c" break; case 452: /* threading_type: tAPARTMENT */ -#line 1337 "tools/widl/parser.y" +#line 1338 "tools/widl/parser.y" { (yyval.num) = THREADING_APARTMENT; } -#line 6239 "tools/widl/parser.tab.c" +#line 6240 "tools/widl/parser.tab.c" break; case 453: /* threading_type: tNEUTRAL */ -#line 1338 "tools/widl/parser.y" +#line 1339 "tools/widl/parser.y" { (yyval.num) = THREADING_NEUTRAL; } -#line 6245 "tools/widl/parser.tab.c" +#line 6246 "tools/widl/parser.tab.c" break; case 454: /* threading_type: tSINGLE */ -#line 1339 "tools/widl/parser.y" +#line 1340 "tools/widl/parser.y" { (yyval.num) = THREADING_SINGLE; } -#line 6251 "tools/widl/parser.tab.c" +#line 6252 "tools/widl/parser.tab.c" break; case 455: /* threading_type: tFREE */ -#line 1340 "tools/widl/parser.y" +#line 1341 "tools/widl/parser.y" { (yyval.num) = THREADING_FREE; } -#line 6257 "tools/widl/parser.tab.c" +#line 6258 "tools/widl/parser.tab.c" break; case 456: /* threading_type: tBOTH */ -#line 1341 "tools/widl/parser.y" +#line 1342 "tools/widl/parser.y" { (yyval.num) = THREADING_BOTH; } -#line 6263 "tools/widl/parser.tab.c" +#line 6264 "tools/widl/parser.tab.c" break; case 457: /* threading_type: tMTA */ -#line 1342 "tools/widl/parser.y" +#line 1343 "tools/widl/parser.y" { (yyval.num) = THREADING_FREE; } -#line 6269 "tools/widl/parser.tab.c" +#line 6270 "tools/widl/parser.tab.c" break; case 458: /* pointer_type: tREF */ -#line 1346 "tools/widl/parser.y" +#line 1347 "tools/widl/parser.y" { (yyval.num) = FC_RP; } -#line 6275 "tools/widl/parser.tab.c" +#line 6276 "tools/widl/parser.tab.c" break; case 459: /* pointer_type: tUNIQUE */ -#line 1347 "tools/widl/parser.y" +#line 1348 "tools/widl/parser.y" { (yyval.num) = FC_UP; } -#line 6281 "tools/widl/parser.tab.c" +#line 6282 "tools/widl/parser.tab.c" break; case 460: /* pointer_type: tPTR */ -#line 1348 "tools/widl/parser.y" +#line 1349 "tools/widl/parser.y" { (yyval.num) = FC_FP; } -#line 6287 "tools/widl/parser.tab.c" +#line 6288 "tools/widl/parser.tab.c" break; case 461: /* structdef: tSTRUCT m_typename '{' fields '}' */ -#line 1351 "tools/widl/parser.y" +#line 1352 "tools/widl/parser.y" { (yyval.type) = type_new_struct((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list), &(yylsp[-3])); } -#line 6293 "tools/widl/parser.tab.c" +#line 6294 "tools/widl/parser.tab.c" break; case 462: /* unqualified_type: tVOID */ -#line 1355 "tools/widl/parser.y" +#line 1356 "tools/widl/parser.y" { (yyval.type) = type_new_void(); } -#line 6299 "tools/widl/parser.tab.c" +#line 6300 "tools/widl/parser.tab.c" break; case 463: /* unqualified_type: base_type */ -#line 1356 "tools/widl/parser.y" +#line 1357 "tools/widl/parser.y" { (yyval.type) = (yyvsp[0].type); } -#line 6305 "tools/widl/parser.tab.c" +#line 6306 "tools/widl/parser.tab.c" break; case 464: /* unqualified_type: enumdef */ -#line 1357 "tools/widl/parser.y" +#line 1358 "tools/widl/parser.y" { (yyval.type) = (yyvsp[0].type); } -#line 6311 "tools/widl/parser.tab.c" +#line 6312 "tools/widl/parser.tab.c" break; case 465: /* unqualified_type: tENUM typename */ -#line 1358 "tools/widl/parser.y" +#line 1359 "tools/widl/parser.y" { (yyval.type) = type_new_enum((yyvsp[0].str), current_namespace, FALSE, NULL, &(yyloc)); } -#line 6317 "tools/widl/parser.tab.c" +#line 6318 "tools/widl/parser.tab.c" break; case 466: /* unqualified_type: structdef */ -#line 1359 "tools/widl/parser.y" +#line 1360 "tools/widl/parser.y" { (yyval.type) = (yyvsp[0].type); } -#line 6323 "tools/widl/parser.tab.c" +#line 6324 "tools/widl/parser.tab.c" break; case 467: /* unqualified_type: tSTRUCT typename */ -#line 1360 "tools/widl/parser.y" +#line 1361 "tools/widl/parser.y" { (yyval.type) = type_new_struct((yyvsp[0].str), current_namespace, FALSE, NULL, &(yyloc)); } -#line 6329 "tools/widl/parser.tab.c" +#line 6330 "tools/widl/parser.tab.c" break; case 468: /* unqualified_type: uniondef */ -#line 1361 "tools/widl/parser.y" +#line 1362 "tools/widl/parser.y" { (yyval.type) = (yyvsp[0].type); } -#line 6335 "tools/widl/parser.tab.c" +#line 6336 "tools/widl/parser.tab.c" break; case 469: /* unqualified_type: tUNION typename */ -#line 1362 "tools/widl/parser.y" +#line 1363 "tools/widl/parser.y" { (yyval.type) = type_new_nonencapsulated_union((yyvsp[0].str), current_namespace, FALSE, NULL, &(yyloc)); } -#line 6341 "tools/widl/parser.tab.c" +#line 6342 "tools/widl/parser.tab.c" break; case 470: /* unqualified_type: tSAFEARRAY '(' type ')' */ -#line 1363 "tools/widl/parser.y" +#line 1364 "tools/widl/parser.y" { (yyval.type) = make_safearray((yyvsp[-1].type)); } -#line 6347 "tools/widl/parser.tab.c" +#line 6348 "tools/widl/parser.tab.c" break; case 471: /* unqualified_type: aKNOWNTYPE */ -#line 1364 "tools/widl/parser.y" +#line 1365 "tools/widl/parser.y" { (yyval.type) = find_type_or_error(current_namespace, (yyvsp[0].str)); } -#line 6353 "tools/widl/parser.tab.c" +#line 6354 "tools/widl/parser.tab.c" break; case 473: /* type: namespace_pfx typename */ -#line 1369 "tools/widl/parser.y" +#line 1370 "tools/widl/parser.y" { (yyval.type) = find_type_or_error((yyvsp[-1].namespace), (yyvsp[0].str)); } -#line 6359 "tools/widl/parser.tab.c" +#line 6360 "tools/widl/parser.tab.c" break; case 474: /* type: parameterized_type */ -#line 1370 "tools/widl/parser.y" +#line 1371 "tools/widl/parser.y" { (yyval.type) = (yyvsp[0].type); } -#line 6365 "tools/widl/parser.tab.c" +#line 6366 "tools/widl/parser.tab.c" break; case 475: /* typedef: m_attributes tTYPEDEF m_attributes decl_spec declarator_list */ -#line 1374 "tools/widl/parser.y" +#line 1375 "tools/widl/parser.y" { (yyvsp[-4].attr_list) = append_attribs((yyvsp[-4].attr_list), (yyvsp[-2].attr_list)); reg_typedefs( (yyloc), (yyvsp[-1].declspec), (yyvsp[0].declarator_list), check_typedef_attrs( (yyvsp[-4].attr_list) ) ); (yyval.statement) = make_statement_typedef((yyvsp[0].declarator_list), (yyvsp[-1].declspec)->type->defined && !(yyvsp[-1].declspec)->type->defined_in_import); } -#line 6374 "tools/widl/parser.tab.c" +#line 6375 "tools/widl/parser.tab.c" break; case 476: /* uniondef: tUNION m_typename '{' ne_union_fields '}' */ -#line 1381 "tools/widl/parser.y" +#line 1382 "tools/widl/parser.y" { (yyval.type) = type_new_nonencapsulated_union((yyvsp[-3].str), current_namespace, TRUE, (yyvsp[-1].var_list), &(yylsp[-3])); } -#line 6380 "tools/widl/parser.tab.c" +#line 6381 "tools/widl/parser.tab.c" break; case 477: /* uniondef: tUNION m_typename tSWITCH '(' s_field ')' m_ident '{' cases '}' */ -#line 1384 "tools/widl/parser.y" +#line 1385 "tools/widl/parser.y" { (yyval.type) = type_new_encapsulated_union((yyvsp[-8].str), (yyvsp[-5].var), (yyvsp[-3].var), (yyvsp[-1].var_list), &(yylsp[-8])); } -#line 6386 "tools/widl/parser.tab.c" +#line 6387 "tools/widl/parser.tab.c" break; case 478: /* version: aNUM */ -#line 1388 "tools/widl/parser.y" +#line 1389 "tools/widl/parser.y" { (yyval.num) = MAKEVERSION((yyvsp[0].integer).value, 0); } -#line 6392 "tools/widl/parser.tab.c" +#line 6393 "tools/widl/parser.tab.c" break; case 479: /* version: aNUM '.' aNUM */ -#line 1389 "tools/widl/parser.y" +#line 1390 "tools/widl/parser.y" { (yyval.num) = MAKEVERSION((yyvsp[-2].integer).value, (yyvsp[0].integer).value); } -#line 6398 "tools/widl/parser.tab.c" +#line 6399 "tools/widl/parser.tab.c" break; case 480: /* version: aHEXNUM */ -#line 1390 "tools/widl/parser.y" +#line 1391 "tools/widl/parser.y" { (yyval.num) = (yyvsp[0].integer).value; } -#line 6404 "tools/widl/parser.tab.c" +#line 6405 "tools/widl/parser.tab.c" break; case 485: /* acf_int_statement: tTYPEDEF acf_attributes aKNOWNTYPE ';' */ -#line 1405 "tools/widl/parser.y" +#line 1406 "tools/widl/parser.y" { type_t *type = find_type_or_error(current_namespace, (yyvsp[-1].str)); type->attrs = append_attr_list(type->attrs, (yyvsp[-2].attr_list)); } -#line 6412 "tools/widl/parser.tab.c" +#line 6413 "tools/widl/parser.tab.c" break; case 486: /* acf_interface: acf_attributes tINTERFACE aKNOWNTYPE '{' acf_int_statements '}' */ -#line 1412 "tools/widl/parser.y" +#line 1413 "tools/widl/parser.y" { type_t *iface = find_type_or_error(current_namespace, (yyvsp[-3].str)); if (type_get_type(iface) != TYPE_INTERFACE) error_loc("%s is not an interface\n", iface->name); iface->attrs = append_attr_list(iface->attrs, (yyvsp[-5].attr_list)); } -#line 6422 "tools/widl/parser.tab.c" +#line 6423 "tools/widl/parser.tab.c" break; case 487: /* acf_attributes: %empty */ -#line 1420 "tools/widl/parser.y" +#line 1421 "tools/widl/parser.y" { (yyval.attr_list) = NULL; } -#line 6428 "tools/widl/parser.tab.c" +#line 6429 "tools/widl/parser.tab.c" break; case 488: /* acf_attributes: '[' acf_attribute_list ']' */ -#line 1421 "tools/widl/parser.y" +#line 1422 "tools/widl/parser.y" { (yyval.attr_list) = (yyvsp[-1].attr_list); } -#line 6434 "tools/widl/parser.tab.c" +#line 6435 "tools/widl/parser.tab.c" break; case 489: /* acf_attribute_list: acf_attribute */ -#line 1425 "tools/widl/parser.y" +#line 1426 "tools/widl/parser.y" { (yyval.attr_list) = append_attr(NULL, (yyvsp[0].attr)); } -#line 6440 "tools/widl/parser.tab.c" +#line 6441 "tools/widl/parser.tab.c" break; case 490: /* acf_attribute_list: acf_attribute_list ',' acf_attribute */ -#line 1426 "tools/widl/parser.y" +#line 1427 "tools/widl/parser.y" { (yyval.attr_list) = append_attr((yyvsp[-2].attr_list), (yyvsp[0].attr)); } -#line 6446 "tools/widl/parser.tab.c" +#line 6447 "tools/widl/parser.tab.c" break; case 491: /* acf_attribute: tALLOCATE '(' allocate_option_list ')' */ -#line 1431 "tools/widl/parser.y" +#line 1432 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_ALLOCATE, (yyvsp[-1].num) ); } -#line 6452 "tools/widl/parser.tab.c" +#line 6453 "tools/widl/parser.tab.c" break; case 492: /* acf_attribute: tENCODE */ -#line 1432 "tools/widl/parser.y" +#line 1433 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_ENCODE, 0 ); } -#line 6458 "tools/widl/parser.tab.c" +#line 6459 "tools/widl/parser.tab.c" break; case 493: /* acf_attribute: tDECODE */ -#line 1433 "tools/widl/parser.y" +#line 1434 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_DECODE, 0 ); } -#line 6464 "tools/widl/parser.tab.c" +#line 6465 "tools/widl/parser.tab.c" break; case 494: /* acf_attribute: tEXPLICITHANDLE */ -#line 1434 "tools/widl/parser.y" +#line 1435 "tools/widl/parser.y" { (yyval.attr) = attr_int( (yyloc), ATTR_EXPLICIT_HANDLE, 0 ); } -#line 6470 "tools/widl/parser.tab.c" +#line 6471 "tools/widl/parser.tab.c" break; case 495: /* allocate_option_list: allocate_option */ -#line 1438 "tools/widl/parser.y" +#line 1439 "tools/widl/parser.y" { (yyval.num) = (yyvsp[0].num); } -#line 6476 "tools/widl/parser.tab.c" +#line 6477 "tools/widl/parser.tab.c" break; case 496: /* allocate_option_list: allocate_option_list ',' allocate_option */ -#line 1440 "tools/widl/parser.y" +#line 1441 "tools/widl/parser.y" { (yyval.num) = (yyvsp[-2].num) | (yyvsp[0].num); } -#line 6482 "tools/widl/parser.tab.c" +#line 6483 "tools/widl/parser.tab.c" break; case 497: /* allocate_option: tDONTFREE */ -#line 1444 "tools/widl/parser.y" +#line 1445 "tools/widl/parser.y" { (yyval.num) = FC_DONT_FREE; } -#line 6488 "tools/widl/parser.tab.c" +#line 6489 "tools/widl/parser.tab.c" break; case 498: /* allocate_option: tFREE */ -#line 1445 "tools/widl/parser.y" +#line 1446 "tools/widl/parser.y" { (yyval.num) = 0; } -#line 6494 "tools/widl/parser.tab.c" +#line 6495 "tools/widl/parser.tab.c" break; case 499: /* allocate_option: tALLNODES */ -#line 1446 "tools/widl/parser.y" +#line 1447 "tools/widl/parser.y" { (yyval.num) = FC_ALLOCATE_ALL_NODES; } -#line 6500 "tools/widl/parser.tab.c" +#line 6501 "tools/widl/parser.tab.c" break; case 500: /* allocate_option: tSINGLENODE */ -#line 1447 "tools/widl/parser.y" +#line 1448 "tools/widl/parser.y" { (yyval.num) = 0; } -#line 6506 "tools/widl/parser.tab.c" +#line 6507 "tools/widl/parser.tab.c" break; -#line 6510 "tools/widl/parser.tab.c" +#line 6511 "tools/widl/parser.tab.c" default: break; } @@ -6735,7 +6736,7 @@ return yyresult; } -#line 1450 "tools/widl/parser.y" +#line 1451 "tools/widl/parser.y" static void decl_builtin_basic(const char *name, enum type_basic_type type)
diff --git a/mingw-w64-tools/widl/src/parser.y b/mingw-w64-tools/widl/src/parser.y index 985f110..54b1436 100644 --- a/mingw-w64-tools/widl/src/parser.y +++ b/mingw-w64-tools/widl/src/parser.y
@@ -379,6 +379,7 @@ write_typelib_regscript($1); write_dlldata($1); write_local_stubs($1); + write_metadata($1); (void)parser_nerrs; /* avoid unused variable warning */ } ;
diff --git a/mingw-w64-tools/widl/src/widl.c b/mingw-w64-tools/widl/src/widl.c index 5db6e38..83fe04f 100644 --- a/mingw-w64-tools/widl/src/widl.c +++ b/mingw-w64-tools/widl/src/widl.c
@@ -76,6 +76,7 @@ " -V Print version and exit\n" " -W Enable pedantic warnings\n" " --win32, --win64 Set the target architecture (Win32 or Win64)\n" +" --winmd Generate metadata (implies --winrt)\n" " --winrt Enable Windows Runtime mode\n" "Debug level 'n' is a bitmask with following meaning:\n" " * 0x01 Tell which resource is parsed (verbose mode)\n" @@ -105,6 +106,7 @@ int do_regscript = 0; int do_idfile = 0; int do_dlldata = 0; +int do_metadata = 0; static int no_preprocess = 0; int old_names = 0; int old_typelib = 0; @@ -120,6 +122,7 @@ char *local_stubs_name; char *header_token; char *typelib_name; +char *metadata_name; char *dlldata_name; char *proxy_name; char *proxy_token; @@ -168,6 +171,7 @@ SYSROOT_OPTION, WIN32_OPTION, WIN64_OPTION, + WINMD_OPTION, }; static const char short_options[] = @@ -195,6 +199,7 @@ { "winrt", 0, RT_OPTION }, { "win32", 0, WIN32_OPTION }, { "win64", 0, WIN64_OPTION }, + { "winmd", 0, WINMD_OPTION }, { NULL } }; @@ -263,6 +268,7 @@ do_regscript = x; do_idfile = x; do_dlldata = x; + do_metadata = x; } void start_cplusplus_guard(FILE *fp) @@ -519,6 +525,11 @@ case WIN64_OPTION: pointer_size = 8; break; + case WINMD_OPTION: + do_everything = 0; + winrt_mode = 1; + do_metadata = 1; + break; case PACKING_OPTION: packing = strtol(optarg, NULL, 0); if(packing != 2 && packing != 4 && packing != 8) @@ -716,11 +727,16 @@ /* if nothing specified, try to guess output type from the output file name */ if (output_name && do_everything && !do_header && !do_typelib && !do_proxies && - !do_client && !do_server && !do_regscript && !do_idfile && !do_dlldata) + !do_client && !do_server && !do_regscript && !do_idfile && !do_dlldata && !do_metadata) { do_everything = 0; if (strendswith( output_name, ".h" )) do_header = 1; else if (strendswith( output_name, ".tlb" )) do_typelib = 1; + else if (strendswith( output_name, ".winmd" )) + { + winrt_mode = 1; + do_metadata = 1; + } else if (strendswith( output_name, "_p.c" )) do_proxies = 1; else if (strendswith( output_name, "_c.c" )) do_client = 1; else if (strendswith( output_name, "_s.c" )) do_server = 1; @@ -737,10 +753,11 @@ } if (do_header + do_typelib + do_proxies + do_client + - do_server + do_regscript + do_idfile + do_dlldata == 1 && output_name) + do_server + do_regscript + do_idfile + do_dlldata + do_metadata == 1 && output_name) { if (do_header && !header_name) header_name = output_name; else if (do_typelib && !typelib_name) typelib_name = output_name; + else if (do_metadata && !metadata_name) metadata_name = output_name; else if (do_proxies && !proxy_name) proxy_name = output_name; else if (do_client && !client_name) client_name = output_name; else if (do_server && !server_name) server_name = output_name; @@ -810,6 +827,9 @@ if (!idfile_name && do_idfile) idfile_name = replace_extension( get_basename(input_name), ".idl", "_i.c" ); + if (!metadata_name && do_metadata) + metadata_name = replace_extension( get_basename(input_name), ".idl", ".winmd" ); + if (do_proxies) proxy_token = dup_basename_token(proxy_name,"_p.c"); if (do_client) client_token = dup_basename_token(client_name,"_c.c"); if (do_server) server_token = dup_basename_token(server_name,"_s.c"); @@ -854,6 +874,8 @@ unlink(proxy_name); if (do_typelib) unlink(typelib_name); + if (do_metadata) + unlink(metadata_name); remove_temp_files(); }
diff --git a/mingw-w64-tools/widl/src/widl.h b/mingw-w64-tools/widl/src/widl.h index 31bb2c8..08071e8 100644 --- a/mingw-w64-tools/widl/src/widl.h +++ b/mingw-w64-tools/widl/src/widl.h
@@ -39,6 +39,7 @@ extern int do_everything; extern int do_header; extern int do_typelib; +extern int do_metadata; extern int do_proxies; extern int do_client; extern int do_server; @@ -58,6 +59,7 @@ extern char *header_token; extern char *local_stubs_name; extern char *typelib_name; +extern char *metadata_name; extern char *dlldata_name; extern char *proxy_name; extern char *proxy_token; @@ -86,6 +88,7 @@ extern void output_typelib_regscript( const typelib_t *typelib ); extern void write_local_stubs(const statement_list_t *stmts); extern void write_dlldata(const statement_list_t *stmts); +extern void write_metadata(const statement_list_t *stmts); extern void start_cplusplus_guard(FILE *fp); extern void end_cplusplus_guard(FILE *fp);
diff --git a/mingw-w64-tools/widl/wine-import.sh b/mingw-w64-tools/widl/wine-import.sh index 47e31fb..8ee74ad 100755 --- a/mingw-w64-tools/widl/wine-import.sh +++ b/mingw-w64-tools/widl/wine-import.sh
@@ -12,7 +12,7 @@ for f in attribute.c client.c expr.c expr.h hash.c hash.h header.c header.h parser.h parser.l parser.tab.c parser.tab.h parser.y \ parser.yy.c proxy.c register.c server.c typegen.c typegen.h typelib.c typelib.h typelib_struct.h typetree.c typetree.h \ - utils.c utils.h widl.c widl.h widltypes.h write_sltg.c write_msft.c + utils.c utils.h widl.c widl.h widltypes.h write_sltg.c write_msft.c metadata.c do if [ ! -f $WINE_DIR/tools/widl/$f ] && [ -f $WINE_BUILD_DIR/tools/widl/$f ]; then cp $WINE_BUILD_DIR/tools/widl/$f src @@ -42,7 +42,7 @@ for f in basetsd.h concurrencysal.h driverspecs.h guiddef.h excpt.h memoryapi.h namespaceapi.h ndrtypes.h poppack.h pshpack1.h \ processthreadsapi.h pshpack2.h pshpack4.h pshpack8.h realtimeapiset.h sal.h specstrings.h specstrings_strict.h threadpoolapiset.h \ timezoneapi.h winbase.h windef.h winerror.h winnls.h winnt.h winnt.rh synchapi.h winapifamily.h minwindef.h minwinbase.h fibersapi.h \ - sysinfoapi.h + sysinfoapi.h wincrypt.h bcrypt.h ncrypt.h do cp $WINE_DIR/include/$f include done