Refactor, GLFW->SDL
[vg.git] / vg_steam_auth.h
1 #ifndef VG_STEAM_AUTH_H
2 #define VG_STEAM_AUTH_H
3
4 #include "vg/vg_platform.h"
5 #include "vg/vg_io.h"
6
7 typedef u32 HAuthTicket;
8 enum{ k_HAuthTicketInvalid = 0 };
9
10 #include "vg_steam.h"
11 #if defined( VALVE_CALLBACK_PACK_SMALL )
12 #pragma pack( push, 4 )
13 #elif defined( VALVE_CALLBACK_PACK_LARGE )
14 #pragma pack( push, 8 )
15 #endif
16
17 typedef struct EncryptedAppTicketResponse_t EncryptedAppTicketResponse_t;
18 struct EncryptedAppTicketResponse_t
19 {
20 EResult m_eResult;
21 };
22 enum{ k_iEncryptedAppTicketResponse = k_iSteamUserCallbacks + 54 };
23
24 typedef struct GetAuthSessionTicketResponse_t GetAuthSessionTicketResponse_t;
25 struct GetAuthSessionTicketResponse_t
26 {
27 HAuthTicket m_hAuthTicket;
28 EResult m_eResult;
29 };
30 enum{ k_iGetAuthSessionTicketResponse = k_iSteamUserCallbacks + 63 };
31
32 #pragma pack(pop)
33
34 /*
35 * Regular authentication
36 */
37
38 typedef void ISteamUser;
39 ISteamUser *SteamAPI_SteamUser_v021(void);
40 ISteamUser *SteamAPI_SteamUser(void)
41 {
42 return SteamAPI_SteamUser_v021();
43 }
44
45 HAuthTicket SteamAPI_ISteamUser_GetAuthSessionTicket(
46 ISteamUser *self, void *pTicket,
47 int cbMaxTicket, u32 *pcbTicket );
48
49 /*
50 * Application symetric-key ticket (Client)
51 */
52
53 SteamAPICall_t SteamAPI_ISteamUser_RequestEncryptedAppTicket(
54 ISteamUser *self, void *pDataToInclude, int cbDataToInclude );
55
56 int SteamAPI_ISteamUser_GetEncryptedAppTicket(
57 ISteamUser *self, void *pTicket,
58 int cbMaxTicket, u32 *pcbTicket );
59
60
61 /*
62 * Application symetric-key ticket method (Server)
63 */
64
65 enum { k_nSteamEncryptedAppTicketSymmetricKeyLen = 32 };
66
67 int SteamEncryptedAppTicket_BDecryptTicket( u8 *rgubTicketEncrypted,
68 u32 cubTicketEncrypted, u8 *rgubTicketDecrypted,
69 u32 *pcubTicketDecrypted,
70 u8 rgubKey[k_nSteamEncryptedAppTicketSymmetricKeyLen],
71 int cubKey );
72
73 int SteamEncryptedAppTicket_BIsTicketForApp( u8 *rgubTicketDecrypted,
74 u32 cubTicketDecrypted, AppId_t nAppID );
75
76 RTime32 SteamEncryptedAppTicket_GetTicketIssueTime( u8 *rgubTicketDecrypted,
77 u32 cubTicketDecrypted );
78
79 void SteamEncryptedAppTicket_GetTicketSteamID(
80 u8 *rgubTicketDecrypted, u32 cubTicketDecrypted, CSteamID *psteamID );
81
82 AppId_t SteamEncryptedAppTicket_GetTicketAppID( u8 *rgubTicketDecrypted,
83 u32 cubTicketDecrypted );
84
85 int SteamEncryptedAppTicket_BUserOwnsAppInTicket( u8 *rgubTicketDecrypted,
86 u32 cubTicketDecrypted, AppId_t nAppID );
87
88 int SteamEncryptedAppTicket_BUserIsVacBanned( u8 *rgubTicketDecrypted,
89 u32 cubTicketDecrypted );
90
91 int SteamEncryptedAppTicket_BGetAppDefinedValue( u8 *rgubTicketDecrypted,
92 u32 cubTicketDecrypted, u32 *pValue );
93
94 u8 *SteamEncryptedAppTicket_GetUserVariableData( u8 *rgubTicketDecrypted,
95 u32 cubTicketDecrypted, u32 *pcubUserData );
96
97 int SteamEncryptedAppTicket_BIsTicketSigned( u8 *rgubTicketDecrypted,
98 u32 cubTicketDecrypted, u8 *pubRSAKey, u32 cubRSAKey );
99
100 int SteamEncryptedAppTicket_BIsLicenseBorrowed( u8 *rgubTicketDecrypted,
101 u32 cubTicketDecrypted );
102
103 int SteamEncryptedAppTicket_BIsLicenseTemporary( u8 *rgubTicketDecrypted,
104 u32 cubTicketDecrypted );
105
106 static u8 vg_char_base16( char c )
107 {
108 if( c >= '0' && c <= '9' )
109 return c-'0';
110 if( c >= 'a' && c <= 'f' )
111 return (c-'a') + 10;
112
113 return 0;
114 }
115
116 static int vg_load_steam_symetric_key( const char *path, u8 *buf )
117 {
118 vg_linear_clear( vg_mem.scratch );
119 u32 size;
120 char *src = vg_file_read( vg_mem.scratch, path, &size );
121
122 if( src )
123 {
124 if( size < k_nSteamEncryptedAppTicketSymmetricKeyLen )
125 {
126 vg_error( "Application key was invalid size\n" );
127 return 0;
128 }
129
130 for( int i=0; i<k_nSteamEncryptedAppTicketSymmetricKeyLen; i++ )
131 {
132 buf[i] = (vg_char_base16( src[i*2+0] ) << 4) |
133 vg_char_base16( src[i*2+1] );
134 }
135
136 return 1;
137 }
138 else
139 {
140 vg_error( "Application key path was invalid\n" );
141 return 0;
142 }
143 }
144
145
146 #endif /* VG_STEAM_AUTH_H */