librespot/protocol/proto/keyexchange.proto

240 lines
6.6 KiB
Protocol Buffer
Raw Normal View History

// size=80
message ClientHello {
required BuildInfo build_info = 0xa; // idx=0 offset=c
repeated Fingerprint fingerprints_supported = 0x14; // idx=ffff offset=10
repeated Cryptosuite cryptosuites_supported = 0x1e; // idx=ffff offset=2c
repeated Powscheme powschemes_supported = 0x28; // idx=ffff offset=48
required LoginCryptoHelloUnion login_crypto_hello = 0x32; // idx=1 offset=64
required bytes client_nonce = 0x3c; // idx=2 offset=68 size=f
optional bytes padding = 0x46; // idx=3 offset=78
optional FeatureSet feature_set = 0x50; // idx=4 offset=7c
}
// size=38
message BuildInfo {
required Product product = 0xa; // idx=0 offset=c
repeated ProductFlags product_flags = 0x14; // idx=ffff offset=10
required Platform platform = 0x1e; // idx=1 offset=2c
required uint64 version = 0x28; // idx=2 offset=30 extra=246558
}
enum Product {
PRODUCT_CLIENT = 0x0;
PRODUCT_LIBSPOTIFY= 0x1;
PRODUCT_MOBILE = 0x2;
PRODUCT_PARTNER = 0x3;
PRODUCT_LIBSPOTIFY_EMBEDDED = 0x5;
}
enum ProductFlags {
PRODUCT_FLAG_NONE = 0x0;
PRODUCT_FLAG_DEV_BUILD = 0x1;
}
enum Platform {
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 Fingerprint {
FINGERPRINT_GRAIN = 0x0;
FINGERPRINT_HMAC_RIPEMD = 0x1;
}
enum Cryptosuite {
CRYPTO_SUITE_SHANNON = 0x0;
CRYPTO_SUITE_RC4_SHA1_HMAC = 0x1;
}
enum Powscheme {
POW_HASH_CASH = 0x0;
}
// size=10
message LoginCryptoHelloUnion {
optional LoginCryptoDiffieHellmanHello diffie_hellman = 0xa; // idx=0 offset=c
}
// size=70
message LoginCryptoDiffieHellmanHello {
required bytes gc = 0xa; // idx=0 offset=c size=5f
required uint32 server_keys_known = 0x14; // idx=1 offset=6c
}
// size=10
message FeatureSet {
optional bool autoupdate2 = 0x1; // idx=0 offset=c
optional bool current_location = 0x2; // idx=1 offset=d
}
// size=18
message APResponseMessage {
optional APChallenge challenge = 0xa; // idx=0 offset=c
optional UpgradeRequiredMessage upgrade = 0x14; // idx=1 offset=10
optional APLoginFailed login_failed = 0x1e; // idx=2 offset=14
}
// size=30
message APChallenge {
required LoginCryptoChallengeUnion login_crypto_challenge = 0xa; // idx=0 offset=c
required FingerprintChallengeUnion fingerprint_challenge = 0x14; // idx=1 offset=10
required PoWChallengeUnion pow_challenge = 0x1e; // idx=2 offset=14
required CryptoChallengeUnion crypto_challenge = 0x28; // idx=3 offset=18
required bytes server_nonce = 0x32; // idx=4 offset=1c size=f
optional bytes padding = 0x3c; // idx=5 offset=2c
}
// size=10
message LoginCryptoChallengeUnion {
optional LoginCryptoDiffieHellmanChallenge diffie_hellman = 0xa; // idx=0 offset=c
}
// size=170
message LoginCryptoDiffieHellmanChallenge {
required bytes gs = 0xa; // idx=0 offset=c size=5f
required int32 server_signature_key = 0x14; // idx=1 offset=6c type=int8
required bytes gs_signature = 0x1e; // idx=2 offset=6d size=ff
}
// size=14
message FingerprintChallengeUnion {
optional FingerprintGrainChallenge grain = 0xa; // idx=0 offset=c
optional FingerprintHmacRipemdChallenge hmac_ripemd = 0x14; // idx=1 offset=10
}
// size=1c
message FingerprintGrainChallenge {
required bytes kek = 0xa; // idx=0 offset=c size=f
}
// size=20
message FingerprintHmacRipemdChallenge {
required bytes challenge = 0xa; // idx=0 offset=c size=13
}
// size=10
message PoWChallengeUnion {
optional PoWHashCashChallenge hash_cash = 0xa; // idx=0 offset=c
}
// size=24
message PoWHashCashChallenge {
optional bytes prefix = 0xa; // idx=0 offset=c size=f
optional int32 length = 0x14; // idx=1 offset=1c type=int8
optional int32 target = 0x1e; // idx=2 offset=20
}
// size=14
message CryptoChallengeUnion {
optional CryptoShannonChallenge shannon = 0xa; // idx=0 offset=c
optional CryptoRc4Sha1HmacChallenge rc4_sha1_hmac = 0x14; // idx=1 offset=10
}
// size=8
message CryptoShannonChallenge {
}
// size=8
message CryptoRc4Sha1HmacChallenge {
}
// size=18
message UpgradeRequiredMessage {
required bytes upgrade_signed_part = 0xa; // idx=0 offset=c
required bytes signature = 0x14; // idx=1 offset=10
optional string http_suffix = 0x1e; // idx=2 offset=14
}
// size=1c
message APLoginFailed {
required ErrorCode error_code = 0xa; // idx=0 offset=c
optional int32 retry_delay = 0x14; // idx=1 offset=10
optional int32 expiry = 0x1e; // idx=2 offset=14
optional string error_description = 0x28; // idx=3 offset=18
}
enum ErrorCode {
ProtocolError = 0x0;
TryAnotherAP = 0x2;
BadConnectionId = 0x5;
TravelRestriction = 0x9;
PremiumAccountRequired = 0xb;
BadCredentials = 0xc;
CouldNotValidateCredentials = 0xd;
AccountExists = 0xe;
ExtraVerificationRequired = 0xf;
InvalidAppKey = 0x10;
ApplicationBanned = 0x11;
}
// size=18
message ClientResponsePlaintext {
required LoginCryptoResponseUnion login_crypto_response = 0xa; // idx=0 offset=c
required PoWResponseUnion pow_response = 0x14; // idx=1 offset=10
required CryptoResponseUnion crypto_response = 0x1e; // idx=2 offset=14
}
// size=10
message LoginCryptoResponseUnion {
optional LoginCryptoDiffieHellmanResponse diffie_hellman = 0xa; // idx=0 offset=c
}
// size=20
message LoginCryptoDiffieHellmanResponse {
required bytes hmac = 0xa; // idx=0 offset=c size=13
}
// size=10
message PoWResponseUnion {
optional PoWHashCashResponse hash_cash = 0xa; // idx=0 offset=c
}
// size=1c
message PoWHashCashResponse {
required bytes hash_suffix = 0xa; // idx=0 offset=c size=f
}
// size=14
message CryptoResponseUnion {
optional CryptoShannonResponse shannon = 0xa; // idx=0 offset=c
optional CryptoRc4Sha1HmacResponse rc4_sha1_hmac = 0x14; // idx=1 offset=10
}
// size=10
message CryptoShannonResponse {
optional int32 dummy = 0x1; // idx=0 offset=c type=uint8
}
// size=10
message CryptoRc4Sha1HmacResponse {
optional int32 dummy = 0x1; // idx=0 offset=c type=uint8
}