1syntax = "proto2";
2
3message ClientResponseEncrypted {
4    required LoginCredentials login_credentials = 0xa;
5    optional AccountCreation account_creation = 0x14;
6    optional FingerprintResponseUnion fingerprint_response = 0x1e;
7    optional PeerTicketUnion peer_ticket = 0x28;
8    required SystemInfo system_info = 0x32;
9    optional string platform_model = 0x3c;
10    optional string version_string = 0x46;
11    optional LibspotifyAppKey appkey = 0x50;
12    optional ClientInfo client_info = 0x5a;
13}
14
15message LoginCredentials {
16    optional string username = 0xa;
17    required AuthenticationType typ = 0x14;
18    optional bytes auth_data = 0x1e;
19}
20
21enum AuthenticationType {
22    AUTHENTICATION_USER_PASS = 0x0;
23    AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS = 0x1;
24    AUTHENTICATION_STORED_FACEBOOK_CREDENTIALS = 0x2;
25    AUTHENTICATION_SPOTIFY_TOKEN = 0x3;
26    AUTHENTICATION_FACEBOOK_TOKEN = 0x4;
27}
28
29enum AccountCreation {
30    ACCOUNT_CREATION_ALWAYS_PROMPT = 0x1;
31    ACCOUNT_CREATION_ALWAYS_CREATE = 0x3;
32}
33
34message FingerprintResponseUnion {
35    optional FingerprintGrainResponse grain = 0xa;
36    optional FingerprintHmacRipemdResponse hmac_ripemd = 0x14;
37}
38
39message FingerprintGrainResponse {
40    required bytes encrypted_key = 0xa;
41}
42
43message FingerprintHmacRipemdResponse {
44    required bytes hmac = 0xa;
45}
46
47message PeerTicketUnion {
48    optional PeerTicketPublicKey public_key = 0xa;
49    optional PeerTicketOld old_ticket = 0x14;
50}
51
52message PeerTicketPublicKey {
53    required bytes public_key = 0xa;
54}
55
56message PeerTicketOld {
57    required bytes peer_ticket = 0xa;
58    required bytes peer_ticket_signature = 0x14;
59}
60
61message SystemInfo {
62    required CpuFamily cpu_family = 0xa;
63    optional uint32 cpu_subtype = 0x14;
64    optional uint32 cpu_ext = 0x1e;
65    optional Brand brand = 0x28;
66    optional uint32 brand_flags = 0x32;
67    required Os os = 0x3c;
68    optional uint32 os_version = 0x46;
69    optional uint32 os_ext = 0x50;
70    optional string system_information_string = 0x5a;
71    optional string device_id = 0x64;
72}
73
74enum CpuFamily {
75    CPU_UNKNOWN = 0x0;
76    CPU_X86 = 0x1;
77    CPU_X86_64 = 0x2;
78    CPU_PPC = 0x3;
79    CPU_PPC_64 = 0x4;
80    CPU_ARM = 0x5;
81    CPU_IA64 = 0x6;
82    CPU_SH = 0x7;
83    CPU_MIPS = 0x8;
84    CPU_BLACKFIN = 0x9;
85}
86
87enum Brand {
88    BRAND_UNBRANDED = 0x0;
89    BRAND_INQ = 0x1;
90    BRAND_HTC = 0x2;
91    BRAND_NOKIA = 0x3;
92}
93
94enum Os {
95    OS_UNKNOWN = 0x0;
96    OS_WINDOWS = 0x1;
97    OS_OSX = 0x2;
98    OS_IPHONE = 0x3;
99    OS_S60 = 0x4;
100    OS_LINUX = 0x5;
101    OS_WINDOWS_CE = 0x6;
102    OS_ANDROID = 0x7;
103    OS_PALM = 0x8;
104    OS_FREEBSD = 0x9;
105    OS_BLACKBERRY = 0xa;
106    OS_SONOS = 0xb;
107    OS_LOGITECH = 0xc;
108    OS_WP7 = 0xd;
109    OS_ONKYO = 0xe;
110    OS_PHILIPS = 0xf;
111    OS_WD = 0x10;
112    OS_VOLVO = 0x11;
113    OS_TIVO = 0x12;
114    OS_AWOX = 0x13;
115    OS_MEEGO = 0x14;
116    OS_QNXNTO = 0x15;
117    OS_BCO = 0x16;
118}
119
120message LibspotifyAppKey {
121    required uint32 version = 0x1;
122    required bytes devkey = 0x2;
123    required bytes signature = 0x3;
124    required string useragent = 0x4;
125    required bytes callback_hash = 0x5;
126}
127
128message ClientInfo {
129    optional bool limited = 0x1;
130    optional ClientInfoFacebook fb = 0x2;
131    optional string language = 0x3;
132}
133
134message ClientInfoFacebook {
135    optional string machine_id = 0x1;
136}
137
138message APWelcome {
139    required string canonical_username = 0xa;
140    required AccountType account_type_logged_in = 0x14;
141    required AccountType credentials_type_logged_in = 0x19;
142    required AuthenticationType reusable_auth_credentials_type = 0x1e;
143    required bytes reusable_auth_credentials = 0x28;
144    optional bytes lfs_secret = 0x32;
145    optional AccountInfo account_info = 0x3c;
146    optional AccountInfoFacebook fb = 0x46;
147}
148
149enum AccountType {
150    Spotify = 0x0;
151    Facebook = 0x1;
152}
153
154message AccountInfo {
155    optional AccountInfoSpotify spotify = 0x1;
156    optional AccountInfoFacebook facebook = 0x2;
157}
158
159message AccountInfoSpotify {
160}
161
162message AccountInfoFacebook {
163    optional string access_token = 0x1;
164    optional string machine_id = 0x2;
165}
166