syntax = "proto2"; message LoginCryptoDiffieHellmanChallenge { required bytes gs = 0xa; } message LoginCryptoChallengeUnion { optional LoginCryptoDiffieHellmanChallenge diffie_hellman = 0xa; } enum Product { PRODUCT_CLIENT = 0x0; PRODUCT_LIBSPOTIFY= 0x1; PRODUCT_MOBILE = 0x2; PRODUCT_PARTNER = 0x3; PRODUCT_LIBSPOTIFY_EMBEDDED = 0x5; } message LoginCryptoDiffieHellmanHello { required bytes gc = 0xa; required uint32 server_keys_known = 0x14; } message LoginCryptoHelloUnion { optional LoginCryptoDiffieHellmanHello diffie_hellman = 0xa; } enum Platform2 { PLATFORM_WIN32_X86 = 0x0; PLATFORM_OSX_X86 = 0x1; PLATFORM_LINUX_X86 = 0x2; PLATFORM_IPHONE_ARM = 0x3; PLATFORM_S60_ARM = 0x4; PLATFORM_OSX_PPC = 0x5; PLATFORM_ANDROID_ARM = 0x6; PLATFORM_WINDOWS_CE_ARM = 0x7; PLATFORM_LINUX_X86_64 = 0x8; PLATFORM_OSX_X86_64 = 0x9; PLATFORM_PALM_ARM = 0xa; PLATFORM_LINUX_SH = 0xb; PLATFORM_FREEBSD_X86 = 0xc; PLATFORM_FREEBSD_X86_64 = 0xd; PLATFORM_BLACKBERRY_ARM = 0xe; PLATFORM_SONOS = 0xf; PLATFORM_LINUX_MIPS = 0x10; PLATFORM_LINUX_ARM = 0x11; PLATFORM_LOGITECH_ARM = 0x12; PLATFORM_LINUX_BLACKFIN = 0x13; PLATFORM_WP7_ARM = 0x14; PLATFORM_ONKYO_ARM = 0x15; PLATFORM_QNXNTO_ARM = 0x16; PLATFORM_BCO_ARM = 0x17; } enum Cryptosuite { CRYPTO_SUITE_SHANNON = 0x0; CRYPTO_SUITE_RC4_SHA1_HMAC = 0x1; } message BuildInfo { required Product product = 0xa; required Platform2 platform = 0x1e; required uint64 version = 0x28; } message FeatureSet { optional bool autoupdate2 = 0x1; } message APChallenge { required LoginCryptoChallengeUnion login_crypto_challenge = 0xa; } message APResponseMessage { optional APChallenge challenge = 0xa; } message LoginCryptoDiffieHellmanResponse { required bytes hmac = 0xa; } message LoginCryptoResponseUnion { optional LoginCryptoDiffieHellmanResponse diffie_hellman = 0xa; } message CryptoResponseUnion { } message PoWResponseUnion { } message ClientResponsePlaintext { required LoginCryptoResponseUnion login_crypto_response = 0xa; required PoWResponseUnion pow_response = 0x14; required CryptoResponseUnion crypto_response = 0x1e; } message ClientHello { required BuildInfo build_info = 0xa; required LoginCryptoHelloUnion login_crypto_hello = 0x32; repeated Cryptosuite cryptosuites_supported = 0x1e; required bytes client_nonce = 0x3c; optional bytes padding = 0x46; optional FeatureSet feature_set = 0x50; }