/* Generated by the protocol buffer compiler.  DO NOT EDIT! */
/* Generated from: proto/keyexchange.proto */

#ifndef PROTOBUF_C_proto_2fkeyexchange_2eproto__INCLUDED
#define PROTOBUF_C_proto_2fkeyexchange_2eproto__INCLUDED

#include <protobuf-c/protobuf-c.h>

PROTOBUF_C__BEGIN_DECLS

#if PROTOBUF_C_VERSION_NUMBER < 1000000
# error This file was generated by a newer version of protoc-c which is incompatible with your libprotobuf-c headers. Please update your headers.
#elif 1003003 < PROTOBUF_C_MIN_COMPILER_VERSION
# error This file was generated by an older version of protoc-c which is incompatible with your libprotobuf-c headers. Please regenerate this file with a newer version of protoc-c.
#endif


typedef struct _ClientHello ClientHello;
typedef struct _BuildInfo BuildInfo;
typedef struct _LoginCryptoHelloUnion LoginCryptoHelloUnion;
typedef struct _LoginCryptoDiffieHellmanHello LoginCryptoDiffieHellmanHello;
typedef struct _FeatureSet FeatureSet;
typedef struct _APResponseMessage APResponseMessage;
typedef struct _APChallenge APChallenge;
typedef struct _LoginCryptoChallengeUnion LoginCryptoChallengeUnion;
typedef struct _LoginCryptoDiffieHellmanChallenge LoginCryptoDiffieHellmanChallenge;
typedef struct _FingerprintChallengeUnion FingerprintChallengeUnion;
typedef struct _FingerprintGrainChallenge FingerprintGrainChallenge;
typedef struct _FingerprintHmacRipemdChallenge FingerprintHmacRipemdChallenge;
typedef struct _PoWChallengeUnion PoWChallengeUnion;
typedef struct _PoWHashCashChallenge PoWHashCashChallenge;
typedef struct _CryptoChallengeUnion CryptoChallengeUnion;
typedef struct _CryptoShannonChallenge CryptoShannonChallenge;
typedef struct _CryptoRc4Sha1HmacChallenge CryptoRc4Sha1HmacChallenge;
typedef struct _UpgradeRequiredMessage UpgradeRequiredMessage;
typedef struct _APLoginFailed APLoginFailed;
typedef struct _ClientResponsePlaintext ClientResponsePlaintext;
typedef struct _LoginCryptoResponseUnion LoginCryptoResponseUnion;
typedef struct _LoginCryptoDiffieHellmanResponse LoginCryptoDiffieHellmanResponse;
typedef struct _PoWResponseUnion PoWResponseUnion;
typedef struct _PoWHashCashResponse PoWHashCashResponse;
typedef struct _CryptoResponseUnion CryptoResponseUnion;
typedef struct _CryptoShannonResponse CryptoShannonResponse;
typedef struct _CryptoRc4Sha1HmacResponse CryptoRc4Sha1HmacResponse;


/* --- enums --- */

typedef enum _Product {
  PRODUCT__PRODUCT_CLIENT = 0,
  PRODUCT__PRODUCT_LIBSPOTIFY = 1,
  PRODUCT__PRODUCT_MOBILE = 2,
  PRODUCT__PRODUCT_PARTNER = 3,
  PRODUCT__PRODUCT_LIBSPOTIFY_EMBEDDED = 5
    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(PRODUCT)
} Product;
typedef enum _ProductFlags {
  PRODUCT_FLAGS__PRODUCT_FLAG_NONE = 0,
  PRODUCT_FLAGS__PRODUCT_FLAG_DEV_BUILD = 1
    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(PRODUCT_FLAGS)
} ProductFlags;
typedef enum _Platform {
  PLATFORM__PLATFORM_WIN32_X86 = 0,
  PLATFORM__PLATFORM_OSX_X86 = 1,
  PLATFORM__PLATFORM_LINUX_X86 = 2,
  PLATFORM__PLATFORM_IPHONE_ARM = 3,
  PLATFORM__PLATFORM_S60_ARM = 4,
  PLATFORM__PLATFORM_OSX_PPC = 5,
  PLATFORM__PLATFORM_ANDROID_ARM = 6,
  PLATFORM__PLATFORM_WINDOWS_CE_ARM = 7,
  PLATFORM__PLATFORM_LINUX_X86_64 = 8,
  PLATFORM__PLATFORM_OSX_X86_64 = 9,
  PLATFORM__PLATFORM_PALM_ARM = 10,
  PLATFORM__PLATFORM_LINUX_SH = 11,
  PLATFORM__PLATFORM_FREEBSD_X86 = 12,
  PLATFORM__PLATFORM_FREEBSD_X86_64 = 13,
  PLATFORM__PLATFORM_BLACKBERRY_ARM = 14,
  PLATFORM__PLATFORM_SONOS = 15,
  PLATFORM__PLATFORM_LINUX_MIPS = 16,
  PLATFORM__PLATFORM_LINUX_ARM = 17,
  PLATFORM__PLATFORM_LOGITECH_ARM = 18,
  PLATFORM__PLATFORM_LINUX_BLACKFIN = 19,
  PLATFORM__PLATFORM_WP7_ARM = 20,
  PLATFORM__PLATFORM_ONKYO_ARM = 21,
  PLATFORM__PLATFORM_QNXNTO_ARM = 22,
  PLATFORM__PLATFORM_BCO_ARM = 23
    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(PLATFORM)
} Platform;
typedef enum _Fingerprint {
  FINGERPRINT__FINGERPRINT_GRAIN = 0,
  FINGERPRINT__FINGERPRINT_HMAC_RIPEMD = 1
    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(FINGERPRINT)
} Fingerprint;
typedef enum _Cryptosuite {
  CRYPTOSUITE__CRYPTO_SUITE_SHANNON = 0,
  CRYPTOSUITE__CRYPTO_SUITE_RC4_SHA1_HMAC = 1
    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(CRYPTOSUITE)
} Cryptosuite;
typedef enum _Powscheme {
  POWSCHEME__POW_HASH_CASH = 0
    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(POWSCHEME)
} Powscheme;
typedef enum _ErrorCode {
  ERROR_CODE__ProtocolError = 0,
  ERROR_CODE__TryAnotherAP = 2,
  ERROR_CODE__BadConnectionId = 5,
  ERROR_CODE__TravelRestriction = 9,
  ERROR_CODE__PremiumAccountRequired = 11,
  ERROR_CODE__BadCredentials = 12,
  ERROR_CODE__CouldNotValidateCredentials = 13,
  ERROR_CODE__AccountExists = 14,
  ERROR_CODE__ExtraVerificationRequired = 15,
  ERROR_CODE__InvalidAppKey = 16,
  ERROR_CODE__ApplicationBanned = 17
    PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(ERROR_CODE)
} ErrorCode;

/* --- messages --- */

struct  _ClientHello
{
  ProtobufCMessage base;
  BuildInfo *build_info;
  size_t n_fingerprints_supported;
  Fingerprint *fingerprints_supported;
  size_t n_cryptosuites_supported;
  Cryptosuite *cryptosuites_supported;
  size_t n_powschemes_supported;
  Powscheme *powschemes_supported;
  LoginCryptoHelloUnion *login_crypto_hello;
  ProtobufCBinaryData client_nonce;
  protobuf_c_boolean has_padding;
  ProtobufCBinaryData padding;
  FeatureSet *feature_set;
};
#define CLIENT_HELLO__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&client_hello__descriptor) \
    , NULL, 0,NULL, 0,NULL, 0,NULL, NULL, {0,NULL}, 0, {0,NULL}, NULL }


struct  _BuildInfo
{
  ProtobufCMessage base;
  Product product;
  size_t n_product_flags;
  ProductFlags *product_flags;
  Platform platform;
  uint64_t version;
};
#define BUILD_INFO__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&build_info__descriptor) \
    , PRODUCT__PRODUCT_CLIENT, 0,NULL, PLATFORM__PLATFORM_WIN32_X86, 0 }


struct  _LoginCryptoHelloUnion
{
  ProtobufCMessage base;
  LoginCryptoDiffieHellmanHello *diffie_hellman;
};
#define LOGIN_CRYPTO_HELLO_UNION__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&login_crypto_hello_union__descriptor) \
    , NULL }


struct  _LoginCryptoDiffieHellmanHello
{
  ProtobufCMessage base;
  ProtobufCBinaryData gc;
  uint32_t server_keys_known;
};
#define LOGIN_CRYPTO_DIFFIE_HELLMAN_HELLO__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&login_crypto_diffie_hellman_hello__descriptor) \
    , {0,NULL}, 0 }


struct  _FeatureSet
{
  ProtobufCMessage base;
  protobuf_c_boolean has_autoupdate2;
  protobuf_c_boolean autoupdate2;
  protobuf_c_boolean has_current_location;
  protobuf_c_boolean current_location;
};
#define FEATURE_SET__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&feature_set__descriptor) \
    , 0, 0, 0, 0 }


struct  _APResponseMessage
{
  ProtobufCMessage base;
  APChallenge *challenge;
  UpgradeRequiredMessage *upgrade;
  APLoginFailed *login_failed;
};
#define APRESPONSE_MESSAGE__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&apresponse_message__descriptor) \
    , NULL, NULL, NULL }


struct  _APChallenge
{
  ProtobufCMessage base;
  LoginCryptoChallengeUnion *login_crypto_challenge;
  FingerprintChallengeUnion *fingerprint_challenge;
  PoWChallengeUnion *pow_challenge;
  CryptoChallengeUnion *crypto_challenge;
  ProtobufCBinaryData server_nonce;
  protobuf_c_boolean has_padding;
  ProtobufCBinaryData padding;
};
#define APCHALLENGE__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&apchallenge__descriptor) \
    , NULL, NULL, NULL, NULL, {0,NULL}, 0, {0,NULL} }


struct  _LoginCryptoChallengeUnion
{
  ProtobufCMessage base;
  LoginCryptoDiffieHellmanChallenge *diffie_hellman;
};
#define LOGIN_CRYPTO_CHALLENGE_UNION__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&login_crypto_challenge_union__descriptor) \
    , NULL }


struct  _LoginCryptoDiffieHellmanChallenge
{
  ProtobufCMessage base;
  ProtobufCBinaryData gs;
  int32_t server_signature_key;
  ProtobufCBinaryData gs_signature;
};
#define LOGIN_CRYPTO_DIFFIE_HELLMAN_CHALLENGE__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&login_crypto_diffie_hellman_challenge__descriptor) \
    , {0,NULL}, 0, {0,NULL} }


struct  _FingerprintChallengeUnion
{
  ProtobufCMessage base;
  FingerprintGrainChallenge *grain;
  FingerprintHmacRipemdChallenge *hmac_ripemd;
};
#define FINGERPRINT_CHALLENGE_UNION__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&fingerprint_challenge_union__descriptor) \
    , NULL, NULL }


struct  _FingerprintGrainChallenge
{
  ProtobufCMessage base;
  ProtobufCBinaryData kek;
};
#define FINGERPRINT_GRAIN_CHALLENGE__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&fingerprint_grain_challenge__descriptor) \
    , {0,NULL} }


struct  _FingerprintHmacRipemdChallenge
{
  ProtobufCMessage base;
  ProtobufCBinaryData challenge;
};
#define FINGERPRINT_HMAC_RIPEMD_CHALLENGE__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&fingerprint_hmac_ripemd_challenge__descriptor) \
    , {0,NULL} }


struct  _PoWChallengeUnion
{
  ProtobufCMessage base;
  PoWHashCashChallenge *hash_cash;
};
#define PO_WCHALLENGE_UNION__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&po_wchallenge_union__descriptor) \
    , NULL }


struct  _PoWHashCashChallenge
{
  ProtobufCMessage base;
  protobuf_c_boolean has_prefix;
  ProtobufCBinaryData prefix;
  protobuf_c_boolean has_length;
  int32_t length;
  protobuf_c_boolean has_target;
  int32_t target;
};
#define PO_WHASH_CASH_CHALLENGE__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&po_whash_cash_challenge__descriptor) \
    , 0, {0,NULL}, 0, 0, 0, 0 }


struct  _CryptoChallengeUnion
{
  ProtobufCMessage base;
  CryptoShannonChallenge *shannon;
  CryptoRc4Sha1HmacChallenge *rc4_sha1_hmac;
};
#define CRYPTO_CHALLENGE_UNION__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&crypto_challenge_union__descriptor) \
    , NULL, NULL }


struct  _CryptoShannonChallenge
{
  ProtobufCMessage base;
};
#define CRYPTO_SHANNON_CHALLENGE__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&crypto_shannon_challenge__descriptor) \
     }


struct  _CryptoRc4Sha1HmacChallenge
{
  ProtobufCMessage base;
};
#define CRYPTO_RC4_SHA1_HMAC_CHALLENGE__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&crypto_rc4_sha1_hmac_challenge__descriptor) \
     }


struct  _UpgradeRequiredMessage
{
  ProtobufCMessage base;
  ProtobufCBinaryData upgrade_signed_part;
  ProtobufCBinaryData signature;
  char *http_suffix;
};
#define UPGRADE_REQUIRED_MESSAGE__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&upgrade_required_message__descriptor) \
    , {0,NULL}, {0,NULL}, NULL }


struct  _APLoginFailed
{
  ProtobufCMessage base;
  ErrorCode error_code;
  protobuf_c_boolean has_retry_delay;
  int32_t retry_delay;
  protobuf_c_boolean has_expiry;
  int32_t expiry;
  char *error_description;
};
#define APLOGIN_FAILED__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&aplogin_failed__descriptor) \
    , ERROR_CODE__ProtocolError, 0, 0, 0, 0, NULL }


struct  _ClientResponsePlaintext
{
  ProtobufCMessage base;
  LoginCryptoResponseUnion *login_crypto_response;
  PoWResponseUnion *pow_response;
  CryptoResponseUnion *crypto_response;
};
#define CLIENT_RESPONSE_PLAINTEXT__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&client_response_plaintext__descriptor) \
    , NULL, NULL, NULL }


struct  _LoginCryptoResponseUnion
{
  ProtobufCMessage base;
  LoginCryptoDiffieHellmanResponse *diffie_hellman;
};
#define LOGIN_CRYPTO_RESPONSE_UNION__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&login_crypto_response_union__descriptor) \
    , NULL }


struct  _LoginCryptoDiffieHellmanResponse
{
  ProtobufCMessage base;
  ProtobufCBinaryData hmac;
};
#define LOGIN_CRYPTO_DIFFIE_HELLMAN_RESPONSE__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&login_crypto_diffie_hellman_response__descriptor) \
    , {0,NULL} }


struct  _PoWResponseUnion
{
  ProtobufCMessage base;
  PoWHashCashResponse *hash_cash;
};
#define PO_WRESPONSE_UNION__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&po_wresponse_union__descriptor) \
    , NULL }


struct  _PoWHashCashResponse
{
  ProtobufCMessage base;
  ProtobufCBinaryData hash_suffix;
};
#define PO_WHASH_CASH_RESPONSE__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&po_whash_cash_response__descriptor) \
    , {0,NULL} }


struct  _CryptoResponseUnion
{
  ProtobufCMessage base;
  CryptoShannonResponse *shannon;
  CryptoRc4Sha1HmacResponse *rc4_sha1_hmac;
};
#define CRYPTO_RESPONSE_UNION__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&crypto_response_union__descriptor) \
    , NULL, NULL }


struct  _CryptoShannonResponse
{
  ProtobufCMessage base;
  protobuf_c_boolean has_dummy;
  int32_t dummy;
};
#define CRYPTO_SHANNON_RESPONSE__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&crypto_shannon_response__descriptor) \
    , 0, 0 }


struct  _CryptoRc4Sha1HmacResponse
{
  ProtobufCMessage base;
  protobuf_c_boolean has_dummy;
  int32_t dummy;
};
#define CRYPTO_RC4_SHA1_HMAC_RESPONSE__INIT \
 { PROTOBUF_C_MESSAGE_INIT (&crypto_rc4_sha1_hmac_response__descriptor) \
    , 0, 0 }


/* ClientHello methods */
void   client_hello__init
                     (ClientHello         *message);
size_t client_hello__get_packed_size
                     (const ClientHello   *message);
size_t client_hello__pack
                     (const ClientHello   *message,
                      uint8_t             *out);
size_t client_hello__pack_to_buffer
                     (const ClientHello   *message,
                      ProtobufCBuffer     *buffer);
ClientHello *
       client_hello__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   client_hello__free_unpacked
                     (ClientHello *message,
                      ProtobufCAllocator *allocator);
/* BuildInfo methods */
void   build_info__init
                     (BuildInfo         *message);
size_t build_info__get_packed_size
                     (const BuildInfo   *message);
size_t build_info__pack
                     (const BuildInfo   *message,
                      uint8_t             *out);
size_t build_info__pack_to_buffer
                     (const BuildInfo   *message,
                      ProtobufCBuffer     *buffer);
BuildInfo *
       build_info__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   build_info__free_unpacked
                     (BuildInfo *message,
                      ProtobufCAllocator *allocator);
/* LoginCryptoHelloUnion methods */
void   login_crypto_hello_union__init
                     (LoginCryptoHelloUnion         *message);
size_t login_crypto_hello_union__get_packed_size
                     (const LoginCryptoHelloUnion   *message);
size_t login_crypto_hello_union__pack
                     (const LoginCryptoHelloUnion   *message,
                      uint8_t             *out);
size_t login_crypto_hello_union__pack_to_buffer
                     (const LoginCryptoHelloUnion   *message,
                      ProtobufCBuffer     *buffer);
LoginCryptoHelloUnion *
       login_crypto_hello_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   login_crypto_hello_union__free_unpacked
                     (LoginCryptoHelloUnion *message,
                      ProtobufCAllocator *allocator);
/* LoginCryptoDiffieHellmanHello methods */
void   login_crypto_diffie_hellman_hello__init
                     (LoginCryptoDiffieHellmanHello         *message);
size_t login_crypto_diffie_hellman_hello__get_packed_size
                     (const LoginCryptoDiffieHellmanHello   *message);
size_t login_crypto_diffie_hellman_hello__pack
                     (const LoginCryptoDiffieHellmanHello   *message,
                      uint8_t             *out);
size_t login_crypto_diffie_hellman_hello__pack_to_buffer
                     (const LoginCryptoDiffieHellmanHello   *message,
                      ProtobufCBuffer     *buffer);
LoginCryptoDiffieHellmanHello *
       login_crypto_diffie_hellman_hello__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   login_crypto_diffie_hellman_hello__free_unpacked
                     (LoginCryptoDiffieHellmanHello *message,
                      ProtobufCAllocator *allocator);
/* FeatureSet methods */
void   feature_set__init
                     (FeatureSet         *message);
size_t feature_set__get_packed_size
                     (const FeatureSet   *message);
size_t feature_set__pack
                     (const FeatureSet   *message,
                      uint8_t             *out);
size_t feature_set__pack_to_buffer
                     (const FeatureSet   *message,
                      ProtobufCBuffer     *buffer);
FeatureSet *
       feature_set__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   feature_set__free_unpacked
                     (FeatureSet *message,
                      ProtobufCAllocator *allocator);
/* APResponseMessage methods */
void   apresponse_message__init
                     (APResponseMessage         *message);
size_t apresponse_message__get_packed_size
                     (const APResponseMessage   *message);
size_t apresponse_message__pack
                     (const APResponseMessage   *message,
                      uint8_t             *out);
size_t apresponse_message__pack_to_buffer
                     (const APResponseMessage   *message,
                      ProtobufCBuffer     *buffer);
APResponseMessage *
       apresponse_message__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   apresponse_message__free_unpacked
                     (APResponseMessage *message,
                      ProtobufCAllocator *allocator);
/* APChallenge methods */
void   apchallenge__init
                     (APChallenge         *message);
size_t apchallenge__get_packed_size
                     (const APChallenge   *message);
size_t apchallenge__pack
                     (const APChallenge   *message,
                      uint8_t             *out);
size_t apchallenge__pack_to_buffer
                     (const APChallenge   *message,
                      ProtobufCBuffer     *buffer);
APChallenge *
       apchallenge__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   apchallenge__free_unpacked
                     (APChallenge *message,
                      ProtobufCAllocator *allocator);
/* LoginCryptoChallengeUnion methods */
void   login_crypto_challenge_union__init
                     (LoginCryptoChallengeUnion         *message);
size_t login_crypto_challenge_union__get_packed_size
                     (const LoginCryptoChallengeUnion   *message);
size_t login_crypto_challenge_union__pack
                     (const LoginCryptoChallengeUnion   *message,
                      uint8_t             *out);
size_t login_crypto_challenge_union__pack_to_buffer
                     (const LoginCryptoChallengeUnion   *message,
                      ProtobufCBuffer     *buffer);
LoginCryptoChallengeUnion *
       login_crypto_challenge_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   login_crypto_challenge_union__free_unpacked
                     (LoginCryptoChallengeUnion *message,
                      ProtobufCAllocator *allocator);
/* LoginCryptoDiffieHellmanChallenge methods */
void   login_crypto_diffie_hellman_challenge__init
                     (LoginCryptoDiffieHellmanChallenge         *message);
size_t login_crypto_diffie_hellman_challenge__get_packed_size
                     (const LoginCryptoDiffieHellmanChallenge   *message);
size_t login_crypto_diffie_hellman_challenge__pack
                     (const LoginCryptoDiffieHellmanChallenge   *message,
                      uint8_t             *out);
size_t login_crypto_diffie_hellman_challenge__pack_to_buffer
                     (const LoginCryptoDiffieHellmanChallenge   *message,
                      ProtobufCBuffer     *buffer);
LoginCryptoDiffieHellmanChallenge *
       login_crypto_diffie_hellman_challenge__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   login_crypto_diffie_hellman_challenge__free_unpacked
                     (LoginCryptoDiffieHellmanChallenge *message,
                      ProtobufCAllocator *allocator);
/* FingerprintChallengeUnion methods */
void   fingerprint_challenge_union__init
                     (FingerprintChallengeUnion         *message);
size_t fingerprint_challenge_union__get_packed_size
                     (const FingerprintChallengeUnion   *message);
size_t fingerprint_challenge_union__pack
                     (const FingerprintChallengeUnion   *message,
                      uint8_t             *out);
size_t fingerprint_challenge_union__pack_to_buffer
                     (const FingerprintChallengeUnion   *message,
                      ProtobufCBuffer     *buffer);
FingerprintChallengeUnion *
       fingerprint_challenge_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   fingerprint_challenge_union__free_unpacked
                     (FingerprintChallengeUnion *message,
                      ProtobufCAllocator *allocator);
/* FingerprintGrainChallenge methods */
void   fingerprint_grain_challenge__init
                     (FingerprintGrainChallenge         *message);
size_t fingerprint_grain_challenge__get_packed_size
                     (const FingerprintGrainChallenge   *message);
size_t fingerprint_grain_challenge__pack
                     (const FingerprintGrainChallenge   *message,
                      uint8_t             *out);
size_t fingerprint_grain_challenge__pack_to_buffer
                     (const FingerprintGrainChallenge   *message,
                      ProtobufCBuffer     *buffer);
FingerprintGrainChallenge *
       fingerprint_grain_challenge__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   fingerprint_grain_challenge__free_unpacked
                     (FingerprintGrainChallenge *message,
                      ProtobufCAllocator *allocator);
/* FingerprintHmacRipemdChallenge methods */
void   fingerprint_hmac_ripemd_challenge__init
                     (FingerprintHmacRipemdChallenge         *message);
size_t fingerprint_hmac_ripemd_challenge__get_packed_size
                     (const FingerprintHmacRipemdChallenge   *message);
size_t fingerprint_hmac_ripemd_challenge__pack
                     (const FingerprintHmacRipemdChallenge   *message,
                      uint8_t             *out);
size_t fingerprint_hmac_ripemd_challenge__pack_to_buffer
                     (const FingerprintHmacRipemdChallenge   *message,
                      ProtobufCBuffer     *buffer);
FingerprintHmacRipemdChallenge *
       fingerprint_hmac_ripemd_challenge__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   fingerprint_hmac_ripemd_challenge__free_unpacked
                     (FingerprintHmacRipemdChallenge *message,
                      ProtobufCAllocator *allocator);
/* PoWChallengeUnion methods */
void   po_wchallenge_union__init
                     (PoWChallengeUnion         *message);
size_t po_wchallenge_union__get_packed_size
                     (const PoWChallengeUnion   *message);
size_t po_wchallenge_union__pack
                     (const PoWChallengeUnion   *message,
                      uint8_t             *out);
size_t po_wchallenge_union__pack_to_buffer
                     (const PoWChallengeUnion   *message,
                      ProtobufCBuffer     *buffer);
PoWChallengeUnion *
       po_wchallenge_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   po_wchallenge_union__free_unpacked
                     (PoWChallengeUnion *message,
                      ProtobufCAllocator *allocator);
/* PoWHashCashChallenge methods */
void   po_whash_cash_challenge__init
                     (PoWHashCashChallenge         *message);
size_t po_whash_cash_challenge__get_packed_size
                     (const PoWHashCashChallenge   *message);
size_t po_whash_cash_challenge__pack
                     (const PoWHashCashChallenge   *message,
                      uint8_t             *out);
size_t po_whash_cash_challenge__pack_to_buffer
                     (const PoWHashCashChallenge   *message,
                      ProtobufCBuffer     *buffer);
PoWHashCashChallenge *
       po_whash_cash_challenge__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   po_whash_cash_challenge__free_unpacked
                     (PoWHashCashChallenge *message,
                      ProtobufCAllocator *allocator);
/* CryptoChallengeUnion methods */
void   crypto_challenge_union__init
                     (CryptoChallengeUnion         *message);
size_t crypto_challenge_union__get_packed_size
                     (const CryptoChallengeUnion   *message);
size_t crypto_challenge_union__pack
                     (const CryptoChallengeUnion   *message,
                      uint8_t             *out);
size_t crypto_challenge_union__pack_to_buffer
                     (const CryptoChallengeUnion   *message,
                      ProtobufCBuffer     *buffer);
CryptoChallengeUnion *
       crypto_challenge_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   crypto_challenge_union__free_unpacked
                     (CryptoChallengeUnion *message,
                      ProtobufCAllocator *allocator);
/* CryptoShannonChallenge methods */
void   crypto_shannon_challenge__init
                     (CryptoShannonChallenge         *message);
size_t crypto_shannon_challenge__get_packed_size
                     (const CryptoShannonChallenge   *message);
size_t crypto_shannon_challenge__pack
                     (const CryptoShannonChallenge   *message,
                      uint8_t             *out);
size_t crypto_shannon_challenge__pack_to_buffer
                     (const CryptoShannonChallenge   *message,
                      ProtobufCBuffer     *buffer);
CryptoShannonChallenge *
       crypto_shannon_challenge__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   crypto_shannon_challenge__free_unpacked
                     (CryptoShannonChallenge *message,
                      ProtobufCAllocator *allocator);
/* CryptoRc4Sha1HmacChallenge methods */
void   crypto_rc4_sha1_hmac_challenge__init
                     (CryptoRc4Sha1HmacChallenge         *message);
size_t crypto_rc4_sha1_hmac_challenge__get_packed_size
                     (const CryptoRc4Sha1HmacChallenge   *message);
size_t crypto_rc4_sha1_hmac_challenge__pack
                     (const CryptoRc4Sha1HmacChallenge   *message,
                      uint8_t             *out);
size_t crypto_rc4_sha1_hmac_challenge__pack_to_buffer
                     (const CryptoRc4Sha1HmacChallenge   *message,
                      ProtobufCBuffer     *buffer);
CryptoRc4Sha1HmacChallenge *
       crypto_rc4_sha1_hmac_challenge__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   crypto_rc4_sha1_hmac_challenge__free_unpacked
                     (CryptoRc4Sha1HmacChallenge *message,
                      ProtobufCAllocator *allocator);
/* UpgradeRequiredMessage methods */
void   upgrade_required_message__init
                     (UpgradeRequiredMessage         *message);
size_t upgrade_required_message__get_packed_size
                     (const UpgradeRequiredMessage   *message);
size_t upgrade_required_message__pack
                     (const UpgradeRequiredMessage   *message,
                      uint8_t             *out);
size_t upgrade_required_message__pack_to_buffer
                     (const UpgradeRequiredMessage   *message,
                      ProtobufCBuffer     *buffer);
UpgradeRequiredMessage *
       upgrade_required_message__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   upgrade_required_message__free_unpacked
                     (UpgradeRequiredMessage *message,
                      ProtobufCAllocator *allocator);
/* APLoginFailed methods */
void   aplogin_failed__init
                     (APLoginFailed         *message);
size_t aplogin_failed__get_packed_size
                     (const APLoginFailed   *message);
size_t aplogin_failed__pack
                     (const APLoginFailed   *message,
                      uint8_t             *out);
size_t aplogin_failed__pack_to_buffer
                     (const APLoginFailed   *message,
                      ProtobufCBuffer     *buffer);
APLoginFailed *
       aplogin_failed__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   aplogin_failed__free_unpacked
                     (APLoginFailed *message,
                      ProtobufCAllocator *allocator);
/* ClientResponsePlaintext methods */
void   client_response_plaintext__init
                     (ClientResponsePlaintext         *message);
size_t client_response_plaintext__get_packed_size
                     (const ClientResponsePlaintext   *message);
size_t client_response_plaintext__pack
                     (const ClientResponsePlaintext   *message,
                      uint8_t             *out);
size_t client_response_plaintext__pack_to_buffer
                     (const ClientResponsePlaintext   *message,
                      ProtobufCBuffer     *buffer);
ClientResponsePlaintext *
       client_response_plaintext__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   client_response_plaintext__free_unpacked
                     (ClientResponsePlaintext *message,
                      ProtobufCAllocator *allocator);
/* LoginCryptoResponseUnion methods */
void   login_crypto_response_union__init
                     (LoginCryptoResponseUnion         *message);
size_t login_crypto_response_union__get_packed_size
                     (const LoginCryptoResponseUnion   *message);
size_t login_crypto_response_union__pack
                     (const LoginCryptoResponseUnion   *message,
                      uint8_t             *out);
size_t login_crypto_response_union__pack_to_buffer
                     (const LoginCryptoResponseUnion   *message,
                      ProtobufCBuffer     *buffer);
LoginCryptoResponseUnion *
       login_crypto_response_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   login_crypto_response_union__free_unpacked
                     (LoginCryptoResponseUnion *message,
                      ProtobufCAllocator *allocator);
/* LoginCryptoDiffieHellmanResponse methods */
void   login_crypto_diffie_hellman_response__init
                     (LoginCryptoDiffieHellmanResponse         *message);
size_t login_crypto_diffie_hellman_response__get_packed_size
                     (const LoginCryptoDiffieHellmanResponse   *message);
size_t login_crypto_diffie_hellman_response__pack
                     (const LoginCryptoDiffieHellmanResponse   *message,
                      uint8_t             *out);
size_t login_crypto_diffie_hellman_response__pack_to_buffer
                     (const LoginCryptoDiffieHellmanResponse   *message,
                      ProtobufCBuffer     *buffer);
LoginCryptoDiffieHellmanResponse *
       login_crypto_diffie_hellman_response__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   login_crypto_diffie_hellman_response__free_unpacked
                     (LoginCryptoDiffieHellmanResponse *message,
                      ProtobufCAllocator *allocator);
/* PoWResponseUnion methods */
void   po_wresponse_union__init
                     (PoWResponseUnion         *message);
size_t po_wresponse_union__get_packed_size
                     (const PoWResponseUnion   *message);
size_t po_wresponse_union__pack
                     (const PoWResponseUnion   *message,
                      uint8_t             *out);
size_t po_wresponse_union__pack_to_buffer
                     (const PoWResponseUnion   *message,
                      ProtobufCBuffer     *buffer);
PoWResponseUnion *
       po_wresponse_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   po_wresponse_union__free_unpacked
                     (PoWResponseUnion *message,
                      ProtobufCAllocator *allocator);
/* PoWHashCashResponse methods */
void   po_whash_cash_response__init
                     (PoWHashCashResponse         *message);
size_t po_whash_cash_response__get_packed_size
                     (const PoWHashCashResponse   *message);
size_t po_whash_cash_response__pack
                     (const PoWHashCashResponse   *message,
                      uint8_t             *out);
size_t po_whash_cash_response__pack_to_buffer
                     (const PoWHashCashResponse   *message,
                      ProtobufCBuffer     *buffer);
PoWHashCashResponse *
       po_whash_cash_response__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   po_whash_cash_response__free_unpacked
                     (PoWHashCashResponse *message,
                      ProtobufCAllocator *allocator);
/* CryptoResponseUnion methods */
void   crypto_response_union__init
                     (CryptoResponseUnion         *message);
size_t crypto_response_union__get_packed_size
                     (const CryptoResponseUnion   *message);
size_t crypto_response_union__pack
                     (const CryptoResponseUnion   *message,
                      uint8_t             *out);
size_t crypto_response_union__pack_to_buffer
                     (const CryptoResponseUnion   *message,
                      ProtobufCBuffer     *buffer);
CryptoResponseUnion *
       crypto_response_union__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   crypto_response_union__free_unpacked
                     (CryptoResponseUnion *message,
                      ProtobufCAllocator *allocator);
/* CryptoShannonResponse methods */
void   crypto_shannon_response__init
                     (CryptoShannonResponse         *message);
size_t crypto_shannon_response__get_packed_size
                     (const CryptoShannonResponse   *message);
size_t crypto_shannon_response__pack
                     (const CryptoShannonResponse   *message,
                      uint8_t             *out);
size_t crypto_shannon_response__pack_to_buffer
                     (const CryptoShannonResponse   *message,
                      ProtobufCBuffer     *buffer);
CryptoShannonResponse *
       crypto_shannon_response__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   crypto_shannon_response__free_unpacked
                     (CryptoShannonResponse *message,
                      ProtobufCAllocator *allocator);
/* CryptoRc4Sha1HmacResponse methods */
void   crypto_rc4_sha1_hmac_response__init
                     (CryptoRc4Sha1HmacResponse         *message);
size_t crypto_rc4_sha1_hmac_response__get_packed_size
                     (const CryptoRc4Sha1HmacResponse   *message);
size_t crypto_rc4_sha1_hmac_response__pack
                     (const CryptoRc4Sha1HmacResponse   *message,
                      uint8_t             *out);
size_t crypto_rc4_sha1_hmac_response__pack_to_buffer
                     (const CryptoRc4Sha1HmacResponse   *message,
                      ProtobufCBuffer     *buffer);
CryptoRc4Sha1HmacResponse *
       crypto_rc4_sha1_hmac_response__unpack
                     (ProtobufCAllocator  *allocator,
                      size_t               len,
                      const uint8_t       *data);
void   crypto_rc4_sha1_hmac_response__free_unpacked
                     (CryptoRc4Sha1HmacResponse *message,
                      ProtobufCAllocator *allocator);
/* --- per-message closures --- */

typedef void (*ClientHello_Closure)
                 (const ClientHello *message,
                  void *closure_data);
typedef void (*BuildInfo_Closure)
                 (const BuildInfo *message,
                  void *closure_data);
typedef void (*LoginCryptoHelloUnion_Closure)
                 (const LoginCryptoHelloUnion *message,
                  void *closure_data);
typedef void (*LoginCryptoDiffieHellmanHello_Closure)
                 (const LoginCryptoDiffieHellmanHello *message,
                  void *closure_data);
typedef void (*FeatureSet_Closure)
                 (const FeatureSet *message,
                  void *closure_data);
typedef void (*APResponseMessage_Closure)
                 (const APResponseMessage *message,
                  void *closure_data);
typedef void (*APChallenge_Closure)
                 (const APChallenge *message,
                  void *closure_data);
typedef void (*LoginCryptoChallengeUnion_Closure)
                 (const LoginCryptoChallengeUnion *message,
                  void *closure_data);
typedef void (*LoginCryptoDiffieHellmanChallenge_Closure)
                 (const LoginCryptoDiffieHellmanChallenge *message,
                  void *closure_data);
typedef void (*FingerprintChallengeUnion_Closure)
                 (const FingerprintChallengeUnion *message,
                  void *closure_data);
typedef void (*FingerprintGrainChallenge_Closure)
                 (const FingerprintGrainChallenge *message,
                  void *closure_data);
typedef void (*FingerprintHmacRipemdChallenge_Closure)
                 (const FingerprintHmacRipemdChallenge *message,
                  void *closure_data);
typedef void (*PoWChallengeUnion_Closure)
                 (const PoWChallengeUnion *message,
                  void *closure_data);
typedef void (*PoWHashCashChallenge_Closure)
                 (const PoWHashCashChallenge *message,
                  void *closure_data);
typedef void (*CryptoChallengeUnion_Closure)
                 (const CryptoChallengeUnion *message,
                  void *closure_data);
typedef void (*CryptoShannonChallenge_Closure)
                 (const CryptoShannonChallenge *message,
                  void *closure_data);
typedef void (*CryptoRc4Sha1HmacChallenge_Closure)
                 (const CryptoRc4Sha1HmacChallenge *message,
                  void *closure_data);
typedef void (*UpgradeRequiredMessage_Closure)
                 (const UpgradeRequiredMessage *message,
                  void *closure_data);
typedef void (*APLoginFailed_Closure)
                 (const APLoginFailed *message,
                  void *closure_data);
typedef void (*ClientResponsePlaintext_Closure)
                 (const ClientResponsePlaintext *message,
                  void *closure_data);
typedef void (*LoginCryptoResponseUnion_Closure)
                 (const LoginCryptoResponseUnion *message,
                  void *closure_data);
typedef void (*LoginCryptoDiffieHellmanResponse_Closure)
                 (const LoginCryptoDiffieHellmanResponse *message,
                  void *closure_data);
typedef void (*PoWResponseUnion_Closure)
                 (const PoWResponseUnion *message,
                  void *closure_data);
typedef void (*PoWHashCashResponse_Closure)
                 (const PoWHashCashResponse *message,
                  void *closure_data);
typedef void (*CryptoResponseUnion_Closure)
                 (const CryptoResponseUnion *message,
                  void *closure_data);
typedef void (*CryptoShannonResponse_Closure)
                 (const CryptoShannonResponse *message,
                  void *closure_data);
typedef void (*CryptoRc4Sha1HmacResponse_Closure)
                 (const CryptoRc4Sha1HmacResponse *message,
                  void *closure_data);

/* --- services --- */


/* --- descriptors --- */

extern const ProtobufCEnumDescriptor    product__descriptor;
extern const ProtobufCEnumDescriptor    product_flags__descriptor;
extern const ProtobufCEnumDescriptor    platform__descriptor;
extern const ProtobufCEnumDescriptor    fingerprint__descriptor;
extern const ProtobufCEnumDescriptor    cryptosuite__descriptor;
extern const ProtobufCEnumDescriptor    powscheme__descriptor;
extern const ProtobufCEnumDescriptor    error_code__descriptor;
extern const ProtobufCMessageDescriptor client_hello__descriptor;
extern const ProtobufCMessageDescriptor build_info__descriptor;
extern const ProtobufCMessageDescriptor login_crypto_hello_union__descriptor;
extern const ProtobufCMessageDescriptor login_crypto_diffie_hellman_hello__descriptor;
extern const ProtobufCMessageDescriptor feature_set__descriptor;
extern const ProtobufCMessageDescriptor apresponse_message__descriptor;
extern const ProtobufCMessageDescriptor apchallenge__descriptor;
extern const ProtobufCMessageDescriptor login_crypto_challenge_union__descriptor;
extern const ProtobufCMessageDescriptor login_crypto_diffie_hellman_challenge__descriptor;
extern const ProtobufCMessageDescriptor fingerprint_challenge_union__descriptor;
extern const ProtobufCMessageDescriptor fingerprint_grain_challenge__descriptor;
extern const ProtobufCMessageDescriptor fingerprint_hmac_ripemd_challenge__descriptor;
extern const ProtobufCMessageDescriptor po_wchallenge_union__descriptor;
extern const ProtobufCMessageDescriptor po_whash_cash_challenge__descriptor;
extern const ProtobufCMessageDescriptor crypto_challenge_union__descriptor;
extern const ProtobufCMessageDescriptor crypto_shannon_challenge__descriptor;
extern const ProtobufCMessageDescriptor crypto_rc4_sha1_hmac_challenge__descriptor;
extern const ProtobufCMessageDescriptor upgrade_required_message__descriptor;
extern const ProtobufCMessageDescriptor aplogin_failed__descriptor;
extern const ProtobufCMessageDescriptor client_response_plaintext__descriptor;
extern const ProtobufCMessageDescriptor login_crypto_response_union__descriptor;
extern const ProtobufCMessageDescriptor login_crypto_diffie_hellman_response__descriptor;
extern const ProtobufCMessageDescriptor po_wresponse_union__descriptor;
extern const ProtobufCMessageDescriptor po_whash_cash_response__descriptor;
extern const ProtobufCMessageDescriptor crypto_response_union__descriptor;
extern const ProtobufCMessageDescriptor crypto_shannon_response__descriptor;
extern const ProtobufCMessageDescriptor crypto_rc4_sha1_hmac_response__descriptor;

PROTOBUF_C__END_DECLS


#endif  /* PROTOBUF_C_proto_2fkeyexchange_2eproto__INCLUDED */
